使用精灵表和OpenGL的2D精灵动画

时间:2012-01-31 15:35:12

标签: opengl animation 2d

我正在尝试使用OpenGL开发一个简单的2D格斗游戏,而且我仍然坚持使用角色动画。基本思想是让一个四边形由两个三角形组成,并且每帧左右改变这个四边形的纹理。我正在使用精灵表来存储帧,现在我正在尝试找到最方便的循环方式。顶点坐标和纹理坐标使用GL_STATIC_DRAW参数存储在GPU内存中的顶点缓冲区对象中。

第一个想法是在单个OpenGL纹理(SOIL)中使用外部库(例如glGenTextures(1, &texture);)加载精灵表,然后更改传递给顶点着色器的四边形的纹理坐标每一帧,所以如果动画是四帧长,我会将纹理的S坐标更改为0.00.250.50.75并返回{{ 1}}。但这意味着我必须经常更换我的VBO,而且我认为它可能非常昂贵。

另一个想法是使用0.0分配纹理数组,然后为每个数组positionm存储一个帧,并使用glGenTextures(nFrames, &textureArray[0]);应用不同的纹理,而不必更改我的VBO。但由于我不想将精灵表分成几个图像,我想不出用glBindTexture(GL_TEXTURE_2D, textureArray[currFrame]);等库来实现这一目的。

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

1 个答案:

答案 0 :(得分:1)

我认为我会像你先描述的那样做。更改纹理中的坐标以显示您感兴趣的部分。我不确定它会有多贵,但更改VBO(使用着色器)应该非常有效并且根本不昂贵。考虑到“优化后期”的规则,在以后的时间重做也是非常容易的。如果你是以一种设计良好的方式完成的。

但我确实认为改变纹理的S坐标比在几种不同纹理之间交换更快。

相关问题