SuperAPI AI 工具集

threejs-impl-physics

编程与开发

查看项目

更新于 10-15 22:18

技能介绍

该技能用于在 Three.js 场景中加入物理模拟,包括刚体、碰撞、约束与 raycasting。资料围绕两个物理引擎展开:cannon-es(纯 JavaScript,同步初始化,约 100 KB,适合少于 100 个刚体的原型与简单场景)与 Rapier(Rust 编译为 WASM,约 300–600 KB,异步初始化,需 await 初始化,支持确定性、完整 CCD,适合 100–10000+ 刚体及生产环境)。

必要用法:cannon-es 需创建 world、设置重力,在动画循环调用 world.step(),否则刚体不会移动;建议开启 allowSleep,刚体多于 20 个时用 SAPBroadphase。Rapier 必须先 await RAPIER.init(),之后所有 API 才可用;动态快速物体应 setCcdEnabled(true) 防穿透。同步 Three.js 时,cannon-es 的 Vec3/Quaternion 可直接 copy();Rapier 返回的是普通 {x,y,z} 对象,必须用 mesh.position.set(pos.x,pos.y,pos.z) 而不能 copy()。

主要能力:刚体类型(动态、静态、运动学)、形状(Box/Sphere/Cylinder/Plane/凸包/Trimesh/Heightfield)、材质与接触材质、多种约束(点对点、距离、铰链、锁定、锥形扭转、弹簧)、碰撞与休眠事件、Rapier 射线检测与内置调试渲染、React Three Fiber 的 @react-three/rapier 与 @react-three/cannon 集成。

限制:Trimesh 碰撞体仅支持静态物体,动态凹面几何应使用凸包;ContactMaterial 必须将材质赋给刚体后才生效;不要在 init 完成前使用 Rapier 类。更详细的 API 与示例见资料所列方法、示例与反模式参考文件。