D3DXSplitMesh 函数

将网格拆分为小于指定大小的网格。

语法

void D3DXSplitMesh(
  _In_        LPD3DXMESH   pMeshIn,
  _In_  const DWORD        *pAdjacencyIn,
  _In_  const DWORD        MaxSize,
  _In_  const DWORD        Options,
  _Out_       DWORD        *pMeshesOut,
  _Out_       LPD3DXBUFFER *ppMeshArrayOut,
  _Out_       LPD3DXBUFFER *ppAdjacencyArrayOut,
  _Out_       LPD3DXBUFFER *ppFaceRemapArrayOut,
  _Out_       LPD3DXBUFFER *ppVertRemapArrayOut
);

参数

pMeshIn [in]

类型: LPD3DXMESH

指向 ID3DXMesh 接口的指针,表示源网格。

pAdjacencyIn [in]

类型: const DWORD*

指向每个人脸三个 DWORD 的数组的指针,该数组指定要简化的网格中每个人脸的三个邻居。

MaxSize [in]

类型: const DWORD

结果网格中顶点的最大数目。

选项 [in]

类型: const DWORD

新网格的选项标志。

pMeshesOut [out]

类型: DWORD*

返回的网格数。

ppMeshArrayOut [out]

类型: LPD3DXBUFFER*

包含新网格的 ID3DXMesh 接口数组的缓冲区。 对于拆分为 n 个网格的源网格, ppMeshArrayOut 是 n ID3DXMesh 指针的数组。

ppAdjacencyArrayOut [out]

类型: LPD3DXBUFFER*

包含新网格 (DWORD) 相邻数组的缓冲区。 请参阅 ID3DXBuffer。 此参数是可选的。

ppFaceRemapArrayOut [out]

类型: LPD3DXBUFFER*

包含人脸重映射数组的缓冲区 (新网格的 DWORD) 。 请参阅 ID3DXBuffer。 此参数是可选的。

ppVertRemapArrayOut [out]

类型: LPD3DXBUFFER*

包含新网格的顶点重映射数组的缓冲区。 请参阅 ID3DXBuffer。 此参数可选。

返回值

如果函数成功,则返回值D3D_OK。 如果函数失败,则返回值可以是以下值之一:D3DERR_INVALIDCALL、D3DXERR_INVALIDDATA E_OUTOFMEMORY。

备注

此函数的常见用途是将具有 32 位索引的网格 (超过 65535 个顶点) 拆分为多个网格,其中每个网格都有 16 位索引。

相邻、顶点重映射和人脸重映射数组是 DWORD,其中每个数组包含 n 个 DWORD 指针,后跟指针引用的 DWORD 数据。 例如,若要获取网格 2 中人脸 3 的人脸重新映射信息,可以使用以下代码,假设人脸重新映射数据是在名为 ppFaceRemapArrayOut 的变量中返回的。

   
const DWORD **face_remaps = 
    static_cast<DWORD **>(ppFaceRemapArrayOut->GetBufferPointer());
const DWORD remap = face_remaps[2][3];

要求

要求
标头
D3DX9Mesh.h

D3dx9.lib

另请参阅

网格函数