2011-01-07 5 views
1

J'ai un léger problème de traduction et de rotation de mon appareil photo dans l'espace 3D. Dans Direct3D9, une caméra est définie comme position, regardant et haut l'axe (comme vecteurs 3d). J'ai donc stocké la rotation et la position de la caméra, et lors de la définition de la caméra pour un nouveau cadre, j'ai fait pivoter le vecteur et l'axe haut par la rotation et j'ai mis la position. Lors de la traduction de la caméra, j'ai pris la traduction, l'ai fait tourner par la rotation et j'ai traduit la position de la caméra et le vecteur de visualisation par là. Mais après un certain temps, le vecteur de recherche et la nouvelle traduction ne s'alignent pas, c'est-à-dire que la caméra ne se déplace plus lorsque le vecteur de traduction est un multiple droit du vecteur de recherche original qui définit vers l'avant. Je ne peux pas comprendre pourquoi cela se produit, des suggestions?Rotation et translation de la caméra dans l'espace 3D

Répondre

1

Pourriez-vous rencontrer Gimbal Lock? Cela m'est déjà arrivé et j'ai donc jeté des vecteurs et je suis passé au Quaternions.

+0

Je ne pense pas. La fonction D3DX pour créer la matrice de vue ne prend que D3DXVECTOR3s. Je ne peux pas travailler avec Quaternions. – Puppy

+0

@DeadMG, vous pouvez multiplier un D3DXVECTOR3 par un D3DXQUATERNION, si * est * le problème. Cela semble vraiment similaire. –

+0

@ Moo-Juice: Alors pourquoi le vecteur LookAt n'a-t-il pas le même verrou de cardan que le vecteur de traduction? Je n'ai pas non plus trouvé de fonctions permettant de multiplier un D3DXVECTOR3 par un D3DXQUATERNION- et j'ai également vérifié la surcharge de l'opérateur. – Puppy

Questions connexes