Rabbit Hole
A volumetric terrain engine for WebGL. This engine has been created in the context of a Master's degree project at the University of Applied Sciences Brandenburg in cooperation with the Norwegian University of Technology and Science.
While many core features are already implemented, this project is still under development.
Demo · Performance · Volume Editor · API Reference · Master's Thesis (2016) · Electronic Imaging Paper (2018)
Installation
This library requires the peer dependencies iterator-result, math-ds, sparse-octree and synthetic-event.
npm install iterator-result math-ds sparse-octree synthetic-event
npm install rabbit-hole
Usage
The following example uses rabbit-hole-three and the rendering framework three.
Please refer to the usage example of three
for information
on how to setup the renderer, scene and camera.
Basics
import { Terrain } from "rabbit-hole";
import { } from "rabbit-hole-three";
const terrain = new Terrain();
scene.add(terrain.object);
(function render() {
requestAnimationFrame(render);
terrain.update(camera);
renderer.render(scene, camera);
}());
Constructive Solid Geometry
import { SuperPrimitive, SuperPrimitivePreset } from "rabbit-hole";
const a = SuperPrimitive.create(SuperPrimitivePreset.SPHERE);
const b = SuperPrimitive.create(SuperPrimitivePreset.TORUS);
const c = SuperPrimitive.create(SuperPrimitivePreset.CUBE);
terrain.union(a);
terrain.subtract(b.intersect(c).subtract(a));
terrain.intersect(c.subtract(a.union(b)));
Features
- Multithreading
- Level of Detail
- Real-time volume construction and destruction
Contributing
Please refer to the contribution guidelines for details.