0

我正在解压缩使用 DXT5 压缩的图像。根据描述,每个 16 字节的块以 2 字节的 alpha 数据开头。如果我在十六进制编辑器中查看我的文件,我会发现 90% 的图像的 alpha 值小于 0.04(文件中的值 < 10),这不应该是这种情况。

如果我用 OpenGL 渲染图像并让 glCompressedTexImage 完成工作,它看起来没问题。使用我的代码,图像是透明的,正如我对那些小的 alpha 值所期望的那样。我用来生成 alpha 值的代码如下所示:

byte alpha1 = reader.ReadByte();
byte alpha2 = reader.ReadByte();

uint[] alphaValues = new uint[8]
{
    alpha1,
    alpha2,
    0, 0, 0, 0, 0, 0
};

if (alpha1 > alpha2)
{
    for (int i = 0; i < 6; ++i)
    {
        byte value = (byte)(((6.0f - i) * alpha1 + (1.0f + i) * alpha2) / 7.0f);
        alphaValues[i + 2] = value;
    }
}
else
{
    for (int i = 0; i < 4; ++i)
    {
        byte value = (byte)(((4.0f - i) * alpha1 + (1.0f + i) * alpha2) / 5.0f);
        alphaValues[i + 2] = value;
    }

    alphaValues[6] = 0;
    alphaValues[7] = 255;
}

alpha1 和 alpha2 通常是相同的(值如 8 或 3 或 9,但图像中的最大 alpha 值是 96)。

不过颜色还可以。如果我渲染没有 alpha 值的图像,它看起来很完美。启用 alpha -> 透明。

4

0 回答 0