UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

25 lines (24 loc) 654 B
"use strict"; import { Vector3 } from "three"; const _p = new Vector3(); const _d = new Vector3(); const _vn = new Vector3(); const _vn2 = new Vector3(); const MAX_STEPS = 100; const SURF_DIST = 0.01; export function softBodyRayMarch(origin, dir, maxDist, distanceFunction) { let totalDist = 0; _p.copy(origin); _vn.copy(dir).normalize(); _p.add(_vn2.copy(_vn).multiplyScalar(1 * SURF_DIST)); for (let i = 0; i < MAX_STEPS; i++) { const dist = distanceFunction(_p); totalDist += dist; if (dist < SURF_DIST || totalDist > maxDist) { break; } _d.copy(_vn).multiplyScalar(dist); _p.add(_d); } return totalDist; }