2017-04-17 104 views
1

所以,我想开始制作游戏引擎,并且我意识到我必须同时绘制3D对象和GUI(立即模式)。我可以在DirectX中同时使用正投影和透视投影矩阵吗?我怎么能够?

3D对象将使用透视投影矩阵,并且随着GUI在2D空间中,我将不得不使用正交投影矩阵。

那么我该如何执行,请任何人指导我。我不是专业的图形程序员之一。

另外我使用的是DirectX 11,所以保持它的方式。

谢谢我先进。

+0

您通常一次只使用一个投影矩阵,但您可以使用不同的矩阵为同一个渲染目标绘制多个渲染通道。由于您是DirectX 11的新手,您应该查看[DirectX Tool Kit](https://github.com/Microsoft/DirectXTK/wiki/Getting-Started)。 –

回答

0

为了说明我的答案,当我说“同时绘制”时,我的意思是所有绘图都是通过一次调用ID3D11DeviceContext::Draw(或DrawIndexed/DrawAuto/etc)进行的。你可能意味着不同的东西。

您不需要要求可以同时绘制具有正投影和透视投影的物体,但这不是很常用。

通常投影矩阵通过着色器常量(或经常通过拼接世界,视图和投影矩阵)提供给顶点着色器。当您绘制透视对象时,您将绑定一组常量,绘制正交对象时,您将设置不同的常量。通常,不同的着色器被用来渲染透视图和正交对象,因为它们通常具有完全不同的属性(例如照明等)。

可能同时绘制两种不同类型的对象,有几种方法可以实现这一点。一种简单的方法是将两个投影矩阵提供给顶点着色器,并且有一个额外的顶点流决定使用哪个投影矩阵。

在某些边缘情况下,您可能会从这种类型的批处理中获得一些小的性能优势。我不建议你这样做。让你的生活更轻松,并使用独立的绘画调用正投影和透视对象。