babylon.octree.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. var BABYLON = BABYLON || {};
  2. (function () {
  3. BABYLON.Octree = function () {
  4. this.blocks = [];
  5. this._selection = new BABYLON.Tools.SmartArray(256);
  6. };
  7. // Methods
  8. BABYLON.Octree.prototype.update = function (worldMin, worldMax, meshes) {
  9. this.blocks = [];
  10. var blockSize = new BABYLON.Vector3((worldMax.x - worldMin.x) / 2, (worldMax.y - worldMin.y) / 2, (worldMax.z - worldMin.z) / 2);
  11. // Segmenting space
  12. for (var x = 0; x < 2; x++) {
  13. for (var y = 0; y < 2; y++) {
  14. for (var z = 0; z < 2; z++) {
  15. var localMin = worldMin.add(blockSize.multiplyByFloats(x, y, z));
  16. var localMax = worldMin.add(blockSize.multiplyByFloats(x + 1, y + 1, z + 1));
  17. var block = new BABYLON.OctreeBlock(x, y, z, localMin, localMax);
  18. block.addEntries(meshes);
  19. this.blocks.push(block);
  20. }
  21. }
  22. }
  23. };
  24. BABYLON.Octree.prototype.select = function (frustumPlanes) {
  25. this._selection.reset();
  26. for (var index = 0; index < this.blocks.length; index++) {
  27. var block = this.blocks[index];
  28. if (block.intersects(frustumPlanes)) {
  29. this._selection.push(block);
  30. }
  31. }
  32. return this._selection;
  33. };
  34. })();