物理引擎
真实感离不开物理引擎
物理引擎是用来仿真现实世界,使场景中的物体能够受到力的作用,从而表现出更符合物理现实的状态。
示例
碰撞检测
以下是使用 oimo
创建的两个示例:
oimo
以下是使用 oimo
创建的两个示例:
ammo
以下是使用 ammo
创建的三个示例,分别是 cloth
、rope
和 volume
使用
在 Tinoe 内使用物理引擎需要注意:
- 添加到物理世界的物体由物理引擎接管,不再由场景本身添加删除
- 大部分情况下,在物体引擎中的物体只能通过力来控制
开启
物理引擎在 Tinoe 中作为Scene
的插件实现,开启方式比较简单:
// 创建scene时开启
const scene = new Scene({ usePhysics });
// 后续开启
const physics = scene.pluginManager.addPlugin(PhysicsPlugin);
物理世界
在获取物理引擎插件实例后,必须先初始化物理世界,物理世界的实现目前 Tinoe 基于社区方案提供了oimo.js和ammo.js两种选择,oimo
轻量但不支持柔体,ammo
由bullet
编译而来,比较全面。
await physics.initWorld(PhysicsWorldType.ammo);
注意:物理世界初始化是异步过程。
添加物体
接下来,你可以添加物体到物理世界中,比如添加刚体,Tinoe 会更根据你所传 Mesh 中 Geometry 的类型来判断使用哪一种shape
来包围这个 Mesh,目前支持的对应关系如下:
CubeGeometry
对应立方体包围盒SphereGeometry
对应球体包围盒CylinderGeometry
对应圆柱体包围盒
如果是其他类型的 Geometry 需要手动传入shape
相关参数 RigidBodyOptions
physics.addRigidBody(mesh, options);
当然,你也可以添加柔体,只有 ammo
支持柔体,Tinoe 仍然会更根据你所传 Mesh 中 Geometry 的类型来判断使用哪一种柔体:
PlanGeometry
对应cloth
类型LineGeometry
对应rope
类型- 其他都使用
volume
类型
physics.addSoftBody(mesh, options);