Quelqu'un peut-il me dire comment faire tourner mon modèle à son propre centre aller gravité au lieu de l'axe par défaut (0,0,0)?problème de rotation opengl
et ma rotation semble être seulement aller à gauche et à droite pas 360 degrés ..
Quelqu'un peut-il me dire comment faire tourner mon modèle à son propre centre aller gravité au lieu de l'axe par défaut (0,0,0)?problème de rotation opengl
et ma rotation semble être seulement aller à gauche et à droite pas 360 degrés ..
Si vous souhaitez faire pivoter un objet autour de son centre, vous devez d'abord traduire à l'origine, puis faites pivoter et traduire arrière. Puisque les matrices de transformation affectent vos vecteurs de droite à gauche, vous devez coder ces étapes dans l'ordre inverse.
Voici quelques pseudocode depuis que je ne sais pas les routines OpenGL par cœur:
PushMatrix();
LoadIdentity(); // Start with a fresh matrix
Translate(); // Move your object to its final destination
Rotate(); // Apply rotations
Draw(); // Draw your object using coordinates relative to the object center
PopMatrix();
Ces matrices s'appliquent:
v_t = (I * T * R) * v = (I * (T * (R * v)))
Ainsi, l'ordre est: rotation, translation.
EDIT: Une explication de l'équation ci-dessus.
La rotation, l'échelle et la translation des transformations affectent model-view-matrix. Chaque point 3D (vecteur) de votre modèle est multiplié par cette matrice pour obtenir son point final dans l'espace 3D, puis il est multiplié par la matrice de projection pour recevoir un point 2D (sur votre écran 2D).
Ignorer la substance de projection, votre point transformé par le modèle-vue-matrice est la suivante:
v_t = MV * v
Signification du point d'origine v
, multiplié par le modèle-vue-matrice MV
.
Dans le code ci-dessus, nous avons construit MV
par une matrice d'identité I
, une traduction T
et une rotation R
:
MV = I * T * R
Mettre tout ensemble, vous voyez que votre point v
est d'abord affecté par la rotation R
, puis la traduction T
, de sorte que votre point est mis en rotation avant qu'il ne soit traduit, comme nous le voulions:
v_t = MV * v = (I * T * R) * v = T * (R * v)
appel Rotation() avant Traduire() entraînerait:
v_t = (I * R * T) * v = R * (T * v)
qui serait mauvais: Traduit à un point en 3D, puis tourné autour de l'origine, ce qui conduit à une certaine distorsion étrange dans votre modèle.
merci! mais que voulez-vous dire par les équations? – noob88
J'ai ajouté une explication pour l'équation. C'est vraiment juste un peu de mathématiques de base dont vous aurez besoin pour comprendre les graphiques 3D. –
merci ça marche maintenant .. mais il reste encore un problème, il ne tourne pas dans un cercle plutôt son 180 degrés de gauche à droite .. ne peux pas dire ce qui ne va pas? – noob88