用于在2D OpenGL(Android)中设置动画的纹理

用于在2D OpenGL(Android)中设置动画的纹理,android,opengl-es,textures,Android,Opengl Es,Textures,我一直在寻找答案,但没有找到任何具体的答案 我想知道这两个例子中哪一个与速度和性能更相关。提前谢谢 我正在用2D制作一个OpenGLES1.0Android游戏。为了给角色设置动画,我使用了不同的纹理。对于纹理,我有两种可能性: 第一种方法是将每个纹理置于int数组中,并根据帧更改选择的纹理,方法如下: gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[actual_id]); 另一方面,我们可以拥有一个包含所有图像的“大”纹理,只需修改纹理坐标即可。在

我一直在寻找答案,但没有找到任何具体的答案

我想知道这两个例子中哪一个与速度和性能更相关。提前谢谢

我正在用2D制作一个OpenGLES1.0Android游戏。为了给角色设置动画,我使用了不同的纹理。对于纹理,我有两种可能性:

第一种方法是将每个纹理置于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)
};
(使用2x2框),这些坐标应围绕纹理移动

我想知道哪一个可能是最快的。还有,如果有第三种最好的方式,我很想知道


谢谢你抽出时间。如果我必须详细回答这个问题,请问我。

我认为这个问题没有一般性的答案,因为它取决于其他一些事情

我想除了要画的人物之外,你还有很多其他的东西要画。假设您有一个类似以下内容的游戏循环:

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()
  }
  ...
}
在这种情况下,无论如何都必须更改为角色纹理。第一种方法是更好的解决方案,因为较小的纹理需要较少的纹理内存

但如果您的循环如下所示:

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()
  }
  ...
}
while(游戏未完成){
changeToTerrainTexture()
drawTerrain()
changeToCharacterTexture()
对于(int i=0;i
在这种情况下,您可以从第二种方式中获益,因为您可以在不同的动画状态下显示多个角色,而无需更改纹理


我不知道OpenGl ES 1.0是否有真正的替代方案。使用ES 2.0,您可以选择对多个动画状态使用一个纹理(如第二种方法),并计算着色器中的纹理坐标偏移(因此您不需要多个纹理坐标阵列)。

您好,欢迎光临。您可能想知道,像这样的“偏好”问题通常被认为是不合适的(请参阅)。话虽如此,您可能希望选择一个您最感兴趣的标准。我不相信一种方法比另一种“更好”(一种可能更快,另一种可能使用更少的内存),这很容易从一种设备改变到另一种设备。如果你能选择一个重要的标准,并将你的问题重新表述为只问那些问题,即哪种方法使用更少的内存,那么它可能更合适。谢谢你的快速回答。我想知道哪一个比使用内存更快。我要修改这个问题,谢谢你的建议!所以,如果我们有几个角色,但每个角色都有自己的纹理,第一个选项会更好吗?谢谢你的支持!是的,如果您需要切换每个角色的纹理,您将无法从#2中获得真正的好处