2012-01-10 1 views
0

Lorsque je fais tourner un objet dans OpenGL, l'axe pivote également avec l'objet. Y a-t-il un moyen d'éviter cela? Fondamentalement, je veux réaliser les rotations successives autour du même axe.Rotation d'axe d'objet dans OpenGL

Je ne suis pas très familier avec les quaternions mais comme je l'ai lu, cela semble être une solution. Y a-t-il un autre moyen de l'obtenir?

+0

pouvez-vous montrer votre code avec une partie des matrices de multiplication? – SAKrisT

+0

Je stocke la transformation précédente en utilisant glGetDoublev et puis avant d'appliquer la nouvelle rotation, je charge cette matrice par glLoad puis la multiplie avec la nouvelle matrice de rotation. Dans mon application, je dois sérialiser l'objet sur le disque, c'est pourquoi je l'ai fait de cette façon. Avec l'objet, je stocke également la matrice de transformation. – Aarkan

Répondre

0

Lorsque je fais tourner un objet dans OpenGL, l'axe tourne également avec l'objet.

La transformation ne fait pas pivoter l'objet, elle fait pivoter le système de coordonnées. Les rotations de chaînage sont non commutatives. Donc, ce que vous devez faire est simplement: permuter les opérations de rotation, que la première rotation appliquée, c'est-à-dire le dernier que vous multipliez sur la pile désigne votre rotation d'objet, suivie (c'est-à-dire précédemment multiplié) avec l'autre rotation.

BTW: Dans un commentaire que vous avez écrit:

je stocke la transformation précédente à l'aide glGetDoublev puis avant d'appliquer la nouvelle rotation, que je charge cette matrice par glLoad puis multiplier avec la nouvelle matrice de rotation. Dans mon application, je dois sérialiser l'objet sur le disque, c'est pourquoi je l'ai fait de cette façon. Avec l'objet, je stocke également la matrice de transformation

Ceci suggère que vous avez confondu OpenGL pour un graphe de scène ou une bibliothèque mathématique matricielle. Ce n'est ni. N'utilisez pas OpenGL comme un "object store" (cela ne fonctionne pas comme ça), et ne comptez pas sur les fonctions de matrice d'OpenGL (elles ont été supprimées de OpenGL-3 de toute façon).

+0

J'ai considéré openGL pour le prototypage rapide, mais je n'en ai pas besoin car je ne l'utilise que pour la manipulation de la matrice et je sais que openGL n'est pas pour ça. Pourriez-vous me suggérer une bibliothèque qui peut le faire pour moi? Je veux transformer l'objet pas l'axe. – Aarkan

+0

@Aarkan: Les mathématiques matricielles ne sont pas très compliquées. Vous pouvez l'implémenter vous-même ou utiliser une bibliothèque comme http://www.gnu.org/software/gsl/ ou LAPACK. Pour travailler avec la géométrie triangulée, il y a http://gts.sourceforge.net/ Si vous voulez vraiment faire des maths matricielles 4x4, je fournis https://github.com/datenwolf/linmath.h qui est dans le domaine public. – datenwolf

+0

Merci, juste un doute. Si j'utilise glm par exemple, et j'applique les matrices R1 et R2 pour deux rotations sur l'objet M, c'est-à-dire si j'effectue ceci: R2 * R1 * M alors R2 va-t-il encore tourner sur l'axe provoqué par la rotation R1? – Aarkan