10void Scale(PxShape&shape,
const PxVec3&scaling) {
11 PxTransform pose = shape.getLocalPose();
13 PxGeometryHolder shapeGeom(shape.getGeometry());
15 switch ( shapeGeom.getType() ) {
16 case PxGeometryType::eBOX: {
17 PxBoxGeometry geom = shapeGeom.box();
18 Scale(geom, pose, scaling);
19 shape.setGeometry(geom);
21 case PxGeometryType::eSPHERE: {
22 PxSphereGeometry geom = shapeGeom.sphere();
23 Scale(geom, pose, scaling);
24 shape.setGeometry(geom);
26 case PxGeometryType::ePLANE: {
27 PxPlaneGeometry geom = shapeGeom.plane();
28 Scale(geom, pose, scaling);
29 shape.setGeometry(geom);
31 case PxGeometryType::eCAPSULE: {
32 PxCapsuleGeometry geom = shapeGeom.capsule();
33 Scale(geom, pose, scaling);
34 shape.setGeometry(geom);
36 case PxGeometryType::eCONVEXMESH: {
37 PxConvexMeshGeometry geom = shapeGeom.convexMesh();
38 Scale(geom, pose, scaling);
39 shape.setGeometry(geom);
41 case PxGeometryType::eTRIANGLEMESH: {
42 PxTriangleMeshGeometry geom = shapeGeom.triangleMesh();
43 Scale(geom, pose, scaling);
44 shape.setGeometry(geom);
47 case PxGeometryType::eHEIGHTFIELD:
48 case PxGeometryType::eGEOMETRY_COUNT:
break;
51 shape.setLocalPose(pose);
55void Scale(PxGeometry& geometry, PxTransform& pose,
const PxVec3& scaling) {
56 switch (geometry.getType()) {
57 case PxGeometryType::eBOX:
Scale(
static_cast<PxBoxGeometry&
>(geometry), pose, scaling);
break;
58 case PxGeometryType::eSPHERE:
Scale(
static_cast<PxSphereGeometry&
>(geometry), pose, scaling);
break;
59 case PxGeometryType::ePLANE:
Scale(
static_cast<PxPlaneGeometry&
>(geometry), pose, scaling);
break;
60 case PxGeometryType::eCAPSULE:
Scale(
static_cast<PxCapsuleGeometry&
>(geometry), pose, scaling);
break;
61 case PxGeometryType::eCONVEXMESH:
Scale(
static_cast<PxConvexMeshGeometry&
>(geometry), pose, scaling);
break;
62 case PxGeometryType::eTRIANGLEMESH:
Scale(
static_cast<PxTriangleMeshGeometry&
>(geometry), pose, scaling);
break;
68void Scale(PxBoxGeometry& geometry, PxTransform& pose,
const PxVec3& scaling) {
70 const PxMat33 scaleMat =
71 PxMat33::createDiagonal(scaling) *
73 geometry.halfExtents.x *= scaleMat.column0.magnitude();
74 geometry.halfExtents.y *= scaleMat.column1.magnitude();
75 geometry.halfExtents.z *= scaleMat.column2.magnitude();
77 pose.p = pose.p.multiply(scaling);
81void Scale(PxSphereGeometry& geometry, PxTransform& pose,
const PxVec3& scaling) {
83 geometry.radius *= std::pow(std::abs(scaling.x * scaling.y * scaling.z), 1.0f / 3.0f);
85 pose.p = pose.p.multiply(scaling);
89void Scale([[maybe_unused]] PxPlaneGeometry& geometry, PxTransform& pose,
const PxVec3& scaling) {
90 pose.p = pose.p.multiply(scaling);
94void Scale(PxCapsuleGeometry& geometry, PxTransform& pose,
const PxVec3& scaling) {
96 const PxMat33 scaleMat =
97 PxMat33::createDiagonal(scaling) *
99 geometry.halfHeight *= scaleMat.column0.magnitude();
102 Sqrt(scaleMat.column1.magnitude() * scaleMat.column2.magnitude());
104 pose.p = pose.p.multiply(scaling);
108void Scale(PxConvexMeshGeometry& geometry, PxTransform& pose,
const PxVec3& scaling) {
112 const PxMat33 scaleMat =
113 PxMat33::createDiagonal(scaling) *
115 geometry.scale.scale.x *= scaleMat.column0.magnitude();
116 geometry.scale.scale.y *= scaleMat.column1.magnitude();
117 geometry.scale.scale.z *= scaleMat.column2.magnitude();
123 pose.p = pose.p.multiply(scaling);
127void Scale(PxTriangleMeshGeometry&geometry, PxTransform&pose,
const PxVec3&scaling) {
131 const PxMat33 scaleMat =
132 PxMat33::createDiagonal(scaling) *
134 geometry.scale.scale.x *= scaleMat.column0.magnitude();
135 geometry.scale.scale.y *= scaleMat.column1.magnitude();
136 geometry.scale.scale.z *= scaleMat.column2.magnitude();
142 pose.p = pose.p.multiply(scaling);
Handle console commands that start with a forward slash.
void Scale(physx::PxShape &shape, const physx::PxVec3 &scaling)
Scales the given shape as precisely as possible.