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

用OpenGL ES绘制纹理最简单的方法是什么?

  •  14
  • Adir  · 技术社区  · 16 年前

    我看到了这个Google IO会话: http://code.google.com/intl/iw/events/io/2009/sessions/WritingRealTimeGamesAndroid.html
    他说绘制纹理函数是最快的,VBO是第二快的。
    但我不知道如何使用它(绘制纹理方法或VBO方法)。

    有什么建议吗?

    2 回复  |  直到 15 年前
        1
  •  20
  •   DavidDraughn Szymon Jachim    13 年前

    视频中提到的sprite方法测试的源代码如下:
    http://code.google.com/p/apps-for-android/source/browse/#svn/trunk/SpriteMethodTest

    下面是使用VBO的示例:
    http://code.google.com/p/apps-for-android/source/browse/SpriteMethodTest/src/com/android/spritemethodtest/Grid.java#237

    下面是使用“绘制纹理”(draw texture)扩展的示例:
    http://code.google.com/p/apps-for-android/source/browse/SpriteMethodTest/src/com/android/spritemethodtest/GLSprite.java

    不过,有一点需要注意,绘制纹理扩展实际上并不是所有使用精灵的游戏中最快的。例如,许多游戏都有一组共享相同渲染状态的精灵。在这种情况下,将具有相同渲染状态的所有精灵放在同一缓冲区中并使用相同的绘制命令绘制它们会快得多。“绘制纹理”命令不允许这样做。使用“绘制纹理”命令,每个精灵必须调用一次。

    这就是经常使用atlas纹理的原因。atlas纹理是一个绑定纹理对象,其中包含许多不同的图像。这样就可以用不同的图像绘制精灵,而不必绑定到不同的纹理对象。你所做的就是让他们使用不同的纹理坐标到阿特拉斯纹理。如果其他渲染状态也相同,例如所需的混合函数,则可以将精灵绘制在一起以获得更好的性能。

        2
  •  7
  •   Patrick Kafka    16 年前

    下面是一些很棒的Android OpenGL ES工作示例。

    http://code.google.com/p/android-gl/