【问题标题】:render many textures with vbo using JOGL使用 JOGL 使用 vbo 渲染许多纹理
【发布时间】:2016-06-14 20:40:46
【问题描述】:

我有很多小图像,这些图像可以组合成一个大图像。 现在,我使用 VBO 来执行此操作,并且它是有效的。部分渲染函数是这样的:

for (int i = 0; i < mListTexData.size(); i++) {
    gl.glBindTexture(GL2.GL_TEXTURE_2D, mTexturesIDs.get(i));
    gl.glDrawArrays(GL2.GL_QUADS, i*4, 4);
}

我想知道是否有更方便的方法来做到这一点。 谢谢。

【问题讨论】:

  • 多少?它们的大小都一样吗?它们会被修改还是保持不变?
  • 数量不固定。可能有数百张图片。不,它们不是并且可能被其他图像替换。替换图片时要修改顶点。谢谢回复
  • 您只有相对较少的不同尺寸吗?
  • 是的。大多数图像的大小相同。
  • 然后你可以使用图集,一个大的纹理,里面有所有的小纹理。您可以对其进行子更新。或者您可以使用几个纹理数组,每个纹理数组对应不同的大小。或者你简单地继续做你已经在做的事情。 ps:GL_QUADS已弃用,使用普通GL_TRIANGLES

标签: jogl


【解决方案1】:

您有多种可能性:

  • 使用图集,一个大的纹理,里面有所有的小纹理,比如this。您当然可以更新它,即覆盖(部分)它。 优点:一种独特的确定纹理绑定 缺点:必须计算每个子图像的所有纹理坐标

  • 您可以使用几个纹理数组,每个数组对应不同的大小。然后,您将选择具有统一变量或顶点属性的正确图像。 优点:很少有纹理绑定。 缺点:如果必须删除纹理,则必须销毁 - 重新创建它(您可能希望创建具有硬编码长度的纹理数组)

  • 你只是继续做你已经在做的事情。 优点:最简单的方法。我强烈建议你这样开始。配置文件,找出这是否是瓶颈,如果是,请改进。 缺点:根据您的情况可能效率低下

Ps:GL_QUADS 已弃用,请使用普通的GL_TRIANGLES

【讨论】:

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