void addTri(VertexLookup vl,UintVector &list,const Vector3d &p1,const Vector3d &p2,const Vector3d &p3) { unsigned int i1 = Vl_getIndex(vl, p1.Ptr() ); unsigned int i2 = Vl_getIndex(vl, p2.Ptr() ); unsigned int i3 = Vl_getIndex(vl, p3.Ptr() ); // do *not* process degenerate triangles! if ( i1 != i2 && i1 != i3 && i2 != i3 ) { list.push_back(i1); list.push_back(i2); list.push_back(i3); } }
void ConvexBuilder::getMesh(const ConvexResult &cr,VertexLookup vc,UintVector &indices) { unsigned int *src = cr.mHullIndices; for (unsigned int i=0; i<cr.mHullTcount; i++) { unsigned int i1 = *src++; unsigned int i2 = *src++; unsigned int i3 = *src++; const float *p1 = &cr.mHullVertices[i1*3]; const float *p2 = &cr.mHullVertices[i2*3]; const float *p3 = &cr.mHullVertices[i3*3]; i1 = Vl_getIndex(vc,p1); i2 = Vl_getIndex(vc,p2); i3 = Vl_getIndex(vc,p3); #if 0 bool duplicate = false; unsigned int tcount = indices.size()/3; for (unsigned int j=0; j<tcount; j++) { unsigned int ci1 = indices[j*3+0]; unsigned int ci2 = indices[j*3+1]; unsigned int ci3 = indices[j*3+2]; if ( isDuplicate(i1,i2,i3, ci1, ci2, ci3 ) ) { duplicate = true; break; } } if ( !duplicate ) { indices.push_back(i1); indices.push_back(i2); indices.push_back(i3); } #endif } }