Qt Quick 3D Physics Gestalten und Körper
Die Objekte in der Simulation werden durch eine der folgenden vier Arten von Körpern dargestellt: StaticRigidBody, DynamicRigidBody, CharacterController und TriggerBody. Die physische Form eines Körpers wird durch Untertypen von CollisionShape dargestellt.
Formen
Eine Kollisionsform wird verwendet, um die physische Form und Ausdehnung eines Objekts für die Zwecke der Physiksimulation zu definieren. Die Kollisionsform ist normalerweise einfacher als das visuelle Erscheinungsbild des Objekts.
Es gibt einige vordefinierte Formen, die in die Engine integriert sind: BoxShape, CapsuleShape, SphereShape und PlaneShape. Die Handhabung dieser Formen ist optimiert, so dass Simulationen, die sie verwenden, in der Regel besser funktionieren.
Darüber hinaus gibt es benutzerdefinierte Formen, die durch Daten definiert werden: ConvexMeshShape, HeightFieldShape, und TriangleMeshShape. Diese ermöglichen mehr Flexibilität auf Kosten der Leistung.
Körper
Ein body stellt ein physisches Objekt in der Simulation dar. Diese Körper interagieren und kollidieren miteinander. Die beiden Haupttypen sind statische Körper (StaticRigidBody) und dynamische Körper (DynamicRigidBody). Die physikalische Form eines Körpers wird durch eine Liste von Formen angegeben. Die effektive Form ist die Vereinigung dieser Formen. Die relative Position der Formen ist fest: Die Körper sind starr.
Dynamischer Körper
Dynamische Körper sind in der Lage, sich zu bewegen. Die Eigenschaft isKinematic bestimmt, wie er sich bewegt. Wenn isKinematic
true
ist, wird der Körper explizit positioniert, indem die Eigenschaften kinematicPosition und kinematicRotation geändert werden. Wenn isKinematic
den Wert false
hat, wird das Objekt durch die Simulation gesteuert: Es fällt unter der Schwerkraft und prallt an anderen Objekten ab.
Wenn isKinematic true
ist, sind alle Formen erlaubt. Nicht-kinematische Körper sind jedoch stärker eingeschränkt: Es können nur konvexe Formen verwendet werden. Dies sind die vordefinierten Formen BoxShape, CapsuleShape und SphereShape sowie die benutzerdefinierte Form ConvexMeshShape. Das bedeutet nicht, dass es unmöglich ist, eine nicht-konvexe physische Geometrie zu haben: mehrere konvexe Formen können für einen einzigen Körper kombiniert werden. Das Beispiel für zusammengesetzte Formen zeigt, wie ringförmige Körper auf der Grundlage konvexer Formen gebildet werden können.
Statischer Körper
Statische Körper bewegen sich nicht. Sie stellen die Umgebung dar, in der sich die anderen Körper bewegen. Beachten Sie, dass es technisch möglich ist, einen statischen Körper zu bewegen, aber die physikalische Simulation wird sich unerwartet verhalten. Insbesondere wird ein dynamischer Körper, der eine Ruheposition auf einem statischen Körper eingenommen hat, nicht geweckt, wenn sich der statische Körper bewegt. Das bedeutet, dass der dynamische Körper in der gleichen Position bleibt, auch wenn der statische Körper bewegt wird.
Zeichensteuerung
Der Typ CharacterController ist ein Sonderfall. Er stellt eine Figur dar, die sich durch die Umgebung bewegt. Ein typischer Anwendungsfall ist eine Ego-Perspektive, bei der camera ein Kind des Charakter-Controllers ist und seine Bewegung über Tastatur/Maus oder Gamepad gesteuert wird.
Auslösender Körper
Es gibt auch den Typ TriggerBody, der einen weiteren Spezialfall darstellt. Im Gegensatz zu den anderen Körpern ist er kein physischer Körper, was bedeutet, dass er nicht mit anderen Körpern kollidiert. Wie der Name schon sagt, wird er nur verwendet, um Aktionen auszulösen, wenn ein anderer Körper sein Volumen betritt oder verlässt, wie es durch seine Kollisionsformen definiert ist. Wenn ein anderer Körper sendTriggerReports auf true
gesetzt hat und sein Kollisionsvolumen in ein TriggerBody eintritt, wird das Signal bodyEntered ausgegeben.
Die folgende Tabelle zeigt eine Zusammenfassung der verschiedenen Körpertypen, wie sie interagieren und verwendet werden können:
Körper | Wechselwirkung | Erlaubte Formen |
---|---|---|
StaticRigidBody | Bewegt sich nicht | Alle Formen |
DynamicRigidBody mit isKinematic true | Programmatisch positioniert. Beeinflusst dynamische Körper. Wird durch nichts aufgehalten. | Alle Formen |
DynamicRigidBody mit isKinematic false | Vollständig durch Simulation gesteuert | Begrenzte Formen |
CharacterController | Wird programmatisch bewegt. Beeinflusst dynamische Körper. Wird von statischen Körpern gestoppt. | Nur eine einzige CapsuleShape |
TriggerBody | Keine | Alle Formen |
Physikalische Materialien
Der Typ PhysicsMaterial gibt an, wie sich ein Objekt verhält, wenn es mit einem anderen zusammenstößt. Die Eigenschaften dynamicFriction und staticFriction bestimmen, wie rutschig das Objekt ist, und restitution bestimmt, wie federnd es ist.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.