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

2022-09-04 00:41:33

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

有什么建议吗?


答案 1

视频中提到的 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

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

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

这就是经常使用图集纹理的原因。图集纹理是单个绑定纹理对象,其中包含许多不同的图像。您可以通过这种方式使用不同的图像绘制子画面,而不必绑定到不同的纹理对象。您所要做的就是让他们在图集纹理中使用不同的纹理坐标。如果其他渲染状态也相同(例如所需的混合函数),则可以将子画面绘制在一起以获得更好的性能。


答案 2

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

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


推荐