2015-11-19 5 views
1

J'ai un cube en GL ouvert. J'ai le cube tournant en multipliant par la matrice de rotation. J'ai également fait tourner la caméra autour du cube sur l'axe des x en utilisant gluLookAt comme vous pouvez le voir ci-dessous.openGL - Rotation au-dessus et en dessous d'un objet en utilisant gluLookAt

case 'j': 
     eyeX = 10*cos(angle); 
     eyeZ = 10*sin(angle); 
     centerX = -cos(angle); 
     centerZ = -sin(angle); 
     angle -= 0.1; 
     break; 
    case'l': 
     eyeX = 10*cos(angle); 
     eyeZ = 10*sin(angle); 
     centerX = -cos(angle); 
     centerZ = -sin(angle); 
     angle += 0.1; 
     break; 

gluLookAt(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, 0.0, 1.0, 0.0); 

Ce que je me bats avec la caméra devient de faire tourner au-dessus et en dessous du cube encerclant sur l'axe y.

Répondre

0

Pour faire la came en orbite autour d'un objet

  • soustrayez monde de pos de l'objet. du monde à came pos,

    cam_pos_os = cam_pos_ws -. object_pos_ws

  • faites pivoter le vecteur pointant à cam_pos_os comme vous le faites dans l'espace mondial dans votre code

  • ajouter monde la pos de l'objet. encore à la came pos. dans l'espace objet,

    cam_pos_ws = cam_pos_os + object_pos_ws

+0

Merci. Je comprends parfaitement ce que vous voulez dire. J'ai juste du mal à comprendre en termes d'OpenGL et de C++. Recommandez-vous glTranslate glRotate et glTranslate? Comment pourrais-je obtenir la position du monde et la position de la caméra? –

+0

La came pos dans les coords du monde est ce que vous entrez comme eyeX, Y, Z dans gluLookAt. Vous pouvez faire pivoter et traduire par tous les moyens que vous voulez (exactitude donnée); mais je peux vous recommander d'ignorer les éléments obsolètes "glTranform/Rotate/Scale" et de passer à GL basé sur Shader/Buffer/Uniform et d'utiliser [glm] (http://glm.g-truc.net/0.9.5/ index.html) pour l'algèbre côté CPU restant. –