Example #1
0
btCollisionShape *BT_CSfromBBox(const btVector3& bb_min, const btVector3& bb_max, bool /*useCompression*/, bool /*buildBvh*/)
{
    btTriangleMesh *trimesh = new btTriangleMesh;
    btCollisionShape* ret;
    int cnt = 0;

    OBB obb;
    struct Polygon *p = obb.base_polygons;
    obb.rebuild(bb_min, bb_max);
    for(uint16_t i=0;i<6;i++,p++)
    {
        if(p->isBroken())
        {
            continue;
        }
        for(size_t j=1; j+1<p->vertices.size(); j++)
        {
            const auto& v0 = p->vertices[j + 1].position;
            const auto& v1 = p->vertices[j].position;
            const auto& v2 = p->vertices[0].position;
            trimesh->addTriangle(v0, v1, v2, true);
        }
        cnt ++;
    }

    if(cnt == 0)                                                                // fixed: without that condition engine may easily crash
    {
        delete trimesh;
        return NULL;
    }

    ret = new btConvexTriangleMeshShape(trimesh, true);

    return ret;
}