5ede1ac3627e0d7b07537f9fced778cdc6534a13f0ee0d153f5d679a83f7a52e.json 22 KB

1
  1. {"ast":null,"code":"import { Vector3 } from \"../../Maths/math.vector.js\";\nimport { BoundingBox } from \"../../Culling/boundingBox.js\";\n/**\n * Class used to store a cell in an octree\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/optimizeOctrees\n */\nexport class OctreeBlock {\n /**\n * Creates a new block\n * @param minPoint defines the minimum vector (in world space) of the block's bounding box\n * @param maxPoint defines the maximum vector (in world space) of the block's bounding box\n * @param capacity defines the maximum capacity of this block (if capacity is reached the block will be split into sub blocks)\n * @param depth defines the current depth of this block in the octree\n * @param maxDepth defines the maximal depth allowed (beyond this value, the capacity is ignored)\n * @param creationFunc defines a callback to call when an element is added to the block\n */\n constructor(minPoint, maxPoint, capacity, depth, maxDepth, creationFunc) {\n /**\n * Gets the content of the current block\n */\n this.entries = [];\n this._boundingVectors = new Array();\n this._capacity = capacity;\n this._depth = depth;\n this._maxDepth = maxDepth;\n this._creationFunc = creationFunc;\n this._minPoint = minPoint;\n this._maxPoint = maxPoint;\n this._boundingVectors.push(minPoint.clone());\n this._boundingVectors.push(maxPoint.clone());\n this._boundingVectors.push(minPoint.clone());\n this._boundingVectors[2].x = maxPoint.x;\n this._boundingVectors.push(minPoint.clone());\n this._boundingVectors[3].y = maxPoint.y;\n this._boundingVectors.push(minPoint.clone());\n this._boundingVectors[4].z = maxPoint.z;\n this._boundingVectors.push(maxPoint.clone());\n this._boundingVectors[5].z = minPoint.z;\n this._boundingVectors.push(maxPoint.clone());\n this._boundingVectors[6].x = minPoint.x;\n this._boundingVectors.push(maxPoint.clone());\n this._boundingVectors[7].y = minPoint.y;\n }\n // Property\n /**\n * Gets the maximum capacity of this block (if capacity is reached the block will be split into sub blocks)\n */\n get capacity() {\n return this._capacity;\n }\n /**\n * Gets the minimum vector (in world space) of the block's bounding box\n */\n get minPoint() {\n return this._minPoint;\n }\n /**\n * Gets the maximum vector (in world space) of the block's bounding box\n */\n get maxPoint() {\n return this._maxPoint;\n }\n // Methods\n /**\n * Add a new element to this block\n * @param entry defines the element to add\n */\n addEntry(entry) {\n if (this.blocks) {\n for (let index = 0; index < this.blocks.length; index++) {\n const block = this.blocks[index];\n block.addEntry(entry);\n }\n return;\n }\n this._creationFunc(entry, this);\n if (this.entries.length > this.capacity && this._depth < this._maxDepth) {\n this.createInnerBlocks();\n }\n }\n /**\n * Remove an element from this block\n * @param entry defines the element to remove\n */\n removeEntry(entry) {\n if (this.blocks) {\n for (let index = 0; index < this.blocks.length; index++) {\n const block = this.blocks[index];\n block.removeEntry(entry);\n }\n return;\n }\n const entryIndex = this.entries.indexOf(entry);\n if (entryIndex > -1) {\n this.entries.splice(entryIndex, 1);\n }\n }\n /**\n * Add an array of elements to this block\n * @param entries defines the array of elements to add\n */\n addEntries(entries) {\n for (let index = 0; index < entries.length; index++) {\n const mesh = entries[index];\n this.addEntry(mesh);\n }\n }\n /**\n * Test if the current block intersects the frustum planes and if yes, then add its content to the selection array\n * @param frustumPlanes defines the frustum planes to test\n * @param selection defines the array to store current content if selection is positive\n * @param allowDuplicate defines if the selection array can contains duplicated entries\n */\n select(frustumPlanes, selection, allowDuplicate) {\n if (BoundingBox.IsInFrustum(this._boundingVectors, frustumPlanes)) {\n if (this.blocks) {\n for (let index = 0; index < this.blocks.length; index++) {\n const block = this.blocks[index];\n block.select(frustumPlanes, selection, allowDuplicate);\n }\n return;\n }\n if (allowDuplicate) {\n selection.concat(this.entries);\n } else {\n selection.concatWithNoDuplicate(this.entries);\n }\n }\n }\n /**\n * Test if the current block intersect with the given bounding sphere and if yes, then add its content to the selection array\n * @param sphereCenter defines the bounding sphere center\n * @param sphereRadius defines the bounding sphere radius\n * @param selection defines the array to store current content if selection is positive\n * @param allowDuplicate defines if the selection array can contains duplicated entries\n */\n intersects(sphereCenter, sphereRadius, selection, allowDuplicate) {\n if (BoundingBox.IntersectsSphere(this._minPoint, this._maxPoint, sphereCenter, sphereRadius)) {\n if (this.blocks) {\n for (let index = 0; index < this.blocks.length; index++) {\n const block = this.blocks[index];\n block.intersects(sphereCenter, sphereRadius, selection, allowDuplicate);\n }\n return;\n }\n if (allowDuplicate) {\n selection.concat(this.entries);\n } else {\n selection.concatWithNoDuplicate(this.entries);\n }\n }\n }\n /**\n * Test if the current block intersect with the given ray and if yes, then add its content to the selection array\n * @param ray defines the ray to test with\n * @param selection defines the array to store current content if selection is positive\n */\n intersectsRay(ray, selection) {\n if (ray.intersectsBoxMinMax(this._minPoint, this._maxPoint)) {\n if (this.blocks) {\n for (let index = 0; index < this.blocks.length; index++) {\n const block = this.blocks[index];\n block.intersectsRay(ray, selection);\n }\n return;\n }\n selection.concatWithNoDuplicate(this.entries);\n }\n }\n /**\n * Subdivide the content into child blocks (this block will then be empty)\n */\n createInnerBlocks() {\n OctreeBlock._CreateBlocks(this._minPoint, this._maxPoint, this.entries, this._capacity, this._depth, this._maxDepth, this, this._creationFunc);\n this.entries.splice(0);\n }\n /**\n * @internal\n */\n static _CreateBlocks(worldMin, worldMax, entries, maxBlockCapacity, currentDepth, maxDepth, target, creationFunc) {\n target.blocks = new Array();\n const blockSize = new Vector3((worldMax.x - worldMin.x) / 2, (worldMax.y - worldMin.y) / 2, (worldMax.z - worldMin.z) / 2);\n // Segmenting space\n for (let x = 0; x < 2; x++) {\n for (let y = 0; y < 2; y++) {\n for (let z = 0; z < 2; z++) {\n const localMin = worldMin.add(blockSize.multiplyByFloats(x, y, z));\n const localMax = worldMin.add(blockSize.multiplyByFloats(x + 1, y + 1, z + 1));\n const block = new OctreeBlock(localMin, localMax, maxBlockCapacity, currentDepth + 1, maxDepth, creationFunc);\n block.addEntries(entries);\n target.blocks.push(block);\n }\n }\n }\n }\n}","map":{"version":3,"names":["Vector3","BoundingBox","OctreeBlock","constructor","minPoint","maxPoint","capacity","depth","maxDepth","creationFunc","entries","_boundingVectors","Array","_capacity","_depth","_maxDepth","_creationFunc","_minPoint","_maxPoint","push","clone","x","y","z","addEntry","entry","blocks","index","length","block","createInnerBlocks","removeEntry","entryIndex","indexOf","splice","addEntries","mesh","select","frustumPlanes","selection","allowDuplicate","IsInFrustum","concat","concatWithNoDuplicate","intersects","sphereCenter","sphereRadius","IntersectsSphere","intersectsRay","ray","intersectsBoxMinMax","_CreateBlocks","worldMin","worldMax","maxBlockCapacity","currentDepth","target","blockSize","localMin","add","multiplyByFloats","localMax"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Culling/Octrees/octreeBlock.js"],"sourcesContent":["import { Vector3 } from \"../../Maths/math.vector.js\";\nimport { BoundingBox } from \"../../Culling/boundingBox.js\";\n/**\n * Class used to store a cell in an octree\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/optimizeOctrees\n */\nexport class OctreeBlock {\n /**\n * Creates a new block\n * @param minPoint defines the minimum vector (in world space) of the block's bounding box\n * @param maxPoint defines the maximum vector (in world space) of the block's bounding box\n * @param capacity defines the maximum capacity of this block (if capacity is reached the block will be split into sub blocks)\n * @param depth defines the current depth of this block in the octree\n * @param maxDepth defines the maximal depth allowed (beyond this value, the capacity is ignored)\n * @param creationFunc defines a callback to call when an element is added to the block\n */\n constructor(minPoint, maxPoint, capacity, depth, maxDepth, creationFunc) {\n /**\n * Gets the content of the current block\n */\n this.entries = [];\n this._boundingVectors = new Array();\n this._capacity = capacity;\n this._depth = depth;\n this._maxDepth = maxDepth;\n this._creationFunc = creationFunc;\n this._minPoint = minPoint;\n this._maxPoint = maxPoint;\n this._boundingVectors.push(minPoint.clone());\n this._boundingVectors.push(maxPoint.clone());\n this._boundingVectors.push(minPoint.clone());\n this._boundingVectors[2].x = maxPoint.x;\n this._boundingVectors.push(minPoint.clone());\n this._boundingVectors[3].y = maxPoint.y;\n this._boundingVectors.push(minPoint.clone());\n this._boundingVectors[4].z = maxPoint.z;\n this._boundingVectors.push(maxPoint.clone());\n this._boundingVectors[5].z = minPoint.z;\n this._boundingVectors.push(maxPoint.clone());\n this._boundingVectors[6].x = minPoint.x;\n this._boundingVectors.push(maxPoint.clone());\n this._boundingVectors[7].y = minPoint.y;\n }\n // Property\n /**\n * Gets the maximum capacity of this block (if capacity is reached the block will be split into sub blocks)\n */\n get capacity() {\n return this._capacity;\n }\n /**\n * Gets the minimum vector (in world space) of the block's bounding box\n */\n get minPoint() {\n return this._minPoint;\n }\n /**\n * Gets the maximum vector (in world space) of the block's bounding box\n */\n get maxPoint() {\n return this._maxPoint;\n }\n // Methods\n /**\n * Add a new element to this block\n * @param entry defines the element to add\n */\n addEntry(entry) {\n if (this.blocks) {\n for (let index = 0; index < this.blocks.length; index++) {\n const block = this.blocks[index];\n block.addEntry(entry);\n }\n return;\n }\n this._creationFunc(entry, this);\n if (this.entries.length > this.capacity && this._depth < this._maxDepth) {\n this.createInnerBlocks();\n }\n }\n /**\n * Remove an element from this block\n * @param entry defines the element to remove\n */\n removeEntry(entry) {\n if (this.blocks) {\n for (let index = 0; index < this.blocks.length; index++) {\n const block = this.blocks[index];\n block.removeEntry(entry);\n }\n return;\n }\n const entryIndex = this.entries.indexOf(entry);\n if (entryIndex > -1) {\n this.entries.splice(entryIndex, 1);\n }\n }\n /**\n * Add an array of elements to this block\n * @param entries defines the array of elements to add\n */\n addEntries(entries) {\n for (let index = 0; index < entries.length; index++) {\n const mesh = entries[index];\n this.addEntry(mesh);\n }\n }\n /**\n * Test if the current block intersects the frustum planes and if yes, then add its content to the selection array\n * @param frustumPlanes defines the frustum planes to test\n * @param selection defines the array to store current content if selection is positive\n * @param allowDuplicate defines if the selection array can contains duplicated entries\n */\n select(frustumPlanes, selection, allowDuplicate) {\n if (BoundingBox.IsInFrustum(this._boundingVectors, frustumPlanes)) {\n if (this.blocks) {\n for (let index = 0; index < this.blocks.length; index++) {\n const block = this.blocks[index];\n block.select(frustumPlanes, selection, allowDuplicate);\n }\n return;\n }\n if (allowDuplicate) {\n selection.concat(this.entries);\n }\n else {\n selection.concatWithNoDuplicate(this.entries);\n }\n }\n }\n /**\n * Test if the current block intersect with the given bounding sphere and if yes, then add its content to the selection array\n * @param sphereCenter defines the bounding sphere center\n * @param sphereRadius defines the bounding sphere radius\n * @param selection defines the array to store current content if selection is positive\n * @param allowDuplicate defines if the selection array can contains duplicated entries\n */\n intersects(sphereCenter, sphereRadius, selection, allowDuplicate) {\n if (BoundingBox.IntersectsSphere(this._minPoint, this._maxPoint, sphereCenter, sphereRadius)) {\n if (this.blocks) {\n for (let index = 0; index < this.blocks.length; index++) {\n const block = this.blocks[index];\n block.intersects(sphereCenter, sphereRadius, selection, allowDuplicate);\n }\n return;\n }\n if (allowDuplicate) {\n selection.concat(this.entries);\n }\n else {\n selection.concatWithNoDuplicate(this.entries);\n }\n }\n }\n /**\n * Test if the current block intersect with the given ray and if yes, then add its content to the selection array\n * @param ray defines the ray to test with\n * @param selection defines the array to store current content if selection is positive\n */\n intersectsRay(ray, selection) {\n if (ray.intersectsBoxMinMax(this._minPoint, this._maxPoint)) {\n if (this.blocks) {\n for (let index = 0; index < this.blocks.length; index++) {\n const block = this.blocks[index];\n block.intersectsRay(ray, selection);\n }\n return;\n }\n selection.concatWithNoDuplicate(this.entries);\n }\n }\n /**\n * Subdivide the content into child blocks (this block will then be empty)\n */\n createInnerBlocks() {\n OctreeBlock._CreateBlocks(this._minPoint, this._maxPoint, this.entries, this._capacity, this._depth, this._maxDepth, this, this._creationFunc);\n this.entries.splice(0);\n }\n /**\n * @internal\n */\n static _CreateBlocks(worldMin, worldMax, entries, maxBlockCapacity, currentDepth, maxDepth, target, creationFunc) {\n target.blocks = new Array();\n const blockSize = new Vector3((worldMax.x - worldMin.x) / 2, (worldMax.y - worldMin.y) / 2, (worldMax.z - worldMin.z) / 2);\n // Segmenting space\n for (let x = 0; x < 2; x++) {\n for (let y = 0; y < 2; y++) {\n for (let z = 0; z < 2; z++) {\n const localMin = worldMin.add(blockSize.multiplyByFloats(x, y, z));\n const localMax = worldMin.add(blockSize.multiplyByFloats(x + 1, y + 1, z + 1));\n const block = new OctreeBlock(localMin, localMax, maxBlockCapacity, currentDepth + 1, maxDepth, creationFunc);\n block.addEntries(entries);\n target.blocks.push(block);\n }\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}