| 723 | } |
| 724 | |
| 725 | static void visualize(const PxGeometry& geometry, RenderOutput& out, const PxTransform& absPose, const PxBounds3& cullbox, const PxReal fscale, bool visualizeShapes, bool visualizeEdges, bool useCullBox) |
| 726 | { |
| 727 | // triangle meshes can render active edges or face normals, but for other types we can just early out if there are no collision shapes |
| 728 | if(!visualizeShapes && geometry.getType() != PxGeometryType::eTRIANGLEMESH) |
| 729 | return; |
| 730 | |
| 731 | switch(geometry.getType()) |
| 732 | { |
| 733 | case PxGeometryType::eSPHERE: |
| 734 | visualizeSphere(static_cast<const PxSphereGeometry&>(geometry), out, absPose); |
| 735 | break; |
| 736 | case PxGeometryType::eBOX: |
| 737 | visualizeBox(static_cast<const PxBoxGeometry&>(geometry), out, absPose); |
| 738 | break; |
| 739 | case PxGeometryType::ePLANE: |
| 740 | visualizePlane(static_cast<const PxPlaneGeometry&>(geometry), out, absPose); |
| 741 | break; |
| 742 | case PxGeometryType::eCAPSULE: |
| 743 | visualizeCapsule(static_cast<const PxCapsuleGeometry&>(geometry), out, absPose); |
| 744 | break; |
| 745 | case PxGeometryType::eCONVEXMESH: |
| 746 | visualizeConvexMesh(static_cast<const PxConvexMeshGeometry&>(geometry), out, absPose); |
| 747 | break; |
| 748 | case PxGeometryType::eTRIANGLEMESH: |
| 749 | visualizeTriangleMesh(static_cast<const PxTriangleMeshGeometry&>(geometry), out, absPose, cullbox, fscale, visualizeShapes, visualizeEdges, useCullBox); |
| 750 | break; |
| 751 | case PxGeometryType::eHEIGHTFIELD: |
| 752 | visualizeHeightField(static_cast<const PxHeightFieldGeometry&>(geometry), out, absPose, cullbox, useCullBox); |
| 753 | break; |
| 754 | case PxGeometryType::eINVALID: |
| 755 | break; |
| 756 | case PxGeometryType::eGEOMETRY_COUNT: |
| 757 | break; |
| 758 | } |
| 759 | } |
| 760 | |
| 761 | void NpShapeManager::visualize(RenderOutput& out, NpScene* scene, const PxRigidActor& actor) |
| 762 | { |
no test coverage detected