我正在使用openvr和opengl编写应用程序,并且我希望相机朝其所看的方向移动。因此,当您戴上 Helm 并朝某个方向看时,虚拟相机应朝该方向飞行,以便您可以四处移动。
因此,openvr会通过调用VRCompositor()->WaitGetPoses
来提供hmd的位置,这应该类似于 View 矩阵的逆函数,因此,如果我提取矩阵的第三个库伦,我应该获得 View 方向,然后我可以翻译我的 View 沿该方向的模型矩阵以移动场景。
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));
这似乎并非完全错误,但这并不适用于所有方向。有时我向左看,但我被翻译为向右,反之亦然。向上/向下也会发生这种情况,并且当Im绕着z轴旋转hmd时,平移也会改变。
我还尝试遵循本教程https://www.youtube.com/watch?v=QREKO1sf8b8的统一性,并且使运动与统一性保持一致,但是我无法将代码转换回以与我的opengl应用程序一起运行。我尝试实现欧拉和四元数转换,但没有成功。
我感觉我需要用一个附加矩阵变换方向 vector ,因此它将一直指向正确的方向,但是我无法弄清楚o_o
有谁知道错误是什么,或者知道如何实现这一运动?
最佳答案
好吧,我发现了一个错误,我需要将方向与hmd姿势的倒数相乘,所以vec4 direction = inverse(m_mat4HMDPose) * vec4(0.0, 0.0, 1.0, 0.0);
关于c++ - openvr:向 View 方向移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60210716/