Sur cette page

Qt Quick 3D Physics Formes, corps et articulations

Les objets de la simulation sont représentés par l'un des quatre types de corps suivants : StaticRigidBody, DynamicRigidBody, CharacterController et TriggerBody. La forme physique d'un corps est représentée par des sous-types de CollisionShape.

Formes

Une forme de collision sert à définir la forme physique et l’étendue d’un objet aux fins de la simulation physique. La forme de collision est généralement plus simple que l’apparence visuelle de l’objet.

Le moteur intègre plusieurs formes prédéfinies : BoxShape, CapsuleShape, SphereShape et PlaneShape. La gestion de ces formes est optimisée, ce qui permet généralement d’obtenir de meilleures performances lors de la simulation.

De plus, il existe des formes personnalisées définies par des données : ConvexMeshShape, HeightFieldShape et TriangleMeshShape. Celles-ci offrent davantage de flexibilité, au détriment des performances.

Corps

Un body représente un objet physique dans la simulation. Ces corps interagissent et entrent en collision les uns avec les autres. Les deux types principaux sont les corps statiques (StaticRigidBody) et les corps dynamiques (DynamicRigidBody). La forme physique d’un corps est spécifiée par une liste de formes. La forme effective est l’union de ces formes. La position relative des formes est fixe : les corps sont rigides.

Corps dynamique

Les corps dynamiques sont capables de se déplacer. La propriété isKinematic détermine la manière dont ils se déplacent. Lorsque isKinematic vaut true, le corps est positionné explicitement en modifiant les propriétés kinematicPosition et kinematicRotation. Lorsque isKinematic vaut false, l’objet est contrôlé par la simulation : il tombera sous l’effet de la gravité et rebondira sur d’autres objets.

Lorsque isKinematic vaut true, toutes les formes sont autorisées. En revanche, les corps non cinématiques sont soumis à davantage de restrictions : seules les formes convexes peuvent être utilisées. Il s’agit des formes prédéfinies BoxShape, CapsuleShape et SphereShape; ainsi que de la forme personnalisée ConvexMeshShape. Cela ne signifie pas qu’il est impossible d’avoir une géométrie physique non convexe : plusieurs formes convexes peuvent être combinées pour former un seul corps. L’exemple « Compound Shapes » montre comment créer des corps en forme d’anneau à partir de formes convexes.

Corps statique

Les corps statiques ne se déplacent pas. Ils représentent l’environnement dans lequel les autres corps se déplacent. Notez qu’il est techniquement possible de déplacer un corps statique, mais la simulation physique se comportera de manière inattendue. En particulier, un corps dynamique qui s’est immobilisé sur un corps statique ne sera pas « réveillé » si le corps statique se déplace. Cela signifie que le corps dynamique restera dans la même position même si le corps statique est déplacé.

Contrôleur de personnage

Le type « CharacterController » constitue un cas particulier. Il représente un personnage qui se déplace dans l’environnement. Un cas d’utilisation typique est une vue à la première personne où l’ camera e est un enfant du contrôleur de personnage, et dont le mouvement est contrôlé par le clavier/la souris ou une manette.

Corps déclencheur

Il existe également le type « TriggerBody », qui constitue un autre cas particulier. Contrairement aux autres corps, il ne s’agit pas d’un corps physique, ce qui signifie qu’il n’interagit pas par collision avec d’autres corps. Comme son nom l’indique, il sert uniquement à déclencher des actions lorsqu’un autre corps entre ou sort de son volume, tel que défini par ses formes de collision. Si un autre corps a l’option « sendTriggerReports » (Détecter le corps) définie sur « true » (Détecter le corps) et que son volume de collision pénètre dans une « TriggerBody », le signal « bodyEntered » est émis.

Le tableau suivant présente un résumé des différents types de corps, de leurs interactions et de leurs utilisations possibles :

CorpsInteractionFormes autorisées
StaticRigidBodyNe bouge pasToutes les formes
DynamicRigidBody avec isKinematic truePositionné par programmation. Influence les corps dynamiques. Rien ne l'arrête.Toutes les formes
DynamicRigidBody avec l'isKinematic falseEntièrement contrôlées par simulationFormes limitées
CharacterControllerDéplacées par programmation. Influencent les corps dynamiques. Arrêtées par les corps statiques.Une seule CapsuleShape
TriggerBodyAucuneToutes les formes

Matériaux physiques

Le type « PhysicsMaterial » spécifie le comportement d’un objet lorsqu’il entre en collision avec un autre. Les propriétés « dynamicFriction » et « staticFriction » déterminent le degré de glissance de l’objet, tandis que « restitution » détermine son rebond.

Articulations

Une articulation définit la manière dont deux corps se déplacent l’un par rapport à l’autre. Une articulation peut par exemple être utilisée pour simuler une charnière de porte, une corde ou un bras. Différents types d’articulations sont pris en charge pour divers cas d’utilisation ; voir DistanceJoint, FixedJoint, PrismaticJoint, RevoluteJoint et SphericalJoint. Chaque articulation est basée sur le type QML Joint et comporte deux corps qu’elle relie, ainsi qu’une orientation décrivant son emplacement sur chacun des corps qu’elle relie. Chaque type d’articulation dispose de propriétés différentes régissant ses contraintes physiques spécifiques.

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