2016-06-15 6 views
0

Je dois changer une implémentation de caméra construite avec gluLookat et glMultmatrixf.Rotation de la caméra dans son propre coord en utilisant gluLookat et glMultMatrixf

La caméra mise en œuvre est une caméra arcball dans laquelle la caméra tourne autour d'un point.

Orientation de la caméra est par

//set projection 
glMatrixMode(GL_PROJECTION); 
gluPerspective (..); 
//modelview 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

gluLookAt(pCamera.x, pCamera.y, pCamera.z, 
      pTarget.x, pTarget.y, pTarget.z, 
      up.x, up.y, up.z); 

et est suivi par

glMultMatrixf(transformViewMatrix); 

pour déplacer la caméra autour du point où transformViewMatrix est calculé à partir de la souris coord


Je dois intégrer Oculus Rift avec l'appareil photo pour que l'appareil puisse tourner place au lieu d'un point.

Je peux obtenir une matrice de rotation à partir du capteur Oculus, rotOculus. J'ai essayé de multiplier transforViewMatrix avec rotOculus.

glMultMatrixf(transformViewMatrix*rotOculus); 

mais obtenir que l'objet que je suis à la recherche est en rotation sur place au lieu de la caméra

alors j'ai essayé d'assigner transformViewMatrix avec rotOculus, mais qui est identique à arcball rotation avec la souris, juste changé Oculus.

Je pense que pour faire pivoter la caméra sur place, j'ai besoin de traduire la caméra à l'origine par pCamera, puis glMultMatrixf(rotOculus)?

Mais je n'avez pas accès à la façon dont je peux commander glTranslate, gluLookAt, glMultMatrixf méthodes, car celles-ci sont mises en œuvre dans une dll, je ne peux pas changer pCamera, pTarget, up et viewTransformMatrix. Est-ce que quelqu'un pourrait indiquer comment je pourrais faire pivoter la caméra sur place dans cette situation? Merci.

Répondre

1

Vous souhaitez déplacer le vecteur de recherche, qui est la ligne entre pCamera et pTarget. Vous ne spécifiez pas les types que vous utilisez, mais le code doit ressembler à ceci:

// Get the lookat vector 
vec3 lookAtVector = pTarget - pCamera; 
// Rotate by the HMD orientation 
lookAtVector = rotOculus * lookAtVector; 

// Add back the camera vector to get the worldspace target 
vec3 newTarget = lookAtVector + pCamera; 

// Upload the view matrix to GL 
gluLookAt(pCamera.x, pCamera.y, pCamera.z, 
     newTarget.x, newTarget.y, newTarget.z, 
     up.x, up.y, up.z);