2010-02-06 172 views
14

我看到這個谷歌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

回答

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紋理命令,每個精靈都必須調用一次。

這就是經常使用地圖集紋理的原因。一個地圖集紋理是一個單一的綁定紋理對象,它有許多不同的圖像。你可以用不同的圖像繪製精靈,而不必綁定到不同的紋理對象。你所要做的就是讓它們在紋理貼圖中使用不同的紋理座標。如果其他渲染狀態也是相同的,例如所需的混合功能,那麼您可以將精靈畫在一起以獲得更好的性能。

+2

現在鏈接似乎被破壞了,但項目仍然存在,文件可以通過svn'browse'瀏覽。 – mlvljr 2012-02-02 15:12:28

+0

@mlvjr我編輯了帖子並修復了鏈接:只需刪除/ trunk /部分。 – DavidDraughn 2012-10-09 02:56:11