matrix - DirectX 11 覆盖

标签 matrix directx 2d overlay directx-11

我正在为游戏编写 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/

相关文章:

c++ - 如何在二维数组中找到最大的数字

c++ - 如何以优雅的方式使用 OpenCV、C++ 检索偶数/奇数索引中的值?

winapi - 为什么不使用 GDI 用数组中的 RGB 数据重复填充窗口?

java - 如何在绘画时改变颜色(图)

Java平滑2D矩形碰撞?

r - 如果矩阵包含任何NA,如何返回TRUE?

python - 如何使用 numpy.genfromtxt 将下三角矩阵读入 numpy 数组?

graphics - block 压缩图像如何始终具有 4 倍数的第一个 mip 级别?

C# 使用 SlimDX 捕获全屏游戏

c - C 中的二维数组,t+= tab[i][j] 是什么意思?