如何在OpenGL ES 2中处理多个对象

时间:2013-12-14 08:30:48

标签: android opengl-es opengl-es-2.0

OpenGL ES 2有很多关于如何可视化单个三角形或矩形的例子。

Google通过创建TriangleRectangle类提供example for drawing shapes(三角形,矩形),它基本上可以显示所有可视化这些对象所需的opengl-stuff。

但如果你有一个以上的三角形,你应该怎么做?如果您有物体,由数百个不同颜色,不同大小和位置的三角形组成,该怎么办?我找不到任何关于在opengl中处理复杂场景的好教程。


我的方法:

所以我试了一下。首先,我轻轻地将Triangle - 类更改为更动态的类(构造函数现在获取三角形的位置和颜色)。基本上这对于绘制复杂的场景来说是“足够的”。每个对象都包含数百个这些Triangle - 类,我将它们分别渲染出来。但是这会消耗很多计算能力,我认为渲染过程中的大多数步骤都是多余的。

所以我尝试将三角形“分组”为不同的类别。现在每个对象都有他唯一的顶点缓冲区,并将每个三角形一次放入其中。现在性能比以前好多了(每个三角形都有自己的缓冲区),但我仍然认为,这不是正确的方法。

互联网上是否有任何好的例子,有人画的不仅仅是简单的三角形,或者你知道我从哪里可以获得这些信息吗?我非常喜欢OpenGL,但由于缺乏教程(适用于Android中的OpenGL ES 2),初学者很难。

1 个答案:

答案 0 :(得分:0)

用于渲染的(三角形)网格的标准表示是使用包含网格中所有顶点的顶点数组,以及连接存储连通性(三角形)的索引数组。你明确地希望每个对象最多只能进行一次绘制调用(但你甚至可以合并多个对象)。

交错属性数组是最有效的变体wrt。缓存效率,因此VA每个对象的一个​​Buffer对象就足够了。您甚至可以将多个对象组合到一个缓冲区对象中,即使您不能对两者使用单个绘制调用。

由于GLES可能仅限于16位索引,因此必须将大型模型拆分为多个“补丁”。