У меня проблема с матричным преобразованием в OpenVR api.вопросы матрицы преобразования в VR
m_compositor->WaitGetPoses(m_rTrackedDevicePose, vr::k_unMaxTrackedDeviceCount, nullptr, 0);
в демонстрационном которой openvr дает:
const Matrix4 & matDeviceToTracking = m_rmat4DevicePose[ unTrackedDevice ];
Matrix4 matMVP = GetCurrentViewProjectionMatrix(nEye) * matDeviceToTracking;
glUniformMatrix4fv(m_nRenderModelMatrixLocation, 1, GL_FALSE, matMVP.get());
где GetCurrentViewProjectionMatrix рассчитывается с
Matrix4 CMainApplication::GetCurrentViewProjectionMatrix(vr::Hmd_Eye nEye)
{
Matrix4 matMVP;
if(nEye == vr::Eye_Left)
{
matMVP = m_mat4ProjectionLeft * m_mat4eyePosLeft * m_mat4HMDPose;
}
else if(nEye == vr::Eye_Right)
{
matMVP = m_mat4ProjectionRight * m_mat4eyePosRight * m_mat4HMDPose;
}
return matMVP;
}
возникает вопрос:
1, что пространство matDeviceToTracking превращается из в какое пространство?
2, Если у меня уже есть матрица модели и уже могу вращаться с помощью hmd, как правильно отредактировать rendermodel? Я пробовал использовать projection*modelview*m_rmat4DevicePose[ unTrackedDevice ]
, но эффекта нет.
Привет, спасибо за ваш ответ. Сначала перед интеграцией openvr у меня уже есть матрица камеры из мира для просмотра. Таким образом, задача интеграции заключается в поддержке матрицы вращения hmd; вторая задача - поддерживать рендеринг двух контроллеров в игре. – user2240897
@ user2240897 В этом случае обычно вы используете компонент позиции матрицы вашей камеры в качестве источника вашего пространства HMD. Для рендеринга контроллеров просто обратитесь к образцу кода. – yhc