ciao sono un principiante completo in informatica computazionale, quindi scusate se è una risposta stupida. sto cercando di creare un semplice motore 3d da zero, più per scopi educativi che per un uso reale.
per ora computo solo le facce normali. in questo modo:
ho un oggetto Surface con all'interno di un elenco di triangoli. calcolo le normali all'interno della classe Triangle, in questo modo:
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 quando si costruisce la superficie:
t = new Triangle(v1,v2,v3)
t.computeFaceNormals()
surface.addTriangle(t)
e penso che questo sia il modo migliore per farlo .. non è vero?
ora .. funziona, ok. ma la luce non è levigata. sto cercando di calcolare anche i normali dei vertici. (sto testando il mio motore con superfici tubolari, quindi ho quasi tutti i vertici condivisi con più di un triangolo)
ho trovato questo semplice algoritmo: vertice flipcode normale ma .. ehi questo algoritmo ha ... complessità esponenziale? (se la mia memoria non fallisce il mio background di informatica ..) (comunque .. ha 3 loop nidificati .. non credo sia il modo migliore per farlo ..)
qualche suggerimento?
t
sia il risultato dicomputeFaceNormals
(che non restituisce nulla), non un triangolo.