使用gluLookat和glMultMatrixf在自己的坐标中旋转相机

时间:2016-06-15 10:49:23

标签: opengl rotation matrix-multiplication oculus glulookat

我必须更改使用gluLookatglMultmatrixf构建的相机实现。

实施的相机是一个弧形相机,相机在一个点周围旋转。

相机的方向是

//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);

然后是

glMultMatrixf(transformViewMatrix);

将相机移动到点,其中transformViewMatrix是从鼠标坐标计算的

我必须将Oculus Rift与相机集成在一起,这样相机就可以在现场而不是一点点旋转。

我可以从Oculus传感器rotOculus获得旋转矩阵。

我尝试将transforViewMatrixrotOculus相乘。

glMultMatrixf(transformViewMatrix*rotOculus);

但得到我正在看的物体是在现场而不是相机上旋转

然后我尝试将transformViewMatrixrotOculus分配,但这与使用鼠标的弧球旋转相同,只是更改为Oculus。

我认为为了在现场旋转相机,我需要将相机转换为原点pCamera,然后glMultMatrixf(rotOculus)

但是我无法访问我如何订购glTranslategluLookAtglMultMatrixf方法,因为这些方法是在dll中实现的,我只能更改pCamera,{ {1}},pTargetup

在这种情况下,有人能指出如何在现场旋转相机吗? 谢谢。

1 个答案:

答案 0 :(得分:1)

您想移动外观向量,即pCamera和pTarget之间的线。您没有指定您正在使用的类型,但代码看起来应该是这样的

// 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);