【问题标题】:Array of texture identifiers to OpenGL DrawElements/DrawArrays?OpenGL DrawElements / DrawArrays的纹理标识符数组?
【发布时间】:2011-06-02 13:02:54
【问题描述】:

这样的 OpenGL ES 序列可用于一次渲染多个对象:

glVertexPointer(...params..., vertex_Array );
glTexCoordPointer(...params..., texture_Coordinates_Array );
glBindTexture(...params..., one_single_texture_ID );
glDrawArrays( GL_TRIANGLES, number_Triangles );

这里的顶点数组和纹理坐标数组可以引用无数的图元,可以一步步描述给OpenGL。

但是所有这些图元的纹理坐标都必须引用 glBindTexture 命令中的单一纹理吗?

传入一个纹理标识符数组会很好:

glBindTexture(...params..., texture_identifier_array[] );

这里,对于前面调用中描述的每个原始形状,数组中都会有一个纹理 ID。因此,每个形状的纹理坐标都与“texture_identifier_array[]”中标识的纹理有关。

我可以看到一种选择是将所有感兴趣的纹理放置在一个大纹理中,该纹理可以在绘图调用中作为单个实体进行引用。在我的平台上,这会创建一个包含可能导致内存问题的大位图的中间步骤。

最好能够将一组纹理标识符传递给 OpenGL ES 绘图调用。这个可以吗?

【问题讨论】:

    标签: opengl-es


    【解决方案1】:

    不,这是不可能的。您也许可以通过使用纹理数组并为顶点提供纹理索引来模拟它。然后在片段着色器中,您可以使用索引查找正确的纹理,但我怀疑 ES 是否支持纹理数组。即便如此,我也不知道这是否真的有效。或者如果纹理图集解决方案效率更高。

    如果您想渲染同一几何体的多个版本(我对此表示怀疑),您正在寻找实例化渲染,我认为 ES 设备也不支持。

    所以目前要走的路是纹理图集(多个纹理合二为一)或只是多次调用glDrawArrays

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多