我的 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 );
事先,顶点和像素着色器编译得很好,所以这不是问题。很可能我在 xnamath 上做错了(我对它完全陌生),但我不知道这可能是什么。提前致谢。如果需要,我会提供更多信息。
编辑@1:通过数十项更改,我设法让投影和世界矩阵工作。虽然我仍然无法设置视图矩阵。我更改了代码,使其与实际代码匹配,并去掉了不重要的部分。
编辑@2:最后一分钟的突发新闻:XMMatrixLookAtLH 函数没有问题,因为我决定将结果保存到局部变量并且它可以工作,但是如果我想将结果矩阵分配给类成员,那么我会崩溃. 这当然很有趣。