使用OpenGL和SDL逐帧动画

时间:2015-09-06 01:34:12

标签: c opengl animation sdl-2

我正在一个拥有大量资产的游戏项目中工作。角色动画非常详细,需要大量的帧才能发生。

首先,我创建了包含特定角色所有动画的大型精灵表。它在我的电脑上运行良好但是当我在Android平板电脑上测试它时,我注意到它超过了GPU的最大纹理尺寸。我的解决方案是将大spritesheet分解为单独的帧(最坏的情况是180帧)并将它们单独上传到GPU。现在似乎在我需要它的任何地方工作。

目前,我一直在使用的最大动画是一个180帧的角色,宽度和高度为407x725像素。但是,由于我无法在网上找到关于如何使用OpenGL正确渲染2D动画的任何方向,我想问一下这种方法是否存在问题。是否可以将最大数量的纹理上传到GPU?我能超过GPU的RAM吗?

1 个答案:

答案 0 :(得分:3)

GPU的最有效方法是将整个精灵表作为单个纹理传递给opengl,并在绘制时通过调整纹理坐标来选择所需的帧。您还应该将精灵打包成理想的方形纹理。减少GPU使用的总内存量对性能尤其有利。在手机和平​​板电脑上。

您希望尽可能避免频繁更改绑定的纹理。理想情况下,您希望绑定单个纹理,然后将其中的一些部分渲染到屏幕上,直到您不再需要它,然后绑定不同的纹理并继续。

这样做的原因是GPU会尽力优化其创建的管道的操作,以处理您为其提供的几何体以及您选择的着色器。但是当您对配置进行大的更改(例如更改绑定的纹理或绑定的着色器)时,这对于优化来说必然会有些不透明。一次给它提供更多的顶点和纹理坐标是更好的,因为它们基本上都可以批量完成而无需卸载和重新加载资源等。

但是,根据您要定位的卡片,您应该记住,最多可能有8192 x 8192尺寸的纹理或类似的东西。因此,根据您拥有的资产,您可能会被迫将它们分成几个纹理。