使用精灵图纸和OpenGL的2D精灵动画
我正在尝试使用OpenGL开发一个简单的2D格斗游戏,我一直在研究角色动画。其基本思想是让一个四边形由两个三角形组成,并每隔一帧左右更改该四边形的纹理。我正在使用一个精灵表来存储帧,现在我正在尝试找到最方便的方法来循环使用它们。顶点坐标和纹理坐标使用使用精灵图纸和OpenGL的2D精灵动画,opengl,animation,2d,Opengl,Animation,2d,我正在尝试使用OpenGL开发一个简单的2D格斗游戏,我一直在研究角色动画。其基本思想是让一个四边形由两个三角形组成,并每隔一帧左右更改该四边形的纹理。我正在使用一个精灵表来存储帧,现在我正在尝试找到最方便的方法来循环使用它们。顶点坐标和纹理坐标使用GL\u STATIC\u DRAW参数存储在GPU内存中的顶点缓冲区对象中 第一个想法是在单个OpenGL纹理(glGenTextures(1,&texture);)中使用外部库(如SOIL)加载精灵表,然后每帧更改传递给顶点着色器的四元体的纹理坐
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(使用着色器)应该非常有效,而且一点也不贵。考虑到“后期优化”的规则,在以后的时间重做也非常容易。如果你是以精心设计的方式完成的,那就是
但是我认为改变纹理的坐标比在几个不同的纹理之间切换要快。我认为这也是最好的方法,我已经开始朝这个方向努力了。谢谢