我正在用 openvr 和 opengl 编写一个应用程序,我希望相机朝着它所看的方向移动。因此,当您戴上头显并朝某个方向看时,虚拟相机应该朝那个方向飞行,这样您就可以四处移动。
因此,hmd 的位置由 openvr 提供并调用VRCompositor()->WaitGetPoses
,这应该类似于视图矩阵的逆矩阵,所以如果我提取矩阵的第三列,我应该得到视图方向,然后我可以翻译我的模型矩阵沿该方向移动场景。
m_mat4HMDPose = VRCompositor()->WaitGetPoses;
m_mat4HMDPose = inverse(m_mat4HMDPose);
vec4 direction = m_mat4HMDPose * vec4(0.0, 0.0, -1.0, 0.0);
model = translate(model, vec3(direction.x, direction.y, direction.z));
这似乎不是完全错误的,但这并不适用于所有方向。有时我向左看,但我被翻译到右边,反之亦然。这也发生在上/下,当我绕 z 轴旋转 hmd 时,平移会发生变化。
我还尝试按照本教程https://www.youtube.com/watch?v=QREKO1sf8b8进行统一,并且我使运动与统一一起工作,但我无法将代码转换回与我的 opengl 应用程序一起运行。我试图实现欧拉和四元数转换,但没有成功。
我觉得我需要用一个额外的矩阵来转换我的方向向量,所以它会一直指向正确的方向,但我无法弄清楚 o_o
有谁知道错误是什么,或者知道如何实施这项运动?