我必须更改使用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);
但得到我正在看的物体是在现场而不是相机上旋转
然后我尝试将transformViewMatrix
与rotOculus
分配,但这与使用鼠标的弧球旋转相同,只是更改为Oculus。
我认为为了在现场旋转相机,我需要将相机转换为原点pCamera
,然后glMultMatrixf(rotOculus)
?
但是我无法访问我如何订购glTranslate
,gluLookAt
,glMultMatrixf
方法,因为这些方法是在dll中实现的,我只能更改pCamera
,{ {1}},pTarget
和up
。
在这种情况下,有人能指出如何在现场旋转相机吗? 谢谢。
答案 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);