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

问题描述:

我看到这个谷歌IO会话:http://code.google.com/intl/iw/events/io/2009/sessions/WritingRealTimeGamesAndroid.html
他说,draw_texture函数是最快的,VBO是第二快。
但我不明白如何使用它(draw_texture方法或VBO方式)。用OpenGL ES绘制纹理最简单的方法是什么?

有什么建议吗?

+1

国家你以后,你尝试过什么...... draw_texture是相当不错的在说明书中解释,维也纳组织有大量的例子在那里。尽管draw_texture和VBO不是一回事。 绘制纹理只是一个纹理。 VBOs存储顶点数据,通常用于绘制三角形。您可以使用VBOs绘制一个屏幕对齐的四边形绘制一个像素精确的纹理,但draw_texture(如果可用的话做得更好)...那么,您希望**绘制什么? – Bahbar 2010-02-06 20:46:33

+0

可以说我想画一个texutre,我可以调整大小(宽度和高度),也许旋转 – Adir 2010-02-07 14:29:09

+1

draw_texture不允许纹理转换,如旋转。为此,你将不得不使用维也纳国际组织。 – 2010-05-24 17:01:23

在视频中提到的子画面的方法测试的源代码是可用这里:
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纹理命令,每个精灵都必须调用一次。

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

+2

现在链接似乎被破坏了,但项目仍然存在,文件可以通过svn'browse'浏览。 – mlvljr 2012-02-02 15:12:28

+0

@mlvjr我编辑了帖子并修复了链接:只需删除/ trunk /部分。 – DavidDraughn 2012-10-09 02:56:11

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

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