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.
fonte
Respostas:
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/
fonte