oi eu sou um novato completo em computação gráfica, desculpe se é uma resposta estúpida. Estou tentando criar um mecanismo 3D simples a partir do zero, mais para fins educacionais do que para uso real.
por enquanto eu computo apenas face normais. nesse caminho:
Eu tenho um objeto de superfície com dentro de uma lista de triângulo. eu computo normais dentro da classe Triangle, desta maneira:
triangle.computeFaceNormals() {
Vec3D u = v1.sub(v3)
Vec3D v = v1.sub(v2)
Vec3D normal = Vec3D.cross(u,v)
normal.normalized()
this.n1 = this.n2 = this.n3 = normal
}
e ao construir a superfície:
t = new Triangle(v1,v2,v3)
t.computeFaceNormals()
surface.addTriangle(t)
e acho que essa é a melhor maneira de fazer isso .. não é?
agora .. isso funciona, ok. mas a luz não está suavizada. Eu estou tentando calcular também normais de vértice. (estou testando meu motor com superfícies tubolares, para que eu tenha quase todo o vértice compartilhado com mais de um triângulo)
Eu encontrei este algoritmo simples: flipcode vértice normal, mas .. hei este algoritmo tem .. complexidade exponencial? (se minha memória não falhar no meu conhecimento em ciência da computação ..) (por outro lado .. ele possui 3 loops aninhados .. não acho que seja a melhor maneira de fazê-lo ..)
alguma sugestão?
t
é o resultado decomputeFaceNormals
(que não retorna nada), não um triângulo.