这个问题困扰我一整晚,最终放弃了,希望能得到一些帮助。基本上,在相机更新后,从视图矩阵中计算俯仰角和偏航角非常简单:
所以我的问题是:必须有一种类似于代码末尾获取俯仰角和偏航角的方式来获取弧度值。我已经尝试了几十种看起来很有道理的算法,但没有一个能得到期望的结果。我意识到许多开发人员不跟踪这些值,但我正在编写一些重新居中的例程,并基于这些值设置剪裁,手动跟踪在将混合旋转应用于视图矩阵时会失效。那么,有没有人知道从视图矩阵中获取滚动角的公式(或度数,我不在乎)?
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 );
所以我的问题是:必须有一种类似于代码末尾获取俯仰角和偏航角的方式来获取弧度值。我已经尝试了几十种看起来很有道理的算法,但没有一个能得到期望的结果。我意识到许多开发人员不跟踪这些值,但我正在编写一些重新居中的例程,并基于这些值设置剪裁,手动跟踪在将混合旋转应用于视图矩阵时会失效。那么,有没有人知道从视图矩阵中获取滚动角的公式(或度数,我不在乎)?