DDS 多维数据集映射示例

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

例如,具有正 x、负 y 和正 z 人脸的 256 by-256 多维数据集映射、DXT1 的像素格式以及所有 mipmap 级别将包含以下内容:

DDS 组件 # 字节数
页眉 128
256×256 正 x 主图像 32768
128×128 正 x mipmap 图像 8192
64×64 正 x mipmap 图像 2048
32×32 正 x mipmap 图像 512
16×16 正 x mipmap 图像 128
8×8 正 x mipmap 图像 32
4×4 正 x mipmap 图像 8
2×2 正 x mipmap 图像 8
1-by-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,硬件还可以支持多维数据集贴图数组,这些多维数据集图本身是具有 6 个图像的倍数(6、12、18、24 等)。

例如,下面是一个 256 by-256 多维数据集地图,其 mipmap 级别以 BC6H 格式存储为 2D 纹理数组:

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

 

DDS 编程指南