【问题标题】:DXT3 (BC2) compression format alpha dataDXT3 (BC2) 压缩格式 alpha 数据
【发布时间】:2017-04-21 01:39:51
【问题描述】:

我正在尝试从 dds 文件中读取图像信息。我设法让 DXT1 和 DXT5 格式正常工作,但是我对 DXT3 格式的 alpha 数据有疑问(也称为BC2)。 查看压缩的BC2 block 的布局时,它显示 16 像素块的 alpha 数据存储在数据的前 8 个字节中,每个值占用 4 位。

这是否意味着,由于存储的 alpha 值只能是 0-15,所以实际的 alpha 数据计算如下:

unsigned char bitvalue = GetAlphaBitValue(); // assume this works and gets the 4-bit value i am looking for
unsigned char alpha = (bitvalue / 15.0f) * 255;

这是正确的,还是我看错了?

【问题讨论】:

    标签: c++ dds-format dxt


    【解决方案1】:

    this specification 似乎是这么说的:

    块中位置 (x,y) 处的纹素的 alpha 分量是
    由 alpha(x,y) / 15 给出。

    因为结果应该在 [0 .. 1] 中,而不是 [0 .. 255]。

    由于 255 可以被 15 整除,因此将转换为 [0 .. 255] 可能更容易理解为

    uint8_t alpha = bitvalue * 17;
    

    现在更明显的是,正在发生的是通常的“复制”映射(就像 CSS 短颜色代码一样),它可以很好地传播输出值(允许对最小值和最大值进行编码,并且所有值之间的步长相等)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-16
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多