使用 OpenGL 和 SDL 逐帧动画
Frame by frame animation using OpenGL and SDL
我正在从事一个包含大量资产的游戏项目。角色动画非常详细,需要很多帧才能发生。
起初,我创建了大型 spritesheet,其中包含特定角色的所有动画。它在我的 PC 上运行良好,但当我在 Android 平板电脑上测试它时,我注意到它超过了其 GPU 的最大纹理尺寸。我的解决方案是将大型 spritesheet 分解为单独的帧(最坏的情况是 180 帧)并将它们单独上传到 GPU。现在一切似乎都在我需要它工作的地方工作。
目前,我使用过的最大动画是一个具有 180 帧、宽和高为 407x725 像素的角色。但是,由于我在网上找不到任何关于如何使用 OpenGL 正确渲染 2D 动画的指导,我想问一下这种方法是否有问题。是否有最大数量的纹理可以上传到 GPU?我可以超过 GPU 的 RAM 数量吗?
GPU最高效的方法是将整个spritesheet作为一个单独的纹理传给opengl,select你想要哪一帧通过在绘制时调整纹理坐标。您还应该将精灵打包到理想的方形纹理中。减少 GPU 使用的内存总量对性能非常有好处,尤其是。在手机和平板电脑上。
您希望尽可能避免频繁更改绑定的纹理。理想情况下,您希望绑定单个纹理,然后将它的点点滴滴渲染到屏幕上,直到您不再需要它为止,然后绑定不同的纹理并继续。
这样做的原因是 GPU 会努力优化它创建的管道的操作,以处理您提供给它的几何体,以及您 select 的着色器。但是,当您对配置进行重大更改时,例如更改绑定的纹理或绑定的着色器,这对优化来说必然有些不透明。一次提供更多的顶点和纹理坐标更好,因为它们基本上可以批量完成,而无需卸载和重新加载资源等。
然而,根据您的目标卡片,您应该记住,纹理的最大尺寸可能为 8192 x 8192 或类似大小。因此,根据您拥有的资产,您可能被迫将它们拆分成多个纹理。
我正在从事一个包含大量资产的游戏项目。角色动画非常详细,需要很多帧才能发生。
起初,我创建了大型 spritesheet,其中包含特定角色的所有动画。它在我的 PC 上运行良好,但当我在 Android 平板电脑上测试它时,我注意到它超过了其 GPU 的最大纹理尺寸。我的解决方案是将大型 spritesheet 分解为单独的帧(最坏的情况是 180 帧)并将它们单独上传到 GPU。现在一切似乎都在我需要它工作的地方工作。
目前,我使用过的最大动画是一个具有 180 帧、宽和高为 407x725 像素的角色。但是,由于我在网上找不到任何关于如何使用 OpenGL 正确渲染 2D 动画的指导,我想问一下这种方法是否有问题。是否有最大数量的纹理可以上传到 GPU?我可以超过 GPU 的 RAM 数量吗?
GPU最高效的方法是将整个spritesheet作为一个单独的纹理传给opengl,select你想要哪一帧通过在绘制时调整纹理坐标。您还应该将精灵打包到理想的方形纹理中。减少 GPU 使用的内存总量对性能非常有好处,尤其是。在手机和平板电脑上。
您希望尽可能避免频繁更改绑定的纹理。理想情况下,您希望绑定单个纹理,然后将它的点点滴滴渲染到屏幕上,直到您不再需要它为止,然后绑定不同的纹理并继续。
这样做的原因是 GPU 会努力优化它创建的管道的操作,以处理您提供给它的几何体,以及您 select 的着色器。但是,当您对配置进行重大更改时,例如更改绑定的纹理或绑定的着色器,这对优化来说必然有些不透明。一次提供更多的顶点和纹理坐标更好,因为它们基本上可以批量完成,而无需卸载和重新加载资源等。
然而,根据您的目标卡片,您应该记住,纹理的最大尺寸可能为 8192 x 8192 或类似大小。因此,根据您拥有的资产,您可能被迫将它们拆分成多个纹理。