Je suis en train de mettre en œuvre la rotation arcball/trackball mais j'ai un problème avec le centre de rotation. Je veux que le centre soit le centre de mon écran, peu importe quoi. Permettez-moi d'expliquer ce que j'ai fait jusqu'à présent.Comment faire pivoter autour du centre de l'écran en utilisant quaternions dans opengl?
J'avons créé un quaterion (axe de rotation: vector_start x vector_end, angle: vector_start * vector_end)
A partir de ce quaternion j'ai créé une matrice de rotation afin de l'utiliser avec glMultMatrixf (matrice) et obtenir la rotation désirée.
Le problème est que pendant que mon modèle semble faire tourner l'arcball comme il se doit, il tourne toujours autour de son origine locale. Comment pourrais-je faire pivoter autour du centre de mon écran , peu importe où se trouve son origine locale?
Je suppose qu'une solution à ce problème pourrait être de traduire l'axe de rotation complet au centre de l'écran puis d'appliquer la rotation mais est-ce possible? Est-ce que quelque chose me manque ici?
Oui mais quand j'applique glMultMatrixf() opengl ne fait-il pas tourner le modèle autour de son origine locale? Donc si je traduis vers l'origine pivoter (pas en utilisant glRotatef() mais glMultMatrix()) et ensuite traduire à nouveau mon modèle sera à nouveau tourné autour de son origine et non comme si son origine était le centre de l'écran par exemple. –
Traduisez avec glTranslatef(), puis multipliez avec votre matrice de rotation glMultMatrix(), et traduisez en utilisant glTranslatef(). Ceci par opposition à simplement appeler glMultMatrix(). Ça ne marche pas? – catchmeifyoutry
Non, cela ne fonctionne pas. Ce qu'il fait est qu'il fait tourner le modèle comme indiqué par la matrice de rotation appliquée par glMultMatrixf mais autour de son origine locale. J'ai essayé de convertir le quaternion de rotation en angles d'Euler, puis j'applique glRotatef (Yaw, 0., 0., 1.); glototatef (Pich, 0., 1., 0.); glRotatef (Roll, 1., 0., 0.); Au lieu d'appliquer directement glMultMatrixf(), mais alors que la rotation était sur le centre de l'écran, il n'a rien à voir avec une rotation arcball ! –