Compte tenu d'une superficie normal de, trouver de rotation pour Plan 3D
Donc, j'ai un Plan 3D décrit par 2 Vecteurs:
P : un point qui se trouve sur le Plan
N : normale à la surface de l'Avion
Et j'ai un très grand, plat, carré, Polygone, qui je tiens à rendre pour représenter ce Plan. Je peux facilement traduire le polygone à ce point, mais j'ai besoin de trouver le bon sens de rotation à appliquer à faire de la normale à la surface réellement être la normale à la surface.
J'ai essayé une méthode mentionné ailleurs qui était:
1) Prendre toute aucun parallèle au vecteur (V) à la normale (N), et de prendre la croix de produit (W1)
2) Prendre le produit vectoriel de (W1) et (N) maintenant (W2) et qui est un Vecteur (V') qui se trouve sur le Plan
J'ai ensuite générer une matrice de rotation sur la base (V'), portant sur l'Avion, alors que mon polygone serait aligné avec (V'). qui a travaillé, mais il est clair que cette méthode ne fonctionne pas correctement dans l'ensemble. Le Polygone n'est pas parfaitement perpendiculaire à la normale de la surface.
Des idées sur la façon de générer le bon sens de rotation?
OriginalL'auteur Adam | 2010-01-19
Vous devez vous connecter pour publier un commentaire.
Certaines choses utiles à propos de rotations:
Donc, le problème est de trouver un ensemble de trois orthonormale de vecteurs et de les organiser comme
c'est exactement ce que la méthode décrite essaie de faire, si elle ne fonctionne pas, alors il y a un problème avec votre application.
On peut évidemment utiliser votre normal que (x1,y1,z1), mais le problème est que le système a une infinité de solutions pour les deux autres vecteurs (bien que la connaissance de l'un d'eux vous donne l'autre, comme la croix du produit). Le code suivant doit donner un stable vecteur perpendiculaire à (x1,y1,z1):
Il utilise essentiellement de Gram-Schmidt orthogonalisation avec la dimension qui est déjà plus orthogonal au vecteur normal. v3 peut alors être obtenu en prenant le produit croisé de
normal
etv2
.Vous pouvez avoir besoin de prendre un peu de soin de la configuration de la rotation, c'est à propos de l'origine, de sorte que vous devez appliquer la traduction après la rotation, et c'est pour vecteurs colonnes plutôt qu'en ligne de vecteurs. Si vous êtes en utilisant OpenGL montre que OpenGL prend des tableaux dans la colonne ordre principal (plutôt que C de la ligne principale) de façon à ce que vous pouvez avoir besoin de transposer.
Je crains que je ne l'ai pas testé ci-dessus, j'ai simplement attrapé d'un code que j'ai écrit il y a longtemps et l'a adapté à votre problème! J'espère que je n'ai pas oublié tous les détails.
Edit: j'ai oublié quelque chose 🙂
La matrice ci-dessus suppose que votre normal de le polygone est le long de l'axe des x, et j'ai une intuition, il ne sera pas, tout ce que vous devez faire est de mettre le vecteur "normal" dans la colonne appropriée de la matrice de rotation, et v2/v3 dans les deux autres colonnes. Donc, si les normale de votre polygone est le long de l'axe z, alors la normale va dans la colonne 3 et v2/v3 aller dans les deux premières colonnes.
Désolé si cela provoque la confusion.
Que faire si la normale n'est pas le long des axes? Si, au lieu de cela, c'est quelque chose comme <1, 1, 1>?
L'algorithme des cartes arbitraire normale se situent le long d'un des axes (ou dans l'autre sens par l'inverse), si vous souhaitez faire pivoter une normale sur un autre normal je voudrais trouver une rotation sur le produit vectoriel des deux normales.
OriginalL'auteur Adam Bowen
Pas sûr de ce que la méthode que vous utilisez pour le rendu, mais emprunt de OpenSceneGraph de la matrice:
J'espère que cela va vous donner une idée pour votre mise en œuvre. Je ne suis pas très bon avec les quaternions, qui pourraient avoir une solution plus simple, mais cette méthode fonctionne bien pour moi.
Cela donnerait une rotation de la caméra, vous avez besoin de la position des yeux (les vecteurs sont aussi des postes dans OSG), le centre (votre P), et puis votre le vecteur (N). Vous dites que vous avez besoin pour faire de la normale à la surface fait la normale à la surface et je ne suis pas sûr de ce que vous voulez dire par là. Voulez-vous être à la recherche directement au centre de l'avion à partir d'un point sur le vecteur normal? Si oui, faites votre œil la position de l'échelle de la normalisées. P. S. quelqu'un d'autre pense que c'est drôle tout le monde est nommé Adam ici 🙂
Ya il ne semble pas être un nom commun ici 😛 Désolé si ma question est assez déroutant, je n'ai pas vraiment envie de faire quelque chose avec mon appareil photo. Je veux faire tourner mon polygone, afin que ma Surface Normale, qui est calculée à quelques où d'autre, est le même que le Polygone (si je devais calculer)
Ah bon, je probablement juste sauté aux conclusions. Adam Bowen semble avoir exactement ce que vous voulez.
OriginalL'auteur Adam W