microsoft / DirectXMesh

DirectXMesh geometry processing library
https://walbourn.github.io/directxmesh/
MIT License
787 stars 151 forks source link

Split Mesh #5

Open walbourn opened 9 years ago

walbourn commented 9 years ago

A function to break a mesh into multiple index buffers/vertex buffers based on a specified size.

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
);

This primary use of this function is to take a mesh that requires 32-bit indices into a set of meshes that only requires 16-bit indices, which is most useful when preparing meshes for Feature Level 9.1 devices.

walbourn commented 6 years ago

The need to support Direct3D Feature Level 9.1 is very low. Even UWP apps and Windows phone 8 can assume Feature Level 9.3 or better.

walbourn commented 3 years ago

The split algorithm is basically a loop over faces. If the number of vertices required by adding a new face exceeds a threshold, a new mesh is created.

The function would need to return n IBs, n lists of attributes, and n VB remaps from the original.

It provides updated adjacency information for the new "meshes" by breaking links between split faces.