@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
48 lines • 4.82 kB
JavaScript
import { TgdConsole } from "./../../debug/index.js";
const debugListBBox = TgdConsole.memo();
export function listBBoxes(camera, bbox, levels, surfaceThreshold) {
const result = [];
recursiveListBBoxes(result, camera, bbox, levels, 0, 0, 0, 0, surfaceThreshold);
// debugListBBox(result.length, (out) =>
// out.add(result.map((item) => JSON.stringify(item)).join("\n")).debug()
// )
return result;
}
const lastText = "";
function recursiveListBBoxes(result, camera, bbox, levels, x, y, z, level, surfaceThreshold) {
const visibility = camera.computeBoundingBoxVisibleSurface(bbox);
if (visibility < 1e-12) {
return;
}
if (visibility < surfaceThreshold * 4 || level >= levels) {
result.push([x, y, z, level]);
return;
}
// We split the BBox in 8 sub boxes.
const [x0, y0, z0] = bbox.min;
const [x2, y2, z2] = bbox.max;
const x1 = (x0 + x2) / 2;
const y1 = (y0 + y2) / 2;
const z1 = (z0 + z2) / 2;
const nextLevel = level + 1;
const nextX = x * 2;
const nextY = y * 2;
const nextZ = z * 2;
const xMin = [x0, x1];
const xMax = [x1, x2];
const yMin = [y0, y1];
const yMax = [y1, y2];
const zMin = [z0, z1];
const zMax = [z1, z2];
for (let Z = 0; Z < 2; Z++) {
for (let Y = 0; Y < 2; Y++) {
for (let X = 0; X < 2; X++) {
recursiveListBBoxes(result, camera, {
min: [xMin[X], yMin[Y], zMin[Z]],
max: [xMax[X], yMax[Y], zMax[Z]],
}, levels, nextX + X, nextY + Y, nextZ + Z, nextLevel, surfaceThreshold);
}
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2N0cmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhaW50ZXIvbG9kL29jdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBSXZDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtBQUV2QyxNQUFNLFVBQVUsVUFBVSxDQUN0QixNQUFpQixFQUNqQixJQUdFLEVBQ0YsTUFBYyxFQUNkLGdCQUF3QjtJQUV4QixNQUFNLE1BQU0sR0FBbUIsRUFBRSxDQUFBO0lBQ2pDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtJQUMvRSx3Q0FBd0M7SUFDeEMsNkVBQTZFO0lBQzdFLElBQUk7SUFDSixPQUFPLE1BQU0sQ0FBQTtBQUNqQixDQUFDO0FBRUQsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFBO0FBRW5CLFNBQVMsbUJBQW1CLENBQ3hCLE1BQXNCLEVBQ3RCLE1BQWlCLEVBQ2pCLElBR0UsRUFDRixNQUFjLEVBQ2QsQ0FBUyxFQUNULENBQVMsRUFDVCxDQUFTLEVBQ1QsS0FBYSxFQUNiLGdCQUF3QjtJQUV4QixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDaEUsSUFBSSxVQUFVLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDckIsT0FBTTtJQUNWLENBQUM7SUFFRCxJQUFJLFVBQVUsR0FBRyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzdCLE9BQU07SUFDVixDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUE7SUFDN0IsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQTtJQUM3QixNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN4QixNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbkIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNuQixNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ25CLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3JCLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3JCLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3JCLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3JCLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3JCLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN6QixtQkFBbUIsQ0FDZixNQUFNLEVBQ04sTUFBTSxFQUNOO29CQUNJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbkMsRUFDRCxNQUFNLEVBQ04sS0FBSyxHQUFHLENBQUMsRUFDVCxLQUFLLEdBQUcsQ0FBQyxFQUNULEtBQUssR0FBRyxDQUFDLEVBQ1QsU0FBUyxFQUNULGdCQUFnQixDQUNuQixDQUFBO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0FBQ0wsQ0FBQyJ9