我目前正在创建一个视频游戏 + 引擎。我在 RasterTek 发现了一些关于 DirectX 11 编程的非常棒的教程。不幸的是,他们使用了贬值的 DirectX SDK,而我正在使用 VS 2013 和 Windows SDK 中包含的新 DirectX SDK。
我正在转换代码以使用 Windows SDK,但我在教程 4 中遇到了一些问题(是的,我将转换所有 49 个教程,并且可能会有更多问题)
从使用 D3DXMath 开始,我被告知应将 D3DXVECTOR3 转换为 XMFLOAT3。然后我尝试在 D3DXVec3TransformCoord 中使用这些 XMFLOAT3 ,它已转换为XMVector3TransformCoord。
例子:
XMFLOAT3 up, position, lookAt;
// Setup the vector that points upwards.
up.x = 0.0f
up.y = 1.0f
up.z = 0.0f
// Setup the position of the camera in the world.
position.x = m_positionX;
position.y = m_positionY;
position.z = m_positionZ;
// Setup where the camera is looking by default.
lookAt.x = 0.0f;
lookAt.y = 0.0f;
lookAt.z = 1.0f;
// Transform the lookAt and up vector by the rotation matrix so the view is correctly rotated at the origin.
XMVector3TransformCoord(lookAt, rotationMatrix);
XMVector3TransformCoord(up, rotationMatrix);
我收到一个错误:
IntelliSense:不存在从“DirectX::XMFLOAT3”到“DirectX::XMVECTOR”的合适的用户定义转换
我发现我可以使用XMLoadFloat3 TypeCast lookAt 和 up :
XMVector3TransformCoord(XMLoadFloat3(&lookAt), rotationMatrix);
XMVector3TransformCoord(XMLoadFloat3(&up), rotationMatrix);
我应该这样做吗,和/或这是最好的方法吗?
这样做之后,我尝试:
// Translate the rotated camera position to the location of the viewer.
lookAt = position + lookAt;
并得到错误:
IntelliSense:没有操作符“+”匹配这些操作数操作数类型是:DirectX::XMFLOAT3 + DirectX::XMFLOAT3
我能够在 D3DXVECTOR3 上使用 + 运算符,但现在不能使用 XMFLOAT3?我如何将这些加在一起?