自动生成的纹理坐标 (Direct3D 9)

系统可以使用转换后的相机空间位置或顶点中的法线作为纹理坐标,也可以计算用于处理三次环境映射的三个元素向量。 与在顶点中显式指定的纹理坐标一样,可以使用自动生成的纹理坐标作为纹理坐标转换的输入。

自动生成的纹理坐标可以通过消除对顶点格式的显式纹理坐标的需求,显著降低几何数据所需的带宽。 在许多情况下,系统生成的纹理坐标可以与转换一起使用,以产生特殊效果。 当然,这是一个特殊用途的功能,你将在很多情况下使用显式纹理坐标。

配置自动生成的纹理坐标

在 C++ 中,D3DTSS_TEXCOORDINDEX纹理阶段状态 (来自 D3DTEXTURESTAGESTATETYPE 枚举类型) 控制系统生成纹理坐标的方式。

通常,此状态指示系统使用以顶点格式编码的一组特定纹理坐标。 在分配给此状态的值中包含D3DTSS_TCI_CAMERASPACENORMAL、D3DTSS_TCI_CAMERASPACEPOSITION或D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR标志时,系统行为会大相径庭。 如果存在这些标志中的任何一个,则纹理阶段将忽略顶点格式中的纹理坐标,而改用系统生成的坐标。 每个标志的含义显示在以下列表中。

  • D3DTSS_TCI_CAMERASPACENORMAL

    使用转换为相机空间的顶点法线作为输入纹理坐标。

  • D3DTSS_TCI_CAMERASPACEPOSITION

    使用转换为相机空间的顶点位置作为输入纹理坐标。

  • D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR

    使用转换为相机空间的反射矢量作为输入纹理坐标。 反射向量是从输入顶点位置和法向量计算的。

纹理坐标索引标志是互斥的。 此示例使用:

  • 相机空间中的顶点位置 () 作为此纹理阶段的输入纹理坐标
  • D3DRENDERSTATE_WRAP1呈现状态中设置的换行模式
// Assume d3dDevice is a valid pointer to an IDirect3DDevice9 interface
d3dDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 
                                   D3DTSS_TCI_CAMERASPACEPOSITION | 1);

自动生成的纹理坐标作为纹理坐标转换的输入值最有用,或者无需应用程序为三次环境映射计算三个元素矢量。

球体映射在模型时使用预计算 () 纹理贴图,该贴图包含由镶边球体反射的整个环境。 Direct3D 具有使用渲染状态D3DTSS_TCI_CAMERASPACENORMAL的纹理坐标生成功能,它采用相机空间中顶点的法线,并通过纹理转换来生成纹理坐标。

纹理坐标处理

纹理坐标转换 (Direct3D 9)

三次环境映射 (Direct3D 9)