我有一个关于我的Direct3D11应用程序的问题,已经尝试解决几个小时了。问题在于这个方法:
void CameraClass::Render()
{
XMFLOAT3 sUp, sLookAt, sRotationInRadians;
sUp.x = 0.0f;
sUp.y = 1.0f;
sUp.z = 0.0f;
sLookAt.x = 0.0f;
sLookAt.y = 0.0f;
sLookAt.z = 1.0f;
sRotationInRadians.x = m_Rotation.x * 0.0174532925f;
sRotationInRadians.y = m_Rotation.y * 0.0174532925f;
sRotationInRadians.z = m_Rotation.z * 0.0174532925f;
XMVECTOR vecLookAt = XMVectorSet( sLookAt.x, sLookAt.y, sLookAt.z, 0.0f );
XMVECTOR vecUp = XMVectorSet( sUp.x, sUp.y, sUp.z, 0.0f );
XMVECTOR vecPosition = XMVectorSet( m_Position.x , m_Position.y, m_Position.z, 0.0f );
XMMATRIX RotationMatrix( XMMatrixRotationRollPitchYaw( sRotationInRadians.x, sRotationInRadians.y, sRotationInRadians.z ));
vecLookAt = XMVector3TransformCoord( vecLookAt, RotationMatrix );
vecUp = XMVector3TransformCoord( vecUp, RotationMatrix );
vecLookAt += vecPosition;
m_ViewMatrix = XMMatrixLookAtLH( vecPosition, vecLookAt, vecUp );
}
直到它到达那一行,一切都很好:
m_ViewMatrix = XMMatrixLookAtLH( vecPosition, vecLookAt, vecUp );
某种情况下会导致应用程序崩溃(更准确地说,切换为未响应状态)。
以下是实际调用的样子:
XMMATRIX ViewMatrix;
XMMATRIX ProjectionMatrix;
XMMATRIX WorldMatrix;
m_D3D->BeginScene( 0.0f, 0.0f, 0.0f, 1.0f );
m_Camera->Render();
m_D3D->GetWorldMatrix( WorldMatrix );
m_D3D->GetProjectionMatrix( ProjectionMatrix );
提前声明,Vertex和Pixel着色器编译得很好,所以这不是问题。很可能我在xnamath上做错了什么(我完全是新手),但我不知道到底是什么。谢谢您提前帮助。如果需要的话,我会提供更多信息。
编辑@1:经过几十次修改,我设法让投影矩阵和世界矩阵正常工作了。但我仍然无法设置视图矩阵。我改变了代码,使其与实际代码匹配,并摆脱了不重要的部分。
编辑@2:最近有新发现:XMMatrixLookAtLH函数没有问题,因为我决定将结果保存到局部变量中,它可以工作,但如果我想将结果矩阵分配给类成员,则会崩溃。这肯定很有趣。