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
107 QML_NAMED_ELEMENT(DynamicRigidBody)
111 ~QDynamicRigidBody();
114 void setMass(
float mass);
116 float density()
const;
117 void setDensity(
float density);
119 bool isKinematic()
const;
120 void setIsKinematic(
bool isKinematic);
122 Q_REVISION(6, 13) CCDType ccd()
const;
123 Q_REVISION(6, 13)
void setCCD(CCDType newCCD);
125 Q_REVISION(6, 5) AxisLock linearAxisLock()
const;
126 Q_REVISION(6, 5)
void setLinearAxisLock(AxisLock newAxisLockLinear);
128 Q_REVISION(6, 5) AxisLock angularAxisLock()
const;
129 Q_REVISION(6, 5)
void setAngularAxisLock(AxisLock newAxisLockAngular);
131 bool gravityEnabled()
const;
132 void setGravityEnabled(
bool gravityEnabled);
134 Q_INVOKABLE
void applyCentralForce(
const QVector3D &force);
135 Q_INVOKABLE
void applyForce(
const QVector3D &force,
const QVector3D &position);
136 Q_INVOKABLE
void applyTorque(
const QVector3D &torque);
137 Q_INVOKABLE
void applyCentralImpulse(
const QVector3D &impulse);
138 Q_INVOKABLE
void applyImpulse(
const QVector3D &impulse,
const QVector3D &position);
139 Q_INVOKABLE
void applyTorqueImpulse(
const QVector3D &impulse);
140 Q_INVOKABLE
void setAngularVelocity(
const QVector3D &angularVelocity);
141 Q_INVOKABLE
void setLinearVelocity(
const QVector3D &linearVelocity);
142 Q_INVOKABLE
void reset(
const QVector3D &position,
const QVector3D &eulerRotation);
145 QQueue<QPhysicsCommand *> &commandQueue();
147 void updateDefaultDensity(
float defaultDensity);
149 MassMode massMode()
const;
150 void setMassMode(
const MassMode newMassMode);
152 const QVector3D &inertiaTensor()
const;
153 void setInertiaTensor(
const QVector3D &newInertiaTensor);
155 const QVector3D ¢erOfMassPosition()
const;
156 void setCenterOfMassPosition(
const QVector3D &newCenterOfMassPosition);
158 const QQuaternion ¢erOfMassRotation()
const;
159 void setCenterOfMassRotation(
const QQuaternion &newCenterOfMassRotation);
161 const QList<
float> &readInertiaMatrix()
const;
162 void setInertiaMatrix(
const QList<
float> &newInertiaMatrix);
163 const QMatrix3x3 &inertiaMatrix()
const;
165 Q_REVISION(6, 5)
void setKinematicPosition(
const QVector3D &position);
166 Q_REVISION(6, 5) QVector3D kinematicPosition()
const;
168 Q_REVISION(6, 5)
void setKinematicRotation(
const QQuaternion &rotation);
169 Q_REVISION(6, 5) QQuaternion kinematicRotation()
const;
171 Q_REVISION(6, 5)
void setKinematicEulerRotation(
const QVector3D &rotation);
172 Q_REVISION(6, 5) QVector3D kinematicEulerRotation()
const;
174 Q_REVISION(6, 5)
void setKinematicPivot(
const QVector3D &pivot);
175 Q_REVISION(6, 5) QVector3D kinematicPivot()
const;
177 Q_REVISION(6, 9)
void setIsSleeping(
bool newIsSleeping);
178 Q_REVISION(6, 9)
bool isSleeping()
const;
180 QAbstractPhysXNode *createPhysXBackend() final;
183 void massChanged(
float mass);
184 void densityChanged(
float density);
185 void isKinematicChanged(
bool isKinematic);
186 Q_REVISION(6, 13)
void ccdChanged();
188 Q_REVISION(6, 5)
void linearAxisLockChanged();
189 Q_REVISION(6, 5)
void angularAxisLockChanged();
190 void gravityEnabledChanged();
191 void massModeChanged();
192 void inertiaTensorChanged();
193 void centerOfMassPositionChanged();
194 void centerOfMassRotationChanged();
195 void inertiaMatrixChanged();
196 Q_REVISION(6, 5)
void kinematicPositionChanged(
const QVector3D &kinematicPosition);
197 Q_REVISION(6, 5)
void kinematicRotationChanged(
const QQuaternion &kinematicRotation);
198 Q_REVISION(6, 5)
void kinematicEulerRotationChanged(
const QVector3D &kinematicEulerRotation);
199 Q_REVISION(6, 5)
void kinematicPivotChanged(
const QVector3D &kinematicPivot);
200 Q_REVISION(6, 9)
void isSleepingChanged(
bool isSleeping);
204 float m_density = 0.001f;
205 QVector3D m_centerOfMassPosition;
206 QQuaternion m_centerOfMassRotation;
207 QList<
float> m_inertiaMatrixList;
208 QMatrix3x3 m_inertiaMatrix;
209 QVector3D m_inertiaTensor;
211 CCDType m_CCD = CCDType::None;
212 bool m_isKinematic =
false;
213 AxisLock m_linearAxisLock = AxisLock::LockNone;
214 AxisLock m_angularAxisLock = AxisLock::LockNone;
215 QQueue<QPhysicsCommand *> m_commandQueue;
216 bool m_gravityEnabled =
true;
217 MassMode m_massMode = MassMode::DefaultDensity;
219 QVector3D m_kinematicPosition;
220 RotationData m_kinematicRotation;
221 QVector3D m_kinematicPivot;
222 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)