1

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

4

3 回答 3

2

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

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

于 2009-01-12T06:50:18.870 回答
2

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

于 2009-09-21T22:55:42.733 回答
1

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

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

与调色板一起存储额外的 alpha 通道是不可能的。要么将第二个纹理单元用于 alpha 分量,要么将颜色量化期间的 alpha 考虑在内,并使用包含 alpha 的调色板格式。

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

于 2009-01-11T23:02:19.813 回答