如何使用 DirectX 9 渲染 2D 叠加
How to use render a 2D overlay with DirectX 9
所以我有一个游戏,我正在C++DirectX 9。它是 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 工具包和
SpriteBatch
类来绘制 HUD。DirectX SDK 已弃用,D3DX 库已弃用,D3DXMath 已弃用,并且 Windows 8 或更高版本不支持 DirectX 9 的调试。请参阅 MSDN
感谢所有的帮助。我决定放弃DirectX,回到我更熟悉的老式OpenGL。
相关文章:
- 2D数组来自文本输入,中间有空格
- 将值指定给向量(2D)的向量中的某个位置
- 如何使用用户输入在C++中正确填充2D数组
- 如何在C++中检查2D数组中负值的输入验证
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- 四边形的 2D 旋转
- 打印第二列时的2d字符矢量打印空间
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在C++函数中声明静态 2D 数组?
- 我是 C++ 的初学者,我想知道如何在 2D 矢量中获取重复值
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- opengl glBegin(GL_LINES) 和 glBegin(GL_POINT) 在 2D 中不可视化点矢量
- 在C++中迭代 2D 容器的最干净方法
- 如何引用 2D 指针?
- 如何在 C++ 中使用它的构造函数初始化 unique_ptrs 的 2D 向量?
- C++动态安全 2D 交错阵列
- 如何在C++或OpenCV子矩阵中的2D子向量上使用OpenACC?
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 如何使用 DirectX 9 渲染 2D 叠加