A
AllquantorX
Gast
Hallo Forum,
ich habe eine Frage zum Design einer Applikation, die auf 3D mittels Jogle umgestellt werden soll. Hier gibt es einige Rahmenbedingungen, die zu beachten sind. Dabei soll nur 'neues' OpenGL verwendet werden, d.h. VBOs / VBAs und keine fixe Render-Pipeline (sofern dieser Ansatz geeignet ist).
Die Applikation besitzt zur Zeit einen 2D Viewport, der jetzt auf 3D umgestellt werden sollen. Ein solches Modell (das angezeigt wird) besteht lediglich aus einer Liste von Objekten, die alle von AnimationObject erben. Davon gibt es in der Regel mehere Hundert oder Tausend (auch mal bis 100.000). Jedes AnimationObject kann völlig unterscheidliche Eigenschaften haben, teilweise werden erst zur Laufzeit neue Klassen nachgeladen, die Applikation kennt die Implementierungen also nicht, sondern nur die Methoden der Basisklasse AnimationObject.
Diese AnimationObjects besitzen eine Methode (deren Signatur noch festgelegt werden kann), die in konkreten Unterklassen überschreiben werden muss, um festzulegen, wie genau das Objekt darzustellen ist. Relativ zu einem zentralen Ursprung. Das können z.B. ein Würfel eine Kugel oder andere ganz wilde Polygon-Haufen sein.
Nun sollen das Modell (d.h. alle AnimationObjects) schnell in 3D gezeigt werden. Es handelt sich um eine Echtzeit-Animation. Die Objekte können sich während dieser Animation bewegen und es werden recht häufig auch neue Objekte hinzugefügt und alte Objekte gelöscht (einfach durch add oder remove auf dieser Liste). Alles kein Problem, wenn es mit der alten Pipeline umgesetzt werden soll. Dort kann jedes Objekt einfach eine Display-List erzeugen und die Applikation kann von jedem Objekt einfach eine render-Method aufrufen. Hier ist es kein Problem, dass die Objekte-Liste sich ständig ändert oder die Positionen der Objekte sich in der Animation verändern da mit jedem render Vorgang die Daten neu in die Pipeline gejagd werden.
Wie löst man dies allgemein mit VBAs am Besten? Muss man die Vertex-Daten bei jeder Änderung in der Objekt-Liste (was häufig vorkommt) komplett neu an die Graphikkarte übertragen? Ist das nicht kostpielig? Würde man für jedes Objekt einen eigenen Vertex-Buffer anlegen? Wie geht man mit Bewegung von Animation am Besten um?
Vielen Dank
ich habe eine Frage zum Design einer Applikation, die auf 3D mittels Jogle umgestellt werden soll. Hier gibt es einige Rahmenbedingungen, die zu beachten sind. Dabei soll nur 'neues' OpenGL verwendet werden, d.h. VBOs / VBAs und keine fixe Render-Pipeline (sofern dieser Ansatz geeignet ist).
Die Applikation besitzt zur Zeit einen 2D Viewport, der jetzt auf 3D umgestellt werden sollen. Ein solches Modell (das angezeigt wird) besteht lediglich aus einer Liste von Objekten, die alle von AnimationObject erben. Davon gibt es in der Regel mehere Hundert oder Tausend (auch mal bis 100.000). Jedes AnimationObject kann völlig unterscheidliche Eigenschaften haben, teilweise werden erst zur Laufzeit neue Klassen nachgeladen, die Applikation kennt die Implementierungen also nicht, sondern nur die Methoden der Basisklasse AnimationObject.
Diese AnimationObjects besitzen eine Methode (deren Signatur noch festgelegt werden kann), die in konkreten Unterklassen überschreiben werden muss, um festzulegen, wie genau das Objekt darzustellen ist. Relativ zu einem zentralen Ursprung. Das können z.B. ein Würfel eine Kugel oder andere ganz wilde Polygon-Haufen sein.
Nun sollen das Modell (d.h. alle AnimationObjects) schnell in 3D gezeigt werden. Es handelt sich um eine Echtzeit-Animation. Die Objekte können sich während dieser Animation bewegen und es werden recht häufig auch neue Objekte hinzugefügt und alte Objekte gelöscht (einfach durch add oder remove auf dieser Liste). Alles kein Problem, wenn es mit der alten Pipeline umgesetzt werden soll. Dort kann jedes Objekt einfach eine Display-List erzeugen und die Applikation kann von jedem Objekt einfach eine render-Method aufrufen. Hier ist es kein Problem, dass die Objekte-Liste sich ständig ändert oder die Positionen der Objekte sich in der Animation verändern da mit jedem render Vorgang die Daten neu in die Pipeline gejagd werden.
Wie löst man dies allgemein mit VBAs am Besten? Muss man die Vertex-Daten bei jeder Änderung in der Objekt-Liste (was häufig vorkommt) komplett neu an die Graphikkarte übertragen? Ist das nicht kostpielig? Würde man für jedes Objekt einen eigenen Vertex-Buffer anlegen? Wie geht man mit Bewegung von Animation am Besten um?
Vielen Dank