Directx DirectDrawsure(DDS)节距计算
在过去的两天里,我一直在研究DDS格式并编写一个DDS纹理加载器,只是出于好奇,我偶然发现了一些我习以为常的东西,“音高计算公式”。我真的很好奇,为什么它们被指定为完全一样,没有任何理由 例如,对于所有基于S3TC的块压缩格式(DXT#n、BC#n),其计算方式是 最大(1,(宽度+3)/4)*块大小 所以,max给出了两个值中较大的一个,但为什么它会起作用呢?为什么要在纹理的宽度上加上3,然后将其划分为“可啃边界” 另一方面,一些遗留类型是: ((宽度+1)>>1)*4 所以,右移基本上是在二进制基础上移动基点,或者除以2。那么,为什么要加1,然后除以2,再乘以4呢?失去最右边的两位 最后一个,对于其他格式: (宽度*bpp+7)/8 我理解每像素位数和最接近的字节边界划分,但为什么要加7呢Directx DirectDrawsure(DDS)节距计算,directx,directdraw,Directx,Directdraw,在过去的两天里,我一直在研究DDS格式并编写一个DDS纹理加载器,只是出于好奇,我偶然发现了一些我习以为常的东西,“音高计算公式”。我真的很好奇,为什么它们被指定为完全一样,没有任何理由 例如,对于所有基于S3TC的块压缩格式(DXT#n、BC#n),其计算方式是 最大(1,(宽度+3)/4)*块大小 所以,max给出了两个值中较大的一个,但为什么它会起作用呢?为什么要在纹理的宽度上加上3,然后将其划分为“可啃边界” 另一方面,一些遗留类型是: ((宽度+1)>>1)*4 所以,右移基本上是在二
有人能再多写一点吗?或者给我指出正确的方向?这些计算是四舍五入的,因为某些格式无法存储任意宽度的数据。取整很重要,否则会丢失纹理上的像素。您会注意到,通常加法比被除的数字小1。整数通常会向下舍入,因此,通过将除数加1,除精确倍数外的任何数字都将舍入到下一个值 例如,如果添加3,然后除以4:
- 1=1
- 2=1
- 3=1
- 4=1
- 5=2
- 6=2
- 等等