310 m_commandQueue.
clear();
315 return m_centerOfMassRotation;
320 if (
qFuzzyCompare(m_centerOfMassRotation, newCenterOfMassRotation))
322 m_centerOfMassRotation = newCenterOfMassRotation;
333 return m_centerOfMassPosition;
338 if (
qFuzzyCompare(m_centerOfMassPosition, newCenterOfMassPosition))
341 switch (m_massMode) {
356 m_centerOfMassPosition = newCenterOfMassPosition;
367 if (m_massMode == newMassMode)
370 switch (newMassMode) {
376 qWarning() <<
"No physics world found, cannot set default density.";
398 m_massMode = newMassMode;
404 return m_inertiaTensor;
411 m_inertiaTensor = newInertiaTensor;
421 return m_inertiaMatrixList;
426 if (
a.length() !=
b.length())
439 if (
fuzzyEquals(m_inertiaMatrixList, newInertiaMatrix))
442 m_inertiaMatrixList = newInertiaMatrix;
443 const int elemsToCopy =
qMin(m_inertiaMatrixList.
length(), 9);
444 memcpy(m_inertiaMatrix.
data(), m_inertiaMatrixList.
data(), elemsToCopy *
sizeof(
float));
445 memset(m_inertiaMatrix.
data() + elemsToCopy, 0, (9 - elemsToCopy) *
sizeof(
float));
455 return m_inertiaMatrix;
465 return m_isKinematic;
470 return m_gravityEnabled;
478 switch (m_massMode) {
521 <<
"Cannot make body containing trimesh/heightfield/plane non-kinematic, ignoring.";
547 return m_linearAxisLock;
550void QDynamicRigidBody::setLinearAxisLock(AxisLock newAxisLockLinear)
552 if (m_linearAxisLock == newAxisLockLinear)
554 m_linearAxisLock = newAxisLockLinear;
555 emit linearAxisLockChanged();
560 return m_angularAxisLock;
563void QDynamicRigidBody::setAngularAxisLock(AxisLock newAxisLockAngular)
565 if (m_angularAxisLock == newAxisLockAngular)
567 m_angularAxisLock = newAxisLockAngular;
568 emit angularAxisLockChanged();
573 return m_commandQueue;
622void QDynamicRigidBody::setKinematicRotation(
const QQuaternion &rotation)
624 if (m_kinematicRotation ==
rotation)
628 emit kinematicRotationChanged(m_kinematicRotation);
637void QDynamicRigidBody::setKinematicEulerRotation(
const QVector3D &rotation)
639 if (m_kinematicRotation ==
rotation)
643 emit kinematicEulerRotationChanged(m_kinematicRotation);
652void QDynamicRigidBody::setKinematicPivot(
const QVector3D &pivot)
654 m_kinematicPivot =
pivot;
655 emit kinematicPivotChanged(m_kinematicPivot);
660 return m_kinematicPivot;
671 emit kinematicPositionChanged(m_kinematicPosition);
676 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)
QAbstractPhysXNode * createPhysXBackend() final
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.
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.
static bool fuzzyEquals(const QList< float > &a, const QList< float > &b)
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 qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
QLatin1StringView world("world")