【问题标题】:Paletted textures with 8-bit alpha channel in OpenGL ESOpenGL ES 中带有 8 位 Alpha 通道的调色板纹理
【发布时间】:2010-09-30 19:29:12
【问题描述】:

我能否在 OpenGL ES 中获得带有 RGB 调色板和 8 位 Alpha 通道的调色板纹理? (我的目标是 iPhone OpenGL ES 实现。)在查看 OpenGL 文档之后,在我看来,调色板中支持带有 alpha 的调色板纹理,即。纹理包含 8 位索引到具有 256 种 RGBA 颜色的调色板中。我想要一个在 RGB 调色板中包含 8 位索引的纹理一个独立的 8 位 alpha 通道。 (我试图节省内存,32 位 RGBA 纹理是相当奢侈的。)或者这应该是手工完成的,即。通过创建两个独立的纹理,一个用于颜色,一个用于 alpha 贴图,然后手动组合它们?

【问题讨论】:

    标签: iphone opengl-es texturing


    【解决方案1】:

    免责声明: 此信息基于官方 OpenGL|ES 规范。我不知道 iphone 上的 OpenGL|ES 实现是否支持压缩纹理。理论上它至少应该模拟压缩纹理,但现在你永远不会。

    您可以通过 glCompressedTexImage2D 调用加载 8 位/像素纹理。您最想使用的压缩类型是GL_PALETTE8_RGBA8_OES

    无法直接将附加的 Alpha 通道与调色板一起存储。要么将第二个纹理单元用于 alpha 分量,要么将颜色量化期间的 alpha 考虑在内并使用包含 alpha 的调色板格式。

    在网上某处有一个名为 BRIGHT 的命令行颜色量化工具。它在使用 alpha 量化图像方面做得非常出色。你可能想试一试..

    【讨论】:

      【解决方案2】:

      没有。一般来说,图形芯片真的不喜欢托盘化纹理(为什么?因为从它读取任何纹素需要两次内存读取,一次是索引,另一次进入调色板。普通读取的延迟是正常读取的两倍)。

      如果您只是在节省内存之后,请查看压缩纹理格式。特别是在 iPhone 中,它支持 2 位/像素和 4 位/像素的 PVRTC 压缩格式。压缩是有损的(就像调色板压缩通常是有损的一样),但内存和带宽节省是可观的。

      【讨论】:

      • 谢谢!我知道纹理压缩,但是对于我的目的来说压缩伪影太明显了(这是一个卡通 2D 游戏)。
      【解决方案3】:

      调色板纹理将在 iPhone 中的 GPU 加载时扩展,因此除了存储大小之外,您不会通过使用它们获得任何优势。卡通风格游戏的最佳选择是探索使用 PVRTC 压缩纹理(如 NeARAZ 所说)和 16 位纹理(RGBA4444 用于 alpha,RGBA5551 用于穿透,RGB565 用于不透明纹理)。将两者混合使用是我自己的方法。

      【讨论】:

      • 嗨。对不起,你说的打孔是什么意思?你能告诉我关于使用 RGBA4444 的任何教程或资源吗(因为我只有 RGBA8888 中的精灵表,它对 iPhone 的内存来说负担太大了)
      • “穿透”是指精灵图像中的所有像素都是完全不透明或完全透明的,没有半透明像素。这可以通过使用 RGBA5551 可用的 alpha 的单个位来表示 - alpha 是 on 或 of。 POWERVR SDK 和 Oolong 引擎中提供了纹理加载代码,可以加载不同的格式。要创建纹理,您也可以使用 SDK 中的 PVRTexTool。加载 16 位纹理后,它会像任何其他 OpenGL 纹理一样被处理,因此无需更改渲染代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 2011-10-29
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      相关资源
      最近更新 更多