Calcul par sommet en tesselation OpenGL

9

J'essaie d'implémenter une simulation de tissu basée sur la position en utilisant la tesselation matérielle. Cela signifie que je veux simplement télécharger un quadruple de contrôle sur la carte graphique, puis utiliser l'ombrage de la tesselation et de la géométrie pour créer les nœuds dans le tissu.

Cette idée suit le document:

Huynh, David, "Simulation de tissu à l'aide d'une tessellation matérielle" (2011). Thèse. Rochester Institute of Technology http://scholarworks.rit.edu/theses/265/

Je sais utiliser la tesselation pour créer les points simulés. Ce que je ne sais pas, c'est comment stocker les informations calculées dans un framebuffer.

La géométrie ainsi que les shaders d'évaluation de la tesselation ont les informations nécessaires pour les calculs par sommet. Mais peuvent-ils écrire directement dans le framebuffer?

Le fragment-shader que je connais peut écrire dans le framebuffer, mais mes informations seraient interpolées et je ne saurais plus quoi écrire à quelle position.

Dragonseel
la source
transformer les tampons de rétroaction
ratchet freak
Sonne très bien. Les contraintes de la simulation de tissu obligent à pouvoir accéder à tous les voisins d'une particule (pour calculer les forces du ressort). Cela peut-il être fait avec de tels tampons? Dans un shader de géométrie peut-être? pour pervertir le tampon de rétroaction pour imprimer chaque sommet plusieurs fois, je voudrais utiliser GL_POINTS. Après un premier regard, il semble que cela rend plus difficile le calcul des ressorts.
Dragonseel

Réponses:

3

Sur la base du commentaire de "ratchet freak", j'ai recherché Transform Feedback Buffers et résolu mon problème de cette façon.

Je génère maintenant les points simulés sur le CPU et les place dans un VertexBufferObject. Je génère un deuxième VBO pour les points (avec quelques autres pour la vitesse). La connectivité du tissu est donnée comme un attribut de sommet dans ivec4.

En utilisant les tampons de rétroaction de transformation et une astuce de double tampon en utilisant les deux VBO, je peux toujours lire à partir de la dernière étape (en utilisant les informations de connectivité) et écrire dans un autre tampon. Ceci afin de résoudre les problèmes de simultanéité.

Les calculs sont effectués dans le vertex-shader sous la forme GL_POINTS. Lier la sortie du premier shader à un autre shader ordinaire en utilisant un tampon d'index supplémentaire pour générer des triangles Je peux sans problème rendre le tissu comme je veux.

Cette idée suit l'exemple de tampon de rétroaction de transformation fait dans le livre "OpenGL Superbible" http://www.openglsuperbible.com/

Dragonseel
la source