59 Q_PROPERTY(
float mass READ mass WRITE setMass NOTIFY massChanged)
60 Q_PROPERTY(
float density READ density WRITE setDensity NOTIFY densityChanged)
62 Q_PROPERTY(AxisLock linearAxisLock READ linearAxisLock WRITE setLinearAxisLock NOTIFY
63 linearAxisLockChanged REVISION(6, 5))
64 Q_PROPERTY(AxisLock angularAxisLock READ angularAxisLock WRITE setAngularAxisLock NOTIFY
65 angularAxisLockChanged REVISION(6, 5))
67 Q_PROPERTY(CCDType ccd READ ccd WRITE setCCD NOTIFY ccdChanged REVISION(6, 13))
69 Q_PROPERTY(
bool isKinematic READ isKinematic WRITE setIsKinematic NOTIFY isKinematicChanged)
70 Q_PROPERTY(
bool gravityEnabled READ gravityEnabled WRITE setGravityEnabled NOTIFY
71 gravityEnabledChanged)
73 Q_PROPERTY(MassMode massMode READ massMode WRITE setMassMode NOTIFY massModeChanged)
74 Q_PROPERTY(QVector3D inertiaTensor READ inertiaTensor WRITE setInertiaTensor NOTIFY
76 Q_PROPERTY(QVector3D centerOfMassPosition READ centerOfMassPosition WRITE
77 setCenterOfMassPosition NOTIFY centerOfMassPositionChanged)
78 Q_PROPERTY(QQuaternion centerOfMassRotation READ centerOfMassRotation WRITE
79 setCenterOfMassRotation NOTIFY centerOfMassRotationChanged)
80 Q_PROPERTY(QList<
float> inertiaMatrix READ readInertiaMatrix WRITE setInertiaMatrix NOTIFY
81 inertiaMatrixChanged);
83 Q_PROPERTY(QVector3D kinematicPosition READ kinematicPosition WRITE setKinematicPosition NOTIFY
84 kinematicPositionChanged REVISION(6, 5));
85 Q_PROPERTY(QVector3D kinematicEulerRotation READ kinematicEulerRotation WRITE
86 setKinematicEulerRotation NOTIFY kinematicEulerRotationChanged REVISION(6,
88 Q_PROPERTY(QQuaternion kinematicRotation READ kinematicRotation WRITE setKinematicRotation
89 NOTIFY kinematicRotationChanged REVISION(6, 5));
90 Q_PROPERTY(QVector3D kinematicPivot READ kinematicPivot WRITE setKinematicPivot NOTIFY
91 kinematicPivotChanged REVISION(6, 5));
93 Q_PROPERTY(
bool isSleeping READ isSleeping WRITE setIsSleeping NOTIFY isSleepingChanged
95 Q_PROPERTY(QVector3D linearVelocity READ linearVelocity NOTIFY linearVelocityChanged
97 Q_PROPERTY(QVector3D angularVelocity READ angularVelocity NOTIFY angularVelocityChanged
111 QML_NAMED_ELEMENT(DynamicRigidBody)
115 ~QDynamicRigidBody();
118 void setMass(
float mass);
120 float density()
const;
121 void setDensity(
float density);
123 bool isKinematic()
const;
124 void setIsKinematic(
bool isKinematic);
126 Q_REVISION(6, 13) CCDType ccd()
const;
127 Q_REVISION(6, 13)
void setCCD(CCDType newCCD);
129 Q_REVISION(6, 5) AxisLock linearAxisLock()
const;
130 Q_REVISION(6, 5)
void setLinearAxisLock(AxisLock newAxisLockLinear);
132 Q_REVISION(6, 5) AxisLock angularAxisLock()
const;
133 Q_REVISION(6, 5)
void setAngularAxisLock(AxisLock newAxisLockAngular);
135 bool gravityEnabled()
const;
136 void setGravityEnabled(
bool gravityEnabled);
138 Q_INVOKABLE
void applyCentralForce(
const QVector3D &force);
139 Q_INVOKABLE
void applyForce(
const QVector3D &force,
const QVector3D &position);
140 Q_INVOKABLE
void applyTorque(
const QVector3D &torque);
141 Q_INVOKABLE
void applyCentralImpulse(
const QVector3D &impulse);
142 Q_INVOKABLE
void applyImpulse(
const QVector3D &impulse,
const QVector3D &position);
143 Q_INVOKABLE
void applyTorqueImpulse(
const QVector3D &impulse);
144 Q_INVOKABLE
void setAngularVelocity(
const QVector3D &angularVelocity);
145 Q_INVOKABLE
void setLinearVelocity(
const QVector3D &linearVelocity);
146 Q_INVOKABLE
void reset(
const QVector3D &position,
const QVector3D &eulerRotation);
149 QQueue<QPhysicsCommand *> &commandQueue();
151 void updateDefaultDensity(
float defaultDensity);
153 MassMode massMode()
const;
154 void setMassMode(
const MassMode newMassMode);
156 const QVector3D &inertiaTensor()
const;
157 void setInertiaTensor(
const QVector3D &newInertiaTensor);
159 const QVector3D ¢erOfMassPosition()
const;
160 void setCenterOfMassPosition(
const QVector3D &newCenterOfMassPosition);
162 const QQuaternion ¢erOfMassRotation()
const;
163 void setCenterOfMassRotation(
const QQuaternion &newCenterOfMassRotation);
165 const QList<
float> &readInertiaMatrix()
const;
166 void setInertiaMatrix(
const QList<
float> &newInertiaMatrix);
167 const QMatrix3x3 &inertiaMatrix()
const;
169 Q_REVISION(6, 5)
void setKinematicPosition(
const QVector3D &position);
170 Q_REVISION(6, 5) QVector3D kinematicPosition()
const;
172 Q_REVISION(6, 5)
void setKinematicRotation(
const QQuaternion &rotation);
173 Q_REVISION(6, 5) QQuaternion kinematicRotation()
const;
175 Q_REVISION(6, 5)
void setKinematicEulerRotation(
const QVector3D &rotation);
176 Q_REVISION(6, 5) QVector3D kinematicEulerRotation()
const;
178 Q_REVISION(6, 5)
void setKinematicPivot(
const QVector3D &pivot);
179 Q_REVISION(6, 5) QVector3D kinematicPivot()
const;
181 Q_REVISION(6, 9)
void setIsSleeping(
bool newIsSleeping);
182 Q_REVISION(6, 9)
bool isSleeping()
const;
184 Q_REVISION(6, 13) QVector3D linearVelocity()
const;
185 Q_REVISION(6, 13) QVector3D angularVelocity()
const;
187 void updateLinearVelocity(
const QVector3D &velocity);
188 void updateAngularVelocity(
const QVector3D &velocity);
190 QAbstractPhysXNode *createPhysXBackend() final;
193 void massChanged(
float mass);
194 void densityChanged(
float density);
195 void isKinematicChanged(
bool isKinematic);
196 Q_REVISION(6, 13)
void ccdChanged();
198 Q_REVISION(6, 5)
void linearAxisLockChanged();
199 Q_REVISION(6, 5)
void angularAxisLockChanged();
200 void gravityEnabledChanged();
201 void massModeChanged();
202 void inertiaTensorChanged();
203 void centerOfMassPositionChanged();
204 void centerOfMassRotationChanged();
205 void inertiaMatrixChanged();
206 Q_REVISION(6, 5)
void kinematicPositionChanged(
const QVector3D &kinematicPosition);
207 Q_REVISION(6, 5)
void kinematicRotationChanged(
const QQuaternion &kinematicRotation);
208 Q_REVISION(6, 5)
void kinematicEulerRotationChanged(
const QVector3D &kinematicEulerRotation);
209 Q_REVISION(6, 5)
void kinematicPivotChanged(
const QVector3D &kinematicPivot);
210 Q_REVISION(6, 9)
void isSleepingChanged(
bool isSleeping);
211 Q_REVISION(6, 13)
void linearVelocityChanged(
const QVector3D &linearVelocity);
212 Q_REVISION(6, 13)
void angularVelocityChanged(
const QVector3D &angularVelocity);
216 float m_density = 0.001f;
217 QVector3D m_centerOfMassPosition;
218 QQuaternion m_centerOfMassRotation;
219 QList<
float> m_inertiaMatrixList;
220 QMatrix3x3 m_inertiaMatrix;
221 QVector3D m_inertiaTensor;
223 CCDType m_CCD = CCDType::None;
224 bool m_isKinematic =
false;
225 AxisLock m_linearAxisLock = AxisLock::LockNone;
226 AxisLock m_angularAxisLock = AxisLock::LockNone;
227 QQueue<QPhysicsCommand *> m_commandQueue;
228 bool m_gravityEnabled =
true;
229 MassMode m_massMode = MassMode::DefaultDensity;
231 QVector3D m_kinematicPosition;
232 RotationData m_kinematicRotation;
233 QVector3D m_kinematicPivot;
234 bool m_isSleeping =
false;
235 QVector3D m_linearVelocity;
236 QVector3D m_angularVelocity;
void sync(float deltaTime, QHash< QQuick3DNode *, QMatrix4x4 > &transformCache) 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::PxRigidDynamic &body)