/ / Cálculo e aplicação de normais a uma malha triangular - opengl, 3d, normais

Calculando e aplicando normais a uma malha triangular - opengl, 3d, normals

Eu tenho uma malha triangular e estou tentandocalcular as normais para que eu possa aplicá-las ao desenhar a malha. Estou usando o modo imediato (provavelmente mudará para matrizes de vértices quando tiver tempo para entender como elas funcionam) e desenhando a malha com GL_TRIANGLE_STRIP.

Estou tendo problemas para calcular as normais do vértice. Decidir com mais precisão quais vértices vizinhos usar nos cálculos e depois decidir quando definir essas normais. Considere isto:

 1_2
|/|    Supposedly a square where the numbers represent the vertex number in a
3 4    triangle strip.

Eu sei que você precisa calcular o produto cruzado de 2vetores pertencentes a um plano para obter o plano normal. Portanto, nesse exemplo, o normal do triângulo superior pode ser calculado fazendo (2-1) x (3-1), e o segundo fazendo (2-4) x (3-4). Como você aplica os normais ao desenhar a tira triangular no modo imediato?

O que eu estava fazendo foi definir o primeiro normalquando vtx 1 é definido, o segundo quando vtx 4 é definido, o terceiro quando vtx 5 é definido etc. Isso, no entanto, gera problemas, pois você obviamente acaba tendo diferentes normais para cada um dos vértices de um triângulo (quando todos devem ser o mesmo). Por exemplo, triângulo | 2,3,4 | só teria o vértice 4 com o normal correto (já que para os vértices 2 e 3 o normal seria o do primeiro triângulo).

Então, como isso deve ser feito? Existe uma maneira ou preciso mudar para GL_TRIANGLES? (Não quero parar de usar o modo imediato por enquanto, pois não tenho tempo).

Respostas:

2 para resposta № 1

Se eu estou correto, você ainda está apenas computando umnormal por triângulo? Isso está correto, mas depois disso você deve calcular qual é o normal por vértice. Esta é simplesmente a soma normalizada de todas as normais do triângulo às quais o vértice específico está anexado. Depois de concluído, você pode prosseguir com o desenho do modo imediato, especificando um normal por vértice.