【问题标题】:Is there a way to use the RGB channels of a texture as the alpha channel when applying multitexturing using OpenGL ES 1.1?在使用 OpenGL ES 1.1 应用多重纹理时,有没有办法使用纹理的 RGB 通道作为 alpha 通道?
【发布时间】:2014-05-25 00:40:53
【问题描述】:

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

我现在(终于)可以使用多重纹理了,但问题是它的行为并不像人们期望的那样,我想我已经找到了原因。在创建 PKM 时,您最终得到的 PKM 仅包含颜色组件,而 PKM 仅包含 alpha 组件。问题是 alpha PKM 似乎将 alpha 值存储在 RGB 通道中。黑色似乎代表完全透明,白色似乎代表完全不透明。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 以防万一有人关心,我使用 etcpack 进行 ETC1 压缩。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    相关资源
    最近更新 更多