c++ - openvr:向 View 方向移动

标签 c++ opengl virtual-reality openvr

我正在使用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/

相关文章:

unity3d - XRSettings.enabled 与 Unity 2017.2 和 Oculus 1.18.1

c++ - 如何在 C++ 中将 RSA* 打印为字符串?

c++ - OpenCL POCL + asan 或 valgrind

c++ - boost::iostreams::copy() 关闭源而不是接收器

c++ - 稳定余切

javascript - A-Frame WASD 控件在移动设备上的替代品

math - Frustum Culling,实现

c++ - 使用 Eigen 插值旋转(slerp)

c - 如何在 openGL 中加载 png 图像并使用鼠标移动它?

opengl - 添加到 GLuint 属性索引有什么作用?