Package Exports
- bvh-aabbs
- bvh-aabbs/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (bvh-aabbs) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
bvh-aabbs
Bounding volume hierarchy for axis-aligned bounding boxes.
Put aabbs into a flat array BVH structure to use for raycasting and distance queries in JS or GLSL
Uses code scavenged from Erich Loftis' awesome THREE.js-PathTracing-Renderer
Includes JS port of the GLSL BVH raycasting function, also adapted into a distance query function.
BVH builders use this code by Erich Loftis in turn inspired by this code by Thanassis Tsiodras
Installation
npm i bvh-aabbsUsage
//"prove" that the BVH works by raytracing using ascii-raytracer
//generate random box [[x,y,z],[x,y,z]]
var randomBox3d = function(){
var range = 32;
var boxSizeMax = 8;
var p0 = [Math.random()*range,Math.random()*range,Math.random()*range];
var p1 = [p0[0]+Math.random()*boxSizeMax,p0[1]+Math.random()*boxSizeMax,p0[2]+Math.random()*boxSizeMax];
return [p0,p1];
}
var randomBoxes = [];
for(var i=0; i<100; i++){
randomBoxes.push(randomBox3d());
}
var ba = require('bvh-aabbs');
var fastBVHMode = false; //fast mode vs SAH mode (surface area heuristic)
var bvhArray = ba.aabbsToBvhArray(randomBoxes, fastBVHMode) //bvh data structure, flat array
var traceFunc = function(ray){
var o = ray.point;
var v = ray.vector;
var res = ba.raycast([o.x,o.y,o.z], [v.x,v.y,v.z], bvhArray);
return res;
}
var distFunc = function(x,y,z){
return ba.distance([x,y,z], bvhArray);
}
var config = {
raytraceFunction: traceFunc,
distanceFunction: distFunc,
boxes: randomBoxes,
resolution: 64,
aspectRatio: 1.0,
mouseControl:true,
cameraMode: 0 //0 normals 1 depth
}
require('ascii-raytracer').runScene(config);
