我正在(现代)opengl、c++、glm、glfw 和 openvr.h 中创建游戏,目前正在从提供的示例源代码(hellovr_opengl_main.cpp)中学习。在 openvr 中发现了 api 来提供视图和投影矩阵,并结合使用将通过虚拟现实护目镜复制您的眼睛在现实生活中看到的内容。
所以我在我的opengl应用程序中实现了帧缓冲区,一切正常,所以一切都很好,然后按照示例并尝试自己从openvr.h访问api,之后我完全从他们的示例代码中复制并粘贴了所有内容的整个层次结构这与这个问题相关,并以与示例中出现的顺序相同的顺序调用所有内容,但也没有工作,所以我尝试了我能想到的所有内容,但我无法弄清楚
我也使用矩阵定义,直到它到达我将其转换为 glm::mat4 的代码,但我确实让 viewmatrix 工作而无需任何修改(如列专业)
glm::mat4 CMainApplication::GetCurrentViewProjectionMatrix(vr::Hmd_Eye nEye)
{
Matrix4 i;
if (nEye == vr::Eye_Left)
{
i = m_mat4ProjectionLeft * m_mat4eyePosLeft * m_mat4HMDPose;
}
else if (nEye == vr::Eye_Right)
{
i = m_mat4ProjectionRight * m_mat4eyePosRight * m_mat4HMDPose;
}
Matrix4 i2 = m_mat4eyePosRight * m_mat4HMDPose;//works!
view = glm::mat4(i2[0], i2[1], i2[2], i2[3], i2[4], i2[5], i2[6], i2[7], i2[8], i2[9],
i2[10], i2[11], i2[12], i2[13], i2[14], i2[15]);
Matrix4 i3 = m_mat4ProjectionRight;
project = glm::mat4(i3[0], i3[1], i3[2], i3[3], i3[4], i3[5], i3[6], i3[7], i3[8], i3[9],
i3[10], i3[11], i3[12], i3[13], i3[14], i3[15]);//doesnt work
project = glm::mat4(i3[0], i3[4], i3[8], i3[12], i3[1], i3[5], i3[9], i3[13], i3[2], i3[6],
i3[10], i3[14], i3[3], i3[7], i3[11], i3[15]);//row>>column //doesnt work
return glm::mat4(i[0], i[4], i[8], i[12], i[1], i[5], i[9], i[13], i[2], i[6],
i[10], i[14], i[3], i[7], i[11], i[15]);//doesnt work
return glm::mat4(i[0], i[4], i[8], i[12], i[1], i[5], i[9], i[13], i[2], i[6],
i[10], i[14], i[3], i[7], i[11], i[15]);//row>>column //doesnt work
return glm::mat4(i[12], i[13], i[14], i[15], i[4], i[5], i[6], i[7], i[8], i[9],
i[10], i[11], i[0], i[1], i[2], i[3]);//replace top w/ bottom //doesnt work
}