使用 gluLookat 和 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

我尝试将transforViewMatrix乘以rotOculus.

glMultMatrixf(transformViewMatrix*rotOculus);

但是要知道我正在看的物体正在原地旋转而不是相机

然后我尝试用rotOculus分配transformViewMatrix,但这和用鼠标旋转的弧球一样,只是改为Oculus。

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

但是我无法访问如何对glTranslategluLookAtglMultMatrixf方法进行排序,因为这些方法是在 dll 中实现的,我只能更改pCamerapTargetupviewTransformMatrix

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

你想移动lookat向量,这是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);

相关内容

  • 没有找到相关文章

最新更新