需要DX的第三方库:DirectXTK的DDSTextureLoader.cpp .h
DirectDraw Surface(DDS):有损压缩
DXT1:无alpha DXT3 DXT5
DDS读入DX后
BC1 RGB A 叶子
BC2 RGB 4A 近似模拟透明
BC3 RGB 8A 半透
BC4 R 只有一个颜色通道 灰度图
BC5 RG
BC6 HDR
BC7 高效压缩,不回损失类似法线的内容
纹素:纹理的像素
UV坐标对应像素坐标提取颜色(通重心坐标实现像素坐标向纹理坐标的转换)
Mipmap技术:
解决1.纹理像素缩小 2.纹理像素放大(插值)
层级:根据点距离视口的距离觉得它所在层
1*1*4=4
2*2*4=16
4*4*4=64
8*8*4=256
16*16*4=1024
插值
三线性插值:解决一个像素只映射到一个文素的一小部分
红圈是像素映射到的点
(uv坐标)
Minimap和(层级)插值的结合解决了层导致的分裂问题,如图:
但这种正方形式的插值(不考虑x、y轴和屏幕的角度问题)会导致画面模糊。各向异性过滤解决了这个问题:
各向异性过滤ANISOTROPIC:随x、y缩放
纹理上的拉伸模拟了屏幕上的拉伸(而不是像之前一样四四方方就投影过来)。
这样比超级采样所消耗的性能小
Minimap:节省了三分之一的内存
各向异性:三倍内存。如图红圈是比原来多的图片
EWA:更加费性能,但擅长处理外来歪曲的纹理。(各向异性擅长处理x、y拉伸的纹理)
DX的纹理采样:
代码上在根签名描述处增加静态采样。对应Shader的s0寄存器