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_EXECUTE

    habe 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 linken

    was 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 Baum

    wie 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.


Anmelden zum Antworten