我正在为一款游戏编写DirectX 11叠加层。创建纹理非常简单,我对C/C++有很好的了解。我遇到的问题是,在我的测试窗口中,我可以打印纹理,但是一旦我改变相机角度,纹理就会随之移动。这正是大多数人想要的。我想知道的是如何在2D中打印某些内容,无论相机是否移动,它始终出现在屏幕上?
基本上,由于您使用dx11,您需要使用着色器来渲染元素。因此,标准的3D对象通常遵循以下准则: -使用3个变换:世界(定位物体)、视图(相机空间中的变换)、投影(屏幕空间中的变换)。在顶点着色器中,您将所有这些乘起来以从3D转换为2D。现在,您想要的是在2D中显示元素(与相机无关),因此可以轻松创建一个新的着色器,该着色器不考虑视图/投影,因此您在顶点着色器中不使用这些矩阵(仍然可以使用世界矩阵进行2D转换)。如果您需要像素精确的2D元素,则需要创建广告牌变换/着色器。基本上,您有您的渲染目标分辨率,而标准渲染空间为-1-> 1,因此您修改比例/平移以在这两个空间之间进行转换。当您渲染叠加时,还要确保完全禁用深度。如果您需要示例,请告诉我,我会快速制作一个,但它应该很简单。