纹理坐标格式 (Direct3D 9)

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

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

每个纹理坐标集可以有一到四个元素。 通过D3DFVF_TEXTUREFORMAT4标志D3DFVF_TEXTUREFORMAT1描述集中纹理坐标中的元素数,但这些标志本身不使用。 相反,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)

 

纹理坐标