123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- var BABYLON;
- (function (BABYLON) {
- var Octree = (function () {
- function Octree(creationFunc, maxBlockCapacity) {
- this.maxDepth = 2;
- this.dynamicContent = new Array();
- this._maxBlockCapacity = maxBlockCapacity || 64;
- this._selectionContent = new BABYLON.SmartArray(1024);
- this._creationFunc = creationFunc;
- }
- // Methods
- Octree.prototype.update = function (worldMin, worldMax, entries) {
- Octree._CreateBlocks(worldMin, worldMax, entries, this._maxBlockCapacity, 0, this.maxDepth, this, this._creationFunc);
- };
- Octree.prototype.addMesh = function (entry) {
- for (var index = 0; index < this.blocks.length; index++) {
- var block = this.blocks[index];
- block.addEntry(entry);
- }
- };
- Octree.prototype.select = function (frustumPlanes, allowDuplicate) {
- this._selectionContent.reset();
- for (var index = 0; index < this.blocks.length; index++) {
- var block = this.blocks[index];
- block.select(frustumPlanes, this._selectionContent, allowDuplicate);
- }
- if (allowDuplicate) {
- this._selectionContent.concat(this.dynamicContent);
- } else {
- this._selectionContent.concatWithNoDuplicate(this.dynamicContent);
- }
- return this._selectionContent;
- };
- Octree.prototype.intersects = function (sphereCenter, sphereRadius, allowDuplicate) {
- this._selectionContent.reset();
- for (var index = 0; index < this.blocks.length; index++) {
- var block = this.blocks[index];
- block.intersects(sphereCenter, sphereRadius, this._selectionContent, allowDuplicate);
- }
- if (allowDuplicate) {
- this._selectionContent.concat(this.dynamicContent);
- } else {
- this._selectionContent.concatWithNoDuplicate(this.dynamicContent);
- }
- return this._selectionContent;
- };
- Octree.prototype.intersectsRay = function (ray) {
- this._selectionContent.reset();
- for (var index = 0; index < this.blocks.length; index++) {
- var block = this.blocks[index];
- block.intersectsRay(ray, this._selectionContent);
- }
- this._selectionContent.concatWithNoDuplicate(this.dynamicContent);
- return this._selectionContent;
- };
- Octree._CreateBlocks = function (worldMin, worldMax, entries, maxBlockCapacity, currentDepth, maxDepth, target, creationFunc) {
- target.blocks = new Array();
- var blockSize = new BABYLON.Vector3((worldMax.x - worldMin.x) / 2, (worldMax.y - worldMin.y) / 2, (worldMax.z - worldMin.z) / 2);
- for (var x = 0; x < 2; x++) {
- for (var y = 0; y < 2; y++) {
- for (var z = 0; z < 2; z++) {
- var localMin = worldMin.add(blockSize.multiplyByFloats(x, y, z));
- var localMax = worldMin.add(blockSize.multiplyByFloats(x + 1, y + 1, z + 1));
- var block = new BABYLON.OctreeBlock(localMin, localMax, maxBlockCapacity, currentDepth + 1, maxDepth, creationFunc);
- block.addEntries(entries);
- target.blocks.push(block);
- }
- }
- }
- };
- Octree.CreationFuncForMeshes = function (entry, block) {
- if (entry.getBoundingInfo().boundingBox.intersectsMinMax(block.minPoint, block.maxPoint)) {
- block.entries.push(entry);
- }
- };
- Octree.CreationFuncForSubMeshes = function (entry, block) {
- if (entry.getBoundingInfo().boundingBox.intersectsMinMax(block.minPoint, block.maxPoint)) {
- block.entries.push(entry);
- }
- };
- return Octree;
- })();
- BABYLON.Octree = Octree;
- })(BABYLON || (BABYLON = {}));
- //# sourceMappingURL=babylon.octree.js.map
|