跳到主要内容

物理引擎

真实感离不开物理引擎

物理引擎是用来仿真现实世界,使场景中的物体能够受到力的作用,从而表现出更符合物理现实的状态。

示例

碰撞检测

以下是使用 oimo 创建的两个示例:

oimo

以下是使用 oimo 创建的两个示例:

ammo

以下是使用 ammo 创建的三个示例,分别是 clothropevolume

使用

在 Tinoe 内使用物理引擎需要注意:

  • 添加到物理世界的物体由物理引擎接管,不再由场景本身添加删除
  • 大部分情况下,在物体引擎中的物体只能通过力来控制

开启

物理引擎在 Tinoe 中作为Scene的插件实现,开启方式比较简单:

// 创建scene时开启
const scene = new Scene({ usePhysics });
// 后续开启
const physics = scene.pluginManager.addPlugin(PhysicsPlugin);

物理世界

在获取物理引擎插件实例后,必须先初始化物理世界,物理世界的实现目前 Tinoe 基于社区方案提供了oimo.jsammo.js两种选择,oimo轻量但不支持柔体,ammobullet编译而来,比较全面。

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);

API

Q&A