Войти
ПрограммированиеФорумГрафика

[OpenVR][D3D] Матрица проекции в левосторонней системе координат

#0
10:47, 7 апр. 2017

Добрый день!

Столкнулся с некоторой проблемой при подключении OpenVR к проекту, в проекте используется D3D и левостороння система координат, OpenVR выдает правосторонние матрицы, из-за этого геометрия оказывается вывернутой наружу.

Я пытаюсь сделать преобразование View и Projection матриц, если с View все в принципе просто, как я понимаю мне надо только лишь изменить знак одного вектора:
https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb204853(v=vs.85).aspx

То вот с проекцией у меня не все так гладко. Во первых, OpenVR выдает строго свои матрицы проекции, другие ему не подходят, выдает он их двумя способами - либо готовой RH:
https://github.com/ValveSoftware/openvr/wiki/IVRSystem::GetProjectionMatrix

Либо он может выдать так называемую RAW матрицу:
https://github.com/ValveSoftware/openvr/wiki/IVRSystem::GetProjectionRaw

И вот как эту матрицу преобразовать из RH в LH я не понимаю, потому что формула отличается от привычных:

D3DXMatrixPerspectiveLH
https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb205352(v=vs.85).aspx

Может кто знает как данным, что выдает Open VR восстановить LH матрицу?


#1
11:57, 7 апр. 2017

Вот что должно помочь:
https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb205353(v=vs.85).aspx

#2
12:44, 7 апр. 2017
    float fLeft, fRight, fTop, fBottom;
    m_pHMD->GetProjectionRaw(nEye, &fLeft, &fRight, &fTop, &fBottom);

    fLeft *= fZNear;
    fRight *= fZNear;
    fTop *= -1.0f*fZNear;
    fBottom *= -1.0f*fZNear;

    // left handed
    D3DXMatrixPerspectiveOffCenterLH(&out_Projection, fLeft, fRight, fBottom, fTop, fZNear, fZFar);

Вот так проекция верная, только вот теперь с осью вверх проблема, но это уже проще)

ПрограммированиеФорумГрафика

Тема в архиве.