在使用OpenGL ES 1.1应用多重纹理时,有没有办法将纹理的RGB通道用作alpha通道?

时间:2014-05-25 00:40:53

标签: android opengl-es opengl-es-1.1 multitexturing

我一直在尝试使用ETC1(特别是PKM文件)进行纹理压缩。我试图这样做而不必升级到OpenGL ES 2,所以我一直在使用多纹理。

我现在(最后)有多纹理工作,但问题是它不像人们期望的那样表现,我认为我已经找到了原因。在创建PKM时,最终只使用带有颜色分量的PKM和仅带有alpha分量的PKM。问题是alpha PKM似乎将alpha值存储在RGB通道中。黑色似乎代表完全透明,白色似乎代表完全不透明。

我的问题是:在使用多纹理时,有没有办法将这些RGB值组合并转换为alpha值?如果没有,那么我没有看到在OpenGL ES 1.1下使用ETC1和支持alphas的任何选项(如果我错了,请纠正我)。

1 个答案:

答案 0 :(得分:0)

我也在不同的论坛上发布了这个问题,普遍的共识是这是不可能的。因此,如果要实现处理alpha的ETC1压缩,请先升级到OpenGL ES 2并使用FragmentShaders。

我决定不这样做。对我来说真正有用的是对我的图像使用ETC1压缩,其中alpha通道无关紧要。对于我确实很重要的其他图像,我使用量化来显着减小我的PNG的大小。您可以使用tinypng.org执行此操作,也可以在本地安装pngquant。我做了后者并编写了一个bash脚本,它对某些图像使用ETC1压缩,对其他图像使用pngquant并将它们复制到我的资产目录 - 所以只需运行一个脚本就可以完成所有这些操作。