DisplayList, wo bist Du?



  • Hallo zusammen!
    Melde mich nach langer Zeit mal wieder zurück!
    Für das Forum bleibt kaum noch Zeit! 😞

    Ist euch Folgendes schon einmal passiert?

    Man rendert in OpenGL ein beliebiges 3DModell
    -> Resultat: einwandfreie Darstellung! 🙂

    Dann generiert man eine DisplayList, unter Zuhilfenahme exakt des gleichen
    RenderCodes, lädt die Liste und als Resultat erhält man: nix 😞

    Ich seh nichts mehr auf dem Bildschirm!
    Dabei hab ich doch schon öfter mit DisplayListen gearbeitet!?
    Was könnt ich denn da mal wieder übersehen haben?

    //Generierung:
    displayListId=glGenLists(1);
    glNewList(displayListId,GL_COMPILE);
    renderModel();
    glEndList();
    
    //Ladevorgang:
    glCallList(displayListId);
    

    => der Code ist doch wirklich kein Hexenwerk!
    Kann es sein, dass die DisplayList vielleicht leer ist!? Das würde vielleicht
    noch Sinn machen, auch wenn ich im Moment nicht wüsste, warum die Liste denn
    leer sein sollte!

    Schon jetzt, Danke für evtl. Antworten!

    Grüße,
    TS++


  • Mod

    vielleicht nutzt du dinge die nicht in displaylisten aufgenommen werden und dementsprechend beim call fehlen.

    rapso->greets();



  • Servus rapso!
    Hab lang nichts mehr von mir hören lassen!

    Am Inhalt der List kann es kaum liegen. Das Problem tritt auch mit einem
    Content in Form einfacher Linien auf.
    Ich vermute jetzt eher, dass es am Context liegt.
    Und da muss ich Dich gleich noch was fragen:
    Wird die DisplayList beim Generieren eigentlich im aktuell geltenden Context
    abgelegt? Wenn ja, hätt ich ein Problem. Denn ich rendere meine 3DModelle auf mehrere Panels, in unterschiedlichen Formularen. Und jedes Panel kriegt natürlich seinen eigenen Context!

    Grüße,
    TS++


  • Mod

    jo, listen sind an den kontext gebunden, in dem sie erstellt wurden.

    "Am Inhalt der List kann es kaum liegen. Das Problem tritt auch mit einem
    Content in Form einfacher Linien auf. "
    ich hab nichts von inhalt gesagt, ich sagte nur dass du funktionen nutzen könntest die nicht in listen abgelegt werden, z.b. aus einem array indizierte tiranglelists oder strips oder fans zeichnen.

    rapso->greets();



  • Ich hab mir, so blauäugig wie ich bin, eingebildet, dass es kein Problem sein dürfte, in DisplayListen vorkompilierte und auch texturierte Modelle auf mehrere Panels zu rendern. Jetzt muss ich mich wahrscheinlich, was die DisplayListen und die Texturen anbelangt, auf ein bestimmtes Panel konzentrieren, oder?
    Wenn ich dem Nutzer einer CAD-Anwendung über CAD-Formulare 3DModelle zur Verfügung stelle, ohne DisplayListen zu verwenden und wenn solche Listen erst in der finalen Animation zum Einsatz kommen, dann hätte ich ja, was die DisplayListen anbelangt, das Problem gelöst.
    Nur wie sieht's denn mit Texturen aus? Ich stell's mir doch recht angenehm vor, alle meine 3DModelle aus jeder der 6 Standardsichten in texturierter Form zu bewundern. Das kann ich nun aber vergessen oder?

    Grüße,
    TS++



  • Das hatten wir aber schon öfters, oder? Ich würde sowas immer versuchen durch Viewports zu lösen, bzw. hier dem OGL Äquivalent.


  • Mod

    es gibt wohl shared context oder sowas, hab ich noch nie gemacht aber mal drüber gelesen, dann kannst du für all deine views einen context nutzen und die displaylisten sind dann natürlich nur einmal vorhanden.

    rapso->greets();

    ps. ich weiß net genau wo das zu finden ist, vielleicht ne extension von oGL oder so.



  • Danke für den Tipp! 🙂

    Das mit den DisplayListen klappt bei strikter Trennung erstmal wunderbar!
    Zu den Texturen werd ich mal sehen, wo ich Informationsmaterial herkriege.

    Grüße,
    TS++


  • Mod

    du kannst doch texturen in displaylisten stecken. das war früher sogar die einzige möglichkeit 😉 und ist deswegen recht optimal.

    rapso->greets();


Anmelden zum Antworten