DXT5解压缩中出现意外的alpha值

时间:2013-06-09 11:03:39

标签: c# .net compression textures

我正在解压缩用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 - &gt;透明的。

0 个答案:

没有答案