OpenGL rotation de la caméra
En OpenGL, je suis en train de créer un vol libre de la caméra. Mon problème est que la rotation sur l'axe des ordonnées. La caméra doit toujours être tourné sur l'axe Y axe du monde, et non sur l'orientation locale. J'ai essayé plusieurs matrice de multiplications, mais sans résultats. Avec
camMatrix = camMatrix * yrotMatrix
tourne la caméra le long de l'axe local. Et avec
camMatrix = yrotMatrix * camMatrix
tourne la caméra le long de l'axe du monde, mais toujours autour de l'origine. Cependant, le centre de rotation doit être l'appareil photo. Quelqu'un a une idée?
C'est triste de voir des gens poser des questions ici, les gens vont sortir de leur façon de répondre à ces questions, alors la personne ne revient jamais à donner de la rétroaction ou tout simplement accepter une réponse.
Peut-être une nouvelle
Nous les appelons "Aider les Vampires".
A noté. N'était pas au courant du terme, mais n'a trouver cette SE post sur le sujet après que vous avez mentionné.
Peut-être une nouvelle
parasite
balise doit être ajouté à la SE réseau...Nous les appelons "Aider les Vampires".
A noté. N'était pas au courant du terme, mais n'a trouver cette SE post sur le sujet après que vous avez mentionné.
OriginalL'auteur user1318091 | 2012-04-06
Vous devez vous connecter pour publier un commentaire.
L'un des plus épineux les aspects de la programmation 3D est d'obtenir des transformations complexes droit.
En OpenGL, chaque point est transformé avec le modèle/vue de la matrice, puis avec la matrice de projection.
le modèle de matrice de vue de chaque point et le traduit à l'endroit où il doit être, du point de vue de la caméra. La matrice de projection convertit les coordonnées de ce point de sorte que les coordonnées X et Y peuvent être mappées à la fenêtre facilement.
Pour obtenir le mode/affichage de la matrice de droite, vous devez commencer avec une matrice d'identité (qui ne change pas les sommets), puis d'appliquer les transformations de la position de la caméra et de l'orientation, puis de la position de l'objet et de l'orientation dans l'ordre inverse.
Une autre chose que vous devez garder à l'esprit est, les rotations sont toujours sur un axe est centré sur l'origine (0,0,0). Ainsi, lorsque vous appliquez une rotation de transformation pour l'appareil photo, si vous êtes tournant (comme vous le feriez tourner la tête) ou en orbite autour de autour de l'origine (comme la Terre tourne autour du Soleil) dépend si vous avez déjà demandé une traduction transformer.
Donc, si vous voulez faire pivoter et orbite autour de la caméra, vous devez:
Les choses peuvent devenir plus complexes, si vous, dites, voulez pointer l'appareil photo sur un point qui n'est pas (0,0,0) et aussi orbite à une distance définie, tout en étant capable de tangage et le lacet de la caméra. Voir ici pour un exemple en WebGL. Recherchez
GLViewerBase.prototype.display
.La Livre Rouge couvre transforme en beaucoup plus de détails.
Noter également gluLookAt, que vous pouvez utiliser pour que l'appareil à quelque chose, sans avoir à utiliser les rotations.
OriginalL'auteur Michael Slade
Plutôt que de faire cela à l'aide de matrices, vous pouvez trouver plus facile de créer un appareil photo de classe qui stocke une position et un repère orthonormé
n
,u
etv
axes, et de les faire pivoter de façon appropriée, par exemple, voir:https://github.com/sgolodetz/hesperus2/blob/master/Shipwreck/MapEditor/GUI/Camera.java
et
https://github.com/sgolodetz/hesperus2/blob/master/Shipwreck/MapEditor/Math/MathUtil.java
Ensuite, vous écrivez des choses comme:
Quand vient le temps de définir l'affichage de l'appareil photo, vous n':
Si vous vous demandez comment faire pivoter sur un axe arbitraire comme
(0,0,1)
, voirMathUtil.rotate_about_axis
dans le code ci-dessus.Assez vrai, je suppose que j'ai raté un truc là 🙂 Merci.
OriginalL'auteur Stuart Golodetz
Si vous ne voulez pas transformer basée sur la caméra à partir de l'image précédente, ma suggestion peut être juste pour jeter de la matrice de la composition et le recalcul à chaque frame. Je ne pense pas qu'il y a un moyen de faire ce que vous voulez avec une seule matrice, comme les magasins de la traduction et de la rotation de l'ensemble.
Je suppose que si vous voulez juste un tangage/lacet, seule la caméra, qu'à stocker ces valeurs que les deux flotteurs, puis reconstruire la matrice. Peut-être quelque chose comme pseudo:
OriginalL'auteur Tim
Je suppose que la matrice stockée dans la mémoire de cette façon (en nombre de représenter index de l'élément si la matrice ont été linéaire 1d tableau):
Solution:
camMatrix = yrotMatrix * camMatrix
OriginalL'auteur SigTerm