DDS 多维数据集映射示例

对于立方体环境映射,使用未压缩或压缩格式将多维数据集的一个或多个人脸写入文件,并且所有人脸的大小必须相同。 尽管所有人脸必须具有相同数量的 mipmap 级别,但每个人脸都可以定义 mipmap。 如果文件包含多维数据集映射,则应设置DDSCAPS_COMPLEX、DDSCAPS2_CUBEMAP以及一个或多个 DSCAPS2_CUBEMAP_POSITIVEX/Y/Z 和/或 DDSCAPS2_CUBEMAP_NEGATIVEX/Y/Z。 人脸按以下顺序写入:正 x、负 x、正 y、负 y、正 z、负 z,省略任何缺失人脸。 每个人脸都用其main图像写入,后跟任何 mipmap 级别。

例如,具有正 x、负 y 和正 z 面的 256 x 256 立方体贴图、DXT1 像素格式以及所有 mipmap 级别将包含以下内容:

DDS 组件 # 字节数
标头的值开始缓存响应 128
256 x 256 正 x main 图像 32768
128 x 128 正 x mipmap 图像 8192
64 x 64 正 x mipmap 图像 2048
32 x 32 正 x mipmap 图像 512
16 x 16 正 x mipmap 图像 128
8×8 正 x mipmap 图像 32
4 x 4 正 x mipmap 图像 8
2 x 2 正 x mipmap 图像 8
1 x mipmap 正图像 8
为 y mipmap 图像重复上述 9 层 43704
为 z mipmap 图像重复前面的 9 层 43704

 

从 DirectX 8 开始,立方体映射存储时定义了所有人脸。

DXGI 立方体映射

Direct3D 10.x 和 Direct3D 11 中的立方体环境贴图等效于包含 6 张图像的 2D 纹理数组,并且可以存储在 DDS 文件中。 借助 Direct3D 10.1 和 Direct3D 11,硬件还可以支持立方体贴图数组,这些数组本身就是 2D 纹理数组,其倍数为 6 张图像 (6、12、18、24 等) 。

例如,下面是一个 256 x 256 立方体贴图,其中 mipmap 级别以 BC6H 格式存储为 2D 纹理数组:

DDS 组件 # 字节数
标头 (“DX10”) 的 FourCC 128
扩展标头 (DXGI 格式设置为 95 [DXGI_FORMAT_BC6H_UF16],维度值为 3 [D3Dxx_RESOURCE_DIMENSION_TEXTURE2D],数组大小为 6,杂项标志为 0x4 [D3Dxx_RESOURCE_MISC_TEXTURECUBE]) 20
256 x 256 数组输入 0 (正 x) main 图像 65536
128 x 128 数组输入 0 (正 x) mipmap 图像 16384
64 x 64 数组输入 0 (正 x) mipmap 图像 4096
32 x 32 数组输入 0 (正 x) mipmap 图像 1024
16 x 16 数组输入 0 (正 x) mipmap 图像 256
8×8 数组输入 0 (正 x) mipmap 图像 64
4 x 4 数组输入 0 (正 x) mipmap 图像 16
2 x 2 数组输入 0 (正 x) mipmap 图像 16
1×1 数组条目 0 (正 x) mipmap 图像 16
对数组条目 1 (负 x) mipmap 图像重复上述 9 个层 87408
对数组条目 2 重复前面的 9 层 (正 y) mipmap 图像 87408
对数组条目 3 (负 y) mipmap 图像重复前 9 层 87408
对数组输入 4 (正 z) mipmap 图像重复上述 9 个层 87408
对数组条目 5 (负 z) mipmap 图像重复上述 9 个图层 87408

 

DDS 编程指南