UNPKG

@enable3d/ammo-physics

Version:

Physics Plugin for three.js

31 lines 1.56 kB
/** * @author Yannick Deubel (https://github.com/yandeu) * @copyright Copyright (c) 2020 Yannick Deubel; Project Url: https://github.com/enable3d/enable3d * @license {@link https://github.com/enable3d/enable3d/blob/master/LICENSE|LGPL-3.0} */ // https://pybullet.org/Bullet/phpBB3/viewtopic.php?t=7228 export const createTorusShape = (config, quat) => { const { radius = 1, tube = 0.4, tubularSegments = 8 } = config; const SIMD_PI = Math.PI; const subdivisions = tubularSegments; const gap = Math.sqrt(2.0 * tube * tube - 2.0 * tube * tube * Math.cos((2.0 * SIMD_PI) / subdivisions)); const btHalfExtents = new Ammo.btVector3(tube, SIMD_PI / subdivisions + 0.5 * gap, tube); const cylinderShape = new Ammo.btCylinderShape(btHalfExtents); cylinderShape.setMargin(0.05); const compoundShape = new Ammo.btCompoundShape(); const forward = new Ammo.btVector3(0, 0, 1); const side = new Ammo.btVector3(0, radius, 0); const rotation = new Ammo.btQuaternion(quat.x, quat.y, quat.z, quat.w); for (let x = 0; x < subdivisions; x++) { const angle = (x * 2.0 * SIMD_PI) / subdivisions; const position = side.rotate(forward, angle); const transform = new Ammo.btTransform(); rotation.setRotation(forward, angle + Math.PI / 2); transform.setIdentity(); transform.setOrigin(position); transform.setRotation(rotation); compoundShape.addChildShape(transform, cylinderShape); } return compoundShape; }; //# sourceMappingURL=torusShape.js.map