所以,我想开始制作一个游戏引擎,我意识到我必须同时绘制3D对象和GUI(立即模式)。
3D对象将使用透视投影矩阵,因为GUI在2D空间中,我将不得不使用正交投影矩阵。
那么我怎么能实现这一点,请任何人指导我。我不是专业的图形程序员之一。
我也在使用DirectX 11,所以保持这种方式。
谢谢我的进步。
答案 0 :(得分:0)
为了说明我的答案,当我说"同时画画"时,我指的是通过一次调用ID3D11DeviceContext::Draw(或DrawIndexed / DrawAuto / etc)进行的所有绘图。你可能意味着不同的东西。
您不需要 来同时绘制具有正交投影和透视投影的对象,而且这种做法并不常见。
通常,投影矩阵通过着色器常量(或经常通过World,View和Projection矩阵的串联)提供给顶点着色器。当您绘制透视对象时,您将绑定一组常量,在绘制正交对象时,您可以设置不同的常量。通常,不同的着色器用于渲染透视和正交对象,因为它们通常具有完全不同的属性(例如,照明等)。
你可以同时绘制两种不同类型的对象,有几种方法可以实现这一点。一种直接的方法是将两个投影矩阵提供给顶点着色器,并具有一个额外的顶点流,用于确定要使用的投影矩阵。
在某些边缘情况下,您可能会从这种批处理中获得一些小的性能优势。我不建议你那样做。让您的生活更轻松,并为正交和透视对象使用单独的绘制调用。