我对 OpenVR api 中的矩阵变换有疑问。
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旋转,我怎样才能正确渲染渲染模型?我尝试使用projection*modelview*m_rmat4DevicePose[ unTrackedDevice ]
但没有效果。