我一直在尝试使用ETC1(特别是PKM文件)进行纹理压缩,现在工作了一段时间。我试图做到这一点,而不必升级到OpenGL ES 2,所以我一直在使用多重纹理。
我现在有多纹理工作(最后),但问题是,它的行为不像预期的那样,我想我已经知道为什么了。当创建PKM时,你最终得到的PKM只有颜色成分,一个只有alpha成分。问题是alpha PKM似乎将alpha值存储在RGB通道中。黑色似乎代表完全透明,白色似乎代表完全不透明。
我的问题是:是否有一种方法来组合和转换这些RGB值为alpha值时使用多纹理?如果没有,那么我没有看到在OpenGL ES 1.1下使用ETC1和支持alpha的任何选项(如果我错了,请纠正我)。
我也在不同的论坛上发布了这个问题,普遍的共识是这是不可能的。因此,如果你想实现ETC1压缩处理alpha,那么首先升级到OpenGL ES 2,并使用FragmentShaders。
我决定不这样做。对我来说,真正有效的是对alpha通道无关紧要的图像使用ETC1压缩。对于其他重要的图像,我使用量化来显著减小png的大小。你可以使用tinypng.org或者在本地安装pngquant。我做了后者,并编写了一个bash脚本,对某些图像使用ETC1压缩,对其他图像使用pngquant压缩,并将它们复制到我的资产目录中-因此,只需运行一个脚本就可以为我完成所有工作。