Computação por vértice no mosaico OpenGL

9

Eu tento implementar uma simulação de tecido baseada em posição usando mosaico de hardware. Isso significa que eu quero apenas enviar um quad de controle para a placa de vídeo e, em seguida, usar tesselação e sombreamento de geometria para criar os nós no tecido.

Essa ideia segue o artigo:

Huynh, David, "Simulação de tecidos usando mosaico de hardware" (2011). Tese. Instituto de Tecnologia de Rochester http://scholarworks.rit.edu/theses/265/

Eu sei como usar mosaico para criar os pontos simulados. O que não sei é como armazenar as informações computadas em um buffer de quadros.

A geometria e também os shaders de avaliação de mosaico têm informações necessárias para os cálculos por vértice. Mas eles podem escrever diretamente no buffer de quadros?

O shader de fragmento que conheço pode gravar no buffer de quadros, mas minhas informações seriam interpoladas e eu não saberia mais o que escrever em qual posição.

Dragonseel
fonte
transformar buffers de feedback
anormal de catraca
Parece muito bom. As restrições da simulação de tecido tornam necessário que eu possa acessar todos os vizinhos de uma partícula (para calcular as forças da mola). Isso pode ser feito com esses buffers? Em um shader de geometria, talvez? para permear o buffer de feedback para imprimir cada vértice várias vezes, eu gostaria de usar GL_POINTS. Após uma primeira olhada, parece que isso dificulta o cálculo das molas.
Dragonseel

Respostas:

3

Com base no comentário de "maníaco por catraca", pesquisei Transform Feedback Buffers e resolvi meu problema dessa maneira.

Agora eu giro os pontos simulados na CPU e os coloco em um VertexBufferObject. Eu gero um segundo VBO para os pontos (juntamente com outros para velocidade). A conectividade do pano é fornecida como um atributo de vértice no ivec4.

Usando os buffers de feedback de transformação e um truque de buffer duplo usando os dois VBOs, sempre posso ler da última etapa (usando as informações de conectividade) e gravar em outro buffer. Isso é para resolver problemas com simultaneidade.

Os cálculos são feitos no vertex-shader como GL_POINTS. Vinculando a saída do primeiro sombreador a outro sombreador comum, usando buffer de índice adicional para gerar triângulos, sem problemas posso renderizar o pano da maneira que desejar.

Essa idéia segue o exemplo do buffer de feedback de transformação feito no livro "OpenGL Superbible" http://www.openglsuperbible.com/

Dragonseel
fonte