我必须更改使用gluLookat
和glMultmatrixf
构建的相机实现。
实现的相机是一个弧球相机,其中相机围绕一个点旋转。
相机的方向由
//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)
?
但是我无法访问如何对glTranslate
、gluLookAt
、glMultMatrixf
方法进行排序,因为这些方法是在 dll 中实现的,我只能更改pCamera
、pTarget
、up
和viewTransformMatrix
。
谁能指出在这种情况下我如何现场旋转相机? 谢谢。
你想移动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);