From 58de48547ce9e08ae73ba810b0718ddf55e3d250 Mon Sep 17 00:00:00 2001 From: Lucas Dower Date: Sat, 3 Jul 2021 14:30:00 +0100 Subject: [PATCH] Improved readability --- src/aabb.js | 35 ++++++++++++++++++++++++++++++++++- src/voxel_manager.js | 32 ++++++++------------------------ 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/src/aabb.js b/src/aabb.js index 3142076..5a45d5d 100644 --- a/src/aabb.js +++ b/src/aabb.js @@ -10,6 +10,7 @@ class AABB { this.b = Vector3.add(centre, Vector3.mulScalar(size, 0.5)); } + /* subdivide() { const newSize = Vector3.divScalar(this.size, 2); const offset = Vector3.divScalar(this.size, 4); @@ -25,7 +26,39 @@ class AABB { new AABB(Vector3.add(this.centre, new Vector3( offset.x, offset.y, offset.z)), newSize), ]; } + */ } -module.exports.AABB = AABB; \ No newline at end of file +class CubeAABB extends AABB { + + constructor(centre, width) { + const sizeVector = new Vector3(width, width, width); + super(centre, sizeVector); + + this.width = width; + + } + + subdivide() { + const newWidth = this.width / 2; + const offset = this.width / 4; + + return [ + new CubeAABB(Vector3.add(this.centre, new Vector3(-offset, -offset, -offset)), newWidth), + new CubeAABB(Vector3.add(this.centre, new Vector3( offset, -offset, -offset)), newWidth), + new CubeAABB(Vector3.add(this.centre, new Vector3(-offset, offset, -offset)), newWidth), + new CubeAABB(Vector3.add(this.centre, new Vector3( offset, offset, -offset)), newWidth), + new CubeAABB(Vector3.add(this.centre, new Vector3(-offset, -offset, offset)), newWidth), + new CubeAABB(Vector3.add(this.centre, new Vector3( offset, -offset, offset)), newWidth), + new CubeAABB(Vector3.add(this.centre, new Vector3(-offset, offset, offset)), newWidth), + new CubeAABB(Vector3.add(this.centre, new Vector3( offset, offset, offset)), newWidth), + ]; + } + +} + + + +module.exports.AABB = AABB; +module.exports.CubeAABB = CubeAABB; \ No newline at end of file diff --git a/src/voxel_manager.js b/src/voxel_manager.js index b80b3e6..a5483e6 100644 --- a/src/voxel_manager.js +++ b/src/voxel_manager.js @@ -1,4 +1,4 @@ -const { AABB } = require("./aabb.js"); +const { AABB, CubeAABB } = require("./aabb.js"); const { Vector3 } = require("./vector.js"); class VoxelManager { @@ -32,11 +32,13 @@ class VoxelManager { gridSnappedCentre = Vector3.round(gridSnappedCentre); gridSnappedCentre = Vector3.mulScalar(gridSnappedCentre, this._voxelSize); - let size = this._voxelSize; - let cubeAABB = new AABB(gridSnappedCentre, new Vector3(size, size, size)); + let width = this._voxelSize; + //let cubeAABB = new AABB(gridSnappedCentre, new Vector3(size, size, size)); + let cubeAABB = new CubeAABB(gridSnappedCentre, width); while (!triangle.insideAABB(cubeAABB)) { - cubeAABB = new AABB(cubeAABB.centre, Vector3.mulScalar(cubeAABB.size, 2.0)); + //cubeAABB = new AABB(cubeAABB.centre, Vector3.mulScalar(cubeAABB.size, 2.0)); + cubeAABB = new CubeAABB(cubeAABB.centre, cubeAABB.width * 2.0); } return cubeAABB; @@ -51,8 +53,8 @@ class VoxelManager { while (queue.length > 0) { const aabb = queue.shift(); if (triangle.intersectAABB(aabb)) { - if (aabb.size.x > this._voxelSize) { - // Continue to subdivicde + if (aabb.width > this._voxelSize) { + // Continue to subdivide queue.push(...aabb.subdivide()); } else { // We've reached the voxel level, stop @@ -60,24 +62,6 @@ class VoxelManager { } } } - - //console.log("Main AABB: ", cubeAABB); - - /* - const subAABBs = cubeAABB.subdivide(); - renderer.setStroke(new Vector3(1.0, 1.0, 0.0)); - - for (const subAABB of subAABBs) { - if (triangle.intersectAABB(subAABB)) { - renderer.registerBox(subAABB.centre, subAABB.size); - } - } - */ - - //const subAABB = subAABBs[0]; - //console.log("Sub AABB: ", subAABB); - //console.log(triangle.intersectAABB(subAABB)); - //renderer.registerBox(subAABB.centre, subAABB.size); } }