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

Rotate camera in own coord using gluLookat and glMultMatrixf

我必须更改使用 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);

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

然后我尝试将transformViewMatrix分配给rotOculus,但这与用鼠标旋转轨迹球一样,只是换成了Oculus。

我想为了在现场旋转相机,我需要通过 pCamera 将相机平移到原点,然后 glMultMatrixf(rotOculus)?

但我无法访问如何订购 glTranslategluLookAtglMultMatrixf 方法,因为它们是在 dll 中实现的,我只能更改 pCamera , pTarget, up, 和 viewTransformMatrix.

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

您想移动观察向量,它是 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);