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 。这并不意味着不可能有非凸的物理几何体:可以将多个凸形组合成一个体。复合形状示例展示了如何在凸形的基础上形成环形体。
静态体
静态体不会移动。它们代表其他物体移动的环境。请注意,从技术上讲,静态体是可以移动的,但物理模拟的行为会出乎意料。特别是,如果静态体移动,已进入静止位置的动态体将不会被唤醒。这意味着即使静态物体移动,动态物体也会保持在同一位置。
字符控制器
CharacterController 类型是一种特殊情况。它代表在环境中移动的角色。一种典型的用例是第一人称视图,其中camera 是角色控制器的子代,其移动由键盘/鼠标或游戏手柄控制。
触发器主体
TriggerBody 类型也是另一种特殊情况。与其他机构不同,它不是一个物理机构,这意味着它不会与其他机构发生碰撞。顾名思义,它只用于在其他物体进入或离开其碰撞形状所定义的体积时触发动作。如果另一个物体的sendTriggerReports 设置为true
,而它的碰撞体积进入了TriggerBody ,则会发出bodyEntered 信号。
下表列出了不同类型的体,以及它们的交互方式和使用方法:
体 | 交互方式 | 允许的形状 |
---|---|---|
StaticRigidBody | 不移动 | 所有形状 |
DynamicRigidBody 与isKinematic true | 通过程序定位。影响动态体。无任何阻挡。 | 所有形状 |
DynamicRigidBody 通过isKinematic false | 完全由模拟控制 | 有限形状 |
CharacterController | 程序化移动。影响动态物体。被静态体阻止。 | 只有一个CapsuleShape |
TriggerBody | 无 | 所有形状 |
物理材料
PhysicsMaterial 类型指定了一个物体与另一个物体碰撞时的行为方式。dynamicFriction 和staticFriction 属性决定了物体的滑度,而restitution 则决定了物体的弹力。
© 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.