2

J'ai de la difficulté à trouver comment faire pivoter un objet autour de deux axes sans modifier l'orientation des axes. Je n'ai besoin que de la rotation locale, d'abord autour de l'axe X puis autour de l'axe Y (par exemple, peu importe le nombre de transformations autour des axes) sans transformer l'ensemble du système de coordonnées, seul l'objet. Le problème est que si j'utilise glRotatef autour de l'axe X, les axes sont également pivotés et c'est ce que je ne veux pas. J'ai un tas d'articles rouges à ce sujet, mais il me semble qu'il me manque encore quelque chose. Merci pour votre aide.Rotation OpenGL ES dans le système de coordonnées fixes

Pour avoir un exemple de code ici, c'est quelque chose comme ça

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glRotatef(rotX, 1.0f, 0.0f, 0.0f); 
glRotatef(rotY, 0.0f, 1.0f, 0.0f); 
drawObject(); 

mais transforme le système de coordonnées également.

Répondre

0

Vous devez probablement restaurer votre matrice modelview après avoir dessiné l'objet. Vous pouvez le faire en utilisant la pile de matrice intégrée d'OpenGL. Le modèle commun ressemble à ceci:

// Set up global coordinate system: 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
// ... add world and view transformations here ... 

// Draw your object: 
glPushMatrix(); // save the current matrix on the stack 
glRotatef(rotX, 1.0f, 0.0f, 0.0f); 
glRotatef(rotY, 0.0f, 1.0f, 0.0f); 
drawObject(); 
glPopMatrix(); // restore the previously saved matrix 

// Repeat the above for other objects 
+0

merci pour les conseils, j'ai essayé, mais ça n'a pas marché, je pense que le problème est que dans une étape que je suis en rotation arround axe X qui fait tourner le système de coordonnées, puis dans la même étape autour de l'axe Y et cette rotation est effectuée en utilisant le système de coordonnées déjà tourné autour de l'axe X, donc ce n'est pas ce dont j'ai besoin. Peut-être que je l'ai expliqué mal ou pas clair avant. Ou pensez-vous que le problème est ailleurs? – Jenicek

+0

Ah, je vois, donc vous voulez tourner autour de l'axe Y global, pas le local. Ce n'est pas un moyen courant d'exprimer des rotations, et je ne sais pas trop comment faire. Vous pouvez essayer d'inverser l'ordre des rotations X et Y et voir si cela a plus de sens pour votre application. – Thomas

+0

Oui, vous avez raison. Je sais que ce n'est pas commun que j'essaie juste quelque chose et que je suis coincé à ce moment-là :) peut-être que je vais comprendre, je vais essayer de jouer à nouveau avec ça :) merci pour votre réponse :) – Jenicek

1

Créez une matrice globale. Ajoutez xAngle et yAngle à la matrice lors de la rotation.

Matrix.rotateM(matrix, 0, xAngleADD, matrix[1], matrix[5], matrix[9]); 
Matrix.rotateM(matrix, 0, yAngleADD, matrix[0], matrix[4], matrix[8]); 
gl.glMultMatrixf(matrix, 0);