PxTetMaker
Defined in include/extensions/PxTetMakerExt.h
-
class PxTetMaker
Provides functionality to create a tetrahedral mesh from a triangle mesh.
Public Static Functions
-
static bool createConformingTetrahedronMesh(const PxSimpleTriangleMesh &triangleMesh, physx::PxArray<physx::PxVec3> &outVertices, physx::PxArray<physx::PxU32> &outTetIndices, const bool validate = true, PxReal volumeThreshold = 0.0f)
Create conforming tetrahedron mesh using TetMaker.
- Parameters
triangleMesh – [in] The description of the triangle mesh including vertices and indices
outVertices – [out] The vertices to store the conforming tetrahedral mesh
outTetIndices – [out] The indices to store the conforming tetrahedral mesh
validate – [in] If set to true the input triangle mesh will get analyzed to find possible deficiencies
volumeThreshold – [in] Tetrahedra with a volume smaller than the specified threshold will be removed from the mesh
- Returns
True if success
-
static bool createVoxelTetrahedronMesh(const PxTetrahedronMeshDesc &tetMesh, const PxU32 numVoxelsAlongLongestBoundingBoxAxis, physx::PxArray<physx::PxVec3> &outVertices, physx::PxArray<physx::PxU32> &outTetIndices, PxI32 *inputPointToOutputTetIndex = NULL, const PxU32 *anchorNodeIndices = NULL, PxU32 numTetsPerVoxel = 5)
Create voxel-based tetrahedron mesh using TetMaker.
- Parameters
tetMesh – [in] The description of the tetrahedral mesh including vertices and indices
numVoxelsAlongLongestBoundingBoxAxis – [in] The number of voxels along the longest bounding box axis
outVertices – [out] The vertices to store the voxel-based tetrahedral mesh
outTetIndices – [out] The indices to store the voxel-based tetrahedral mesh
inputPointToOutputTetIndex – [out] Buffer with the size of nbTetVerts that contains the tetrahedron index containing the input point with the same index
anchorNodeIndices – [in] Some input vertices may not be referenced by any tetrahedron. They can be mapped to another input vertex that is used by a tetrahedron to support embedding of additional points.
numTetsPerVoxel – [in] The number of tetrahedra used to fill a voxel. Only a value of 5 or 6 is supported. 5 is recommended because it mostly avoids mesh anisotropy.
- Returns
True if success
-
static bool createVoxelTetrahedronMeshFromEdgeLength(const PxTetrahedronMeshDesc &tetMesh, const PxReal voxelEdgeLength, physx::PxArray<physx::PxVec3> &outVertices, physx::PxArray<physx::PxU32> &outTetIndices, PxI32 *inputPointToOutputTetIndex = NULL, const PxU32 *anchorNodeIndices = NULL, PxU32 numTetsPerVoxel = 5)
Create voxel-based tetrahedron mesh using TetMaker.
- Parameters
tetMesh – [in] The description of the tetrahedral mesh including vertices and indices
voxelEdgeLength – [in] The edge length of a voxel.Can be adjusted slightly such that a multiple of it matches the input points’ bounding box size
outVertices – [out] The vertices to store the voxel-based tetrahedral mesh
outTetIndices – [out] The indices to store the voxel-based tetrahedral mesh
inputPointToOutputTetIndex – [out] Buffer with the size of nbTetVerts that contains the tetrahedron index containing the input point with the same index
anchorNodeIndices – [in] Some input vertices may not be referenced by any tetrahedron. They can be mapped to another input vertex that is used by a tetrahedron to support embedding of additional points.
numTetsPerVoxel – [in] The number of tetrahedra used to fill a voxel. Only a value of 5 or 6 is supported. 5 is recommended because it mostly avoids mesh anisotropy.
- Returns
True if success
-
static PxTriangleMeshAnalysisResults validateTriangleMesh(const PxSimpleTriangleMesh &triangleMesh, const PxReal minVolumeThreshold = 1e-6f, const PxReal minTriangleAngleRadians = 10.0f * 3.1415926535898f / 180.0f)
Analyzes the triangle mesh to get a report about deficiencies.
Some deficiencies can be handled by the tetmesher, others cannot.
- Parameters
triangleMesh – [in] The description of the triangle mesh including vertices and indices
minVolumeThreshold – [in] Minimum volume the mesh must have such that no volume warning is generated
minTriangleAngleRadians – [in] Minimum angle allowed for triangles such that no angle warning is generated
- Returns
Flags that describe the triangle mesh’s deficiencies
-
static PxTetrahedronMeshAnalysisResults validateTetrahedronMesh(const PxBoundedData &points, const PxBoundedData &tetrahedra, const PxReal minTetVolumeThreshold = 1e-8f)
Analyzes the tetrahedron mesh to get a report about deficiencies.
Some deficiencies can be handled by the deformable volume cooker, others cannot.
- Parameters
points – [in] The mesh’s points
tetrahedra – [in] The mesh’s tetrahedra (index buffer)
minTetVolumeThreshold – [in] Minimum volume every tetrahedron in the mesh must have such that no volume warning is generated
- Returns
Flags that describe the tetrahedron mesh’s deficiencies
-
static void simplifyTriangleMesh(const PxArray<PxVec3> &inputVertices, const PxArray<PxU32> &inputIndices, int targetTriangleCount, PxF32 maximalEdgeLength, PxArray<PxVec3> &outputVertices, PxArray<PxU32> &outputIndices, PxArray<PxU32> *vertexMap = NULL, PxReal edgeLengthCostWeight = 0.1f, PxReal flatnessDetectionThreshold = 0.01f, bool projectSimplifiedPointsOnInputMeshSurface = false, PxArray<PxU32> *outputVertexToInputTriangle = NULL, bool removeDisconnectedPatches = false)
Simplifies (decimates) a triangle mesh using quadric simplification.
- Parameters
inputVertices – [in] The vertices of the input triangle mesh
inputIndices – [in] The indices of the input triangle mesh of the form (id0, id1, id2), (id0, id1, id2), ..
targetTriangleCount – [in] Desired number of triangles in the output mesh
maximalEdgeLength – [in] Edges below this length will not be collapsed. A value of zero means there is no limit.
outputVertices – [out] The vertices of the output (decimated) triangle mesh
outputIndices – [out] The indices of the output (decimated) triangle mesh of the form (id0, id1, id2), (id0, id1, id2), ..
vertexMap – [out] Optional parameter which returns the mapping from input to output vertices. Note that multiple input vertices are typically collapsed into the same output vertex.
edgeLengthCostWeight – [in] Factor to scale influence of edge length when prioritizing edge collapses. Has no effect if set to zero.
flatnessDetectionThreshold – [in] Threshold used to detect edges in flat regions and to improve the placement of the collapsed point. If set to a large value it will have no effect.
projectSimplifiedPointsOnInputMeshSurface – [in] If set to true, the simplified points will lie exactly on the original surface.
outputVertexToInputTriangle – [out] Optional indices providing the triangle index per resulting vertex. Only available when projectSimplifiedPointsOnInputMeshSurface is set to true
removeDisconnectedPatches – [in] Enables the optional removal of disconnected triangles in the mesh. Only the largest connected set/patch will be kept
-
static void remeshTriangleMesh(const PxArray<PxVec3> &inputVertices, const PxArray<PxU32> &inputIndices, PxU32 gridResolution, PxArray<PxVec3> &outputVertices, PxArray<PxU32> &outputIndices, PxArray<PxU32> *vertexMap = NULL)
Creates a new mesh from a given mesh.
The input mesh is first voxelized. The new surface is created from the voxel surface and subsequent projection to the original mesh.
- Parameters
inputVertices – [in] The vertices of the input triangle mesh
inputIndices – [in] The indices of the input triangle mesh of the form (id0, id1, id2), (id0, id1, id2), ..
gridResolution – [in] Size of the voxel grid (number of voxels along the longest dimension)
outputVertices – [out] The vertices of the output (decimated) triangle mesh
outputIndices – [out] The indices of the output (decimated) triangle mesh of the form (id0, id1, id2), (id0, id1, id2), ..
vertexMap – [out] Optional parameter which returns a mapping from input to output vertices. Since the meshes are independent, the mapping returns an output vertex that is topologically close to the input vertex.
-
static void remeshTriangleMesh(const PxVec3 *inputVertices, PxU32 nbVertices, const PxU32 *inputIndices, PxU32 nbIndices, PxU32 gridResolution, PxArray<PxVec3> &outputVertices, PxArray<PxU32> &outputIndices, PxArray<PxU32> *vertexMap = NULL)
Creates a new mesh from a given mesh.
The input mesh is first voxelized. The new surface is created from the voxel surface and subsequent projection to the original mesh.
- Parameters
inputVertices – [in] The vertices of the input triangle mesh
nbVertices – [in] The number of vertices of the input triangle mesh
inputIndices – [in] The indices of the input triangle mesh of the form (id0, id1, id2), (id0, id1, id2), ..
nbIndices – [in] The number of indices of the input triangle mesh (equal to three times the number of triangles)
gridResolution – [in] Size of the voxel grid (number of voxels along the longest dimension)
outputVertices – [out] The vertices of the output (decimated) triangle mesh
outputIndices – [out] The indices of the output (decimated) triangle mesh of the form (id0, id1, id2), (id0, id1, id2), ..
vertexMap – [out] Optional parameter which returns a mapping from input to output vertices. Since the meshes are independent, the mapping returns an output vertex that is topologically close to the input vertex.
-
static void createTreeBasedTetrahedralMesh(const PxArray<PxVec3> &inputVertices, const PxArray<PxU32> &inputIndices, bool useTreeNodes, PxArray<PxVec3> &outputVertices, PxArray<PxU32> &outputIndices, PxReal volumeThreshold = 0.0f)
Creates a tetrahedral mesh using an octree.
- Parameters
inputVertices – [in] The vertices of the input triangle mesh
inputIndices – [in] The indices of the input triangle mesh of the form (id0, id1, id2), (id0, id1, id2), ..
useTreeNodes – [in] Using the nodes of the octree as tetrahedral vertices
outputVertices – [out] The vertices of the output tetrahedral mesh
outputIndices – [out] The indices of the output tetrahedral mesh of the form (id0, id1, id2, id3), (id0, id1, id2, id3), ..
volumeThreshold – [in] Tetrahedra with a volume smaller than the specified threshold will be removed from the mesh
-
static void createRelaxedVoxelTetrahedralMesh(const PxArray<PxVec3> &inputVertices, const PxArray<PxU32> &inputIndices, PxArray<PxVec3> &outputVertices, PxArray<PxU32> &outputIndices, PxI32 resolution, PxI32 numRelaxationIterations = 5, PxF32 relMinTetVolume = 0.05f)
Creates a tetrahedral mesh by relaxing a voxel mesh around the input mesh.
- Parameters
inputVertices – [in] The vertices of the input triangle mesh
inputIndices – [in] The indices of the input triangle mesh of the form (id0, id1, id2), (id0, id1, id2), ..
outputVertices – [out] The vertices of the output tetrahedral mesh
outputIndices – [out] The indices of the output tetrahedral mesh of the form (id0, id1, id2, id3), (id0, id1, id2, id3), ..
resolution – [in] The grid spacing is computed as the diagonal of the bounding box of the input mesh divided by the resolution.
numRelaxationIterations – [in] Number of iterations to pull the tetrahedral mesh towards the input mesh
relMinTetVolume – [in] Constrains the volumes of the tetrahedra to stay abobe relMinTetvolume times the tetrahedron’s rest volume.
-
static void detectTriangleIslands(const PxI32 *triangles, PxU32 numTriangles, PxArray<PxU32> &islandIndexPerTriangle)
Creates a tetrahedral mesh by relaxing a voxel mesh around the input mesh.
- Parameters
triangles – [in] The indices of the input triangle mesh of the form (id0, id1, id2), (id0, id1, id2), ..
numTriangles – [in] The number of triangles
islandIndexPerTriangle – [out] Every triangle gets an island index assigned. Triangles with the same island index belong to the same patch of connected triangles.
-
static PxU32 findLargestIslandId(const PxU32 *islandIndexPerTriangle, PxU32 numTriangles)
Creates a tetrahedral mesh by relaxing a voxel mesh around the input mesh.
- Parameters
islandIndexPerTriangle – [in] An island marker per triangles. All triangles with the same marker belong to an island. Can becomputed using the method detectTriangleIslands.
numTriangles – [in] The number of triangles
- Returns
The marker value of the island that contains the most triangles
-
static bool createConformingTetrahedronMesh(const PxSimpleTriangleMesh &triangleMesh, physx::PxArray<physx::PxVec3> &outVertices, physx::PxArray<physx::PxU32> &outTetIndices, const bool validate = true, PxReal volumeThreshold = 0.0f)