0

(最新の) opengl、c++、glm、glfw、openvr.h でゲームを作成しており、現在提供されているサンプル ソース コード (hellovr_opengl_main.cpp) から学習しています。openvr には、ビュー マトリックスと投影マトリックスの両方を提供する API があり、組み合わせて使用​​すると、バーチャル リアリティ ゴーグルを通して実際に目にするものを再現できます。
だから私はフレームバッファを私のopenglアプリケーションに実装し、すべてが完璧に機能したので、すべてうまくいったので、例に従い、自分でopenvr.hからAPIにアクセスしようとしましたが、失敗した後、サンプルコードからすべての階層全体を完全にコピーして貼り付けましたそれはこの問題に関連しており、例から出てきたのと同じ順序ですべてを呼び出しましたが、どちらも機能しませんでした。考えられるすべてを試しましたが、理解できません。
また、到達するまで、マトリックス定義をそのまま使用します。それを glm::mat4 に変換する私のコードですが、変更なしでビューマトリックスが機能するようになりました (列メジャーなど)。

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
}
4

0 に答える 0