Trouver l'angle normal de la face d'un triangle en 3D, étant donné les coordonnées de ses sommets
Que vous pouvez être en mesure de dire à partir de cette capture d'écran, je suis en train de faire un moteur physique pour un jeu de plateforme que j'y travaille, mais j'ai couru dans un véritable problème: j'ai besoin d'être en mesure de trouver l'angle de l'un des triangles que vous pouvez le voir faire jusqu'à ce maillage, afin que je puisse travailler sur la rotation et donc de l'accélération angulaire du lecteur sur ce triangle.
Je peux utiliser un algorithme que j'ai créé pour trouver l'emplacement de tous les 3 points d'un triangle quelconque que le joueur est en contact avec, mais je ne sais pas comment utiliser ces points pour travailler sur la rotation du triangle.
Par la rotation, je veux dire la direction de la normale à partir du centre de la face, c'est à dire, l'angle sous lequel une personne serait penchée si ils se tinrent sur la surface. Quelqu'un peut venir avec une série d'équations qui permettront que ce problème soit résolu?
Merci les gars, réponse à la question!
OriginalL'auteur | 2009-10-04
Vous devez vous connecter pour publier un commentaire.
Si vous prenez le produit vectoriel de deux vecteurs:
et
où
p0
,p1
etp2
sont les trois sommets du triangle, vous aurez la normale. Un triangle est considéré comme pointent vers vous si les sommets sont ordonnés dans le sens horaire à l'égard de ses normale extérieure. Cela s'appelle la règle de la main gauche. Imaginez la tenue de votre main gauche avec les doigts recroquevillés dep0
àp1
, votre pouce bâtonnets dans le sens de la normale de la face:OriginalL'auteur ChrisF
La croix du produit est la bonne réponse. N'oubliez pas de normaliser le résultat, et n'oubliez pas que si le triangle a zéro de la zone, le résultat n'est pas valide car il n'est pas bien défini normal. En fait, si votre trois sommets sont p0, p1 et p2:
Aussi, comme l'autre réponse dit, si vous obtenez la "face" ou "vers le bas face à la" normale dépend de la commande de vos vertices.
Si le triangle a zéro de la zone, n'avez-vous défini une ligne ou d'un point, qui ne sont pas des triangles? Qui peut être pris avec un garde de la clause, non?
OriginalL'auteur sdclibbery
Pour finir de répondre à votre question, une fois que vous avez l'appareil vecteur normal de votre triangle, vous pouvez travailler l'angle à l'aide d'un produit scalaire.
Le produit scalaire de deux vecteurs est égal au cosinus de l'angle entre eux, donc si vous calculez le arccos du produit scalaire de votre unité de vecteur normal et votre unité de vecteur, vous obtiendrez l'angle d'inclinaison de votre triangle (à un angle par rapport à l'horizontale).
Notez également que OpenGL conventionnelle utilise un système de coordonnées main droite, donc si vous utilisez ensuite votre triangle de sommets ont un sens anti-horaire de la commande.
OriginalL'auteur Incredulous Monk
Il y a 2 normales pour le triangle (bien sûr) et celui que vous obtenez à partir d'algorithmes standard dépend de l'ordre des autres sommets. Citant wiki
"Pour un polygone (un triangle), une surface normale peut être calculé comme le vecteur de la croix-produit de deux (non parallèles) les arêtes du polygone."
Mais la direction de la normale dépend de l'ordre des points choisis, vous pouvez la calculer et de décider d'utiliser une autre méthode heuristique que l'inverse vecteur est normal vous êtes intéressé à.
OriginalL'auteur whatnick