自动生成的纹理坐标(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)