Auf dieser Seite

Qt Quick 3D Physik: Formen, Körper und Gelenke

Die Objekte in der Simulation werden durch einen der folgenden vier Körpertypen dargestellt: „ StaticRigidBody “, „ DynamicRigidBody “, „ CharacterController “ und „ TriggerBody “. Die physikalische Form eines Körpers wird durch Untertypen von „ CollisionShape “ dargestellt.

Formen

Eine Kollisionsform dient dazu, die physikalische Form und Ausdehnung eines Objekts für die Zwecke der Physiksimulation zu definieren. Die Kollisionsform ist in der Regel einfacher gestaltet als das visuelle Erscheinungsbild des Objekts.

Die Engine enthält einige vordefinierte Formen: BoxShape, CapsuleShape, SphereShape und PlaneShape. Die Verarbeitung dieser Formen ist optimiert, sodass Simulationen, die diese verwenden, in der Regel eine bessere Leistung erzielen.

Darüber hinaus gibt es benutzerdefinierte Formen, die durch Daten definiert werden: ConvexMeshShape, HeightFieldShape und TriangleMeshShape. Diese bieten mehr Flexibilität, gehen jedoch zu Lasten der Leistung.

Körper

Ein „ body “ stellt ein physikalisches Objekt in der Simulation dar. Diese Körper interagieren miteinander und kollidieren. 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 festgelegt. 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 können sich bewegen. Die Eigenschaft „ isKinematic “ bestimmt, wie sie sich bewegen. Wenn „ isKinematic “ auf „ true “ gesetzt ist, wird der Körper explizit durch Ändern der Eigenschaften „ kinematicPosition “ und „ kinematicRotation “ positioniert. Wenn „ isKinematic “ auf „ false “ gesetzt ist, wird das Objekt von der Simulation gesteuert: Es fällt unter dem Einfluss der Schwerkraft und prallt von anderen Objekten ab.

Wenn `isKinematic` auf ` true` gesetzt ist, sind alle Formen zulässig. Nicht-kinematische Körper unterliegen jedoch größeren Einschränkungen: Es dürfen nur konvexe Formen verwendet werden. Dies sind die vordefinierten Formen „ BoxShape “, „ CapsuleShape “ und „ SphereShape “ sowie die benutzerdefinierte Form „ ConvexMeshShape “. Das bedeutet jedoch nicht, dass eine nicht-konvexe physikalische Geometrie unmöglich ist: Für einen einzelnen Körper können mehrere konvexe Formen kombiniert werden. Das Beispiel „Compound Shapes“ zeigt, wie man auf der Grundlage konvexer Formen ringförmige Körper bildet.

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 zwar möglich ist, einen statischen Körper zu bewegen, die physikalische Simulation sich dann jedoch unerwartet verhält. Insbesondere wird ein dynamischer Körper, der auf einem statischen Körper eine Ruheposition eingenommen hat, nicht „geweckt“, wenn sich der statische Körper bewegt. Das bedeutet, dass der dynamische Körper in derselben Position verbleibt, selbst wenn der statische Körper bewegt wird.

Charakter-Controller

Der Typ „ CharacterController “ ist ein Sonderfall. Er repräsentiert einen Charakter, der sich durch die Umgebung bewegt. Ein typischer Anwendungsfall ist eine First-Person-Perspektive, bei der der „ camera “ ein untergeordneter Objekt des Charakter-Controllers ist und dessen Bewegung über Tastatur/Maus oder Gamepad gesteuert wird.

Trigger-Körper

Es gibt außerdem den Typ „ TriggerBody “, der einen weiteren Sonderfall darstellt. Im Gegensatz zu den anderen Körpern handelt es sich hierbei nicht um einen physikalischen Körper, was bedeutet, dass er nicht mit anderen Körpern kollidiert. Wie der Name schon sagt, dient er ausschließlich dazu, Aktionen auszulösen, wenn ein anderer Körper in sein durch die Kollisionsformen definiertes Volumen eintritt oder dieses verlässt. Wenn bei einem anderen Körper die Eigenschaft „ sendTriggerReports “ auf „ true “ gesetzt ist und sein Kollisionsvolumen in einen „ TriggerBody “ eintritt, wird das Signal „ bodyEntered “ ausgelöst.

Die folgende Tabelle enthält eine Übersicht über die verschiedenen Körpertypen, ihre Interaktion und ihre Verwendungsmöglichkeiten:

KörperWechselwirkungZulässige Formen
StaticRigidBodyBewegt sich nichtAlle Formen
DynamicRigidBody mit „ isKinematic “ trueProgrammgesteuert positioniert. Beeinflusst dynamische Körper. Lässt sich durch nichts aufhalten.Alle Formen
DynamicRigidBody mit „ isKinematic “ falseVollständig durch Simulation gesteuertBegrenzte Formen
CharacterControllerWerden programmgesteuert bewegt. Beeinflussen dynamische Körper. Werden von statischen Körpern aufgehalten.Nur ein einziges CapsuleShape
TriggerBodyKeineAlle Formen

Physik-Materialien

Der Typ „ PhysicsMaterial “ legt fest, wie sich ein Objekt bei einer Kollision mit einem anderen Objekt verhält. Die Eigenschaften „ dynamicFriction “ und „ staticFriction “ bestimmen, wie rutschig das Objekt ist, und „ restitution “ bestimmt, wie sprunghaft es sich verhält.

Gelenke

Ein Gelenk legt fest, wie sich zwei Körper im Verhältnis zueinander bewegen. Ein Gelenk kann beispielsweise verwendet werden, um ein Türscharnier, ein Seil oder einen Arm nachzubilden. Für verschiedene Anwendungsfälle werden verschiedene Gelenktypen unterstützt, siehe DistanceJoint, FixedJoint, PrismaticJoint, RevoluteJoint und SphericalJoint. Jedes Gelenk basiert auf dem QML-Typ „ Joint “ und verfügt über zwei Körper, die es verbindet, sowie eine Orientierung, die seine Position an jedem der verbundenen Körper beschreibt. Jeder Gelenktyp verfügt über unterschiedliche Eigenschaften, die seine spezifischen physikalischen Einschränkungen festlegen.

© 2026 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.