gpt4 book ai didi

c - 使用 OpenGL 和 SDL 逐帧动画

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:40 26 4
gpt4 key购买 nike

我正在从事一个包含大量 Assets 的游戏项目。角色动画非常详细,需要很多帧才能发生。

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

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

最佳答案

GPU最高效的方法是将整个sprite sheet作为单个纹理传递给opengl,在绘制时通过调整纹理坐标来选择你想要的帧。您还应该将 Sprite 打包到理想的方形纹理中。减少 GPU 使用的内存总量对性能非常有好处,尤其是。在手机和平​​板电脑上。

您希望尽可能避免频繁更改绑定(bind)的纹理。理想情况下,您希望绑定(bind)单个纹理,然后将它的点点滴滴渲染到屏幕上,直到您不再需要它为止,然后绑定(bind)不同的纹理并继续。

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

然而,根据您的目标卡片,您应该记住,纹理的最大尺寸可能为 8192 x 8192 或类似大小。因此,根据您拥有的 Assets ,您可能不得不将它们拆分成多个纹理。

关于c - 使用 OpenGL 和 SDL 逐帧动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32419206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com