我可以在DirectX中同时使用正交投影和透视投影矩阵。我怎么能够?

时间:2017-04-17 11:56:56

标签: matrix directx projection perspective orthographic

所以,我想开始制作一个游戏引擎,我意识到我必须同时绘制3D对象和GUI(立即模式)。

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

那么我怎么能实现这一点,请任何人指导我。我不是专业的图形程序员之一。

我也在使用DirectX 11,所以保持这种方式。

谢谢我的进步。

1 个答案:

答案 0 :(得分:0)

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

您不需要 来同时绘制具有正交投影和透视投影的对象,而且这种做法并不常见。

通常,投影矩阵通过着色器常量(或经常通过World,View和Projection矩阵的串联)提供给顶点着色器。当您绘制透视对象时,您将绑定一组常量,在绘制正交对象时,您可以设置不同的常量。通常,不同的着色器用于渲染透视和正交对象,因为它们通常具有完全不同的属性(例如,照明等)。

可以同时绘制两种不同类型的对象,有几种方法可以实现这一点。一种直接的方法是将两个投影矩阵提供给顶点着色器,并具有一个额外的顶点流,用于确定要使用的投影矩阵。

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