Frage zu DisplayListen / Geometrie auslagern
-
Hallo,
meine 1. Frage:
können DisplayListen auch zur Laufzeit
vom Programm kompiliert erstellt werden
und dann ausgeführt werden?Frage 2:
Funktioniert das Abprüfen eines boolschen Flags
um zu sehen, ob die Liste schon kompiliert wurde?Frage 3:
was ist der Unterschied zwischen GL_COMPILE und GL_COMPILE_AND_EXECUTEhabe eine Vielzahl an Geometrie ( die Legobausteine )
alles in DisplayListen abgelegt.Frage 4:
habe pro Geometrie immer nur eine neue Liste erzeugt
kann man das performanter gestalten?geo1 = glGenLists(1); glNewList(geo1, GL_COMPILE ); . . glEndList(); geo2 = glGenLists(1); glNewList(geo2, GL_COMPILE ); . . glEndList();
Frage5:
oft rufe ich in einer Liste eine 2. schon kompilierte auf
lässt sich das glMultMatrix überhaupt kompilieren?geo3= glGenLists(1); glNewList(geo3, GL_COMPILE ); glPushMatrix(); const GLfloat m[16] = {0,.....0,0,0,1}; glMultMatrixf( m ); glCallList(geo2); glPopMatrix(); [cpp]
letze Frage:
wie und wo lege ich am besten die ganzen Listen ab?
es sind ca 3500 Stück
hab sie jeweils in einer Include Datei
was das Programm aber unmöglich macht zu linkenwas gibt es da für Möglichkeiten
die Menge an Geometrie sinnvoll
abzulegen.Vielen Dank
Matthias
-
Das klaert die meisten Deiner Fragen.
Du solltest gleichartige Objektansammlungen zu einer Liste zusammenfassen um Render-Calls zu minimieren und Du kannst Modelldaten aus einer Datei lesen.
-
Das klaert die meisten Deiner Fragen.
Du solltest gleichartige Objektansammlungen zu einer Liste zusammenfassen um Render-Calls zu minimieren und Du kannst Modelldaten aus einer Datei lesen.Hallo, das Redbook besitze ich,
das hat sich nuna uch geklärt, steht da gut beschrieben drin!Mein letzes Problem, die Listen habe ich mir in header files
generieren lassen. Sind ca 3800 Stück
Nur kann ich sie nicht kompilieren / linken da das ne Ewigkeit dauert.
Weis nicht warum.
Gibt es eine Möglichkeit Displaylisten in DLLs auszulagern?
evtl in 5MB Packete.
Oder wie lagert man vernünftig Geometrie aus?
so dass man schnell draufzugreifen und kompilieren/linken kann.Wie kann ich sie zur Laufzeit erzeugen?
müsste ich dann über VertexArrays die Geometrie in die Liste von der Modelldatei laden?Gruß Matthias
-
die Listen habe ich mir in header files generieren lassen
Da sind vermutlich keine "Display-Listen" drin sondern Deine Geometriedaten in irgendeiner Form?
Grosse Datenmengen gehoeren nicht in den Code sondern auf den Heap; aus eben diesem Grund:Nur kann ich sie nicht kompilieren / linken da das ne Ewigkeit dauert.
wie lagert man vernünftig Geometrie aus?
Man lagert sie erst gar nicht ein.
Wo sind die Daten denn hergekommen?
-
wie meinst du auf den Heap?
Also in einen Baumwie hänge ich die dort ein?
wie funktioniert das?wäre das dann sowas wie ein Scenegraph.
Beschäftige mich mit dem OpenSG nur finde ich da wenig
Docs zu und wegen begrenzter Zeit ( Studium )
habe ich leider nicht so viel Möglichkeiten zum ausprobieren.Die Daten habe ich mir generieren lassen.
verwende das Ldraw Format.
Dieses wird geparst, auf Formatbedingte Fehler untersucht
NormalenVektoren berechnet, Matrizen repariert und
wenn nötig die Punkte der 4 Ecke vertauscht.
-
wie meinst du auf den Heap?
Also in einen Baum
wie hänge ich die dort ein?
wie funktioniert das?Die auf dem Heap befindlichen Elemente werden zwar intern als Baum verwaltet, darum brauchst Du Dich aber nicht kuemmern, alloziere einfach die notwendige Speichermenge mit new.
Anstatt die Daten nach der Aufbereitung als C-Quelltext (oder was auch immer Du da jetzt tust) zu exportieren, schreibst Du sie einfach in geeigneter Form (binaer, ascii, xml, etc) in eine Datei und liesst die Daten zur Laufzeit von da ein; im Rahmen von OpenSG geht das wohl so.