我正在使用 DirectX 9 用 C++ 开发一款游戏。它是 3D 的,但我想要一个 2D 叠加层。我听说我可以使用 D3DXMatrixOrthoLH,但我对如何使用它感到非常困惑。我更熟悉 OpenGL,我可以通过启动视图来简单地在 3D 和 2D 之间切换。如果有一个关于如何使用 DirectX 9 执行此操作的示例就太好了!
非常感谢!
您可以使用 D3DX9 库中的
ID3DXSprite
类为 HUD 绘制 2D 纹理。
您可以使用恒等变换并使用归一化坐标(-1,-1 到 1,1)进行绘制,并关闭深度测试,但大多数人发现定位元素不太直观。相反,他们创建了一个简单的正交投影变换,将标准化坐标映射到更自然的东西,例如像素(0,0 到宽度,高度)。如果您使用左手视图坐标,则可以使用
D3DXMatrixOrthoOffCenterLH
;如果您使用右手视图坐标,则可以使用 D3DXMatrixOrthoOffCenterRH
(这对于 2D 绘图来说并不重要,但使其与 3D 绘图一致不会造成混乱) ).
为什么要使用已有十多年历史的传统 DirectX 9?如果您使用 Direct3D 11,则可以使用 DirectX Tool Kit 和
类来绘制 HUD。 DirectX SDK 已弃用,D3DX 库已弃用,D3DXMath 已弃用,并且 Windows 8 或更高版本不支持 DirectX 9 调试。请参阅 Microsoft LearnSpriteBatch
更新:如果您确实使用旧版 D3DX9,使用/重新分发它的最佳方式是通过 Microsoft.DXSDK.D3DX。请参阅此博文。
感谢大家的帮助。我决定放弃 DirectX,回到我更熟悉的旧 OpenGL。