GetCurrentViewProjectionMatrix, получить матрицу проекции от аппаратного обеспечения vr, используя openvr.h - PullRequest
0 голосов
/ 28 апреля 2019

Я создаю игру на (современном) opengl, c ++, glm, glfw и openvr.h и в настоящее время учусь на примере исходного кода (hellovr_opengl_main.cpp).В openvr есть API-интерфейсы, которые предоставляют матрицы вида и проекции и используются в комбинации, чтобы воспроизвести то, что ваши глаза увидят в реальной жизни через очки виртуальной реальности.
Поэтому я внедрил фрейм-буферы в свое приложение opengl, и все работало идеально, так что всеХорошо, тогда последовал за примерами и попытался получить доступ к apis из openvr.h сам, и после того, как это не удалось, я прямо скопировал и вставил из их примера кода всю иерархию всего, что имеет отношение к этой проблеме и назвал все в том же порядке, что иони появились из примера, и это тоже не сработало, поэтому я перепробовал все, что мог придумать, и не могу понять
Также я использую там определения матриц такими, какие они есть, пока не дойдет до моего кода, где я преобразую его в 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
}
...