0

我很难理解 OpenGL 中纹理和图像之间的关系。我知道当纹理在 iPhone 上由 GPU 渲染时,它们是固有的开销,这正是您创建 CCSpriteBatchNode (cocos2d) 以及纹理图集以减少这种开销的原因。但是 GPU 如何使用相同的纹理绘制不同的图像,例如岩石、敌人、船只甚至是巨大的怪物?我在某处读到纹理应该是存储图像颜色元素值的 OpenGL 缓冲区,但就像我说的那样,可能有许多不同类型的对象具有不同的颜色值,那么如何使用相同的纹理来绘制它们?

我完全无法区分纹理和我们可以绘制的真实图像,比如说在 Illustrator 上,然后使用纹理图集将其复制到我们的项目中。另一个有趣的事情是,纹理应该有 2 次方的维度,但图像可以有任何维度!任何人都可以准确地指导我纹理是什么以及它与图像有何不同?谢谢你。

4

1 回答 1

1

关于使用 CCSpriteBatchNode 和使用一种纹理绘制不同的东西。您可以将多张图片组合到一个纹理图集中。对于一个文件,将创建一个纹理,该纹理将包含所有图像,并且所有精灵(如您所说,岩石、敌人等)将简单地使用不同的纹理坐标来仅绘制纹理的一部分,而不是整个质地。

它不仅对减少绘图调用次数很有用,而且会提高 fps 速率。它还可以帮助您节省应用程序内存并一次加载更多图片。这是关于你的第二个问题。

是的。加载到内存中的纹理的尺寸将是 2 的幂。因此,从图像中,实际大小为 64x64 的纹理将创建为相同大小的纹理,但对于大小为 65x65 的图片,将创建大小为 128x128 的纹理。它将增加内存使用量。在创建纹理图集时,可以将多张不同大小的图片组合成一个巨大的纹理图集,大小为2048x2048。创建的纹理将具有相同的大小,并且将包含所有图像(帧),因此您可以将其与 CCSpriteBatchNode 一起使用以减少绘制调用的数量。

于 2012-11-29T07:06:58.053 回答