salut je suis un débutant complet en informatique, donc désolé si c'est une réponse stupide. J'essaie de créer un moteur 3D simple à partir de zéro, plus à des fins éducatives que pour une utilisation réelle.
pour l'instant je ne calcule que les normales de face. de cette façon:
j'ai un objet Surface avec l'intérieur d'une liste de Triangle. je calcule les normales à l'intérieur de la classe Triangle, de cette façon:
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
}
et lors de la construction de la surface:
t = new Triangle(v1,v2,v3)
t.computeFaceNormals()
surface.addTriangle(t)
et je pense que c'est la meilleure façon de le faire .. n'est-ce pas?
maintenant .. cela fonctionne, ok. mais léger ce n'est pas lissé. j'essaie de calculer également des normales de sommet. (Je teste mon moteur avec des surfaces tubolaires donc j'ai presque tous les sommets partagés avec plus d'un triangle)
j'ai trouvé cet algorithme simple: flipcode vertex normal mais .. hei cet algorithme a .. une complexité exponentielle? (si ma mémoire n'échoue pas mon expérience en informatique ..) (en passant .. il a 3 boucles imbriquées .. je ne pense pas que ce soit la meilleure façon de le faire ..)
toute suggestion?
t
c'est le résultat decomputeFaceNormals
(qui ne renvoie rien), pas un triangle.