这是我一直在寻找到了一段时间,但我还没有找到任何具体信息,或者很好的例子。我有,比方说,一帮未连接的对象(三角形例如带)。是什么使这些的有效途径?

我听说过把若干个对象在一个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

在一般情况下,要么必须插入基于原始带材长度的两个或三个退化三角形,使三角形绕组仍然是正确的。

scroll top