2010-08-29 8 views
2

J'ai implémenté avec succès la rotation Arcball à travers les quaternions, mais je suis confus quant à ce qu'il faut faire lorsque le vecteur de direction de la caméra est parallèle au vecteur ascendant. Actuellement, je ne fais que restreindre la rotation le long de l'axe des x (le tangage) lorsque le produit scalaire du vecteur de direction et du vecteur ascendant dépasse 0,99. Dans Maya (ou Max, XSI où la rotation d'arcball est utilisée) par exemple, vous pouvez tourner autour d'un cercle complet très doucement. J'espère une solution similaire à celle de la rotation de Maya.Arcball Rotation à 90 degrés

Thankyou

Répondre

0

Vous devez régler à la fois le point de vue vecteur normal (VNV) et la vue vers le haut vecteur (UVL) et faites tourner les deux ensemble afin qu'ils restent toujours perpendiculaires entre eux. Il est parfois utile de garder trace d'un vecteur "droit" (ou "gauche") qui n'est que le produit croisé des vecteurs normaux et ascendants.

+0

J'ai d'abord fait cela, malheureusement il y a un problème avec cette solution (pas vu dans Maya par exemple). Le problème est que lorsque vous essayez de faire pivoter, la vue effectue également un roulis et cela est dû à la nouvelle direction et aux calculs vectoriels ascendants (vous devez déplacer la souris en cercles pour la corriger). Certains programmes comme Luxology Modo montrent toujours ce comportement et n'ont pas pris la peine de le résoudre. Je n'ai pas encore compris comment Maya accomplit cela. Je sais qu'ils utilisent un vecteur fixe pour calculer leurs nouveaux vecteurs orthogonaux. Il peut être aussi simple que _skipping_ les angles qui vont casser l'appareil photo ... – Samaursa

+0

Pouvez-vous poster du code? On dirait que vous rencontrez un blocage de cardan, mais c'est quelque chose que les rotations de quaternion sont censées éviter. Aussi, avez-vous regardé http://www.tecgraf.puc-rio.br/~mgattass/fcg/material/shoemake92.pdf? – andand

+0

Ce n'est pas un verrou de cardan. Le problème est rencontré lorsque la caméra regarde vers le bas ou vers le haut, auquel cas le vecteur de direction de la caméra est parallèle à son vecteur (fixe). Lorsque cela se produit, la caméra ne fonctionne plus (car sa matrice de rotation n'est plus ortho-normale) et par conséquent, les vecteurs dir/up/right corrects ne peuvent pas être calculés. Cependant, si chaque frame, je calcule un nouvel axe haut de sorte qu'il n'est plus fixe, la caméra subira naturellement un roulement. Je vais poster un exemple bientôt. – Samaursa

Questions connexes