纹理坐标格式 (Direct3D 9)

Direct3D 中的纹理坐标可以包括一个、两个、三个或四个浮点元素,用于处理具有不同维度级别的纹理。 一维纹理(尺寸为 1 x-n 纹素的纹理表面)通过一个纹理坐标进行寻址。 最常见的情况是 2D 纹理,使用两个通常称为 you 和 v 的纹理坐标来解决。 Direct3D 支持两种类型的 3D 纹理:立方环境贴图和体积纹理。 立方体环境映射不是真正的 3D,但它们使用 3 元素向量来解决。 有关详细信息,请参阅 Direct3D 9 (三次环境映射)

固定函数 FVF 代码 (Direct3D 9) 中所述,应用程序以顶点格式对纹理坐标进行编码。 顶点格式可以包含多组纹理坐标。 通过 D3DFVF_TEX8 D3DFVF 使用D3DFVF_TEX0来描述不包含纹理坐标或多达 8 组的顶点格式。

每个纹理坐标集可以有 1 到 4 个元素。 D3DFVF_TEXTUREFORMAT1 D3DFVF_TEXTUREFORMAT4标志描述一组纹理坐标中的元素数,但这些标志本身不会使用。 相反, D3DFVF_TEXCOORDSIZEN 宏集使用这些标志来创建位模式,用于描述顶点格式中一组特定纹理坐标使用的元素数。 这些宏接受一个参数,用于标识要定义其元素数的坐标集的索引。 以下示例演示了如何使用这些宏。

// This vertex format contains two sets of texture coordinates.
// The first set (index 0) has 2 elements, and the second set 
// has 1 element. The description for this vertex format would be: 
//     dwFVF = D3DFVF_XYZ  | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX2 |
//             D3DFVF_TEXCOORDSIZE2(0) | D3DFVF_TEXCOORDSIZE1(1); 
//
typedef struct CVF
{
    D3DVECTOR position;
    D3DVECTOR normal;
    D3DCOLOR  diffuse;
    float     u, v;   // 1st set, 2D
    float     t;      // 2nd set, 1D
} CustomVertexFormat;

注意

除三次环境贴图和体积纹理外,光栅器无法使用两个以上的元素来寻址纹理。 应用程序最多可以为纹理坐标提供三个元素,但前提是纹理是立方体贴图、体积纹理或D3DTTFF_PROJECTED纹理转换标志。 D3DTTFF_PROJECTED 标志使光栅器将前两个元素除以第三个 (或 n 个) 元素。 有关详细信息,请参阅 Direct3D 9) (纹理坐标转换

 

纹理坐标