UNPKG

three-mesh-bvh

Version:

A BVH implementation to speed up raycasting against three.js meshes.

79 lines (50 loc) 1.84 kB
import { intersectTri } from '../../utils/ThreeRayIntersectUtilities.js'; import { setTriangle } from '../../utils/TriangleUtilities.js'; /*************************************************************/ /* This file is generated from "iterationUtils.template.js". */ /*************************************************************/ function intersectTris_indirect( bvh, materialOrSide, ray, offset, count, intersections, near, far ) { const { geometry, _indirectBuffer } = bvh; for ( let i = offset, end = offset + count; i < end; i ++ ) { let vi = _indirectBuffer ? _indirectBuffer[ i ] : i; intersectTri( geometry, materialOrSide, ray, vi, intersections, near, far ); } } function intersectClosestTri_indirect( bvh, materialOrSide, ray, offset, count, near, far ) { const { geometry, _indirectBuffer } = bvh; let dist = Infinity; let res = null; for ( let i = offset, end = offset + count; i < end; i ++ ) { let intersection; intersection = intersectTri( geometry, materialOrSide, ray, _indirectBuffer ? _indirectBuffer[ i ] : i, null, near, far ); if ( intersection && intersection.distance < dist ) { res = intersection; dist = intersection.distance; } } return res; } function iterateOverTriangles_indirect( offset, count, bvh, intersectsTriangleFunc, contained, depth, triangle ) { const { geometry } = bvh; const { index } = geometry; const pos = geometry.attributes.position; for ( let i = offset, l = count + offset; i < l; i ++ ) { let tri; tri = bvh.resolveTriangleIndex( i ); setTriangle( triangle, tri * 3, index, pos ); triangle.needsUpdate = true; if ( intersectsTriangleFunc( triangle, tri, contained, depth ) ) { return true; } } return false; } export { intersectClosestTri_indirect, intersectTris_indirect, iterateOverTriangles_indirect };