GetCurrentViewProjectionMatrix,使用openvr.h从VR硬件获取投影矩阵

时间:2019-04-28 02:05:14

标签: c++ opengl glm-math openvr

我正在(现代)opengl,c ++,glm,glfw和openvr.h中创建一个游戏,目前正在从提供的示例源代码(hellovr_opengl_main.cpp)中学习。在openvr中找到了可以同时提供视图和投影矩阵的API,并且结合使用这些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
}

0 个答案:

没有答案