2010-08-23 4 views
1

La version simple de mon projet consiste à faire pivoter une sphère en fonction de l'entrée de l'utilisateur.Implémentation d'un système de coordonnées fixes dans OpenGL

Cependant, mes rotations deviennent bizarres après plusieurs rotations dans certaines situations en raison du système de coordonnées local d'openGL. Ce dont j'ai vraiment besoin, c'est de tourner en fonction d'un système de coordonnées mondial/fixe. Telle que lorsque je fais tourner la sphère une fois que ses axes de rotation ne sont pas aussi bien tournés. Ce problème est expliqué ici http://www.opengl.org/resources/faq/technical/transformations.htm à 9.070.

Je comprends tout cela. Cependant mettre en place ce qu'ils suggèrent est un peu au-delà de mon niveau de compétence. Est-ce que quelqu'un a de l'expérience avec ça? J'ai essayé d'utiliser un code que j'ai trouvé ici http: // chaosengineer.com/?cat=19 mais n'avait pas de chance.

Voici le code de base que j'utilise.

glPushMatrix(); 

//draw in middle of the screen 
glTranslatef(ofGetWidth()/2,ofGetHeight()/2,0); 

glRotatef(xRot,1,0,0); 
glRotatef(zRot,0,0,1); 

glTranslatef(-ofGetWidth()/2,-ofGetHeight()/2,0); 

ofSetColor(255, 255, 255, 255); 
squirrelModel.draw(); 
glPopMatrix(); 

Répondre

2

vous devez stocker objet orientation comme matrice. Ou comme un ensemble de vecteurs (local X, local Y, local Z).

Pour faire pivoter un objet, multipliez la matrice d'orientation par la matrice de rotation à chaque fois. Assurez-vous simplement que tous les vecteurs de la matrice d'orientation restent perpendiculaires les uns aux autres.

Dans ce cas, au lieu de glRotate/glTranslate, vous devrez utiliser glMultMatrix.

Ou utilisez des quaternions. Je comprends que ce n'est pas une réponse complète, mais (bien que j'ai écrit des bibliothèques et du code pour ce faire), expliquer cela prendra beaucoup de temps. Essayez de télécharger NVidia OpenGL sdk et découvrez comment ils ont géré la rotation des objets dans leurs démonstrations. Recherchez également orientation 3D avec google. Certains documents devraient expliquer comment stocker l'orientation de l'objet en utilisant des matrices, et ainsi de suite.

et de vérifier euclidianspace.com

Questions connexes