Hallo, ich habe mal wieder eine Frage. Ich habe meine GL-Klassen ein bisschen aufgeräumt und stehe nun vor einem Problem . Beim Umbau habe ich eine Klasse TDrawable erstellt, welche ein renderbares Objekt enthält. Hierzu zählen normale Objekte (VBOs/EABs...) aber auch Objekt Gruppen, welche wiederum verschiedene TDrawables beinhalten können. Mein Problem ist jetzt, das Objekte und Gruppen natürlich verschoben werden können. Das bedeutet aber, dass ich mehrere Matrizen verschachtele (zB. eine verschiebbare ModelGroup mit verschiebbaren Objekten). Meine Frage ist jetzt, wie man so etwas am besten löst. Meine bisherige Überlegung war, die Verschiebungen/Rotation/Skalierung zu speichern und bei jedem Draw-Call der Child-Objekte diese Anzuwenden, das könnte allerdings bei mehreren Objekten sehr lange dauern. Ich denke es gibt einen Weg, einfach mehrere Modelviews zu speichern und diese (erst im Shader?) zu kombinieren. Leider habe ich noch keinen Ansatz gesehen mit dem das möglich wäre. Ich würde mich freuen, wenn ihr das erklären könnten oder einen anderen Weg kennt Modelviews zu kombinieren.
Also du baust dir damit einen Szenengraph auf, bei dem die Knoten jeweils eine Matrix haben, die sich auf die Kinder bezieht? Die endgültige Matrix eines Blattes erhältst du ja am Ende durch Multiplikation aller Matrizen auf dem Weg zum Blatt. Das kannst du bei jedem Zeichenvorgang vorher kurz machen. Wird das aber wegen der Baumgröße zu langsam, dann kannst du das einmalig machen und die resultierende Matrix in nem Blatt speichern. Ändert sich etwas in dem Baum, was den Pfad zum Blatt betrifft, musst du die natürlich neuberechnen.
Vielen Dank Philip, mir war nicht klar, dass man die Modelviews einfach multiplizieren kann um den Effekt zu erzielen. Allerdings frage ich mich, wie man das am besten umsetzt. Wenn ich zB. ein sich bewegendes Objekt habe worauf mehrere statische Objekte sind, müsste ich bei jeder Bewegung des dynamischen Objekts alle Nodes neu berechnen. Meine Überlegung wäre ein Uniform Array zu nehmen, und bei vielen Subnodes diese Multiplikationen erst im Shader auszuführen. Ist das die beste Lösung für das Problem, oder ist es evtl. immer schneller die CPU zum berechnen zu benutzen?
Registriert: Mi Jan 31, 2007 18:32 Beiträge: 150
Programmiersprache: Pascal
Im Shader müsstest du Lösungen wie Compute Shader nehemen, denn fall du die Multiplikation in den VertexShader verlagerst wird diese logischerweise per Vertex ausgeführt und nicht nur einmalig wie es auf der CPU der fall wäre. Wenn du also nicht gerade indirect draw calls und Compute Shader benutzt würde ich empfehlen die Multiplicationen auf der CPU durchzuführen und die uniforms zu updaten.
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.