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