Hé les gars, celui-ci a mangé toute ma nuit, et finalement je lève les mains pour de l'aide. En fait, il est assez facile de calculer le tangage et le lacet de la vue Matrice juste après que vous faites une mise à jour de la caméra:Direct3D - Comment puis-je calculer Roll à partir de View Matrix?
D3DXMatrixLookAtLH(&m_View, &sCam.pos, &vLookAt, &sCam.up);
pDev->SetTransform(D3DTS_VIEW, &m_View);
// Set the camera axes from the view matrix
sCam.right.x = m_View._11;
sCam.right.y = m_View._21;
sCam.right.z = m_View._31;
sCam.up.x = m_View._12;
sCam.up.y = m_View._22;
sCam.up.z = m_View._32;
sCam.look.x = m_View._13;
sCam.look.y = m_View._23;
sCam.look.z = m_View._33;
// Calculate yaw and pitch and roll
float lookLengthOnXZ = sqrtf(sCam.look.z^2 + sCam.look.x^2);
fPitch = atan2f(sCam.look.y, lookLengthOnXZ);
fYaw = atan2f(sCam.look.x, sCam.look.z);
Donc mon problème est le suivant: il doit y avoir un moyen d'obtenir le rouleau en radians similaire à la façon dont la Le tangage et le lacet sont obtenus à la fin du code. J'ai essayé plusieurs dizaines d'algorithmes qui semblaient avoir du sens pour moi, mais aucun d'entre eux n'a donné le résultat escompté. Je réalise que de nombreux développeurs ne suivent pas ces valeurs, cependant j'écris des routines de recentrage et de réglage de l'écrêtage basé sur les valeurs, et le suivi manuel se décompose lorsque vous appliquez des rotations mixtes à la matrice de vue. Donc, est-ce que quelqu'un a la formule pour obtenir le Roll in radians (ou degrés, je m'en fous) de la matrice de vue? Merci!
Heh en rétrospective mon explication était complète merde car j'ai complètement oublié que vous auriez besoin d'incliner le vecteur haut par défaut en fonction du vecteur direct. – Goz