287 m_commandQueue.
clear();
292 return m_centerOfMassRotation;
297 if (
qFuzzyCompare(m_centerOfMassRotation, newCenterOfMassRotation))
299 m_centerOfMassRotation = newCenterOfMassRotation;
310 return m_centerOfMassPosition;
315 if (
qFuzzyCompare(m_centerOfMassPosition, newCenterOfMassPosition))
318 switch (m_massMode) {
333 m_centerOfMassPosition = newCenterOfMassPosition;
344 if (m_massMode == newMassMode)
347 switch (newMassMode) {
353 qWarning() <<
"No physics world found, cannot set default density.";
375 m_massMode = newMassMode;
381 return m_inertiaTensor;
388 m_inertiaTensor = newInertiaTensor;
398 return m_inertiaMatrixList;
403 if (
a.length() !=
b.length())
416 if (
fuzzyEquals(m_inertiaMatrixList, newInertiaMatrix))
419 m_inertiaMatrixList = newInertiaMatrix;
420 const int elemsToCopy =
qMin(m_inertiaMatrixList.
length(), 9);
421 memcpy(m_inertiaMatrix.
data(), m_inertiaMatrixList.
data(), elemsToCopy *
sizeof(
float));
422 memset(m_inertiaMatrix.
data() + elemsToCopy, 0, (9 - elemsToCopy) *
sizeof(
float));
432 return m_inertiaMatrix;
442 return m_isKinematic;
447 return m_gravityEnabled;
455 switch (m_massMode) {
498 <<
"Cannot make body containing trimesh/heightfield/plane non-kinematic, ignoring.";
524 return m_linearAxisLock;
527void QDynamicRigidBody::setLinearAxisLock(AxisLock newAxisLockLinear)
529 if (m_linearAxisLock == newAxisLockLinear)
531 m_linearAxisLock = newAxisLockLinear;
532 emit linearAxisLockChanged();
537 return m_angularAxisLock;
540void QDynamicRigidBody::setAngularAxisLock(AxisLock newAxisLockAngular)
542 if (m_angularAxisLock == newAxisLockAngular)
544 m_angularAxisLock = newAxisLockAngular;
545 emit angularAxisLockChanged();
550 return m_commandQueue;
599void QDynamicRigidBody::setKinematicRotation(
const QQuaternion &rotation)
601 if (m_kinematicRotation ==
rotation)
605 emit kinematicRotationChanged(m_kinematicRotation);
614void QDynamicRigidBody::setKinematicEulerRotation(
const QVector3D &rotation)
616 if (m_kinematicRotation ==
rotation)
620 emit kinematicEulerRotationChanged(m_kinematicRotation);
629void QDynamicRigidBody::setKinematicPivot(
const QVector3D &pivot)
631 m_kinematicPivot =
pivot;
632 emit kinematicPivotChanged(m_kinematicPivot);
637 return m_kinematicPivot;
643 emit kinematicPositionChanged(m_kinematicPosition);
648 return m_kinematicPosition;
bool hasStaticShapes() const
Q_INVOKABLE void applyCentralForce(const QVector3D &force)
QVector3D kinematicPosition
QQueue< QPhysicsCommand * > & commandQueue()
const QList< float > & readInertiaMatrix() const
QList< float > inertiaMatrix
QQuaternion centerOfMassRotation
void inertiaMatrixChanged()
Q_INVOKABLE void setAngularVelocity(const QVector3D &angularVelocity)
void setInertiaMatrix(const QList< float > &newInertiaMatrix)
QQuaternion kinematicRotation
QVector3D centerOfMassPosition
Q_INVOKABLE void applyCentralImpulse(const QVector3D &impulse)
void setMassMode(const MassMode newMassMode)
Q_INVOKABLE void setLinearVelocity(const QVector3D &linearVelocity)
void setDensity(float density)
void setIsKinematic(bool isKinematic)
void updateDefaultDensity(float defaultDensity)
void gravityEnabledChanged()
void centerOfMassPositionChanged()
Q_INVOKABLE void applyImpulse(const QVector3D &impulse, const QVector3D &position)
Q_INVOKABLE void applyForce(const QVector3D &force, const QVector3D &position)
Q_INVOKABLE void applyTorqueImpulse(const QVector3D &impulse)
void isKinematicChanged(bool isKinematic)
QVector3D kinematicEulerRotation
void setGravityEnabled(bool gravityEnabled)
void massChanged(float mass)
void densityChanged(float density)
Q_INVOKABLE void reset(const QVector3D &position, const QVector3D &eulerRotation)
void setInertiaTensor(const QVector3D &newInertiaTensor)
void inertiaTensorChanged()
QDynamicRigidBody()
\qmltype DynamicRigidBody \inqmlmodule QtQuick3D.Physics \inherits PhysicsBody
Q_INVOKABLE void applyTorque(const QVector3D &torque)
void setCenterOfMassRotation(const QQuaternion &newCenterOfMassRotation)
void centerOfMassRotationChanged()
void setCenterOfMassPosition(const QVector3D &newCenterOfMassPosition)
T * data()
Returns a pointer to the raw data of this matrix.
qsizetype length() const noexcept
static QPhysicsWorld * getWorld(QQuick3DNode *node)
The QQuaternion class represents a quaternion consisting of a vector and scalar.
void enqueue(const T &t)
Adds value t to the tail of the queue.
QStaticRigidBody()
\qmltype StaticRigidBody \inqmlmodule QtQuick3D.Physics \inherits PhysicsBody
The QVector3D class represents a vector or vertex in 3D space.
QVector3D getEulerRotation() const
QQuaternion getQuaternionRotation() const
qDeleteAll(list.begin(), list.end())
Combined button and popup list for selecting options.
bool qFuzzyCompare(qfloat16 p1, qfloat16 p2) noexcept
constexpr const T & qMin(const T &a, const T &b)
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLenum GLsizei length
static bool fuzzyEquals(const physx::PxTransform &a, const physx::PxTransform &b)
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
static bool fuzzyEquals(const QList< float > &a, const QList< float > &b)
QLatin1StringView world("world")