three-mesh-bvh
Version:
A BVH implementation to speed up raycasting against three.js meshes.
79 lines (50 loc) • 1.84 kB
JavaScript
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 };