Calcolo per vertice nella tessellazione OpenGL


9

Cerco di implementare una simulazione di tessuto basata sulla posizione usando la tassellatura hardware. Ciò significa che voglio solo caricare un quadruplo di controllo sulla scheda grafica e quindi utilizzare tassellatura e ombreggiatura geometrica per creare i nodi nel tessuto.

Questa idea segue il documento:

Huynh, David, "Simulazione di tessuti mediante tassellatura hardware" (2011). Tesi. Rochester Institute of Technology http://scholarworks.rit.edu/theses/265/

So usare la tassellatura per creare i punti simulati. Quello che non so è come archiviare le informazioni calcolate in un framebuffer.

Gli shader di valutazione della geometria e anche della tassellatura hanno le informazioni necessarie per i calcoli per vertice. Ma possono scrivere direttamente nel framebuffer?

Lo shader di frammenti che conosco può scrivere nel framebuffer, ma le mie informazioni sarebbero interpolate e non saprei più cosa scrivere in quale posizione.


trasformare i buffer di feedback
maniaco del cricchetto

Suona molto bene. I vincoli della simulazione del tessuto rendono necessario che io possa accedere a tutti i vicini di una particella (per calcolare le forze della molla). Questo può essere fatto con tali buffer? In uno shader di geometria forse? per evitare il buffer di feedback per stampare ogni vertice più volte vorrei usare GL_POINTS. Dopo una prima occhiata sembra che ciò renda più difficile il calcolo delle molle.
Dragonseel,

Risposte:


3

Sulla base del commento di "ratchet freak" ho studiato Transform Feedback Buffers e risolto il mio problema in quel modo.

Ora generi i punti simulati sulla CPU e li inserisco in un oggetto VertexBuffer. Genero un secondo VBO per i punti (insieme ad alcuni altri per la velocità). La connettività del tessuto è data come attributo di vertice in ivec4.

Utilizzando i buffer di feedback di trasformazione e un trucco di doppio buffering utilizzando i due VBO, posso sempre leggere dall'ultimo passaggio (utilizzando le informazioni sulla connettività) e scrivere su un altro buffer. Questo al fine di risolvere i problemi con la concorrenza.

I calcoli vengono eseguiti nel vertice-shader come GL_POINTS. Associare l'output del primo shader a un altro shader regolare usando un buffer di indice aggiuntivo per generare triangoli che posso senza problemi rendere il tessuto come voglio.

Questa idea segue l'esempio del buffer di feedback di trasformazione realizzato nel libro "OpenGL Superbible" http://www.openglsuperbible.com/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.