src/clipmap/Clipmap.js
import { EventDispatcher, Box3, Frustum, Matrix4, Vector3 } from "three";
import { Scene } from "./Scene";
import * as events from "./clipmap-events";
/**
* A box.
*
* @type {Box3}
* @private
*/
const b = new Box3();
/**
* A frustum.
*
* @type {Frustum}
* @private
*/
const f = new Frustum();
/**
* A 4x4 matrix.
*
* @type {Matrix4}
* @private
*/
const m = new Matrix4();
/**
* A 3D geometry clipmap.
*
* Finds world octants that are close to the viewer and arranges them in
* concentric LOD shells. Octants that leave or enter a shell are reported for
* further processing.
*/
export class Clipmap extends EventDispatcher {
/**
* Constructs a new clipmap.
*
* @param {WorldOctree} world - A world octree.
*/
constructor(world) {
super();
/**
* The world octree.
*
* @type {WorldOctree}
*/
this.world = world;
/**
* The current view position.
*
* @type {Vector3}
*/
this.position = new Vector3(Infinity, Infinity, Infinity);
/**
* The current scene.
*
* @type {Scene}
* @private
*/
this.currentScene = new Scene(this.world.levels);
/**
* The previous scene.
*
* @type {Scene}
* @private
*/
this.previousScene = this.currentScene.clone();
/**
* The next scene.
*
* @type {Scene}
* @private
*/
this.nextScene = this.currentScene.clone();
}
/**
* Updates the clipmap.
*
* @param {PerspectiveCamera} camera - A camera.
*/
update(camera) {
const viewPosition = this.position;
viewPosition.copy(camera.position);
// Build a frustum based on the given camera.
f.setFromMatrix(m.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse));
// Find octant keys.
}
/**
* Generates voxel data for the cells in the current scene and contours them
* to extract a polygonal mesh.
*/
process() {
}
/**
* Clears this clipmap.
*/
clear() {
this.previousScene.clear();
this.currentScene.clear();
this.nextScene.clear();
}
}