我正在尝试遵循 DirectX 教程,该教程正在使用 DX9。我没有安装较旧的 SDK(2010 年 6 月),并且希望保持这种状态。我能找到的所有简介都说“现在一切都在 Windows SDK 中”。
我已经运行了一个基本的应用程序,通过提供预先转换的顶点在屏幕上显示一个三角形。现在我想开始进行从模型到世界空间(以及其他管道位)的转换。
问题是,本教程使用了 D3DXMATRIX,而它在新的 SDK 中已被弃用,所以我没有它的头文件。
代码调用
SetTransform(D3DTS_WORLD, &matTranslate)
,它实际上需要一个D3DMATRIX。我可以声明一个 D3DMATRIX,没问题。问题是本教程使用了 D3DMatrixTranslation()
,它也在旧版 SDK 中。
令人恼火的是,每当我搜索“D3DMATRIX 翻译”时,它总是会出现 D3DXMATRIX - 我一生都找不到 D3DMATRIX 的任何内容。
我已经扫描了
directxmath.h
,建议的替换,但这只涉及 XMMATRIX(并且由于某种原因 Visual Studio 说 XMMatrixTranslation
未定义)。我还扫描了定义 d3d9.h
的位置,以及定义 D3DMatrix 的 SetTransform()
...但我找不到任何有关平移、缩放和旋转的信息。DirectX 的 Windows SDK 内容中是否有可以转换 D3DMATRIX 的函数?
使用 XMMATRIX 的 DX10 教程的链接就可以了,如果有人有的话 - 只要它从头开始 - 但由于 D3DMATRIX 和
d3d9types.h
存在于 Windows SDK 中,我更愿意找到“缺失”链接'并知道如何操作 D3DMATRIX。
有人可以帮忙吗?
SetTransform()
结构只是一个包含 16 个浮点数的行优先数组。
D3DMATRIX
类派生自 D3DXMATRIX
结构,并向其添加一些方法。使用 DirectXMath 时,您只需将 D3DMATRIX
投射到它即可。
XMFLOAT4X4
有关旧版 D3DXMath 和 DirectXMath 之间等效项的完整列表,请参阅Microsoft Learn:使用 D3DXMath如果您是第一次使用 DirectXMath,我强烈建议 (a) 您阅读
程序员指南如果坚持使用 Direct3D 9,则根本不要使用旧版 DirectX SDK,而是查看 D3DX9 的并 (b) 考虑使用 SimpleMath DirectXMath 的 C++ 包装器。
NuGet包。有关 D3DX 现代替代方案的完整列表,请参阅此博客文章。