void btTriangleMesh::addTriangle(const btVector3& vertex0,const btVector3& vertex1,const btVector3& vertex2,bool removeDuplicateVertices) { m_indexedMeshes[0].m_numTriangles++; addIndex(findOrAddVertex(vertex0,removeDuplicateVertices)); addIndex(findOrAddVertex(vertex1,removeDuplicateVertices)); addIndex(findOrAddVertex(vertex2,removeDuplicateVertices)); }
/** * Construct a extrusion object * * @param begin The bottom point * @param end The top point * @param radius The radius of the extrusion * @param segments The number of segments to use * @param m Material */ Extrusion::Extrusion(const Vector& begin, const Vector& end, double radius, uint32_t segments, Material* m) : Mesh(Mesh::MESH_PHONG,m) { Vector direction = end - begin; direction.normalize(); Circle b = Circle(begin,radius,direction); Circle e = Circle(end,radius,direction); Vector* bp = new Vector[segments]; // Points on begin circle Vector* ep = new Vector[segments]; // Points on end circle b.getPoints(segments,bp); e.getPoints(segments,ep); for(uint32_t i = 0; i < segments; i++) { uint32_t j = (i + 1) % segments; // TODO: Reuse vertices below // Discs addTriangle(findOrAddVertex(begin),findOrAddVertex(bp[j]),findOrAddVertex(bp[i])); addTriangle(findOrAddVertex(end),findOrAddVertex(ep[i]),findOrAddVertex(ep[j])); // Stem addTriangle(findOrAddVertex(ep[j]),findOrAddVertex(bp[j]),findOrAddVertex(bp[i])); addTriangle(findOrAddVertex(ep[i]),findOrAddVertex(ep[j]),findOrAddVertex(bp[i])); } delete [] bp; delete [] ep; }