【问题标题】:Relation between a texture and an image for OpenGL ES 2.0OpenGL ES 2.0 的纹理和图像之间的关系
【发布时间】:2012-11-29 04:13:05
【问题描述】:

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

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

【问题讨论】:

    标签: opengl-es cocos2d-iphone


    【解决方案1】:

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

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

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

    【讨论】:

    • 您说精灵将使用不同的纹理坐标来仅绘制纹理的某些部分的那一部分是缺少的链接。现在一切都说得通了..!谢谢
    猜你喜欢
    • 2011-05-19
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2011-09-14
    • 2011-11-08
    • 2012-04-08
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多