IFXNeighborMeshUtil

The IFXNeighborMeshUtil interface provides utility procedures that operate on neighbor meshes and neighbor mesh container classes.

Interface Method

Description

BuildNeighborMesh

Builds neighbor links in pNeighborMesh according to the geometry in pMeshGroup

MarkAttributeDiscontinuities

Sets corner flags to mark edges that exhibit discontinuities

VerifyEdgesAndLoops

Verifies that the mesh links are valid circular linked lists and that edges share the correct vertices

VerifyVertexMap

Verifies that the vertex map group maps mesh vertices to vertices with the exact same position in space


IFXNeighborMeshUtil::BuildNeighborMesh( IFXNeighborMesh* pNeighborMesh, IFXMeshGroup* pMeshGroup, IFXVertexMapGroup* pVertexMapGroup

Builds neighbor links in pNeighborMesh according to the geometry in pMeshGroup. Assumes that Allocate() has been called on pNeighborMesh and pMeshGroup has been initialized with a mesh.

Parameters:

pNeighborMesh

Pointer to an IFXMeighborMesh

pMeshGroup

Pointer to an IFXMeshGroup

pVertexMapGroup

Pointer to an IFXVertexMapGroup

Return Values

Comments:

If pVertexMapGroup is NULL, then floating point comparisons of vertex positions are performed to find the coincident vertices. If a pVertexMapGroup is not NULL, then the vertex map is used to determine coincident vertices. Will return IFX_E_OUT_OF_MEMORY if during the process a memory allocation failed. Will return IFX_E_MESH_TO_LARGE if the number of vertices or number of faces exceeds the maximum neighbor mesh indices.

Note: The IFXVertexMapGroup method is much faster because it uses the vertex map created from the process of material partitioning the original mesh vertices. If the original mesh has duplicate vertices (vertices with different indices but same position) then the neighbor mesh will have boundaries on the edges with those vertices. If this is not desired, it is recommended that the user "weld" the vertices in 3D Studio MAX§ before exporting it.

The method using vertex position comparisons has O(n) performance at best (widely distributed points), and O(n^2) worst case (all vertices are the same position). Models tend to have distributed vertex positions.


IFXNeighborMeshUtil::MarkAttributeDiscontinuities (IFXMeshGroup *pMeshGrp, IFXNeighborMesh *pNeighborMesh);

Sets corner flags to mark edges that exhibit normal discontinuities, texture coordinate discontinuities, or non-manifold surface discontinuities.

Parameters:

pMeshGrp

Pointer to an IFXMeshGroup

pNeighborMesh

Pointer to an IFXNeighborMesh

Return Values


IFXNeighborMeshUtil::VerifyEdgesAndLoops(IFXMeshGroup* meshGroup, IFXVertexMapGroup* pVertexMapGroup);

(Debug utility.) Verifies that the mesh links are valid circular linked lists and that edges share the correct vertices.

Parameters:

meshGroup

Pointer to an IFXMeshGroup

pVertexMapGroup

Pointer to an IFXVertexMapGroup

Return Values:

None


IFXNeighborMeshUtil::VerifyVertexMap(IFXMeshGroup* pMeshGroup, IFXVertexMapGroup* pVertexMapGroup)

(Debug utility.) Verifies that the vertex map group maps mesh vertices to vertices with the exact same position in space.

Parameters:

pmeshGroup

Pointer to an IFXMeshGroup

pVertexMapGroup

Pointer to an IFXVertexMapGroup

Return Values:

None

§See asterisked (*) statement at Legal Information © 2001 Intel Corporation.