JSPM

bvh-aabbs

0.0.0112
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1
  • Score
    100M100P100Q45381F
  • License MIT

bounding volume hierarchy for axis-aligned bounding boxes

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-aabbs

Usage

//"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);

result

See Also




stonks