1

我必须更改使用gluLookatand构建的相机实现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);

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

然后我尝试用 分配transformViewMatrixrotOculus但这与用鼠标旋转轨迹球相同,只是改为 Oculus。

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

但是我无法访问如何订购glTranslate, gluLookAt,glMultMatrixf方法,因为这些方法是在 dll 中实现的,我只能更改pCamera, pTarget,upviewTransformMatrix.

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

4

1 回答 1

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);
于 2016-06-15T18:54:00.693 回答