使用精灵图纸和OpenGL的2D精灵动画

使用精灵图纸和OpenGL的2D精灵动画,opengl,animation,2d,Opengl,Animation,2d,我正在尝试使用OpenGL开发一个简单的2D格斗游戏,我一直在研究角色动画。其基本思想是让一个四边形由两个三角形组成,并每隔一帧左右更改该四边形的纹理。我正在使用一个精灵表来存储帧,现在我正在尝试找到最方便的方法来循环使用它们。顶点坐标和纹理坐标使用GL\u STATIC\u DRAW参数存储在GPU内存中的顶点缓冲区对象中 第一个想法是在单个OpenGL纹理(glGenTextures(1,&texture);)中使用外部库(如SOIL)加载精灵表,然后每帧更改传递给顶点着色器的四元体的纹理坐

我正在尝试使用OpenGL开发一个简单的2D格斗游戏,我一直在研究角色动画。其基本思想是让一个四边形由两个三角形组成,并每隔一帧左右更改该四边形的纹理。我正在使用一个精灵表来存储帧,现在我正在尝试找到最方便的方法来循环使用它们。顶点坐标和纹理坐标使用
GL\u STATIC\u DRAW
参数存储在GPU内存中的顶点缓冲区对象中

第一个想法是在单个OpenGL纹理(
glGenTextures(1,&texture);
)中使用外部库(如
SOIL
)加载精灵表,然后每帧更改传递给顶点着色器的四元体的纹理坐标,这样,如果动画有四帧长,我将纹理的坐标更改为
0.0
0.25
0.5
0.75
,然后返回到
0.0
。但这意味着我必须经常更改VBO,我认为这可能会非常昂贵

另一个想法是使用
glGenTextures(nFrames,&textureArray[0])分配纹理数组然后为每个数组位置m存储单个帧,并使用
glBindTexture(GL_TEXTURE_2D,textureArray[currFrame])应用不同的纹理而不必更改我的VBO。但是,由于我不想将sprite表拆分为多个图像,因此我想不出任何方法来使用库(如
SOIL
)来实现这一点


在这种情况下,最方便的方式是什么?我没有提供任何代码,因为首先我想评估几种可能性。

我想我会按照您第一次描述的方法来做。更改纹理中的坐标以显示感兴趣的部分。我不确定这会有多贵,但更改VBO(使用着色器)应该非常有效,而且一点也不贵。考虑到“后期优化”的规则,在以后的时间重做也非常容易。如果你是以精心设计的方式完成的,那就是


但是我认为改变纹理的坐标比在几个不同的纹理之间切换要快。

我认为这也是最好的方法,我已经开始朝这个方向努力了。谢谢