hola soy un novato completo en informática, lo siento si es una respuesta estúpida. Estoy tratando de hacer un simple motor 3D desde cero, más con fines educativos que para uso real.
por ahora calculo solo las normales de la cara. De este modo:
Tengo un objeto Surface dentro de la lista de un triángulo. Calculo las normales dentro de la clase Triangle, de esta manera:
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
}
y al construir la superficie:
t = new Triangle(v1,v2,v3)
t.computeFaceNormals()
surface.addTriangle(t)
y creo que esta es la mejor manera de hacerlo ... ¿no?
ahora ... esto funciona, está bien. Pero la luz no está suavizada. Estoy tratando de calcular también las normales de vértice. (Estoy probando mi motor con superficies tubulares, por lo que tengo casi todos los vértices compartidos con más de un triángulo)
He encontrado este algoritmo simple: flipcode vertex normal pero ... hei este algoritmo tiene ... ¿complejidad exponencial? (si mi memoria no falla mi experiencia en informática ...) (por cierto ... tiene 3 bucles anidados ... no creo que sea la mejor manera de hacerlo ...)
¿cualquier sugerencia?
t
es el resultado decomputeFaceNormals
(que no devuelve nada), no un triángulo.