2012-07-20 155 views
0

我一直在尋找答案,但沒有找到任何具體的關於它。2D OpenGL動畫紋理(Android)

我想知道這兩個例子中的哪一個更好地與速度和性能相關。提前致謝!

我在2D中製作了一個openGL ES 1.0 Android遊戲。爲了使角色動畫我使用不同的紋理。我有兩個posibilities與紋理:

第一個是具有在一個int數組每個紋理和取決於在所述框架上與改變被選擇的一個:

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[actual_id]); 

在另一方面,我們可以有一個所有圖像的「大」紋理,並修改紋理座標。在這種情況下,而不是:

private float textures[] = { 
    // Mapping coordinates for the vertices 
    0.0f, 1.0f,  // top left  (V2) 
    0.0f, 0.0f,  // bottom left (V1) 
    1.0f, 1.0f,  // top right (V4) 
    1.0f, 0.0f  // bottom right (V3) 
}; 

(這將是一個在第一種情況),這將是:

private float textures[] = { 
    // Mapping coordinates for the vertices 
    0.0f, 0.5f,  // top left  (V2) 
    0.0f, 0.0f,  // bottom left (V1) 
    0.5f, 0.5f,  // top right (V4) 
    0.5f, 0.0f  // bottom right (V3) 
}; 

(使用2×2箱),而這些座標應圍繞紋理移動。

我想知道哪些可能是最快的。另外,如果有第三種我最想知道的方式。

謝謝你的時間。如果我必須詳細說明問題,請問我。

+0

你好,歡迎光臨。您可能想知道,像這樣的'偏好'問題通常被認爲是不合適的(參見[FAQ](http://stackoverflow.com/faq#dontask))。話雖如此,你可能想選擇一個你最感興趣的標準。我不相信一種方法比另一種更好(一種方法可能更快,另一種方法可能使用更少的內存),而且這種方法很容易從一臺設備變爲另一臺。如果您可以選擇一個重要標準並重新提出您的問題,只需要詢問*哪種方法使用較少的內存*,則可能更合適。 – Tim 2012-07-20 21:44:19

+0

感謝您的快速回答。我想知道哪一個比使用內存更快。我要修改這個問題,謝謝你的建議! – charlypu 2012-07-20 21:48:23

回答

0

我認爲這個問題沒有一般的答案,因爲它取決於其他一些東西。

我假設除了要繪製的角色外,還有很多其他物體。讓我們假設你有一個遊戲循環,看起來是這樣的:

while (gameNotFinished) { 
    changeToTerrainTexture() 
    drawTerrain() 
    changeToCharacterTexture() 
    drawCharacter() // the character you want to draw 
    changeToHouseTexture() 
    drawHouse() 
    ... 
} 

在這種情況下,你必須要變的字符質感。第一種方法是更好的解決方案,因爲較小的紋理需要較少的紋理內存。

但是,如果你的循環是這樣的:

while (gameNotFinished) { 
    changeToTerrainTexture() 
    drawTerrain() 
    changeToCharacterTexture() 
    for (int i = 0; i < characters.size(); i++) { 
    characters.get(i).draw() 
    } 
    ... 
} 

在這種情況下,你可以從第二條路獲利,因爲你可以在不改變紋理顯示不同的動畫狀態的多個字符。

我不知道OpenGl ES 1.0是否有任何真正的選擇。使用ES 2.0,您可以選擇使用一種紋理來製作多種動畫狀態(如第二種方法),並計算着色器中的紋理座標偏移量(因此不需要多個紋理座標陣列)。

+0

所以,如果我們有幾個角色,但每個人都有自己的紋理,第一個選項會很好? 感謝您的幫助! – charlypu 2012-07-20 22:27:58

+0

是的,如果你需要切換每個角色的紋理,你不會從#2中獲得真正的好處 – micha 2012-07-20 22:33:50