Developer Documentation

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Classes | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
ACG::SceneGraph::ACG::MeshCompiler Class Reference

## Classes
struct | AdjacencyList
struct | Subset
struct | VertexElementInput
struct | VertexSplitter
struct | WeldList
struct | WeldListEntry

## Public Member Functions
| MeshCompiler (const VertexDeclaration &_decl)
void | getIndexAdjBuffer_MT (void *_dst, const int _borderIndex=-1)
| Multi-threaded version of getIndexAdjBuffer. More...
void | dbgdump (const char *_filename) const
| dump mesh info to text file
void | dbgdumpObj (const char *_filename) const
| dump mesh in wavefront obj format
void | dbgdumpInputBin (const char *_filename, bool _seperateFiles=false) const
| dump input mesh to binary file format
void | dbgdumpInputObj (const char *_filename) const
| dump input mesh to wavefront obj format
void | dbgdumpAdjList (const char *_filename) const
| dump adjacency list to text file
bool | dbgVerify (const char *_filename) const
| test correctness of input <-> output id mappings, unshared per face vertex.. logs errors in file
std::string | vertexToString (const void *v) const
| interpret vertex data according declaration and write to string
size_t | getMemoryUsage (bool _printConsole=true) const
std::string | checkInputData () const
| check for errors in input data
Vertex Data Input
void | setVertices (int _num, const void *_data, int _stride=0, bool _internalCopy=false, GLuint _fmt=0, int _elementSize=-1)
void | setNormals (int _num, const void *_data, int _stride=0, bool _internalCopy=false, GLuint _fmt=0, int _elementSize=-1)
void | setTexCoords (int _num, const void *_data, int _stride=0, bool _internalCopy=false, GLuint _fmt=0, int _elementSize=-1)
void | setAttribVec (int _attrIdx, int _num, const void *_data, int _stride=0, bool _internalCopy=false, GLuint _fmt=0, int _elementSize=-1)
void | setAttrib (int _attrIdx, int _v, const void *_data)
int | getNumInputAttributes (int _attrIdx) const
Flexible Face Data Input
void | setFaceInput (MeshCompilerFaceInput *_faceInput)
Default Face Data Input
void | setNumFaces (const int _numFaces, const int _numIndices)
| Set number of faces and indices if known by user. More...
void | setIndexBufferInterleaved (int _numTris, int _indexSize, const void *_indices)
| Set index buffer for a triangle mesh. More...
void | setFaceVerts (int _i, int _v0, int _v1, int _v2)
| Set vertex ids per triangle. More...
void | setFaceVerts (int _i, int _faceSize, int *_v)
| Set vertex ids per face. More...
void | setFaceNormals (int _i, int _v0, int _v1, int _v2)
| Set normal ids per triangle. More...
void | setFaceNormals (int _i, int _faceSize, int *_v)
| Set normal ids per face. More...
void | setFaceTexCoords (int _i, int _v0, int _v1, int _v2)
| Set texcoord ids per triangle. More...
void | setFaceTexCoords (int _i, int _faceSize, int *_v)
| Set texcoord ids per face. More...
void | setFaceAttrib (int _i, int _v0, int _v1, int _v2, int _attrID)
| Set attribute ids per triangle. More...
void | setFaceAttrib (int _i, int _faceSize, int *_v, int _attrID)
| Set attribute ids per face. More...
Face Grouping and Subsets
void | setFaceGroup (int _i, short _groupID)
| Specify face groups. More...
int | findGroupSubset (int _groupID)
| get subset ID of a group More...
int | getFaceGroup (int _faceID) const
| Get Face Group of the given face. More...
int | getTriGroup (int _triID) const
| Get Group Id of the triangle. More...
int | getNumSubsets () const
| Get the number of subsets. More...
const Subset * | getSubset (int _i) const
| get a specific subset More...
Mesh Compilation
void | build (bool _weldVertices=false, bool _optimizeVCache=true, bool _needPerFaceAttribute=false, bool _keepIsolatedVertices=false)
| Build vertex + index buffer. More...
int | getNumVertices () const
void | setProvokingVertex (int _v)
int | getProvokingVertex () const
void | getVertexBuffer (void *_dst, const int _offset=0, const int _range=-1)
| Get vertex buffer ready for rendering. More...
const int * | getIndexBuffer () const
void | getIndexAdjBuffer (void *_dst, const int _borderIndex=-1)
| Get index buffer with adjacency information ready for rendering. More...
void | getIndexAdjBuffer_BruteForce (void *_dst, const int _borderIndex=-1)
| Slow brute-force version of getIndexAdjBuffer. More...
int | getNumTriangles () const
int | getNumFaces () const
int | getFaceSize (const int _i) const
| Get size of input face. More...
const VertexDeclaration * | getVertexDeclaration () const
void | getVertex (int _id, void *_out) const
int | getIndex (int _i) const
Input/Output ID mapping
int | mapToOriginalVertexID (const int _i, int &_faceID, int &_cornerID) const
int | mapToOriginalFaceID (const int _triID) const
const int * | mapToOriginalFaceIDPtr () const
int | mapToDrawVertexID (const int _faceID, const int _cornerID) const
int | mapToDrawTriID (const int _faceID, const int _k=0, int *_numTrisOut=0) const
Triangulation properties
bool | isTriangleMesh () const
bool | isFaceEdge (const int _triID, const int _edge) const

## Private Member Functions
void | computeAdjacency ()
void | splitVertices ()
void | getInputFaceVertex (const int _face, const int _corner, int *_out) const
void | getInputFaceVertex_Welded (const int _face, const int _corner, int *_out) const
void | getInputFaceVertexData (const int _face, const int _corner, void *_out) const
int | getInputIndex (const int &_face, const int &_corner, const int &_attrId) const
int | getAdjVertexFaceCount (int _vertexID) const
int | getAdjVertexFace (int _vertexID, int _k) const
int | getInputIndexSplit (const int _face, const int _corner) const
void | setInputIndexSplit (const int _face, const int _corner, const int _val)
int | mapTriToInputFace (const int _tri) const
int | getInputIndexOffset (const int _face, const int _corner) const
int | getInputFaceOffset (const int _face) const
void | prepareData ()
| build() preparation
void | findIsolatedVertices ()
void | forceUnsharedFaceVertex ()
void | weldVertices ()
void | fixWeldMap ()
void | triangulate ()
void | resolveTriangulation ()
void | sortFacesByGroup ()
void | optimize ()
void | createVertexMap (bool _keepIsolatedVerts)
void | createFaceMap ()

## Private Attributes
VertexElementInput | input_ [16]
int | inputIDPos_
int | inputIDNorm_
int | inputIDTexC_
int | numAttributes_
VertexDeclaration | decl_
int | numFaces_
int | numIndices_
std::vector< int > | faceStart_
std::vector< int > | faceSize_
std::vector< int > | faceData_
size_t | maxFaceSize_
bool | constantFaceSize_
std::vector< short > | faceGroupIDs_
int | curFaceInputPos_
MeshCompilerFaceInput * | faceInput_
bool | deleteFaceInputeData_
std::vector< int > | faceBufSplit_
std::vector< int > | faceSortMap_
int | provokingVertex_
bool | provokingVertexSetByUser_
int | numTris_
std::vector< int > | triIndexBuffer_
std::vector< int > | isolatedVertices_
int | numSubsets_
std::vector< Subset > | subsets_
std::map< int, int > | subsetIDMap_
AdjacencyList | adjacencyVert_
MeshCompilerVertexCompare * | vertexCompare_
std::vector< int > | vertexWeldMapFace_
std::vector< int > | vertexWeldMapCorner_
VertexSplitter * | splitter_
std::vector< int > | triToSortFaceMap_
| maps from triangle ID to sorted face ID
std::vector< int > | triOptMap_
| maps from optimized tri ID to unoptimized tri ID
std::vector< int > | vertexMapFace_
| vertex index in vbo -> input (face id, corner id) pair , also inverse of faceBufSplit_
std::vector< int > | vertexMapCorner_
std::vector< int > | faceToTriMap_
| input face index -> output tri index
std::vector< int > | faceToTriMapOffset_
std::vector< int > | triToFaceMap_
| output tri index -> input face index
int | numDrawVerts_
| # vertices in vbo
int | numIsolatedVerts_
| # isolated vertices
std::vector< int > | indices_
| index buffer

## Static Private Attributes
static MeshCompilerVertexCompare | defaultVertexCompare

## Detailed Description

Definition at line 246 of file MeshNode2T.cc.

## Member Function Documentation

void ACG::SceneGraph::ACG::MeshCompiler::build | ( | bool | _weldVertices = `false`,
|  | bool | _optimizeVCache = `true`,
|  | bool | _needPerFaceAttribute = `false`,
|  | bool | _keepIsolatedVertices = `false`
| ) |  |

Build vertex + index buffer.

Parameters

  _weldVertices | Compare vertices and attempt to eliminate duplicates. High computation cost
  _optimizeVCache | Reorder faces for optimized vcache usage. High computation cost
  _needPerFaceAttribute | User wants to set per-face attributes in draw vertex buffer. Per-face data can be stored in the provoking vertex of each face. Low computation cost
  _keepIsolatedVertices | Isolated vertices should not be discarded in the output vertex buffer

int ACG::SceneGraph::ACG::MeshCompiler::findGroupSubset | ( | int | _groupID | ) |

get subset ID of a group

Parameters

  _groupID | Id of the group

Returns
  Subset Id

int ACG::SceneGraph::ACG::MeshCompiler::getFaceGroup | ( | int | _faceID | ) | const

Get Face Group of the given face.

Parameters

  _faceID | Id of the face

Returns
  Group Id

int ACG::SceneGraph::ACG::MeshCompiler::getFaceSize | ( | const int | _i | ) | const
| inline

Get size of input face.

Parameters

  _i | Index

Returns
  Size

Definition at line 604 of file MeshNode2T.cc.

int ACG::SceneGraph::ACG::MeshCompiler::getIndex | ( | int | _i | ) | const

Get index in final draw index buffer.

void ACG::SceneGraph::ACG::MeshCompiler::getIndexAdjBuffer | ( | void * | _dst,
|  | const int | _borderIndex = `-1`
| ) |  |

Get index buffer with adjacency information ready for rendering.

This index buffer can be used to render in GL_TRIANGLES_ADJACENCY mode. For each triangle, it contains the 3 neighboring triangles with a shared edge in addition to the triangle vertices. Each triangle stores 6 indices: 0 - first vertex of triangle 1 - opposite vertex to first edge of adjacent triangle 2 - second vertex of triangle 3 - opposite vertex to second edge of adjacent triangle 4 - third vertex of triangle 5 - opposite vertex to third edge of adjacent triangle

5___4___3 \ /\ / \/__\/ 0\ /2 \/ 1

Parameters

  _dst | [out] Pointer to memory address where the 32bit index buffer should be copied to. Must have size of at least 6 * numTris * 4 bytes
  _borderIndex | index to use for border edges (missing adjacent triangles)

void ACG::SceneGraph::ACG::MeshCompiler::getIndexAdjBuffer_BruteForce | ( | void * | _dst,
|  | const int | _borderIndex = `-1`
| ) |  |

Slow brute-force version of getIndexAdjBuffer.

Computes index buffer with adjacency information, but uses a much simpler algorithm. Runtime = O(n^2), but this can be used to verify the result of getIndexAdjBuffer. Results from brute-force and optimized algorithm must be equal for meshes where no edge is shared by more than two triangles.

Parameters

  _dst | [out] Pointer to memory address where the 32bit index buffer should be copied to. Must have size of at least 6 * numTris * 4 bytes
  _borderIndex | index to use for border edges (missing adjacent triangles)

void ACG::SceneGraph::ACG::MeshCompiler::getIndexAdjBuffer_MT | ( | void * | _dst,
|  | const int | _borderIndex = `-1`
| ) |  |

Multi-threaded version of getIndexAdjBuffer.

Uses a multi-threaded method based on the vertex-triangle adjacency list to compute the index buffer with adjacency.

Parameters

  _dst | [out] Pointer to memory address where the 32bit index buffer should be copied to. Must have size of at least 6 * numTris * 4 bytes
  _borderIndex | index to use for border edges (missing adjacent triangles)

const int* ACG::SceneGraph::ACG::MeshCompiler::getIndexBuffer | ( |  | ) | const
| inline

Get index buffer ready for rendering.

Definition at line 551 of file MeshNode2T.cc.

void ACG::SceneGraph::ACG::MeshCompiler::getInputFaceVertex | ( | const int | _face,
|  | const int | _corner,
|  | int * | _out
| ) |  | const
| private

i: face index j: corner index _out: output vertex (index for each attribute)

void ACG::SceneGraph::ACG::MeshCompiler::getInputFaceVertex_Welded | ( | const int | _face,
|  | const int | _corner,
|  | int * | _out
| ) |  | const
| private

i: face index j: corner index _out: output vertex (index for each attribute) post welding operation

void ACG::SceneGraph::ACG::MeshCompiler::getInputFaceVertexData | ( | const int | _face,
|  | const int | _corner,
|  | void * | _out
| ) |  | const
| private

i: face index j: corner index _out: output vertex address (vertex data)

size_t ACG::SceneGraph::ACG::MeshCompiler::getMemoryUsage | ( | bool | _printConsole = `true` | ) | const

return memory consumption in bytes

Parameters

  _printConsole | print detailed memory costs to command console

int ACG::SceneGraph::ACG::MeshCompiler::getNumFaces | ( |  | ) | const

Get number of input faces.

int ACG::SceneGraph::ACG::MeshCompiler::getNumInputAttributes | ( | int | _attrIdx | ) | const

Get number of attributes in an input buffer

Parameters

  _attrIdx | Attribute id from VertexDeclaration

int ACG::SceneGraph::ACG::MeshCompiler::getNumSubsets | ( |  | ) | const
| inline

Get the number of subsets.

Returns
  Number of subsets

Definition at line 489 of file MeshNode2T.cc.

int ACG::SceneGraph::ACG::MeshCompiler::getNumTriangles | ( |  | ) | const
| inline

Get number of triangles in final buffer.

Definition at line 593 of file MeshNode2T.cc.

int ACG::SceneGraph::ACG::MeshCompiler::getNumVertices | ( |  | ) | const
| inline

Get number of vertices in final buffer.

Definition at line 518 of file MeshNode2T.cc.

int ACG::SceneGraph::ACG::MeshCompiler::getProvokingVertex | ( |  | ) | const
| inline

See glProvokingVertex()

Returns
  provoking vertex id

Definition at line 536 of file MeshNode2T.cc.

const Subset* ACG::SceneGraph::ACG::MeshCompiler::getSubset | ( | int | _i | ) | const

get a specific subset

Parameters

  _i | Id of the subset

Returns
  The subset

int ACG::SceneGraph::ACG::MeshCompiler::getTriGroup | ( | int | _triID | ) | const

Get Group Id of the triangle.

Parameters

  _triID | Id of the triangle

Returns
  Group of the triangle

void ACG::SceneGraph::ACG::MeshCompiler::getVertex | ( | int | _id,
|  | void * | _out
| ) |  | const

Get vertex in final draw vertex buffer.

void ACG::SceneGraph::ACG::MeshCompiler::getVertexBuffer | ( | void * | _dst,
|  | const int | _offset = `0`,
|  | const int | _range = `-1`
| ) |  |

Get vertex buffer ready for rendering.

Query final vertex buffer data. Support vertex buffer batch uploads.

Parameters

  _dst | [out] Pointer to memory address where the vertex buffer should be copied to
  _offset | Begin of vertex buffer batch
  _range | Size of vertex buffer batch. Copies rest of buffer if _range < 0.

const VertexDeclaration* ACG::SceneGraph::ACG::MeshCompiler::getVertexDeclaration | ( |  | ) | const
| inline

Get Vertex declaration.

Definition at line 611 of file MeshNode2T.cc.

bool ACG::SceneGraph::ACG::MeshCompiler::isFaceEdge | ( | const int | _triID,
|  | const int | _edge
| ) |  | const

Test if a triangle edge is a face edge from the input buffer.

When a convex n-poly is subdivided into (n-2) triangles, new edges are created which do not exist in the input mesh. This function identifies if an edge was already existant in the input mesh or added during triangulation.

Parameters

  _triID | triangle ID in draw buffer
  _edge | edge of triangle, edge ordering: v0-v1, v1-v2, v2-v0

Returns
  true if the edge is an edge from an input face, false otherwise

bool ACG::SceneGraph::ACG::MeshCompiler::isTriangleMesh | ( |  | ) | const

Test if the input mesh consists of triangles only.

int ACG::SceneGraph::ACG::MeshCompiler::mapToDrawTriID | ( | const int | _faceID,
|  | const int | _k = `0`,
|  | int * | _numTrisOut = `0`
| ) |  | const

Mapping from input Face id -> draw triangle id

Parameters

  _faceID | Face ID in input data
  _k | triangle no. associated to face, offset 0
  _numTrisOut | [out] Number of triangles associated to face (if input face was n-poly)

Returns
  Draw Triangle ID in output vertex buffer

int ACG::SceneGraph::ACG::MeshCompiler::mapToDrawVertexID | ( | const int | _faceID,
|  | const int | _cornerID
| ) |  | const

Mapping from input vertex id -> draw vertex id

Parameters

  _faceID | Face ID in input data
  _cornerID | Corner of face

Returns
  Draw Vertex ID in output vertex buffer

int ACG::SceneGraph::ACG::MeshCompiler::mapToOriginalFaceID | ( | const int | _triID | ) | const

Mapping from draw tri id -> input face id

Parameters

  _triID | Triangle ID in draw index buffer

Returns
  Input Face ID

const int* ACG::SceneGraph::ACG::MeshCompiler::mapToOriginalFaceIDPtr | ( |  | ) | const

Get pointer to the lookup table mapping from tri id -> input face id

Returns
  ptr to address of lookup table with size getNumTriangles()

int ACG::SceneGraph::ACG::MeshCompiler::mapToOriginalVertexID | ( | const int | _i,
|  | int & | _faceID,
|  | int & | _cornerID
| ) |  | const

Mapping from draw vertex id -> input vertex id

Parameters

  _i | Vertex ID in draw buffer
  _faceID | [out] Face ID in face input buffer
  _cornerID | [out] Corner of face corresponding to vertex.

Returns
  Position ID in input buffer

void ACG::SceneGraph::ACG::MeshCompiler::setAttrib | ( | int | _attrIdx,
|  | int | _v,
|  | const void * | _data
| ) |  |

Set single custom input attributes.

An internal buffer for the requested attribute must be allocated before using this function. See setAttribVec()

Parameters

  _attrIdx | Attribute id from VertexDeclaration
  _v | Buffer id of the single attribute
  _data | attribute data

void ACG::SceneGraph::ACG::MeshCompiler::setAttribVec | ( | int | _attrIdx,
|  | int | _num,
|  | const void * | _data,
|  | int | _stride = `0`,
|  | bool | _internalCopy = `false`,
|  | GLuint | _fmt = `0`,
|  | int | _elementSize = `-1`
| ) |  |

Set custom input attribute.

Alternatively allocates an internal buffer only, such that data can be provided via setAttrib().

Parameters

  _attrIdx | Attribute id from VertexDeclaration
  _num | Number of attributes
  _data | Input data buffer, may be null to only allocate an internal buffer
  _stride | Offset difference in bytes to the next attribute in _data. Default value 0 indicates no data alignment/memory packing.
  _internalCopy | Create an internal buffer and make a copy _data
  _fmt | data format of one element (must be set if input data does not match vertex declaration)
  _elementSize | number of elements per attribute (i.e. 3 for vec3 .., -1 if unknown)

void ACG::SceneGraph::ACG::MeshCompiler::setFaceAttrib | ( | int | _i,
|  | int | _v0,
|  | int | _v1,
|  | int | _v2,
|  | int | _attrID
| ) |  |

Set attribute ids per triangle.

Parameters

  _i | Face id
  _v0 | 1st element id
  _v1 | 2nd element id
  _v2 | 3rd element id
  _attrID | Which attribute: index of VertexDeclaration element array

void ACG::SceneGraph::ACG::MeshCompiler::setFaceAttrib | ( | int | _i,
|  | int | _faceSize,
|  | int * | _v,
|  | int | _attrID
| ) |  |

Set attribute ids per face.

Parameters

  _i | Face id
  _faceSize | Size of face, ie. number of vertices of face
  _v | Element ids
  _attrID | Which attribute: index of VertexDeclaration element array

void ACG::SceneGraph::ACG::MeshCompiler::setFaceGroup | ( | int | _i,
|  | short | _groupID
| ) |  |

Specify face groups.

Faces with the same group ID will be chunked together in the sorting process. This feature may be used for material/texture subsets.

Parameters

  _i | Face ID
  _groupID | Custom group ID

void ACG::SceneGraph::ACG::MeshCompiler::setFaceInput | ( | MeshCompilerFaceInput * | _faceInput | ) |

Set Face data input

Making use of the MeshCompilerFaceInput interface completly overrides the default input behavior. Any subsequent call to default input data functions such as setNumFaces(), setFaceVerts() etc. will be ignored

Parameters

  _faceInput | user defined face input (no internal copy made, do not delete while using MeshCompiler)

void ACG::SceneGraph::ACG::MeshCompiler::setFaceNormals | ( | int | _i,
|  | int | _v0,
|  | int | _v1,
|  | int | _v2
| ) |  |

Set normal ids per triangle.

Parameters

  _i | Face ID
  _v0 | 1st normal id
  _v1 | 2nd normal id
  _v2 | 3rd normal id

void ACG::SceneGraph::ACG::MeshCompiler::setFaceNormals | ( | int | _i,
|  | int | _faceSize,
|  | int * | _v
| ) |  |

Set normal ids per face.

Parameters

  _i | Face id
  _faceSize | Size of face, ie. number of vertices of face
  _v | Normal ids

void ACG::SceneGraph::ACG::MeshCompiler::setFaceTexCoords | ( | int | _i,
|  | int | _v0,
|  | int | _v1,
|  | int | _v2
| ) |  |

Set texcoord ids per triangle.

Parameters

  _i | Face ID
  _v0 | 1st texcoord id
  _v1 | 2nd texcoord id
  _v2 | 3rd texcoord id

void ACG::SceneGraph::ACG::MeshCompiler::setFaceTexCoords | ( | int | _i,
|  | int | _faceSize,
|  | int * | _v
| ) |  |

Set texcoord ids per face.

Parameters

  _i | Face id
  _faceSize | Size of face, ie. number of vertices of face
  _v | Texcoord ids

void ACG::SceneGraph::ACG::MeshCompiler::setFaceVerts | ( | int | _i,
|  | int | _v0,
|  | int | _v1,
|  | int | _v2
| ) |  |

Set vertex ids per triangle.

Parameters

  _i | Face ID
  _v0 | 1st vertex id
  _v1 | 2nd vertex id
  _v2 | 3rd vertex id

void ACG::SceneGraph::ACG::MeshCompiler::setFaceVerts | ( | int | _i,
|  | int | _faceSize,
|  | int * | _v
| ) |  |

Set vertex ids per face.

Parameters

  _i | Face id
  _faceSize | Size of face, ie. number of vertices of face
  _v | Vertex ids

void ACG::SceneGraph::ACG::MeshCompiler::setIndexBufferInterleaved | ( | int | _numTris,
|  | int | _indexSize,
|  | const void * | _indices
| ) |  |

Set index buffer for a triangle mesh.

This should only be used if the input vertex buffer is interleaved already.

Parameters

  _numTris | Number of triangles.
  _indexSize | Size in bytes of one index.
  _indices | Pointer to a buffer containing the index data.

void ACG::SceneGraph::ACG::MeshCompiler::setNormals | ( | int | _num,
|  | const void * | _data,
|  | int | _stride = `0`,
|  | bool | _internalCopy = `false`,
|  | GLuint | _fmt = `0`,
|  | int | _elementSize = `-1`
| ) |  |

set input normals

Parameters

  _num | Number of normals
  _data | Pointer to normals data
  _stride | Difference in bytes between two normals positions in _data. Default value 0 indicates a tight float3 position array without any other data or memory alignment.
  _internalCopy | Memory optimization flag: select true if the provided data address is only temporarily valid. Otherwise an internal copy must be made.
  _fmt | data format of one element (must be set if input data does not match vertex declaration)
  _elementSize | number of elements per attribute (i.e. 3 for vec3 .., -1 if unknown)

void ACG::SceneGraph::ACG::MeshCompiler::setNumFaces | ( | const int | _numFaces,
|  | const int | _numIndices
| ) |  |

Set number of faces and indices if known by user.

User may give a rough estimate of face/index count. A more accurate estimation improves efficiency: too low numbers result in performance hit, too high numbers in memory consumption

Parameters

  _numFaces | Number of faces. Value 0 accepted at cost of performance
  _numIndices | Number of indices, i.e. 3 * numFaces for triangle meshes. Value 0 accepted at cost of performance

void ACG::SceneGraph::ACG::MeshCompiler::setProvokingVertex | ( | int | _v | ) |

See glProvokingVertex()

Specifiy the vertex to be used as the source of data for flat shading. The default value is 2, meaning that the last vertex of each triangle will be used. setProvokingVertex() must be called prior to build(), if a different provoking vertex is desired. Additionally build() has to set its _needPerFaceAttribute parameter to true to enable provoking vertices. The provoking vertex of a face is a vertex, which is not shared with any other face in the mesh.

Parameters

  _v | triangle vertex where the provoking vertex should be stored [0, 1, 2]

void ACG::SceneGraph::ACG::MeshCompiler::setTexCoords | ( | int | _num,
|  | const void * | _data,
|  | int | _stride = `0`,
|  | bool | _internalCopy = `false`,
|  | GLuint | _fmt = `0`,
|  | int | _elementSize = `-1`
| ) |  |

set input texture coords

Parameters

  _num | Number of texture coords
  _data | Pointer to texture coord data
  _stride | Difference in bytes between two texture coordinate positions in _data. Default value 0 indicates a tight float3 position array without any other data or memory alignment.
  _internalCopy | Memory optimization flag: select true if the provided data address is only temporarily valid. Otherwise an internal copy must be made.
  _fmt | data format of one element (must be set if input data does not match vertex declaration)
  _elementSize | number of elements per attribute (i.e. 3 for vec3 .., -1 if unknown)

void ACG::SceneGraph::ACG::MeshCompiler::setVertices | ( | int | _num,
|  | const void * | _data,
|  | int | _stride = `0`,
|  | bool | _internalCopy = `false`,
|  | GLuint | _fmt = `0`,
|  | int | _elementSize = `-1`
| ) |  |

set input vertex positions

Parameters

  _num | Number of vertex positions
  _data | Pointer to vertex data
  _stride | Difference in bytes between two vertex positions in _data. Default value 0 indicates a tight float3 position array without any other data or memory alignment.
  _internalCopy | Memory optimization flag: select true if the provided data address is only temporarily valid. Otherwise an internal copy must be made.
  _fmt | data format of one element (must be set if input data does not match vertex declaration)
  _elementSize | number of elements per attribute (i.e. 3 for vec3 .., -1 if unknown)

The documentation for this class was generated from the following file:

- ACG/Scenegraph/MeshNode2T.cc