Example #1
0
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));
}
Example #2
0
/**
 * 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;
}