Si j'ai un maillage de triangles, comment se fait-il de calculer les normales à chaque sommet donné? P>
Je comprends comment trouver la normale d'un triangle unique. Si j'ai des triangles partageant des sommets, je peux trouver partiellement la réponse en trouvant la normale respective de chaque triangle, normalisant la normalisation, l'ajoutant au total, puis normaliser le résultat final. Cependant, cela ne prend évidemment pas en compte une pondération correcte de chaque normale (de nombreux minuscules triangles peuvent jeter la réponse lorsqu'il est lié à un grand triangle, par exemple). P>
6 Réponses :
Vous pouvez donner plus de poids aux grands triangles en multipliant la normale par la zone du triangle. P>
En fait, ce type de pondération fait partie du produit croisé. La longueur du vecteur de produit croisé est proportionnelle à la région des triangles. Ajoutez donc simplement les normales non formées et ne normaliser que la somme résultante.
La moyenne pondérée semble être la meilleure approche. P>
Mais soyez conscient que, selon votre application, les coins tranchants pourraient encore vous donner des problèmes. Dans ce cas, vous pouvez calculer plusieurs normales de sommet par la moyenne des normales de surface dont le produit croisé est inférieur à un seuil (c'est-à-dire plus près d'être parallèle). P>
Recherchez Offset Mesh triangulaire à l'aide des multiples vecteurs normaux d'un sommet em> par SJ KIM, ET. al., Pour plus de détails sur cette méthode. P>
Je pense qu'une bonne méthode doit utiliser une moyenne pondérée mais en utilisant des angles au lieu de la zone comme poids. C'est à mon avis une meilleure réponse car la normale que vous êtes informatique est une caractéristique "locale" de sorte que vous ne vous souciez pas vraiment de la taille du triangle qui contribue ... Vous avez besoin d'une sorte de mesure "locale" du contribution et l'angle entre les deux côtés du triangle sur le sommet spécifié est une mesure locale. P>
Utiliser cette approche Beaucoup de petits triangles (minces) ne vous donnent pas une réponse déséquilibrée. P>
L'utilisation d'angles est la même que d'utiliser une moyenne pondérée dans la zone si vous localisez le calcul en utilisant l'intersection des triangles avec une petite sphère centrée dans le sommet. P>
évidemment, vous devez utiliser une moyenne pondérée pour obtenir une normale correcte, mais à l'aide de la zone Triangles ne vous donnera pas ce dont vous avez besoin depuis que la zone de chaque triangle n'a aucune relation avec le poids% du poids que les triangles normaux représentent pour une sommet. p>
Si vous le basez sur l'angle entre les deux côtés entrant dans le sommet, vous devriez avoir le poids correct pour chaque triangle qui l'arrive. Il peut être pratique si vous pouviez le convertir en 2D en quelque sorte afin que vous puissiez partir d'une base à 360 degrés pour vos poids, mais il suffit probablement d'utiliser l'angle lui-même comme multiplicateur de poids pour le calculer dans un espace 3D, puis en ajoutant tous les Les normales produisaient ainsi et normalisant le résultat final devraient produire la bonne réponse. P>
Ce blog post décrit trois Méthodes et donne un exemple visuel de la raison pour laquelle la méthode standard et simple (la moyenne pondérée de la surface des normales de toutes les faces se joignant au sommet) peut parfois donner de mauvais résultats. P>
Consultez cet article: opérateurs distincts de géométrie différentielle pour les deux manifolds triangulés a>. p>
En particulier, l'opérateur normal de courbure moyenne discrète "(section 3.5, équation 7) donne une normale robuste indépendante de la tessellation, contrairement aux méthodes de la publication du blog citée par un autre answer ici. p>
Veuillez veiller à ce que l'opérateur ci-dessus ait le problème qu'il ne fonctionne pas sur des zones de courbure moyennes (ou proches zéro) (par exemple, plan plat ou selle locale).
Vous n'avez pas à normaliser les résultats intermédiaires; Si vous ne normaliserez que le résultat final, vous êtes bon.
Jasper - mais gardez à l'esprit que de nombreux calculs de matrice typiques de cette chose pour la pourriture nécessitent de faire la longueur 1 avant de continuer. Procédez avec prudence si vous ne normalisez pas «jusqu'à la fin».