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 ]
ましたが効果なし。