D3DXUVAtlasCreate 函数

为网格创建 UV 图集。

语法

HRESULT D3DXUVAtlasCreate(
  _In_        LPD3DXMESH      pMesh,
  _In_        UINT            dwMaxChartNumber,
  _In_        FLOAT           fMaxStretch,
  _In_        UINT            dwWidth,
  _In_        UINT            dwHeight,
  _In_        FLOAT           fGutter,
  _In_        DWORD           dwTextureIndex,
  _In_  const DWORD           *pdwAdjacency,
        const DWORD           *pdwFalseEdges,
  _In_        FLOAT           *pfIMTArray,
  _In_        LPD3DXUVATLASCB pCallback,
  _In_        FLOAT           fCallbackFrequency,
  _In_        LPVOID          pUserContext,
  _In_        DWORD           dwOptions,
  _In_        LPD3DXMESH      *ppMeshOut,
  _Out_       LPD3DXBUFFER    *ppFacePartitioning,
  _Out_       LPD3DXBUFFER    *ppVertexRemapArray,
  _Out_       FLOAT           *pfMaxStretchOut,
  _Out_       UINT            *pdwNumChartsOut
);

parameters

pMesh [in]

类型: LPD3DXMESH

指向输入网格的指针 (请参阅 ID3DXMesh) ,其中包含用于计算地图集的对象几何图形。 网格必须至少包含位置数据和 2D 纹理坐标。

dwMaxChartNumber [in]

类型: UINT

要对网格进行分区的最大图表数。 请参阅有关分区模式的备注。 使用 0 告知 D3DX 应基于拉伸参数化地图集。

fMaxStretch [in]

类型: FLOAT

允许的拉伸量。 0 表示不允许拉伸,1 表示可以使用任意数量的拉伸。

dwWidth [in]

类型: UINT

纹理宽度。

dwHeight [in]

类型: UINT

纹理高度。

fGutter [in]

类型: FLOAT

图集上两个图表之间的最小距离(以纹素为单位)。 排水沟始终按宽度缩放;因此,如果在 512x512 纹理上使用 2.5 的装订线,则两个图表之间的最小距离为 2.5 /512.0 纹素。

dwTextureIndex [in]

类型: DWORD

从零开始的纹理坐标索引,用于标识要使用的纹理坐标集。

pdwAdjacency [in]

类型: const DWORD*

指向相邻数据数组的指针。 每个人脸有 3 个 DWORD,指示哪些三角形彼此相邻 (请参阅 ID3DXBaseMesh::GenerateAdjacency) 。

pdwFalseEdges

类型: const DWORD*

一个数组,每个人脸有 3 个 DWORDS。 每个人脸指示边缘是否为 false。 非假边由 -1 指示,假边由任何其他值指示。 这样就可以对四边形网格进行参数化,其中不会剪切每个象限中间的边缘。

pfIMTArray [in]

类型: FLOAT*

指向集成指标张量数组的指针,该数组描述如何拉伸三角形 (请参阅 IntegratedMetricTensor) 。

pCallback [in]

类型: LPD3DXUVATLASCB

指向回调函数的指针 (查看对监视进度有用的 LPD3DXUVATLASCB) 。

fCallbackFrequency [in]

类型: FLOAT

指定 D3DX 调用回调的频率;合理的默认值为 0.0001f。

pUserContent [in]

类型: LPVOID

指向传递给回调函数的用户定义值的指针;通常由应用程序用来将指针传递到为回调函数提供上下文信息的数据结构。

dwOptions [in]

类型: DWORD

指定生成的图表的质量。 请参阅 D3DXUVATLAS

ppMeshOut [in]

类型: LPD3DXMESH*

指向具有 atlas 的已创建网格的指针 (请参阅 ID3DXMesh) 。

ppFacePartitioning [out]

类型: LPD3DXBUFFER*

指向最终人脸分区数据的数组的指针。 每个元素包含一个 DWORD, (请参阅 ID3DXBuffer) 。

ppVertexRemapArray [out]

类型: LPD3DXBUFFER*

指向重新映射顶点数组的指针。 如果顶点在重新映射) 期间拆分,则每个数组元素标识每个最终顶点来自 (的原始顶点。 每个数组元素每个顶点包含一个 DWORD。

pfMaxStretchOut [out]

类型: FLOAT*

指向 atlas 算法生成的最大拉伸值的指针。 范围介于 0.0 和 1.0 之间。

pdwNumChartsOut [out]

类型: UINT*

指向 atlas 算法创建的图表数的指针。 如果 dwMaxChartNumber 太低,此参数将返回创建图集所需的最小图表数。

返回值

类型: HRESULT

如果函数成功,则返回值D3D_OK;否则,该值为 D3DERR_INVALIDCALL。

备注

D3DXUVAtlasCreate 可以通过两种方式对网格几何图形进行分区:

  • 基于图表数量
  • 基于允许的最大拉伸。 如果允许的最大拉伸为 0,则每个三角形可能位于其自己的图表中。

要求

要求
标头
D3DX9Mesh.h

D3dx9.lib

请参阅

UVAtlas 函数

UV Atlas Command-Line 工具 (uvatlas.exe)