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; }