【问题标题】:How to deal with multiple objects in OpenGL ES 2如何在 OpenGL ES 2 中处理多个对象
【发布时间】:2017-01-26 23:52:38
【问题描述】:

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

Google 通过创建 TriangleRectangle 类来提供 example for drawing shapes(三角形、矩形),它们基本上完成了可视化这些对象所需的所有 opengl 内容。

但是,如果您有多个三角形,您应该怎么做?如果您有对象,由数百个不同颜色、不同大小和位置的三角形组成,该怎么办?我在opengl es中找不到任何处理复杂场景的好教程。


我的方法:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 2014-09-18
      • 2013-01-06
      相关资源
      最近更新 更多