【发布时间】:2015-06-14 21:54:04
【问题描述】:
我构建了一个 2D 图形引擎,并为它创建了一个批处理系统,因此,如果我有 1000 个具有相同纹理的精灵,我可以通过一次调用 openGl 来绘制它们。
这是通过将具有相同纹理的所有精灵的所有顶点放入单个 vbo 顶点数组来实现的。
不是“打印这些顶点,打印这些顶点,打印这些顶点”,而是“将所有顶点放在一起,打印”,只是为了非常清楚。 很简单,但现在我正在尝试在 3D 中实现同样的效果,但我遇到了一个大问题。
问题是我使用模型视图投影矩阵来放置和渲染我的模型,这是在 3D 空间中渲染模型的常用方法。
对于屏幕上的每个模型,我需要将 MVP 矩阵传递给着色器,以便我可以使用它来将每个顶点转换到正确的位置。
如果我要在着色器之外进行转换,它将由 cpu 执行,我不是一个好主意,原因很明显。
但问题出在那儿。我需要将矩阵传递给着色器,但是对于每个模型,矩阵都是不同的。
所以我不能像使用 2d 精灵那样做,因为更改着色器制服每次都需要绘制。
我希望我已经很清楚了,也许你有一个我没有的好主意,或者你已经遇到了同样的问题。我知道某处有一个解决方案,因为在像 Unity 这样的引擎中,您可以为多个模型使用相同的着色器,并且只需一次绘制调用就可以逃脱
【问题讨论】: