我阅读了一些关于DXTn和BCn纹理压缩的文章,并学习了如何对这些格式进行编码。但是我仍然不知道DXT2和DXT3格式之间或者DXT4和DXT5格式之间有什么区别,我猜这些格式的区别是相同的。
在D3D SDK的文档中,它说:
DXT2和DXT3的区别在于,在DXT2格式中,假定颜色数据被预先乘以了alpha。在DXT3格式中,假定颜色不乘以alpha。这两种格式是需要的,因为在大多数情况下,在使用纹理时,仅仅检查数据并不足以确定颜色值是否乘以alpha。因为在运行时需要这些信息,所以使用两个FOURCC代码来区分这些情况。然而,用于这两种格式的数据和插值方法是相同的。
这是否意味着:如果我们有一个带有alpha 0的RGB 127, 127 ,127像素,那么在DXT2中,它实际上会存储RGB 0, 0,0,因为127被乘以alpha 0?
如果它是正确的,我们可以从实际游戏的发展中受益吗?在我看来,这完全没有必要。
此外,BC2和BC3格式发生了什么?如我所知,DXT2 2/3映射到BC2,DXT2 4/5映射到BC3,因此这种区别不再存在。它被废除了吗?为什么?
任何帮助都将是感激的,谢谢!
发布于 2012-11-15 14:52:20
据我所知,DXT2 &3和DXT4 &5-GPU以同样的方式解码它们并没有物理上的区别。根据文档中的引用,我怀疑唯一的原因是给开发人员一个提示,说明纹理是否被预乘,从而知道使用什么样的框架缓冲区混合模式,即。(1,1-SrcAlpha) vs (SrcAlpha,1-SrcAlpha)。
https://stackoverflow.com/questions/13374549
复制相似问题