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

时间:2010-02-06 18:07:20

标签: java android opengl-es

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

有什么建议吗?

2 个答案:

答案 0 :(得分:20)

视频中提到的精灵方法测试的源代码可在此处获得:
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

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

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

这就是经常使用atlas纹理的原因。地图集纹理是单个绑定纹理对象,其中包含许多不同的图像。您可以使用不同的图像绘制精灵,而无需绑定到不同的纹理对象。你所做的就是让他们在地图集纹理中使用不同的纹理坐标。如果另一个渲染状态也是相同的,例如所需的混合功能,那么您可以将精灵绘制在一起以获得更好的性能。

答案 1 :(得分:7)

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

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