2012-07-20 119 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