Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 15, 2025 23:12

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Objekte in OpenGL
BeitragVerfasst: Sa Apr 16, 2011 10:29 
Offline
DGL Member

Registriert: Sa Apr 09, 2011 20:48
Beiträge: 43
Programmiersprache: Delphi
Ich hab ja jetzt schon einiges an Code gelesen und gesehen. Was ich mir momentan aber noch nicht so richtig vorstellen kann, ist die Art und Weise wie man eine Scene aus Objekten aufbaut.

Nur mal als Beispiel:

Die Tutorials verwenden eine RENDER-Routine in der die Scene dargestellt und verarbeitet wird.
Da gibt es dann z.B. 4 Würfel. Einer hat eine Textur, der andere nur Farbe und die beiden anderen drehen sich.
Nun kann ich mir vorstellen das man bei einem Tutorial sicher keine MDS oder andere Formate benutzt. Allein schon wegen der Komplexität.
Aber wenn man wirklich 100 Objekte darstellen möchte, wie geht man dann vor?

Ich stelle mir momentan vor für z.B. einen Würfel eine Klasse TWuerfel zu schreiben die von einer Klasse TMainRenderObject abstammt.
Der übergibt man dann eine 3D-Koordinate und hängt diese Klasse in eine Liste der zu rendernden Objekte.

D.h. ich rufe in der Procedure RENDERN alle Objekte in der Liste auf mit TMainRenderObject(TList[i]).Render.

Ist das die richtige vorgehensweise?
Oder lieg ich da jetzt völlig total unglaublich daneben?

gruß
Bio


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte in OpenGL
BeitragVerfasst: Sa Apr 16, 2011 10:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Prinzipiell schon ziemlich gut. Man würde nur anstatt Positionen gleich eine komplette Transformationsmatrix (also Rotation + Translation + Skalierung) übergeben.
Dann rendert man das in der entsprechenden Reihenfolge durch. Eventuell sortiert man die Liste vorher nach Z-Werten oder sonstwas, je nach dem, wie weit man gehen will, um Performance rauszuholen.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte in OpenGL
BeitragVerfasst: Sa Apr 16, 2011 10:42 
Offline
DGL Member

Registriert: Sa Apr 09, 2011 20:48
Beiträge: 43
Programmiersprache: Delphi
Ah ja.

Zu den Transformationen: Ist es eigentlich ziemlich GPU/CPU-Intensiv wenn ich bei jedem Objekt dann ein glLoadIdentity() durchführe?
In Anbetracht der Tatsache das man nicht genau wissen kann in welcher Reihenfolge die Objekte gerendert werden, kann man ja kaum relative koordinaten verwenden. Ich müsste mich doch dann in jedem Objekt am 0 Punkt der ModelMatrix orientieren, oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte in OpenGL
BeitragVerfasst: Sa Apr 16, 2011 10:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Japp, müsstest du. Du wirst aber eher glLoadMatrix verwenden wollen und die Matrizen schon auf der CPU vorberechnen.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte in OpenGL
BeitragVerfasst: Sa Apr 16, 2011 11:16 
Offline
DGL Member

Registriert: Sa Apr 09, 2011 20:48
Beiträge: 43
Programmiersprache: Delphi
Hab ich das richtig verstanden:
Du meinst die Matrix im Objekt speichern und in der Renderfunktion des Objekts dann glLoadMatrix ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte in OpenGL
BeitragVerfasst: Sa Apr 16, 2011 11:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Du kannst deine Objekte in eine Baumstruktur anordnen und so durch aus relative Koordinatensystem benutzen. Vor dem rendern erstellst du eine Liste der möglicherweise sichtbaren Objekte. D.h. du prüfst ob die BoundingBox des Objektes im Sichtbereich der Kamera liegt. Die Baumstruktur hilft hierbei natürlich....du kannst die BoundingBoxen von mehreren Objekten zu einer größeren Box zusammenfassen und so mehrere Objekte in einem Test auf Sichtbarkeit prüfen....die größeren Boxen kannst du wieder zusammenfassen, usw...

Für alle sichtbaren Objekte berechnest du dann deine absolute Transformationsmatrix (*) und sortierst die Liste ggf. nach der Z-Koordinate. Dann nur noch diese Liste der sichtbaren Objekte rendern. Das Verfahren ist insbesondere dann sinnvoll, wenn du die Szene mehrfach renderst möchtest. Für diverse Effekte ist das notwendig.

(*) wahrscheinlich hast du die beim prüfen der BoundingBox sowieso schon benötigt.

Zitat:
Hab ich das richtig verstanden:
Du meinst die Matrix im Objekt speichern und in der Renderfunktion des Objekts dann glLoadMatrix ?

Ja, ggf. aber auch glMultMatrix. Ich werfe normalerweise erst die View-Matrix (z.B. von gluLookAt) auf den Matrix-Stack, mache ein glPushMatrix und arbeite dann auf Objekt-Ebene mit immer gleich ausgerichteten "World"-Matrizen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte in OpenGL
BeitragVerfasst: Sa Apr 16, 2011 13:18 
Offline
DGL Member

Registriert: Sa Apr 09, 2011 20:48
Beiträge: 43
Programmiersprache: Delphi
Coolcat hat geschrieben:
Ja, ggf. aber auch glMultMatrix. Ich werfe normalerweise erst die View-Matrix (z.B. von gluLookAt) auf den Matrix-Stack, mache ein glPushMatrix und arbeite dann auf Objekt-Ebene mit immer gleich ausgerichteten "World"-Matrizen.


World-Matrizen sind dann wohl Matrizen die sich je nach Objekt Position vom tatsächlichen 0 Punkt durch einen festen Vektor unterscheiden?

Vielleicht etwa so in der Art?
Code:
  1.  
  2.                                 WM3(0,100,0)                                          
  3.                                      |
  4.                                      |
  5.         WM1(-100,0,0)    <--  Position 0,0,0  --> WM2(100,0,0)
  6.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte in OpenGL
BeitragVerfasst: Sa Apr 16, 2011 13:23 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Wenn die Matrizen der Objekte globale Koordinaten haben kannst du dir das glLoadIdentity(); sparen und und glLoadMatrix(OBJEKT_MATRIX); nutzen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Objekte in OpenGL
BeitragVerfasst: Sa Apr 16, 2011 13:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Richtig, World-Matrizen gehen einfach vom festen Welt-Koordinatensystem aus. Wenn du ein Objekt bewegen willst, wird dies normalerweise in diesem Welt-Koordinatensystem passieren und nicht irgendwie relativ zur Kamera. Die Koordinaten die du bei gluLookAt angibst sind auch in diesem Welt-Koordinatensystem.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]