63 Q_PROPERTY(
bool forceDebugDraw READ forceDebugDraw WRITE setForceDebugDraw NOTIFY
64 forceDebugDrawChanged)
65 Q_PROPERTY(
bool enableCCD READ enableCCD WRITE setEnableCCD NOTIFY enableCCDChanged)
66 Q_PROPERTY(
float typicalLength READ typicalLength WRITE setTypicalLength NOTIFY
69 float typicalSpeed READ typicalSpeed WRITE setTypicalSpeed NOTIFY typicalSpeedChanged)
70 Q_PROPERTY(
float defaultDensity READ defaultDensity WRITE setDefaultDensity NOTIFY
71 defaultDensityChanged)
74 Q_PROPERTY(
float minimumTimestep READ minimumTimestep WRITE setMinimumTimestep NOTIFY
75 minimumTimestepChanged REVISION(6, 5))
76 Q_PROPERTY(
float maximumTimestep READ maximumTimestep WRITE setMaximumTimestep NOTIFY
77 maximumTimestepChanged REVISION(6, 5))
79 Q_PROPERTY(
int numThreads READ numThreads WRITE setNumThreads NOTIFY numThreadsChanged
81 Q_PROPERTY(
bool reportKinematicKinematicCollisions READ reportKinematicKinematicCollisions WRITE
82 setReportKinematicKinematicCollisions NOTIFY
83 reportKinematicKinematicCollisionsChanged FINAL REVISION(6, 7))
84 Q_PROPERTY(
bool reportStaticKinematicCollisions READ reportStaticKinematicCollisions WRITE
85 setReportStaticKinematicCollisions NOTIFY
86 reportStaticKinematicCollisionsChanged FINAL REVISION(6, 7))
94 void classBegin() override;
95 void componentComplete() override;
100 bool forceDebugDraw() const;
101 bool enableCCD() const;
102 float typicalLength() const;
103 float typicalSpeed() const;
104 float defaultDensity() const;
120 void setHasIndividualDebugDraw();
121 physx::PxControllerManager *controllerManager();
124 Q_REVISION(6, 7)
bool reportKinematicKinematicCollisions() const;
126 void setReportKinematicKinematicCollisions(
bool newReportKinematicKinematicCollisions);
127 Q_REVISION(6, 7)
bool reportStaticKinematicCollisions() const;
129 void setReportStaticKinematicCollisions(
bool newReportStaticKinematicCollisions);
134 void setForceDebugDraw(
bool forceDebugDraw);
135 void setEnableCCD(
bool enableCCD);
136 void setTypicalLength(
float typicalLength);
137 void setTypicalSpeed(
float typicalSpeed);
138 void setDefaultDensity(
float defaultDensity);
148 void enableCCDChanged(
bool enableCCD);
149 void forceDebugDrawChanged(
bool forceDebugDraw);
150 void typicalLengthChanged(
float typicalLength);
151 void typicalSpeedChanged(
float typicalSpeed);
152 void defaultDensityChanged(
float defaultDensity);
154 Q_REVISION(6, 5)
void minimumTimestepChanged(
float minimumTimestep);
155 Q_REVISION(6, 5)
void maximumTimestepChanged(
float maxTimestep);
156 void simulateFrame(
float minTimestep,
float maxTimestep);
160 Q_REVISION(6, 7)
void reportKinematicKinematicCollisionsChanged();
161 Q_REVISION(6, 7)
void reportStaticKinematicCollisionsChanged();
164 void frameFinished(
float deltaTime);
165 void frameFinishedDesignStudio();
167 void cleanupRemovedNodes();
168 void updateDebugDraw();
169 void updateDebugDrawDesignStudio();
171 void disableDebugDraw();
172 void matchOrphanNodes();
173 void findPhysicsNodes();
174 void emitContactCallbacks();
181 QVector<QVector3D> impulses;
182 QVector<QVector3D> normals;
185 struct DebugModelHolder
192 void releaseMeshPointer();
195 void setHalfExtents(
const QVector3D &halfExtents);
197 float radius()
const;
198 void setRadius(
float radius);
200 float heightScale()
const;
201 void setHeightScale(
float heightScale);
203 float halfHeight()
const;
204 void setHalfHeight(
float halfHeight);
206 float rowScale()
const;
207 void setRowScale(
float rowScale);
209 float columnScale()
const;
210 void setColumnScale(
float columnScale);
212 physx::PxConvexMesh *getConvexMesh();
213 void setConvexMesh(physx::PxConvexMesh *mesh);
215 physx::PxTriangleMesh *getTriangleMesh();
216 void setTriangleMesh(physx::PxTriangleMesh *mesh);
218 physx::PxHeightField *getHeightField();
219 void setHeightField(physx::PxHeightField *hf);
222 QList<QAbstractPhysXNode *> m_physXBodies;
223 QList<QAbstractPhysicsNode *> m_newPhysicsNodes;
224 QHash<QPair<QAbstractCollisionShape *, QAbstractPhysicsNode *>, DebugModelHolder>
225 m_DesignStudioDebugModels;
226 QHash<QPair<QAbstractCollisionShape *, QAbstractPhysXNode *>, DebugModelHolder>
227 m_collisionShapeDebugModels;
228 QSet<QAbstractPhysicsNode *> m_removedPhysicsNodes;
229 QMutex m_removedPhysicsNodesMutex;
230 QList<BodyContact> m_registeredContacts;
233 float m_typicalLength = 100.f;
234 float m_typicalSpeed = 1000.f;
235 float m_defaultDensity = 0.001f;
236 float m_minTimestep = 16.667f;
237 float m_maxTimestep = 33.333f;
239 bool m_running =
true;
240 bool m_forceDebugDraw =
false;
243 bool m_hasIndividualDebugDraw =
false;
244 bool m_physicsInitialized =
false;
245 bool m_enableCCD =
false;
249 QVector<QQuick3DDefaultMaterial *> m_debugMaterials;
257 static physx::PxPhysics *getPhysics();
258 static physx::PxCooking *getCooking();
261 bool m_inDesignStudio =
false;
262 int m_numThreads = -1;
263 bool m_reportKinematicKinematicCollisions =
false;
264 bool m_reportStaticKinematicCollisions =
false;