UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

48 lines 4.82 kB
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