未安装 SDK 的 DirectX 9 - 如何转换 D3DMATRIX?

问题描述 投票:0回答:1

我正在尝试遵循 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。

有人可以帮忙吗?

windows matrix sdk translation directx-9
1个回答
0
投票

SetTransform()

结构只是一个包含 16 个浮点数的行优先数组。

D3DMATRIX
类派生自
D3DXMATRIX
结构,并向其添加一些方法。
使用 

DirectXMath

时,您只需将 D3DMATRIX 投射到它即可。

XMFLOAT4X4

有关旧版 D3DXMath 和 DirectXMath 之间等效项的完整列表,请参阅 
Microsoft Learn:使用 D3DXMath

如果您是第一次使用 DirectXMath,我强烈建议 (a) 您阅读
程序员指南

并 (b) 考虑使用 SimpleMath DirectXMath 的 C++ 包装器。

如果坚持使用 Direct3D 9,则根本不要使用旧版 DirectX SDK,而是查看 D3DX9 的
NuGet

包。有关 D3DX 现代替代方案的完整列表,请参阅此博客文章

© www.soinside.com 2019 - 2024. All rights reserved.