代码之家  ›  专栏  ›  技术社区  ›  Jayesh

OpenGL ES中的高效绘图方法

  •  11
  • Jayesh  · 技术社区  · 14 年前

    在我的应用程序中,我通过OpenGLESAPI绘制了很多多维数据集。所有的立方体都有相同的尺寸,只是它们在空间中的坐标不同。我可以想出两种方法来画它们,但我不确定哪种方法最有效。我不是OpenGL专家,所以我决定在这里提问。

    方法1,这就是我现在使用的方法:因为所有的多维数据集都具有相同的维度,所以我只计算一次顶点缓冲区、索引缓冲区、普通缓冲区和颜色缓冲区。在场景刷新期间,我浏览了所有的多维数据集,对同一组缓冲区执行bufferdata(),然后使用drawElements()调用绘制多维数据集的三角形网格。因为每个立方体都在不同的位置,所以在绘制之前,我会转换mvmatrix。为每个多维数据集执行bufferData()和drawElements()。在这个方法中,我可能通过不每次计算缓冲区来节省大量的内存。但我正在进行很多drawElements()调用。

    方法2是:将所有立方体视为分布在整个场景中的一组多边形。计算每个多边形的顶点、索引、颜色、普通缓冲区(实际上是多边形中的三角形),并在对bufferdata()的单个调用中将它们推送到图形卡内存中。然后用对drawElements()的单个调用绘制它们。这种方法的优点是,我只执行一个bindbuffer和drawElements调用。缺点是,我使用大量内存来创建缓冲区。

    我对OpenGL的经验是有限的,不知道从性能的角度看,上面哪种方法更好。

    我在WebGL应用程序中使用它,但这是一个普通的OpenGL ES问题。

    3 回复  |  直到 14 年前
        1
  •  14
  •   Jayesh    14 年前
        3
  •  -1
  •   cement    14 年前

    1. gl.glGenBuffers gl.glBindBuffer

    1. gl.glTranslatef(position.x, position.y, position.z

      gl.glDrawArrays

      gl.glTranslatef(-position.x, -position.y, -position.z)