19 : m_use32bitIndices(use32bitIndices),
20 m_use4componentVertices(use4componentVertices),
21 m_weldingThreshold(0.0)
24 meshIndex.m_numTriangles = 0;
25 meshIndex.m_numVertices = 0;
27 meshIndex.m_triangleIndexBase = 0;
28 meshIndex.m_triangleIndexStride = 3 *
sizeof(int);
29 meshIndex.m_vertexBase = 0;
30 meshIndex.m_vertexStride =
sizeof(
btVector3);
31 m_indexedMeshes.push_back(meshIndex);
33 if (m_use32bitIndices)
35 m_indexedMeshes[0].m_numTriangles = m_32bitIndices.
size() / 3;
36 m_indexedMeshes[0].m_triangleIndexBase = 0;
38 m_indexedMeshes[0].m_triangleIndexStride = 3 *
sizeof(int);
42 m_indexedMeshes[0].m_numTriangles = m_16bitIndices.
size() / 3;
43 m_indexedMeshes[0].m_triangleIndexBase = 0;
44 m_indexedMeshes[0].m_indexType =
PHY_SHORT;
45 m_indexedMeshes[0].m_triangleIndexStride = 3 *
sizeof(
short int);
48 if (m_use4componentVertices)
50 m_indexedMeshes[0].m_numVertices = m_4componentVertices.
size();
51 m_indexedMeshes[0].m_vertexBase = 0;
52 m_indexedMeshes[0].m_vertexStride =
sizeof(
btVector3);
56 m_indexedMeshes[0].m_numVertices = m_3componentVertices.
size() / 3;
57 m_indexedMeshes[0].m_vertexBase = 0;
58 m_indexedMeshes[0].m_vertexStride = 3 *
sizeof(
btScalar);
64 if (m_use32bitIndices)
67 m_indexedMeshes[0].m_triangleIndexBase = (
unsigned char*)&m_32bitIndices[0];
72 m_indexedMeshes[0].m_triangleIndexBase = (
unsigned char*)&m_16bitIndices[0];
78 m_indexedMeshes[0].m_numTriangles++;
88 if (m_use4componentVertices)
90 if (removeDuplicateVertices)
92 for (
int i = 0; i < m_4componentVertices.
size(); i++)
100 m_indexedMeshes[0].m_numVertices++;
102 m_indexedMeshes[0].m_vertexBase = (
unsigned char*)&m_4componentVertices[0];
104 return m_4componentVertices.
size() - 1;
108 if (removeDuplicateVertices)
110 for (
int i = 0; i < m_3componentVertices.
size(); i += 3)
112 btVector3 vtx(m_3componentVertices[i], m_3componentVertices[i + 1], m_3componentVertices[i + 2]);
119 m_3componentVertices.
push_back(vertex.getX());
120 m_3componentVertices.
push_back(vertex.getY());
121 m_3componentVertices.
push_back(vertex.getZ());
122 m_indexedMeshes[0].m_numVertices++;
123 m_indexedMeshes[0].m_vertexBase = (
unsigned char*)&m_3componentVertices[0];
124 return (m_3componentVertices.
size() / 3) - 1;
130 m_indexedMeshes[0].m_numTriangles++;
138 if (m_use32bitIndices)
140 return m_32bitIndices.
size() / 3;
142 return m_16bitIndices.
size() / 3;
147 if (m_use4componentVertices)
149 m_4componentVertices.
reserve(numverts);
153 m_3componentVertices.
reserve(numverts);
159 if (m_use32bitIndices)
161 m_32bitIndices.
reserve(numindices);
165 m_16bitIndices.
reserve(numindices);
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
SIMD_FORCE_INLINE btScalar length2() const
Return the length of the vector squared.
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
SIMD_FORCE_INLINE void reserve(int _Count)
SIMD_FORCE_INLINE int size() const
return the number of elements in the array
SIMD_FORCE_INLINE void push_back(const T &_Val)
virtual void preallocateIndices(int numindices)
btScalar m_weldingThreshold
void addTriangle(const btVector3 &vertex0, const btVector3 &vertex1, const btVector3 &vertex2, bool removeDuplicateVertices=false)
int getNumTriangles() const
int findOrAddVertex(const btVector3 &vertex, bool removeDuplicateVertices)
findOrAddVertex is an internal method, use addTriangle instead
void addTriangleIndices(int index1, int index2, int index3)
Add a triangle using its indices. Make sure the indices are pointing within the vertices array,...
btTriangleMesh(bool use32bitIndices=true, bool use4componentVertices=true)
virtual void preallocateVertices(int numverts)
void addIndex(int index)
addIndex is an internal method, use addTriangle instead