Qt Quick 3D 物理形状和物体
模拟中的对象可以通过以下四种类型的物体来表示:StaticRigidBody(静态刚体),DynamicRigidBody(动态刚体),CharacterController(角色控制器)和 TriggerBody(触发体)。物体的物理形状由 CollisionShape 的子类型表示。
形状
碰撞形状用于定义物体在物理模拟中的物理形状和范围。碰撞形状通常比物体的视觉外观简单。
引擎内置了一些预定义的形状:BoxShape(立方体形状),CapsuleShape(胶囊形状),SphereShape(球体形状)和 PlaneShape(平面形状)。这些形状的处理已优化,因此使用它们进行模拟通常性能较好。
此外,还有一些通过数据定义的自定义形状:ConvexMeshShape(凸多边形网格形状),HeightFieldShape(高度场形状)和 TriangleMeshShape(三角形网格形状)。这些形状提供了更多灵活性,但会牺牲一定的性能。
物体
一个 body 表示模拟中的一个物理对象。这些物体会相互交互和碰撞。主要类型是 静态物体(StaticRigidBody)和 动态物体(DynamicRigidBody)。物体的物理形状由形状列表指定。实际形状是这些形状的 并集。形状的相对位置是固定的:物体是 刚性的。
动态物体
动态物体能够移动。isKinematic 属性决定其移动方式。当 isKinematic
是 true
时,通过修改 kinematicPosition 和 kinematicRotation 属性显式地定位身体。当 isKinematic
是 false
时,物体由模拟控制:它将在重力作用下下落,并从其他物体上弹回。
当isKinematic为true时,所有形状都是允许的。然而,非刚体物体更为受限:只能使用凸形形状。这些是预定义的形状BoxShape、CapsuleShape和SphereShape;以及自定义形状ConvexMeshShape。这并不意味着不能有非凸的物理几何形状:几个凸形状可以组合成一个单个的物体。复合形状示例Compound Shapes Example展示了如何根据凸形状形成环形物体。
静态物体
静态物体不会移动。它们代表物体移动的环境。请注意,在技术上移动静态物体是可行的,但物理模拟将表现得不可预见。特别是,如果动态物体在静态物体上的静止位置下单移动,则静态物体移动不会唤醒动态物体。这意味着即使静态物体移动,动态物体也将保持在同一位置。
角色控制器
CharacterController类型是一个特例。它代表一个在环境中移动的角色。一个典型的用例是第一人称视角,其中相机是角色控制器的子节点,其运动由键盘/鼠标或游戏手柄控制。
触发物体
还有一个TriggerBody类型,这也是一个特例。与其它物体不同,它不是一个物理物体,这意味着它不会与其它物体在碰撞中互动。正如其名所暗示的,它仅用于在另一物体进入或离开其定义的碰撞体积时触发动作。如果另一物体将sendTriggerReports设置为true
,且其碰撞体积进入一个TriggerBody,将发出bodyEntered信号。
以下表格显示了不同类型物体的总结,以及它们如何交互和被使用
物体 | 交互 | 允许的形状 |
---|---|---|
StaticRigidBody | 不移动 | 所有形状 |
具有isKinematic true 的DynamicRigidBody | 通过编程定位。影响动态物体。被任何事物停止。 | 所有形状 |
具有isKinematic false 的DynamicRigidBody | 完全由模拟控制 | 限制形状 |
CharacterController | 通过编程移动。影响动态物体。被静态物体停止。 | 仅有一个CapsuleShape |
TriggerBody | 无 | 所有形状 |
物理材料
PhysicsMaterial类型指定了一个物体与另一个物体碰撞时的行为。属性dynamicFriction和staticFriction决定了物体的滑动性,而restitution决定了物体的弹性。
© 2024 Qt公司有限公司。本文件中包含的文档贡献版权属于各自的拥有者。提供的文档在免费软件基金会的出版下,根据GNU自由文档许可1.3版的条款获得许可。Qt及其相关标志是芬兰和/或其他国家和地区的Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。