8#include "PxPhysicsAPI.h"
14 return static_cast<bool>(body.getRigidBodyFlags() & physx::PxRigidBodyFlag::eKINEMATIC);
23 physx::PxRigidBody &body)
38 physx::PxRigidBody &body)
53 physx::PxRigidBody &body)
67 physx::PxRigidBody &body)
82 physx::PxRigidBody &body)
89 physx::PxForceMode::eIMPULSE);
98 physx::PxRigidBody &body)
114 physx::PxRigidBody &body)
127 physx::PxRigidBody &body)
138 qWarning() <<
"Cannot set mass or density on a body containing trimesh/heightfield/plane, "
143 physx::PxRigidBodyExt::setMassAndUpdateInertia(body, mass);
147 physx::PxRigidBody &body)
150 qWarning() <<
"Cannot set mass or density on a body containing trimesh/heightfield/plane, "
156 body.setCMassLocalPose(
169 physx::PxRigidBody &body)
172 qWarning() <<
"Cannot set mass or density on a body containing trimesh/heightfield/plane, "
177 physx::PxQuat massFrame;
179 if ((diagTensor.x <= 0.0f) || (diagTensor.y <= 0.0f) || (diagTensor.z <= 0.0f))
182 body.setCMassLocalPose(physx::PxTransform(
185 body.setMassSpaceInertiaTensor(diagTensor);
194 physx::PxRigidBody &body)
197 qWarning() <<
"Cannot set mass or density on a body containing trimesh/heightfield/plane, "
202 const float clampedDensity =
qMax(0.0000001, density);
203 if (clampedDensity != density) {
204 qWarning() <<
"Clamping density " << density;
208 physx::PxRigidBodyExt::updateMassAndInertia(body, clampedDensity);
217 physx::PxRigidBody &body)
220 qWarning() <<
"Cannot make a body containing trimesh/heightfield/plane non-kinematic, "
225 body.setRigidBodyFlag(physx::PxRigidBodyFlag::eKINEMATIC, isKinematic);
234 physx::PxRigidBody &body)
237 body.setActorFlag(physx::PxActorFlag::eDISABLE_GRAVITY, !gravityEnabled);
248 body.setLinearVelocity(physx::PxVec3(0, 0, 0));
249 body.setAngularVelocity(physx::PxVec3(0, 0, 0));
252 QVector3D scenePosition = parentNode ? parentNode->mapPositionToScene(position) : position;
255 body.setGlobalPose(physx::PxTransform(
261 float inMass,
const QVector3D &inInertia)
bool hasStaticShapes() const
QQuaternion centerOfMassRotation
QVector3D centerOfMassPosition
QPhysicsCommandApplyCentralForce(const QVector3D &inForce)
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
QPhysicsCommandApplyCentralImpulse(const QVector3D &inImpulse)
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
QPhysicsCommandApplyForce(const QVector3D &inForce, const QVector3D &inPosition)
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
QPhysicsCommandApplyImpulse(const QVector3D &inImpulse, const QVector3D &inPosition)
QPhysicsCommandApplyTorqueImpulse(const QVector3D &inImpulse)
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
QPhysicsCommandApplyTorque(const QVector3D &inTorque)
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
QPhysicsCommandReset(QVector3D inPosition, QVector3D inEulerRotation)
QPhysicsCommandSetAngularVelocity(const QVector3D &inAngularVelocity)
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
QPhysicsCommandSetDensity(float inDensity)
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
QPhysicsCommandSetGravityEnabled(bool inGravityEnabled)
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
QPhysicsCommandSetIsKinematic(bool inIsKinematic)
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
QPhysicsCommandSetLinearVelocity(const QVector3D &inLinearVelocity)
QPhysicsCommandSetMassAndInertiaMatrix(float inMass, const QMatrix3x3 &inInertia)
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
QPhysicsCommandSetMassAndInertiaTensor(float inMass, const QVector3D &inInertia)
QPhysicsCommandSetMass(float inMass)
void execute(const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body) override
static QQuaternion fromEulerAngles(const QVector3D &eulerAngles)
QQuick3DNode * parentNode() const
The QVector3D class represents a vector or vertex in 3D space.
Q_ALWAYS_INLINE physx::PxVec3 toPhysXType(const QVector3D &qvec)
Combined button and popup list for selecting options.
constexpr const T & qMax(const T &a, const T &b)
static QT_BEGIN_NAMESPACE bool isKinematicBody(physx::PxRigidBody &body)
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)