Frage

I ein Partikelsystem, wo die Positionen und verschiedene Eigenschaften in einem Eckenpuffer-Objekt gespeichert werden. Die Werte werden kontinuierlich durch einen CUDA Kernel aktualisiert. Derzeit ist Rendering ich sie nur GL_POINTS als flache Kreise verwenden. Was ich bin interessiert, ist Rendering diese Partikel sind mehr beteiligt Dinge wie 3D-animierte Vogel-Modelle zum Beispiel. Ich versuche, was der beste Ansatz, um herauszufinden wäre. Aus Gründen der Konversation lässt die Animation des Vogels Modell sagen besteht aus 3 Frames (Position der Flügel und was nicht)

Ich kann auf die Modelle in Anzeigelisten siehe Laden und Schleifen über alle Partikel in übersetzen, Drehen, usw. die Matrix dann die Anzeigeliste aufrufen. Das scheint nicht wie ein idealer Ansatz, weil sie alle die Partikeldaten über an den Host aus dem gpu bringen würde erfordern, nur Matrix-Operationen zu tun, um die GPU auf hart zurück (es sei denn, ich kann die Zeichenfunktionen von einem CUDA Kernel nennen ?? ?)

Ich weiß nicht viel über Shadern, würden sie in der Lage sein, so etwas zu handhaben?

An dieser Stelle ich meistens bin für Ratschläge, was Weg zu verfolgen, aber wenn Sie wissen, dass Artikel oder Tutorials, die das Thema behandeln, ein dickes Lob.


Ich arbeite mit dem OpenGL nativ auf Windows 7 64-Bit mit c ++. Ich bin nicht GLUT mit

War es hilfreich?

Lösung

Sie wollen wahrscheinlich Gebrauch: EXT_draw_instanced. Ich habe eigentlich nie Instancing verwendet, aber die meisten modernen GPUs (GF6 und bis glaube ich) können Sie die GPU ein Modell und eine Liste von Punkten zu ernähren und haben es an jedem Punkt das Modell zu ziehen.

Ich werde ein paar mehr Infos Google und sehen, was ich komme mit ....

Nun, das ist die offizielle Spezifikation, und es sieht aus wie sie ein Tutorial auf sie haben.

http://www.opengl.org/registry/specs/ARB /draw_instanced.txt

Andere Tipps

Sie müssen kreativ erhalten, so etwas zu tun. Wenn Sie CUDA verwendet, um eine Position und Rotation in 2 3 Komponente Schwimmer Texturen zu berechnen und dann einen „Index“ gefeuert zusammen mit jedem Scheitelpunkt und Inkrementieren um 1 pro Geometrie Beispiel dann könnte man einen Shader schreiben, dass die Texturen geladen und verwendet dann Vertex-Shader-Textur nachschlagen des entsprechenden Pixels von 2 Texturen auszuwählen, und eine Transformationsmatrix aufzubauen. Sie verwandeln dann die verts des Netzes durch die Transformationsmatrix Sie aufgebaut haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top