【问题标题】:Rendering 10000+ dynamic cubes in opengl 2在opengl 2中渲染10000多个动态立方体
【发布时间】:2012-12-10 12:48:45
【问题描述】:

如何在 opengl 2 (JOGL) 中有效地绘制大量可移动的立方体?我是否必须构建一个包含所有立方体副本并在单个调用中绘制的巨大 VBO/VAO?或者为传递 MVP 矩阵的每个立方体实例调用 glDraw 以便能够移动特定立方体? 当然,立方体共享相同的纹理、顶点、规范等。 我需要在绘制 10000+ 时达到最佳性能,但有可能改变特定立方体的位置

【问题讨论】:

    标签: java opengl opengl-es-2.0 lwjgl jogl


    【解决方案1】:

    对所有立方体几何体、法线等使用单个 vbo。

    使用 glsl 着色器,该着色器使用来自属性 VBO 的数据转换立方体。 (glVertexAttribPointer 等)。

    【讨论】:

      【解决方案2】:

      如果你单独绘制每个立方体,你会看到一个非常高的批处理计数,这将非常糟糕。

      使用一个大的 VBO 将是最快的,但如果您需要大量更改几何形状,那就不好了。您可以将几何体分成几批(例如,做 1000 个/批)。

      也许将实例化或伪实例化作为另一种选择。 http://www.gamerendering.com/2008/10/21/instancing/

      【讨论】:

      • 我不确定 JOGL 2.0 是否支持 ARB_instanced_arrays 扩展
      • 据我了解,实例化仍然需要每个立方体 1 个绘制调用?
      • 没有实例化每个立方体没有 1 个绘制调用。 “此扩展提供了通过单个绘图调用渲染对象的多个实例的方法,以及一个“实例 ID”变量,顶点程序可以使用该变量来计算每个实例的值,通常是对象的变换。”
      猜你喜欢
      • 1970-01-01
      • 2018-09-27
      • 2014-05-21
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多