Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

1

05.12.2013, 14:32

Gebäude rendern

Ich habe noch eine kleine Frage bezüglich der Umgebung.

Wenn man in einer Spiellandschaft ein Dorf mit verschiedenen Gebäuden erstellen möchte. Wie kann man das am besten erreichen.

A : Alle Gebäude werden in das Landschaftsmodel Intregiert. So dass Landschaft und Gebäude das selbe Modell sind.

B : Alle Gebäude werden separat gerendert. Jedes Gebäude hat ein separates Modell und separates Positionsdaten. Das Gebäude wird einfach dorthin transformiert.

Jedoch kann man wenn die Gebäude mit der Landschaft gezeichnet werden (Option A) keine Performance-sparende Option wie (zbs Wenn das Gebäude 100 m weit weg ist wird es nicht gerendert)



Wie machen das eigentlich die Profis?



Liebe Grüße

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Sebastian Müller« (06.12.2013, 15:34)


David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

07.12.2013, 10:57

Hier mal ein paar Gedankenanstöße: Beide Optionen werden in irgend einer Form verwendet. Ansatz A wird allerdings in der Form nicht ausreichen. Im Allgemeinen werden ja verschiedene Materialien verwendet, so, dass man gar nicht alles in einem DC abarbeiten kann. Außerdem ist es oft notwendig dies Geometrie in irgendeiner Form zu unterteilen um Culling zu ermöglichen. Ein ähnlicher Ansatz könnte also sein, die Welt in kleine Chunks zu zerschneiden und in einen Octree (oÄ) zu packen. Jedes Blatt des Baums enthält dann eine Liste von Batches die jeweils in einem DC verarbeitet werden können. Beim Rendern wird der Baum traversiert und alle sichtbaren Blätter werden gezeichnet.

Option B braucht im Zweifel keine große Vorbereitung und kann in Verbindung mit Instancing sehr Effizient gemacht werden. Wenn man sein Leveldesign strikt auf Modular umstellt ist die Option super. Die Topologie der Objekte bleibt erhalten, 'lodding' wird mehr intuitiv und besser kontrollierbar etc...

Oft wirst du ganz verschiedene Ansätze finden. Ein Terrain kann z.B. ganz anders behandelt werden, als die meisten Models. So wird ein Terrain oft als Basis verwendet. Darauf landen dann mehrere Layer (Vegetation, Deco, Decals, ...) und natürlich alle notwendigen Modelle. Dafür kannst du dir natürlich jeweils überlegen was du möglichst optimal zusammenfassen willst (Stichwort: Instancing, spatial structure, clustering etc...) und was du überhaupt benötigst. Generell lässt sich das beliebig kompliziert ausbauen.
@D13_Dreinig

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

3

07.12.2013, 13:49

Ok, danke für die Tipps. :)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

07.12.2013, 15:22

Falls du rätseln solltest, was dieser mysteriöse "DC" ist, den David_pb erwähnt hat: DC steht für Draw Call, also ein Aufruf einer Methode wie DrawPrimitive.

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

5

07.12.2013, 17:15

Danke für den Tipp. Ich wuste nicht was DC Bedeutete.

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

6

08.12.2013, 11:14

Ich habe mich für Methode B entschieden.

(Jedes Gebäude hat ein eigenes Model und wird einfach zu seinem Platz verschoben)

Jedoch habe ich Probleme mit der Rotation. Wenn das Gebäude sich um 90° drehen soll. Dreht es sich immer um etwa 20° mehr oder weniger.

So Habe ich es angestellt.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Vectoren 
tbVector3 v_Rot; 
tbVector3 v_Scl; 
tbVector3 v_Pos; 
// Werte aus Environment-Ini Lesen 
v_Rot = readINIVector(...); 
v_Scl = readINIVector(...); // Ihr wisst ja was da steht. 
v_Pos = readINIVector(...); 
// Matrix erstellen 
tbMatrix mMarix; 
mMatrix = tbMatrixScl(v_Scl) * tbMatrixRot(v_Rot) * tbMatrixPos(v_Pos); 

// die Strukture Building, die in einer weiteren struktur untergeordnet ist, Stellt ein Gebäude da. 
// Sie enthält Daten wie (Matrix / Model usw). Man füllt dieser Gebäudestruktur einfach die aus der ini gelesene 
// Matrix (pos,scl,rot); 
mp_Env->Building[0].mMatrix = mMatrix;

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

08.12.2013, 11:35

Du denkst aber dran, dass sin/cos mit Radien arbeiten und nicht mit Grad?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

8

08.12.2013, 15:39

Was Sinus und Kosinus angeht habe ich irgendwie große Probleme. Das Thema haben wir in der Schule noch nicht durchgenommen.

Wie würde es den richtig aussehen?

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

9

08.12.2013, 17:48

Dann lies dich doch mal im Internet schlau.
Zum Beispiel auf Wikipedia gibt es gute Artikel zu Sinus und Kosinus oder Trigonometrie im Allgemeinen. Auch sonst sollte das Netz voll damit sein.

Radiant oder auch Bogenmaß ist eine andere alternative Einheit für Winkel, die mathemetisch elleganter ist.
Ansatt 360° für einen Vollwinkel sind es bei Radiant 2π also ungefähr 6.28. Zum Umrechnen von Grad zu Radiant musst du also die Gradzahl mit 2π/360 (=π/180) mulitplizieren.

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

10

08.12.2013, 19:35

Ok Danke für die Links und Tipps.

Werbeanzeige