Ich versuche, eine positionsbasierte Stoffsimulation mithilfe von Hardware-Tesselation zu implementieren. Dies bedeutet, dass ich einfach ein Kontrollquad auf die Grafikkarte hochladen und dann Tesselation und Geometrieschattierung verwenden möchte, um die Knoten im Stoff zu erstellen.
Diese Idee folgt dem Papier:
Huynh, David, "Stoffsimulation mit Hardware-Tessellation" (2011). These. Rochester Institute of Technology http://scholarworks.rit.edu/theses/265/
Ich weiß, wie man Tesselation verwendet, um die simulierten Punkte zu erstellen. Was ich nicht weiß, ist, wie man die berechneten Informationen in einem Framebuffer speichert.
Die Geometrie- und auch die Tesselationsbewertungs-Shader enthalten Informationen, die für die Per-Vertex-Berechnungen benötigt werden. Aber können sie direkt in den Framebuffer schreiben?
Der Fragment-Shader, den ich kenne, kann in den Framebuffer schreiben, aber meine Informationen würden interpoliert und ich würde nicht mehr wissen, was ich an welcher Position schreiben soll.
quelle
Antworten:
Basierend auf dem Kommentar von "Ratschenfreak" habe ich Transform Feedback Buffers recherchiert und mein Problem auf diese Weise gelöst.
Ich generiere jetzt die simulierten Punkte auf der CPU und füge sie in ein VertexBufferObject ein. Ich generiere einen zweiten VBO für die Punkte (zusammen mit einigen anderen für die Geschwindigkeit). Die Konnektivität des Stoffes wird in ivec4 als Vertex-Attribut angegeben.
Mit den Transformations-Feedback-Puffern und einem Doppelpuffer-Trick mit den beiden VBOs kann ich immer vom letzten Schritt lesen (unter Verwendung der Konnektivitätsinformationen) und in einen anderen Puffer schreiben. Dies dient dazu, Probleme mit der Parallelität zu lösen.
Die Berechnungen werden im Vertex-Shader als GL_POINTS durchgeführt. Durch Binden der Ausgabe des ersten Shaders an einen anderen regulären Shader unter Verwendung eines zusätzlichen Indexpuffers zum Erzeugen von Dreiecken kann ich das Tuch problemlos nach Belieben rendern.
Diese Idee folgt dem Beispiel des Transformations-Feedback-Puffers aus dem Buch "OpenGL Superbible" http://www.openglsuperbible.com/
quelle