1. Home
  2. Docs
  3. Verge3D用户手册
  4. 拼图参考
  5. Physics

Physics

物理和约束拼图

这些拼图用于模拟物理效果和约束物体的运动。

物理入门

使用这些拼图之前,你需要向应用程序添加物理模块。你可以在App Manager的创建应用面板勾选相应复选框来添加该模块。

或者,你可以将ammo.js模块从verge3d / build文件夹复制到应用程序文件夹,然后再将应用程序更新为较新版本。然后,更新操作将自动将物理模块添加到你的应用程序。

物理(Physics)

“create physics world”

使用指定的重力和帧数参数初始化物理引擎。默认值9.8对应于地球表面重力。零值意味着在空间中没有引力。较高的fps值会以牺牲性能为代价来提高仿真质量。

在幕后,这个拼图还可以实现碰撞检测和图形自动同步。

“create physics body”

从Dynamic,Kinematic或Static类型的指定对象创建物理体。指定碰撞形状:Box,Sphere或Mesh。设置主体的质量(仅对Dynamic物理体有效)。也适用于对象列表,组(或组列表)或all objects拼图。

物理体类型:

  • Dynamic – 运动由物理引擎驱动,受碰撞影响并与其他物体碰撞。
  • Kinematic – 运动通过动画或用户操作控制。Dynamic对象将被推开,但Kinematic对象不会受到影响。
  • Static – 不能移动但会与其他物体碰撞。

建议:

  • 确保在3ds Max或Blender中应用缩放(译注:执行apply scale),因为物理引擎会忽略对象的缩放。
  • 为获得最佳效果,物体的原点应与质心重合。(译注:原点在质心碰撞体会更准确)
  • 使用snap body拼图移动动态或静态物体,而不是尝试直接移动物体

“remove physics body”

通过销毁与之关联的物理体来从指定对象中移除物理。也适用于对象列表,组(或组列表)或all objects拼图。


“physics body params”

设置与指定对象关联的物理体的参数。也适用于对象列表,组(或组列表)或all objects拼图。

参数:

  • friction- 滑动物体之间相对运动的阻力系数。 (译注:摩擦力)
  • linear damping-阻碍移动物体的阻力系数。(译注:线性阻尼)
  • angular damping-阻碍旋转物体的阻力系数。(译注:角阻尼)
  • restitution– 弹性系数(如果0 – 物体像粘土一样没有弹性,如果1 – 物体像橡胶)。

当两个物体碰撞时,考虑两者的摩擦和弹性系数。

“apply vector”

在世界空间的指定方向上将力,重力,线速度,角速度,脉冲,扭矩,扭矩脉冲或位置应用于与指定对象关联的物理体。也适用于对象列表,组(或组列表)或all objects拼图。

参数:

  • Force-将物体向一个方向推动(译注:这里物体指的是物理碰撞体)
  • Gravity-为某物体指定单独的重力
  • Linear Velocity-设置移动速度
  • Angular Velocity-设置旋转速度
  • Impulse-像Linear Velocity 一样,但会考虑到重量(较重的物体将获得较低的速度)
  • Torque-沿指定方向旋转物体。
  • Torque Impulse-像角速度一样,但会考虑到重量(较重的物体旋转速度慢)
  • Position-设置物体的位置(像snap body拼图一样)。

“snap body”

通过复制其变换数据,将与指定对象关联的物理体和对象本身移动到另一个对象的位置。还复制旋转。不适用于列表,组或“all objects”拼图。

类似apply vector / Position 拼图的效果。

“detect collision” and “collision_info”

检测指定物体与另一个物体(或列表或组中的任何物体)之间是否发生碰撞。如果发生碰撞,则触发“ upon collide ”槽中的拼图,否则触发“ upon no collide ”。

碰撞信息拼图输出一个包含以下字段的字典数据类型:

  • objectA – 第一个碰撞体的名称。
  • objectB – 第二个碰撞体的名称。
  • distance  – 碰撞点之间的距离。
  • positionOnA – 第一个对象上的碰撞点的XYZ坐标。
  • positionOnB – 第二个对象上的碰撞点的XYZ坐标。
  • normalOnB – 第二个对象上碰撞点处法线向量的XYZ分量。

约束(constraints)

这些拼图用于约束物体运动。如果对象不是另一个对象的父级,则约束将在世界空间中起作用。否则它们将在父对象的空间中工作 – 您可以在3ds Max或Blender中选择父对象以显示坐标轴。

“limit transform”

设置约束以限制沿选定轴的对象位置,旋转或缩放。指定的id应该是唯一的,否则将替换具有相同的现有约束。 “min”和“max”槽指定允许移动之间的范围。

“copy transform”

设置约束以从另一个对象复制对象位置,旋转或缩放。指定的id应该是唯一的,否则将替换具有相同的现有约束。

“operations”

使用指定给指定对象的指定id删除,关闭或取消关闭约束。分配给此对象的其他约束(如果有)将保持不变。

Was this article helpful to you? Yes No