OpenVR APIの行列変換に関する問題があります。 openvrが与えるデモに VRの変換行列の質問
m_compositor->WaitGetPoses(m_rTrackedDevicePose, vr::k_unMaxTrackedDeviceCount, nullptr, 0);
: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;
}
質問で計算され
const Matrix4 & matDeviceToTracking = m_rmat4DevicePose[ unTrackedDevice ];
Matrix4 matMVP = GetCurrentViewProjectionMatrix(nEye) * matDeviceToTracking;
glUniformMatrix4fv(m_nRenderModelMatrixLocation, 1, GL_FALSE, matMVP.get());
は:から変換matDeviceToTrackingれる空間
1、どの宇宙に?
2私は既にmodelviewマトリックスがあり、すでにhmdで回転できますが、どうすればレンダリングモデルを正しくレンダリングできますか?私はprojection*modelview*m_rmat4DevicePose[ unTrackedDevice ]
を使ってみましたが効果はありません。サンプルコードで
こんにちは、お返事ありがとうございます。まずopenvrの統合の前に、私はすでに世界から見るためのカメラ行列を持っています。したがって、統合タスクは、ビューマトリックスでhmdローテーションをサポートすることです。第2のタスクはゲーム内の2つのコントローラのレンダリングをサポートすることである。 – user2240897
@ user2240897この場合、通常、カメラマトリックスの位置成分をHMD空間の原点として使用します。コントローラーをレンダリングするには、単にサンプルコードを参照してください。 – yhc