这是我一直在寻找的东西,但我还没有找到任何具体的信息或好的例子.比方说,我有一堆未连接的对象(例如三角形条).渲染这些的有效方法是什么?
我听说过在一个VBO中放置几个对象来减少openGL调用,但是没有看到如何做到这一点的正确例子.我也看过与这个想法相矛盾的帖子.所以现在,我大多只是困惑.
首先,你应该一直使用VBO.适用于小型和大型物体.
然后,第二个问题是"如何将几个单独的对象组合成一个大对象?" - 这样可以减少必须进行的OpenGL调用次数.通常,可以组合使用相同纹理,材质设置和着色器的对象.例如,如果你周围有大量相同的板条箱,将它们组合成几个较大的"板条箱堆"可能是有意义的.
如果一个对象是一个三角形列表,那么组合很容易 - 只需从源列表中创建一个大三角形列表.如果一个对象是一个三角形条带,那么你必须使用"退化三角形"来连接条带(如果它不能表示为单个条带,这对于单个对象也是非常有用的优化).
"简并三角形"是具有两个或三个相同顶点索引的三角形.图形硬件可以识别它们并快速跳过它们.
因此,如果您有两个带有一个三角形的条带,总共有六个顶点.
条带的原始三角形索引将是:
1) 0, 1, 2 2) 0, 1, 2
现在将所有顶点连接在一起,最终得到6个顶点.
1) 0, 1, 2 (unchanged) 2) 3, 4, 5
到目前为止,您有一个顶点数组,但仍有两个单独的条带.必须通过插入退化三角形来加入它们:
1) 0, 1, 2, 2, 2, 3, 4, 5
(我认为以上是正确的,但实际上并没有验证)
这个想法是这样的:使用上面的条带,图形卡将从这些顶点绘制三角形:
0, 1, 2 1, 2, 2 <- degenerate! won't be drawn 2, 2, 2 <- degenerate! won't be drawn 2, 2, 3 <- degenerate! won't be drawn 3, 4, 5
在一般情况下,您必须根据原始条带长度插入两个或三个退化三角形,以便三角形缠绕保持正确.