52 Q_PROPERTY(
float mass READ mass WRITE setMass NOTIFY massChanged)
53 Q_PROPERTY(
float density READ density WRITE setDensity NOTIFY densityChanged)
55 Q_PROPERTY(AxisLock linearAxisLock READ linearAxisLock WRITE setLinearAxisLock NOTIFY
56 linearAxisLockChanged REVISION(6, 5))
57 Q_PROPERTY(AxisLock angularAxisLock READ angularAxisLock WRITE setAngularAxisLock NOTIFY
58 angularAxisLockChanged REVISION(6, 5))
60 Q_PROPERTY(
bool isKinematic READ isKinematic WRITE setIsKinematic NOTIFY isKinematicChanged)
61 Q_PROPERTY(
bool gravityEnabled READ gravityEnabled WRITE setGravityEnabled NOTIFY
62 gravityEnabledChanged)
64 Q_PROPERTY(MassMode massMode READ massMode WRITE setMassMode NOTIFY massModeChanged)
65 Q_PROPERTY(QVector3D inertiaTensor READ inertiaTensor WRITE setInertiaTensor NOTIFY
67 Q_PROPERTY(QVector3D centerOfMassPosition READ centerOfMassPosition WRITE
68 setCenterOfMassPosition NOTIFY centerOfMassPositionChanged)
69 Q_PROPERTY(QQuaternion centerOfMassRotation READ centerOfMassRotation WRITE
70 setCenterOfMassRotation NOTIFY centerOfMassRotationChanged)
71 Q_PROPERTY(QList<
float> inertiaMatrix READ readInertiaMatrix WRITE setInertiaMatrix NOTIFY
72 inertiaMatrixChanged);
74 Q_PROPERTY(QVector3D kinematicPosition READ kinematicPosition WRITE setKinematicPosition NOTIFY
75 kinematicPositionChanged REVISION(6, 5));
76 Q_PROPERTY(QVector3D kinematicEulerRotation READ kinematicEulerRotation WRITE
77 setKinematicEulerRotation NOTIFY kinematicEulerRotationChanged REVISION(6,
79 Q_PROPERTY(QQuaternion kinematicRotation READ kinematicRotation WRITE setKinematicRotation
80 NOTIFY kinematicRotationChanged REVISION(6, 5));
81 Q_PROPERTY(QVector3D kinematicPivot READ kinematicPivot WRITE setKinematicPivot NOTIFY
82 kinematicPivotChanged REVISION(6, 5));
84 Q_PROPERTY(
bool isSleeping READ isSleeping WRITE setIsSleeping NOTIFY isSleepingChanged
98 QML_NAMED_ELEMENT(DynamicRigidBody)
102 ~QDynamicRigidBody();
105 void setMass(
float mass);
107 float density()
const;
108 void setDensity(
float density);
110 bool isKinematic()
const;
111 void setIsKinematic(
bool isKinematic);
113 Q_REVISION(6, 5) AxisLock linearAxisLock()
const;
114 Q_REVISION(6, 5)
void setLinearAxisLock(AxisLock newAxisLockLinear);
116 Q_REVISION(6, 5) AxisLock angularAxisLock()
const;
117 Q_REVISION(6, 5)
void setAngularAxisLock(AxisLock newAxisLockAngular);
119 bool gravityEnabled()
const;
120 void setGravityEnabled(
bool gravityEnabled);
122 Q_INVOKABLE
void applyCentralForce(
const QVector3D &force);
123 Q_INVOKABLE
void applyForce(
const QVector3D &force,
const QVector3D &position);
124 Q_INVOKABLE
void applyTorque(
const QVector3D &torque);
125 Q_INVOKABLE
void applyCentralImpulse(
const QVector3D &impulse);
126 Q_INVOKABLE
void applyImpulse(
const QVector3D &impulse,
const QVector3D &position);
127 Q_INVOKABLE
void applyTorqueImpulse(
const QVector3D &impulse);
128 Q_INVOKABLE
void setAngularVelocity(
const QVector3D &angularVelocity);
129 Q_INVOKABLE
void setLinearVelocity(
const QVector3D &linearVelocity);
130 Q_INVOKABLE
void reset(
const QVector3D &position,
const QVector3D &eulerRotation);
133 QQueue<QPhysicsCommand *> &commandQueue();
135 void updateDefaultDensity(
float defaultDensity);
137 MassMode massMode()
const;
138 void setMassMode(
const MassMode newMassMode);
140 const QVector3D &inertiaTensor()
const;
141 void setInertiaTensor(
const QVector3D &newInertiaTensor);
143 const QVector3D ¢erOfMassPosition()
const;
144 void setCenterOfMassPosition(
const QVector3D &newCenterOfMassPosition);
146 const QQuaternion ¢erOfMassRotation()
const;
147 void setCenterOfMassRotation(
const QQuaternion &newCenterOfMassRotation);
149 const QList<
float> &readInertiaMatrix()
const;
150 void setInertiaMatrix(
const QList<
float> &newInertiaMatrix);
151 const QMatrix3x3 &inertiaMatrix()
const;
153 Q_REVISION(6, 5)
void setKinematicPosition(
const QVector3D &position);
154 Q_REVISION(6, 5) QVector3D kinematicPosition()
const;
156 Q_REVISION(6, 5)
void setKinematicRotation(
const QQuaternion &rotation);
157 Q_REVISION(6, 5) QQuaternion kinematicRotation()
const;
159 Q_REVISION(6, 5)
void setKinematicEulerRotation(
const QVector3D &rotation);
160 Q_REVISION(6, 5) QVector3D kinematicEulerRotation()
const;
162 Q_REVISION(6, 5)
void setKinematicPivot(
const QVector3D &pivot);
163 Q_REVISION(6, 5) QVector3D kinematicPivot()
const;
165 Q_REVISION(6, 9)
void setIsSleeping(
bool newIsSleeping);
166 Q_REVISION(6, 9)
bool isSleeping()
const;
168 QAbstractPhysXNode *createPhysXBackend() final;
171 void massChanged(
float mass);
172 void densityChanged(
float density);
173 void isKinematicChanged(
bool isKinematic);
174 Q_REVISION(6, 5)
void linearAxisLockChanged();
175 Q_REVISION(6, 5)
void angularAxisLockChanged();
176 void gravityEnabledChanged();
177 void massModeChanged();
178 void inertiaTensorChanged();
179 void centerOfMassPositionChanged();
180 void centerOfMassRotationChanged();
181 void inertiaMatrixChanged();
182 Q_REVISION(6, 5)
void kinematicPositionChanged(
const QVector3D &kinematicPosition);
183 Q_REVISION(6, 5)
void kinematicRotationChanged(
const QQuaternion &kinematicRotation);
184 Q_REVISION(6, 5)
void kinematicEulerRotationChanged(
const QVector3D &kinematicEulerRotation);
185 Q_REVISION(6, 5)
void kinematicPivotChanged(
const QVector3D &kinematicPivot);
186 Q_REVISION(6, 9)
void isSleepingChanged(
bool isSleeping);
190 float m_density = 0.001f;
191 QVector3D m_centerOfMassPosition;
192 QQuaternion m_centerOfMassRotation;
193 QList<
float> m_inertiaMatrixList;
194 QMatrix3x3 m_inertiaMatrix;
195 QVector3D m_inertiaTensor;
197 bool m_isKinematic =
false;
198 AxisLock m_linearAxisLock = AxisLock::LockNone;
199 AxisLock m_angularAxisLock = AxisLock::LockNone;
200 QQueue<QPhysicsCommand *> m_commandQueue;
201 bool m_gravityEnabled =
true;
202 MassMode m_massMode = MassMode::DefaultDensity;
204 QVector3D m_kinematicPosition;
205 RotationData m_kinematicRotation;
206 QVector3D m_kinematicPivot;
207 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)