Pergunta

Atualmente, estou usando um VBO para as coordenadas de textura, normais e os vértices de um modelo (3DS) que estou desenhando com "Gldrawarrays (gl_triangles, ...);". Para a depuração, quero (temporariamente) mostrar os normais ao desenhar meu modelo. Eu tenho que usar o modo imediato para desenhar cada linha de vert para vert+normal - ou material outro vBo com vert e vert+normal para desenhar todos os normais ... -O- ou - existe uma maneira de o shader de vértice usar o vértice e dados normais já foram transmitidos ao desenhar o modelo para calcular o V+N usado ao desenhar os normais?

Foi útil?

Solução

Não, não é possível desenhar linhas adicionais de um shader de vértice.

Um shader de vértice não é criar geometria, trata -se de fazer por computação de vértice. Usando shaders de vértice, quando você diz glDrawArrays(GL_TRIANGLES,0,3), é isso que especifica exatamente o que você desenhará, ou seja, 1 triângulo. Quando o processamento atingir o shader de vértice, você só pode alterar as propriedades dos vértices daquele triângulo, não modificar de qualquer forma, forma ou forma, a topologia e/ou contagem da geometria.

O que você está procurando é o que OpenGL 3.2 define como um shader de geometria, isso permite produzir contagem/topologia de geometria arbitrária a partir de um shader. Observe, no entanto, que isso é suportado apenas através do OpenGL 3.2, que poucos cartões/motoristas suportam agora (já está fora há alguns meses).

No entanto, devo ressaltar que mostrar normais (na maioria dos motores que suportam algum tipo de depuração) geralmente é feita com a renderização de linha tradicional, com um buffer de vértice adicional que é preenchido com as posições adequadas (P, P+C*n N ) Para cada posição de malha, onde C é uma constante que representa o comprimento que você deseja usar para mostrar os normais. Não é tão complexo escrever ...

Outras dicas

Você pode aproximar isso desenhando a geometria duas vezes. Uma vez desenhe -o como você normalmente faria. Na segunda vez, desenhe a geometria como Gl_points e anexe um shader de vértice que compensa cada posição de vértice pelo vértice normal.

Isso resultaria em seu modelo ter um conjunto de pontos flutuando sobre a superfície. Cada ponto mostraria a direção do normal do vértice a que corresponde.

Isso não é perfeito, mas pode ser suficiente, dependendo do que você espera usá -lo.

ATUALIZAR: AHA! E se você passar em um fator de escala constante para o shader de vértice e tiver seu aplicativo interpolar esse fator entre 0 e 1 com o passar do tempo, seus pontos renderizados pelo shader vértice se animarão com o tempo, começando no vértice que se aplicam, e depois flutuando na direção do seu normal.

Provavelmente é possível obter mais ou menos o efeito certo com um shader de vértice inteligentemente escrito, mas seria muito trabalho. Como isso é para fins de depuração, parece melhor desenhar algumas linhas; O desempenho do desempenho não será grave.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top