51 Q_PROPERTY(
float mass READ mass WRITE setMass NOTIFY massChanged)
52 Q_PROPERTY(
float density READ density WRITE setDensity NOTIFY densityChanged)
54 Q_PROPERTY(AxisLock linearAxisLock READ linearAxisLock WRITE setLinearAxisLock NOTIFY
55 linearAxisLockChanged REVISION(6, 5))
56 Q_PROPERTY(AxisLock angularAxisLock READ angularAxisLock WRITE setAngularAxisLock NOTIFY
57 angularAxisLockChanged REVISION(6, 5))
59 Q_PROPERTY(
bool isKinematic READ isKinematic WRITE setIsKinematic NOTIFY isKinematicChanged)
60 Q_PROPERTY(
bool gravityEnabled READ gravityEnabled WRITE setGravityEnabled NOTIFY
61 gravityEnabledChanged)
63 Q_PROPERTY(MassMode massMode READ massMode WRITE setMassMode NOTIFY massModeChanged)
64 Q_PROPERTY(QVector3D inertiaTensor READ inertiaTensor WRITE setInertiaTensor NOTIFY
66 Q_PROPERTY(QVector3D centerOfMassPosition READ centerOfMassPosition WRITE
67 setCenterOfMassPosition NOTIFY centerOfMassPositionChanged)
68 Q_PROPERTY(QQuaternion centerOfMassRotation READ centerOfMassRotation WRITE
69 setCenterOfMassRotation NOTIFY centerOfMassRotationChanged)
70 Q_PROPERTY(QList<
float> inertiaMatrix READ readInertiaMatrix WRITE setInertiaMatrix NOTIFY
71 inertiaMatrixChanged);
73 Q_PROPERTY(QVector3D kinematicPosition READ kinematicPosition WRITE setKinematicPosition NOTIFY
74 kinematicPositionChanged REVISION(6, 5));
75 Q_PROPERTY(QVector3D kinematicEulerRotation READ kinematicEulerRotation WRITE
76 setKinematicEulerRotation NOTIFY kinematicEulerRotationChanged REVISION(6,
78 Q_PROPERTY(QQuaternion kinematicRotation READ kinematicRotation WRITE setKinematicRotation
79 NOTIFY kinematicRotationChanged REVISION(6, 5));
80 Q_PROPERTY(QVector3D kinematicPivot READ kinematicPivot WRITE setKinematicPivot NOTIFY
81 kinematicPivotChanged REVISION(6, 5));
83 Q_PROPERTY(
bool isSleeping READ isSleeping WRITE setIsSleeping NOTIFY isSleepingChanged
97 QML_NAMED_ELEMENT(DynamicRigidBody)
101 ~QDynamicRigidBody();
104 void setMass(
float mass);
106 float density()
const;
107 void setDensity(
float density);
109 bool isKinematic()
const;
110 void setIsKinematic(
bool isKinematic);
112 Q_REVISION(6, 5) AxisLock linearAxisLock()
const;
113 Q_REVISION(6, 5)
void setLinearAxisLock(AxisLock newAxisLockLinear);
115 Q_REVISION(6, 5) AxisLock angularAxisLock()
const;
116 Q_REVISION(6, 5)
void setAngularAxisLock(AxisLock newAxisLockAngular);
118 bool gravityEnabled()
const;
119 void setGravityEnabled(
bool gravityEnabled);
121 Q_INVOKABLE
void applyCentralForce(
const QVector3D &force);
122 Q_INVOKABLE
void applyForce(
const QVector3D &force,
const QVector3D &position);
123 Q_INVOKABLE
void applyTorque(
const QVector3D &torque);
124 Q_INVOKABLE
void applyCentralImpulse(
const QVector3D &impulse);
125 Q_INVOKABLE
void applyImpulse(
const QVector3D &impulse,
const QVector3D &position);
126 Q_INVOKABLE
void applyTorqueImpulse(
const QVector3D &impulse);
127 Q_INVOKABLE
void setAngularVelocity(
const QVector3D &angularVelocity);
128 Q_INVOKABLE
void setLinearVelocity(
const QVector3D &linearVelocity);
129 Q_INVOKABLE
void reset(
const QVector3D &position,
const QVector3D &eulerRotation);
132 QQueue<QPhysicsCommand *> &commandQueue();
134 void updateDefaultDensity(
float defaultDensity);
136 MassMode massMode()
const;
137 void setMassMode(
const MassMode newMassMode);
139 const QVector3D &inertiaTensor()
const;
140 void setInertiaTensor(
const QVector3D &newInertiaTensor);
142 const QVector3D ¢erOfMassPosition()
const;
143 void setCenterOfMassPosition(
const QVector3D &newCenterOfMassPosition);
145 const QQuaternion ¢erOfMassRotation()
const;
146 void setCenterOfMassRotation(
const QQuaternion &newCenterOfMassRotation);
148 const QList<
float> &readInertiaMatrix()
const;
149 void setInertiaMatrix(
const QList<
float> &newInertiaMatrix);
150 const QMatrix3x3 &inertiaMatrix()
const;
152 Q_REVISION(6, 5)
void setKinematicPosition(
const QVector3D &position);
153 Q_REVISION(6, 5) QVector3D kinematicPosition()
const;
155 Q_REVISION(6, 5)
void setKinematicRotation(
const QQuaternion &rotation);
156 Q_REVISION(6, 5) QQuaternion kinematicRotation()
const;
158 Q_REVISION(6, 5)
void setKinematicEulerRotation(
const QVector3D &rotation);
159 Q_REVISION(6, 5) QVector3D kinematicEulerRotation()
const;
161 Q_REVISION(6, 5)
void setKinematicPivot(
const QVector3D &pivot);
162 Q_REVISION(6, 5) QVector3D kinematicPivot()
const;
164 Q_REVISION(6, 9)
void setIsSleeping(
bool newIsSleeping);
165 Q_REVISION(6, 9)
bool isSleeping()
const;
167 QAbstractPhysXNode *createPhysXBackend() final;
170 void massChanged(
float mass);
171 void densityChanged(
float density);
172 void isKinematicChanged(
bool isKinematic);
173 Q_REVISION(6, 5)
void linearAxisLockChanged();
174 Q_REVISION(6, 5)
void angularAxisLockChanged();
175 void gravityEnabledChanged();
176 void massModeChanged();
177 void inertiaTensorChanged();
178 void centerOfMassPositionChanged();
179 void centerOfMassRotationChanged();
180 void inertiaMatrixChanged();
181 Q_REVISION(6, 5)
void kinematicPositionChanged(
const QVector3D &kinematicPosition);
182 Q_REVISION(6, 5)
void kinematicRotationChanged(
const QQuaternion &kinematicRotation);
183 Q_REVISION(6, 5)
void kinematicEulerRotationChanged(
const QVector3D &kinematicEulerRotation);
184 Q_REVISION(6, 5)
void kinematicPivotChanged(
const QVector3D &kinematicPivot);
185 Q_REVISION(6, 9)
void isSleepingChanged(
bool isSleeping);
189 float m_density = 0.001f;
190 QVector3D m_centerOfMassPosition;
191 QQuaternion m_centerOfMassRotation;
192 QList<
float> m_inertiaMatrixList;
193 QMatrix3x3 m_inertiaMatrix;
194 QVector3D m_inertiaTensor;
196 bool m_isKinematic =
false;
197 AxisLock m_linearAxisLock = AxisLock::LockNone;
198 AxisLock m_angularAxisLock = AxisLock::LockNone;
199 QQueue<QPhysicsCommand *> m_commandQueue;
200 bool m_gravityEnabled =
true;
201 MassMode m_massMode = MassMode::DefaultDensity;
203 QVector3D m_kinematicPosition;
204 RotationData m_kinematicRotation;
205 QVector3D m_kinematicPivot;
206 bool m_isSleeping =
false;
void sync(float deltaTime, QHash< QQuick3DNode *, QMatrix4x4 > &transformCache) override
void rebuildDirtyShapes(QPhysicsWorld *world, QPhysXWorld *physX) override
static QMatrix4x4 calculateKinematicNodeTransform(QQuick3DNode *node, QHash< QQuick3DNode *, QMatrix4x4 > &transformCache)
static physx::PxTransform getPhysXWorldTransform(const QMatrix4x4 transform)
static physx::PxRigidDynamicLockFlags getLockFlags(QDynamicRigidBody *body)
static QT_BEGIN_NAMESPACE void processCommandQueue(QQueue< QPhysicsCommand * > &commandQueue, const QDynamicRigidBody &rigidBody, physx::PxRigidBody &body)