我正在为游戏编写 DirectX 11 叠加层。创建纹理非常简单,而且我对 C/C++ 有很好的了解。
我遇到的问题是在我的测试窗口中,我可以打印纹理,但是一旦我改变相机角度,纹理就会随之移动。这就是大多数人想要的。
我想知道的是,无论相机是否移动,如何打印 2D 内容以始终显示在屏幕上?
最佳答案
基本上,因为您使用 dx11,所以您使用着色器来渲染您的元素。
因此标准 3d 对象通常遵循以下准则:
- 使用 3 种变换:世界(位置对象)、 View (在相机空间中变换)、投影(在屏幕空间中变换)。
在您的顶点着色器中,您将所有这些相乘以从 3d 转换为 2d。
由于现在您想要的是在 2d 中显示您的元素(非相对于相机),您可以轻松创建一个不考虑 View /投影的新着色器,因此您只需不要在顶点着色器中使用这些矩阵. (您仍然可以使用 world 进行 2d 转换)。
这几乎是最简单的方法,如果您需要像素精确的 2d 元素,则需要创建一个广告牌变换/着色器。基本上你有你的渲染目标分辨率,标准渲染空间是 -1 -> 1,所以你修改缩放/平移以在这两个空间之间进行转换。
渲染叠加层时,还要确保完全禁用深度。
如果您需要 sample ,请告诉我,我会尽快制作,但应该很简单。
关于matrix - DirectX 11 覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17753311/