Question

Je réalise une scène 3D très simple, avec 5 points en coordonnées mondiales. J'aimerais naviguer à travers la scène afin de définir une caméra avec un vecteur à la fois UP et OUT. Avec ces informations, je génère une matrice de rotation dans chaque image, que je vais appliquer aux vecteurs afin d’obtenir les coordonnées de la caméra.

La question est la suivante: j'ai lu que le verrouillage du cardan posait un problème lors de l'utilisation de cette méthode, mais est-ce que cela arriverait dans ce cas?

Notez que je génère la matrice de rotation dans chaque image et que je ne tourne pas de manière cumulative. Alors, un verrou pourrait-il se produire dans cette situation? Si tel était le cas, que suggéreriez-vous d'appliquer en toute sécurité une rotation (à partir des vecteurs UP et OUT)?

Merci

Était-ce utile?

La solution

Si par OUT, vous entendez "en avant" et que cela est toujours perpendiculaire au vecteur UP, alors NON, vous ne rencontrerez pas de blocage de la nacelle.

Ce que vous faites est de créer une matrice d’orientation à partir des vecteurs UP et FORWARD, et de l’appliquer à chaque image, méthode relativement courante pour déplacer une caméra dans l’espace. Vous n’appliquez pas plusieurs rotations à l’aide d’angle euler, ce qui peut provoquer un blocage du cardan.

Remarque Pour créer la matrice, vous devez également créer un "gauche". (ou à droite) vecteur des vecteurs UP et FORWARD. Une bonne introduction à cela est ici - notez que cet exemple applique ensuite des rotations à la matrice de la caméra, ce qui est une étape entièrement facultative.

Wikipedia a une bonne explication sur le verrouillage du cardan .

Autres conseils

Vous rencontrerez un problème de blocage de cardan lorsque vous utiliserez une approche matricielle pour générer des matrices de rotation (pour X, Y, Z), puis de les multiplier pour obtenir la matrice de rotation finale. Si j'ai bien compris, vous utilisez le vecteur OUT pour obtenir des angles (alpha, bêta, gamma), puis vous calculez des matrices. Enfin, multipliez-les pour obtenir la matrice de rotation finale. Dans l'affirmative, vous rencontrerez un blocage de la nacelle.

Un moyen de résoudre ce problème consiste à utiliser Quaternions pour les calculs.

En outre, ici , j'ai trouvé un didacticiel OpenGL sur la procédure à suivre. implémenter ceux-ci.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top