使用 gluLookat 和 glMultMatrixf 在自己的坐标中旋转相机
Rotate camera in own coord using gluLookat and glMultMatrixf
我必须更改使用 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
, 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);
我必须更改使用 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
, 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);