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