PxConvexMesh* CreateWheelConvexMesh(const PxVec3* verts, const PxU32 numVerts) { //Extract the wheel radius and width from the aabb of the wheel convex mesh. PxVec3 wheelMin(PX_MAX_F32,PX_MAX_F32,PX_MAX_F32); PxVec3 wheelMax(-PX_MAX_F32,-PX_MAX_F32,-PX_MAX_F32); for(PxU32 i=0;i<numVerts;i++) { wheelMin.x=PxMin(wheelMin.x,verts[i].x); wheelMin.y=PxMin(wheelMin.y,verts[i].y); wheelMin.z=PxMin(wheelMin.z,verts[i].z); wheelMax.x=PxMax(wheelMax.x,verts[i].x); wheelMax.y=PxMax(wheelMax.y,verts[i].y); wheelMax.z=PxMax(wheelMax.z,verts[i].z); } const PxF32 wheelWidth=wheelMax.x-wheelMin.x; const PxF32 wheelRadius=PxMax(wheelMax.y,wheelMax.z); return CreateCylinderConvexMesh(wheelWidth,wheelRadius,8); }
void ComputeWheelWidthsAndRadii(PxConvexMesh** wheelConvexMeshes, PxF32* wheelWidths, PxF32* wheelRadii) { for(PxU32 i = 0; i < 4; i++) { const PxU32 numWheelVerts = wheelConvexMeshes[i]->getNbVertices(); const PxVec3* wheelVerts = wheelConvexMeshes[i]->getVertices(); PxVec3 wheelMin(PX_MAX_F32, PX_MAX_F32, PX_MAX_F32); PxVec3 wheelMax(-PX_MAX_F32, -PX_MAX_F32, -PX_MAX_F32); for(PxU32 j = 0; j < numWheelVerts; j++) { wheelMin.x = PxMin(wheelMin.x, wheelVerts[j].x); wheelMin.y = PxMin(wheelMin.y, wheelVerts[j].y); wheelMin.z = PxMin(wheelMin.z, wheelVerts[j].z); wheelMax.x = PxMax(wheelMax.x, wheelVerts[j].x); wheelMax.y = PxMax(wheelMax.y, wheelVerts[j].y); wheelMax.z = PxMax(wheelMax.z, wheelVerts[j].z); } wheelWidths[i] = wheelMax.y - wheelMin.y; wheelRadii[i] = PxMax(wheelMax.x, wheelMax.z) * 0.975f; } }