@woosh/meep-engine 2.93.2 → 2.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/build/meep.cjs +296 -233
  3. package/build/meep.min.js +1 -1
  4. package/build/meep.module.js +296 -233
  5. package/package.json +1 -1
  6. package/src/core/bvh2/bvh3/BVH.d.ts.map +1 -1
  7. package/src/core/bvh2/bvh3/BVH.js +4 -2
  8. package/src/core/bvh2/bvh3/build_triangle_morton_codes.d.ts.map +1 -1
  9. package/src/core/bvh2/bvh3/build_triangle_morton_codes.js +2 -1
  10. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.d.ts.map +1 -1
  11. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.js +12 -1
  12. package/src/core/bvh2/bvh3/ebvh_build_hierarchy.d.ts.map +1 -1
  13. package/src/core/bvh2/bvh3/ebvh_build_hierarchy.js +11 -1
  14. package/src/core/bvh2/bvh3/ebvh_geometry_query_nearest_triangle_ray.d.ts +14 -0
  15. package/src/core/bvh2/bvh3/ebvh_geometry_query_nearest_triangle_ray.d.ts.map +1 -0
  16. package/src/core/bvh2/bvh3/ebvh_geometry_query_nearest_triangle_ray.js +146 -0
  17. package/src/core/bvh2/bvh3/query/bvh_query_user_data_ray.d.ts +16 -0
  18. package/src/core/bvh2/bvh3/query/bvh_query_user_data_ray.d.ts.map +1 -0
  19. package/src/core/bvh2/bvh3/query/bvh_query_user_data_ray.js +90 -0
  20. package/src/core/color/Color.d.ts.map +1 -1
  21. package/src/core/color/Color.js +17 -7
  22. package/src/core/geom/2d/bvh/BVH2D.d.ts.map +1 -1
  23. package/src/core/geom/2d/bvh/BVH2D.js +24 -29
  24. package/src/core/geom/2d/bvh/BVH2D.spec.js +10 -9
  25. package/src/core/geom/2d/bvh/bvh2d_query_all_data_by_circle.spec.d.ts +2 -0
  26. package/src/core/geom/2d/bvh/bvh2d_query_all_data_by_circle.spec.d.ts.map +1 -0
  27. package/src/core/geom/2d/bvh/bvh2d_query_all_data_by_circle.spec.js +89 -0
  28. package/src/core/geom/2d/quad-tree/QuadTreeNode.spec.js +1 -1
  29. package/src/core/geom/3d/aabb/AABB3.d.ts.map +1 -1
  30. package/src/core/geom/3d/aabb/AABB3.js +8 -1
  31. package/src/core/geom/3d/aabb/aabb3_array_combine.d.ts.map +1 -1
  32. package/src/core/geom/3d/aabb/aabb3_array_combine.js +5 -0
  33. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.js +2 -0
  34. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.d.ts.map +1 -1
  35. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.js +9 -1
  36. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricGeometry.d.ts +16 -0
  37. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricGeometry.d.ts.map +1 -0
  38. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricGeometry.js +55 -0
  39. package/src/core/math/build_gaussian_kernel_1d.d.ts +8 -0
  40. package/src/core/math/build_gaussian_kernel_1d.d.ts.map +1 -0
  41. package/src/core/math/build_gaussian_kernel_1d.js +26 -0
  42. package/src/core/math/build_gaussian_kernel_2d.d.ts +10 -0
  43. package/src/core/math/build_gaussian_kernel_2d.d.ts.map +1 -0
  44. package/src/core/math/build_gaussian_kernel_2d.js +55 -0
  45. package/src/core/math/nextOdd.d.ts +8 -0
  46. package/src/core/math/nextOdd.d.ts.map +1 -0
  47. package/src/core/math/nextOdd.js +15 -0
  48. package/src/core/math/nextOdd.spec.d.ts +2 -0
  49. package/src/core/math/nextOdd.spec.d.ts.map +1 -0
  50. package/src/core/math/nextOdd.spec.js +9 -0
  51. package/src/engine/animation/clip/ecd_bind_animation_curve.d.ts.map +1 -1
  52. package/src/engine/animation/clip/ecd_bind_animation_curve.js +7 -3
  53. package/src/engine/animation/curve/prototypeGLTF.js +18 -11
  54. package/src/engine/ecs/Entity.js +1 -1
  55. package/src/engine/ecs/EntityComponentDataset.js +0 -14
  56. package/src/engine/ecs/computeComponentClassName.d.ts +2 -0
  57. package/src/engine/ecs/computeComponentClassName.d.ts.map +1 -0
  58. package/src/engine/ecs/computeComponentClassName.js +13 -0
  59. package/src/engine/graphics/ecs/light/binding/LightBinding.d.ts +2 -0
  60. package/src/engine/graphics/ecs/light/binding/LightBinding.d.ts.map +1 -1
  61. package/src/engine/graphics/ecs/light/binding/LightBinding.js +16 -0
  62. package/src/engine/graphics/ecs/light/binding/fp/FPLightBinding.d.ts +13 -2
  63. package/src/engine/graphics/ecs/light/binding/fp/FPLightBinding.d.ts.map +1 -1
  64. package/src/engine/graphics/ecs/light/binding/fp/FPLightBinding.js +37 -4
  65. package/src/engine/graphics/ecs/light/binding/three/ThreeLightBinding.d.ts.map +1 -1
  66. package/src/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +12 -8
  67. package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +1 -1
  68. package/src/engine/graphics/sh3/path_tracer/GeometryBVHBatched.d.ts +0 -9
  69. package/src/engine/graphics/sh3/path_tracer/GeometryBVHBatched.d.ts.map +1 -1
  70. package/src/engine/graphics/sh3/path_tracer/GeometryBVHBatched.js +100 -129
  71. package/src/engine/graphics/sh3/path_tracer/PathTracer.d.ts.map +1 -1
  72. package/src/engine/graphics/sh3/path_tracer/PathTracer.js +6 -4
  73. package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +11 -4
  74. package/src/engine/graphics/sh3/path_tracer/sample_triangle_attribute.d.ts +2 -2
  75. package/src/engine/graphics/sh3/path_tracer/sample_triangle_attribute.js +2 -2
  76. package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
  77. package/src/engine/graphics/texture/sampler/Sampler2D.js +6 -4
  78. package/src/engine/graphics/texture/sampler/convertSampler2D2DataURL.d.ts.map +1 -1
  79. package/src/engine/graphics/texture/sampler/convertSampler2D2DataURL.js +1 -2
  80. package/src/engine/graphics/texture/sampler/downloadSamplerAsPNG.d.ts +2 -2
  81. package/src/engine/graphics/texture/sampler/downloadSamplerAsPNG.d.ts.map +1 -1
  82. package/src/engine/graphics/texture/sampler/downloadSamplerAsPNG.js +3 -3
  83. package/src/engine/graphics/texture/sampler/filter/sampler2d_blur_gaussian.d.ts.map +1 -1
  84. package/src/engine/graphics/texture/sampler/filter/sampler2d_blur_gaussian.js +5 -31
  85. package/src/engine/graphics/texture/virtual/VirtualTextureMaterial.d.ts +3 -6
  86. package/src/engine/graphics/texture/virtual/VirtualTextureMaterial.d.ts.map +1 -1
  87. package/src/engine/graphics/texture/virtual/VirtualTextureMaterial.js +8 -27
  88. package/src/engine/graphics/texture/virtual/VirtualTextureMemoryMapping.d.ts +4 -0
  89. package/src/engine/graphics/texture/virtual/VirtualTextureMemoryMapping.d.ts.map +1 -1
  90. package/src/engine/graphics/texture/virtual/VirtualTextureMemoryMapping.js +12 -0
  91. package/src/engine/graphics/texture/virtual/VirtualTextureSystem.d.ts +29 -0
  92. package/src/engine/graphics/texture/virtual/VirtualTextureSystem.d.ts.map +1 -0
  93. package/src/engine/graphics/texture/virtual/VirtualTextureSystem.js +102 -0
  94. package/src/engine/graphics/texture/virtual/VirtualTextureUsageUpdater.js +1 -1
  95. package/src/engine/graphics/texture/virtual/prototype.js +221 -79
  96. package/src/generation/filtering/numeric/CellFilterCache.d.ts.map +1 -1
  97. package/src/generation/filtering/numeric/CellFilterCache.js +7 -7
  98. package/src/generation/filtering/numeric/complex/CellFilterFXAA.d.ts.map +1 -1
  99. package/src/generation/filtering/numeric/complex/CellFilterFXAA.js +9 -6
  100. package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.d.ts +1 -13
  101. package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.d.ts.map +1 -1
  102. package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +39 -111
  103. package/src/generation/grid/generation/discrete/GridTaskConnectRooms.d.ts.map +1 -1
  104. package/src/generation/grid/generation/discrete/GridTaskConnectRooms.js +6 -5
  105. package/src/generation/grid/generation/util/buildDistanceMapToObjective.d.ts +1 -1
  106. package/src/generation/grid/generation/util/buildDistanceMapToObjective.d.ts.map +1 -1
  107. package/src/generation/grid/generation/util/buildDistanceMapToObjective.js +5 -12
  108. package/src/core/math/makeNextOdd.d.ts +0 -8
  109. package/src/core/math/makeNextOdd.d.ts.map +0 -1
  110. package/src/core/math/makeNextOdd.js +0 -15
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Fully featured ECS game engine written in JavaScript",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.93.2",
8
+ "version": "2.94.0",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -1 +1 @@
1
- {"version":3,"file":"BVH.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/BVH.js"],"names":[],"mappings":"AAQA,8BAA+B;AAC/B,+BAAgC;AAChC,+BAAgC;AAChC,8BAA+B;AAU/B;;;GAGG;AACH,wBAFU,MAAM,CAEoB;AAcpC;;;;;GAKG;AACH,iCAFU,MAAM,CAEqB;AAgBrC;;;;;;GAMG;AACH;IAEI;;;;OAIG;IACH,sBAA2E;IAE3E;;;;OAIG;IACH,uBAAsD;IAEtD;;;;OAIG;IACH,sBAAoD;IAEpD;;;;OAIG;IACH,mBAA8B;IAE9B;;;;OAIG;IACH,eAAW;IAEX;;;;OAIG;IACH,eAAY;IAEZ;;;;OAIG;IACH,uBAAmB;IAEnB;;;;OAIG;IACH,eAAmB;IAEnB;;;OAGG;IACH,mBAEC;IAUD;;;OAGG;IACH,+BAMC;IAlBD;;;OAGG;IACH,4BAEC;IAcD,wBAgBC;IAED;;;;OAIG;IACH,uBAqBC;IAED;;OAEG;IACH,aAIC;IAED;;;OAGG;IACH,iBAFa,MAAM,CAqDlB;IAED;;;;OAIG;IACH,iBAFW,MAAM,QAMhB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,OAAO,CAOnB;IAED;;;;OAIG;IACH,uBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,uBAHW,MAAM,SACN,MAAM,QAOhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAGD;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,oBAHW,MAAM,UACN,MAAM,QAKhB;IAED;;;;OAIG;IACH,kBAHW,MAAM,UACN,MAAM,EAAE,GAAC,YAAY,QAe/B;IAED;;;;OAIG;IACH,kBAHW,MAAM,QACN,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,QAsBpC;IAED;;;;OAIG;IACH,mBAHW,MAAM,QACN,MAAM,EAAE,QAWlB;IAED;;;;;;;;;OASG;IACH,4BARW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QAmBhB;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACJ,MAAM,CAoBlB;IAED;;;;;OAKG;IACH,wCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CAoClB;IAED;;;;;OAKG;IACH,oCAJW,MAAM,WACN,MAAM,WACN,MAAM,QAyChB;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,IAAI,CA0GhB;IAED;;;;;OAKG;IACH,wBAuBC;IAED;;;;OAIG;IACH,yBA4BC;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,IAAI,CA6ChB;IAED;;;;;;OAMG;IACH,gBAoMC;IAED;;;OAGG;IACH,oBAIC;IAED;;;;OAIG;IACH,yCA8BC;IAED;;;;;OAKG;IACH,+BAJW,MAAM,EAAE,sBACR,MAAM,GACJ,MAAM,CAWlB;IAED;;;;;OAKG;IACH,0BA6BC;IAED;;;;;OAKG;IACH,cAJW,MAAM,KACN,MAAM,GACJ,OAAO,CAsCnB;CACJ"}
1
+ {"version":3,"file":"BVH.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/BVH.js"],"names":[],"mappings":"AAQA,8BAA+B;AAC/B,+BAAgC;AAChC,+BAAgC;AAChC,8BAA+B;AAE/B;;;;;GAKG;AACH,+BAFU,MAAM,CAE+B;AAE/C;;;GAGG;AACH,wBAFU,MAAM,CAEoB;AAcpC;;;;;GAKG;AACH,iCAFU,MAAM,CAEqB;AAgBrC;;;;;;GAMG;AACH;IAEI;;;;OAIG;IACH,sBAA2E;IAE3E;;;;OAIG;IACH,uBAAsD;IAEtD;;;;OAIG;IACH,sBAAoD;IAEpD;;;;OAIG;IACH,mBAA8B;IAE9B;;;;OAIG;IACH,eAAW;IAEX;;;;OAIG;IACH,eAAY;IAEZ;;;;OAIG;IACH,uBAAmB;IAEnB;;;;OAIG;IACH,eAAmB;IAEnB;;;OAGG;IACH,mBAEC;IAUD;;;OAGG;IACH,+BAMC;IAlBD;;;OAGG;IACH,4BAEC;IAcD,wBAgBC;IAED;;;;OAIG;IACH,uBAqBC;IAED;;OAEG;IACH,aAIC;IAED;;;OAGG;IACH,iBAFa,MAAM,CAqDlB;IAED;;;;OAIG;IACH,iBAFW,MAAM,QAMhB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,OAAO,CAOnB;IAED;;;;OAIG;IACH,uBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,uBAHW,MAAM,SACN,MAAM,QAOhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAGD;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,oBAHW,MAAM,UACN,MAAM,QAKhB;IAED;;;;OAIG;IACH,kBAHW,MAAM,UACN,MAAM,EAAE,GAAC,YAAY,QAe/B;IAED;;;;OAIG;IACH,kBAHW,MAAM,QACN,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,QAsBpC;IAED;;;;OAIG;IACH,mBAHW,MAAM,QACN,MAAM,EAAE,QAWlB;IAED;;;;;;;;;OASG;IACH,4BARW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QAmBhB;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACJ,MAAM,CAoBlB;IAED;;;;;OAKG;IACH,wCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CAoClB;IAED;;;;;OAKG;IACH,oCAJW,MAAM,WACN,MAAM,WACN,MAAM,QA2ChB;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,IAAI,CA0GhB;IAED;;;;;OAKG;IACH,wBAuBC;IAED;;;;OAIG;IACH,yBA4BC;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,IAAI,CA6ChB;IAED;;;;;;OAMG;IACH,gBAoMC;IAED;;;OAGG;IACH,oBAIC;IAED;;;;OAIG;IACH,yCA8BC;IAED;;;;;OAKG;IACH,+BAJW,MAAM,EAAE,sBACR,MAAM,GACJ,MAAM,CAWlB;IAED;;;;;OAKG;IACH,0BA6BC;IAED;;;;;OAKG;IACH,cAJW,MAAM,KACN,MAAM,GACJ,OAAO,CAsCnB;CACJ"}
@@ -17,7 +17,7 @@ export const COLUMN_HEIGHT = 9;
17
17
  * @readonly
18
18
  * @type {number}
19
19
  */
20
- const COLUMN_USER_DATA = COLUMN_CHILD_2;
20
+ export const COLUMN_USER_DATA = COLUMN_CHILD_2;
21
21
 
22
22
  /**
23
23
  *
@@ -553,8 +553,11 @@ export class BVH {
553
553
  * @param {number} index_b
554
554
  */
555
555
  node_set_combined_aabb(destination, index_a, index_b) {
556
+ assert.isNonNegativeInteger(destination, 'destination');
557
+
556
558
  const address_a = ELEMENT_WORD_COUNT * index_a;
557
559
  const address_b = ELEMENT_WORD_COUNT * index_b;
560
+ const address_destination = ELEMENT_WORD_COUNT * destination;
558
561
 
559
562
  const float32 = this.__data_float32;
560
563
 
@@ -582,7 +585,6 @@ export class BVH {
582
585
  const b_z1 = float32[address_b + 5];
583
586
  const z1 = max2(a_z1, b_z1);
584
587
 
585
- const address_destination = destination * ELEMENT_WORD_COUNT;
586
588
 
587
589
  float32[address_destination] = x0;
588
590
  float32[address_destination + 1] = y0;
@@ -1 +1 @@
1
- {"version":3,"file":"build_triangle_morton_codes.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/build_triangle_morton_codes.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,0DAXW,MAAM,EAAE,GAAC,WAAW,aACpB,MAAM,eACN,MAAM,EAAE,GAAC,UAAU,GAAC,WAAW,GAAC,WAAW,kBAC3C,MAAM,EAAE,GAAC,YAAY,WACrB,MAAM,WACN,MAAM,WACN,MAAM,WACN,MAAM,WACN,MAAM,WACN,MAAM,QA2DhB"}
1
+ {"version":3,"file":"build_triangle_morton_codes.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/build_triangle_morton_codes.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,0DAXW,MAAM,EAAE,GAAC,WAAW,aACpB,MAAM,eACN,MAAM,EAAE,GAAC,UAAU,GAAC,WAAW,GAAC,WAAW,kBAC3C,MAAM,EAAE,GAAC,YAAY,WACrB,MAAM,WACN,MAAM,WACN,MAAM,WACN,MAAM,WACN,MAAM,WACN,MAAM,QA4DhB"}
@@ -26,6 +26,7 @@ export function build_triangle_morton_codes(
26
26
  const aabb_size_y = aabb_y1 - aabb_y0;
27
27
  const aabb_size_z = aabb_z1 - aabb_z0;
28
28
 
29
+ // compute multipliers to bring normalized values in range of 10bit unsigned integer each
29
30
  const morton_scale_x = aabb_size_x === 0 ? 0 : 1023 / aabb_size_x;
30
31
  const morton_scale_y = aabb_size_y === 0 ? 0 : 1023 / aabb_size_y;
31
32
  const morton_scale_z = aabb_size_z === 0 ? 0 : 1023 / aabb_size_z;
@@ -59,7 +60,7 @@ export function build_triangle_morton_codes(
59
60
  const center_y = (ay + by + cy) * 0.333333333;
60
61
  const center_z = (az + bz + cz) * 0.333333333;
61
62
 
62
- // normalize to bounds
63
+ // normalize to 10bit range
63
64
  const ncx = (center_x - aabb_x0) * morton_scale_x;
64
65
  const ncy = (center_y - aabb_y0) * morton_scale_y;
65
66
  const ncz = (center_z - aabb_z0) * morton_scale_z;
@@ -1 +1 @@
1
- {"version":3,"file":"ebvh_build_for_geometry_morton.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.js"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,sEAHW,MAAM,EAAE,GAAC,YAAY,kBACrB,MAAM,EAAE,GAAC,YAAY,QAgE/B"}
1
+ {"version":3,"file":"ebvh_build_for_geometry_morton.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.js"],"names":[],"mappings":"AAUA;;;;;;GAMG;AACH,sEAHW,MAAM,EAAE,GAAC,YAAY,kBACrB,MAAM,EAAE,GAAC,YAAY,QA0E/B"}
@@ -1,4 +1,5 @@
1
1
  import { compute_triangle_group_aabb3 } from "../../../engine/graphics/sh3/path_tracer/compute_triangle_group_aabb3.js";
2
+ import { assert } from "../../assert.js";
2
3
  import { arrayQuickSort } from "../../collection/array/arrayQuickSort.js";
3
4
  import { AABB3 } from "../../geom/3d/aabb/AABB3.js";
4
5
  import { aabb3_from_v3_array } from "../../geom/3d/aabb/aabb3_from_v3_array.js";
@@ -15,6 +16,14 @@ import { ebvh_build_hierarchy } from "./ebvh_build_hierarchy.js";
15
16
  * @param {number[]|Float32Array} position_array
16
17
  */
17
18
  export function ebvh_build_for_geometry_morton(bvh, index_array, position_array) {
19
+ assert.defined(bvh, 'bvh');
20
+
21
+ assert.defined(index_array, 'index_array');
22
+ assert.isArrayLike(index_array, 'index_array');
23
+
24
+ assert.defined(position_array, 'position_array');
25
+ assert.isArrayLike(position_array, 'position_array');
26
+
18
27
  // clear out existing BVH
19
28
  bvh.release_all();
20
29
 
@@ -42,6 +51,8 @@ export function ebvh_build_for_geometry_morton(bvh, index_array, position_array)
42
51
  }
43
52
 
44
53
  const morton_codes = new Uint32Array(tri_count);
54
+
55
+ // indices of triangles, but sorted by morton codes
45
56
  const sorted_triangle_order = new Uint32Array(tri_count);
46
57
 
47
58
  for (let i = 0; i < tri_count; i++) {
@@ -75,5 +86,5 @@ export function ebvh_build_for_geometry_morton(bvh, index_array, position_array)
75
86
  }
76
87
 
77
88
  // assign root
78
- bvh.__root = ebvh_build_hierarchy(bvh,unprocessed_nodes,tri_count,nodes,used_index);
89
+ bvh.__root = ebvh_build_hierarchy(bvh, unprocessed_nodes, tri_count, nodes, used_index);
79
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ebvh_build_hierarchy.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/ebvh_build_hierarchy.js"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,kEANW,MAAM,EAAE,GAAC,WAAW,oBACpB,MAAM,aACN,MAAM,EAAE,GAAC,WAAW,oBACpB,MAAM,GACJ,MAAM,CAgDlB"}
1
+ {"version":3,"file":"ebvh_build_hierarchy.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/ebvh_build_hierarchy.js"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,kEANW,MAAM,EAAE,GAAC,WAAW,oBACpB,MAAM,aACN,MAAM,EAAE,GAAC,WAAW,oBACpB,MAAM,GACJ,MAAM,CAyDlB"}
@@ -1,3 +1,4 @@
1
+ import { assert } from "../../assert.js";
1
2
  import { max2 } from "../../math/max2.js";
2
3
 
3
4
  /**
@@ -10,7 +11,16 @@ import { max2 } from "../../math/max2.js";
10
11
  * @param {number} node_pool_offset
11
12
  * @returns {number} new root
12
13
  */
13
- export function ebvh_build_hierarchy(bvh, unprocessed_nodes, input_node_count, node_pool, node_pool_offset) {
14
+ export function ebvh_build_hierarchy(
15
+ bvh,
16
+ unprocessed_nodes,
17
+ input_node_count,
18
+ node_pool,
19
+ node_pool_offset
20
+ ) {
21
+
22
+ assert.isNonNegativeInteger(input_node_count,'input_node_count');
23
+ assert.isNonNegativeInteger(node_pool_offset,'node_pool_offset');
14
24
 
15
25
  let used_index = node_pool_offset;
16
26
 
@@ -0,0 +1,14 @@
1
+ /**
2
+ *
3
+ * @param {number[]} output
4
+ * @param {number} output_offset
5
+ * @param {BVH} bvh
6
+ * @param {number} root
7
+ * @param {number[]} ray
8
+ * @param {number} min_distance
9
+ * @param {number} max_distance
10
+ * @param {number[]|Uint32Array} indices
11
+ * @param {number[]|Float32Array} positions
12
+ */
13
+ export function ebvh_geometry_query_nearest_triangle_ray(output: number[], output_offset: number, bvh: BVH, root: number, ray: number[], min_distance: number, max_distance: number, indices: number[] | Uint32Array, positions: number[] | Float32Array): boolean;
14
+ //# sourceMappingURL=ebvh_geometry_query_nearest_triangle_ray.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ebvh_geometry_query_nearest_triangle_ray.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/ebvh_geometry_query_nearest_triangle_ray.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;GAWG;AACH,iEAVW,MAAM,EAAE,iBACR,MAAM,kBAEN,MAAM,OACN,MAAM,EAAE,gBACR,MAAM,gBACN,MAAM,WACN,MAAM,EAAE,GAAC,WAAW,aACpB,MAAM,EAAE,GAAC,YAAY,WA4H/B"}
@@ -0,0 +1,146 @@
1
+ import { SCRATCH_UINT32_TRAVERSAL_STACK } from "../../collection/SCRATCH_UINT32_TRAVERSAL_STACK.js";
2
+ import { aabb3_intersects_ray } from "../../geom/3d/aabb/aabb3_intersects_ray.js";
3
+ import { aabb3_signed_distance_sqr_to_point } from "../../geom/3d/aabb/aabb3_signed_distance_sqr_to_point.js";
4
+ import {
5
+ computeTriangleRayIntersectionBarycentricGeometry
6
+ } from "../../geom/3d/triangle/computeTriangleRayIntersectionBarycentricGeometry.js";
7
+ import { COLUMN_CHILD_1, COLUMN_CHILD_2, COLUMN_USER_DATA, ELEMENT_WORD_COUNT, NULL_NODE } from "./BVH.js";
8
+
9
+ const stack = SCRATCH_UINT32_TRAVERSAL_STACK;
10
+ const v3_scratch_0 = [];
11
+
12
+ /**
13
+ *
14
+ * @param {number[]} output
15
+ * @param {number} output_offset
16
+ * @param {BVH} bvh
17
+ * @param {number} root
18
+ * @param {number[]} ray
19
+ * @param {number} min_distance
20
+ * @param {number} max_distance
21
+ * @param {number[]|Uint32Array} indices
22
+ * @param {number[]|Float32Array} positions
23
+ */
24
+ export function ebvh_geometry_query_nearest_triangle_ray(
25
+ output, output_offset,
26
+ bvh, root,
27
+ ray, min_distance, max_distance,
28
+ indices, positions
29
+ ) {
30
+
31
+ const origin_x = ray[0];
32
+ const origin_y = ray[1];
33
+ const origin_z = ray[2];
34
+
35
+ const direction_x = ray[3];
36
+ const direction_y = ray[4];
37
+ const direction_z = ray[5];
38
+
39
+ let best_t = max_distance;
40
+
41
+ let best_index = -1;
42
+ let best_u = 0;
43
+ let best_v = 0;
44
+
45
+ /**
46
+ *
47
+ * @type {number}
48
+ */
49
+ const stack_top = stack.pointer++;
50
+
51
+ stack[stack_top] = root;
52
+
53
+
54
+ /*
55
+ For performance, we bind data directly to avoid extra copies required to read out AABB
56
+ */
57
+ const float32 = bvh.__data_float32;
58
+ const uint32 = bvh.__data_uint32;
59
+
60
+ do {
61
+ stack.pointer--;
62
+
63
+ /**
64
+ *
65
+ * @type {number}
66
+ */
67
+ const node = stack[stack.pointer];
68
+
69
+ const address = node * ELEMENT_WORD_COUNT;
70
+
71
+ // test node against the ray
72
+ const aabb_x0 = float32[address];
73
+ const aabb_y0 = float32[address + 1];
74
+ const aabb_z0 = float32[address + 2];
75
+ const aabb_x1 = float32[address + 3];
76
+ const aabb_y1 = float32[address + 4];
77
+ const aabb_z1 = float32[address + 5];
78
+
79
+ const intersects = aabb3_intersects_ray(
80
+ aabb_x0, aabb_y0, aabb_z0,
81
+ aabb_x1, aabb_y1, aabb_z1,
82
+ origin_x, origin_y, origin_z,
83
+ direction_x, direction_y, direction_z
84
+ );
85
+
86
+ if (!intersects) {
87
+ continue;
88
+ }
89
+
90
+ const distance = aabb3_signed_distance_sqr_to_point(
91
+ aabb_x0, aabb_y0, aabb_z0,
92
+ aabb_x1, aabb_y1, aabb_z1,
93
+ origin_x, origin_y, origin_z
94
+ );
95
+
96
+ if (distance > best_t * best_t) {
97
+ // whole AABB is too far
98
+ continue;
99
+ }
100
+
101
+ // get fist child to check if this is a leaf node or not
102
+ const child_1 = uint32[address + COLUMN_CHILD_1];
103
+
104
+ if (child_1 !== NULL_NODE) {
105
+
106
+ // this is not a leaf node, push children onto traversal stack
107
+ stack[stack.pointer++] = child_1;
108
+ stack[stack.pointer++] = uint32[address + COLUMN_CHILD_2];
109
+ continue;
110
+ }
111
+
112
+ // leaf node
113
+ const triangle_index = uint32[address + COLUMN_USER_DATA];
114
+
115
+ const intersection_found = computeTriangleRayIntersectionBarycentricGeometry(
116
+ v3_scratch_0,
117
+ origin_x, origin_y, origin_z,
118
+ direction_x, direction_y, direction_z,
119
+ indices, triangle_index,
120
+ positions
121
+ );
122
+
123
+ if (intersection_found && v3_scratch_0[0] < best_t && v3_scratch_0[0] > min_distance) {
124
+ best_t = v3_scratch_0[0];
125
+
126
+ best_index = triangle_index;
127
+ best_u = v3_scratch_0[1];
128
+ best_v = v3_scratch_0[2];
129
+
130
+ }
131
+
132
+ } while (stack.pointer > stack_top);
133
+
134
+
135
+ if (best_t === max_distance) {
136
+ // no intersection
137
+ return false;
138
+ }
139
+
140
+ output[0] = best_index; // index of hit triangle
141
+ output[1] = best_u;
142
+ output[2] = best_v;
143
+ output[3] = best_t;
144
+
145
+ return true;
146
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ *
3
+ * @param {BVH} bvh
4
+ * @param {number} root
5
+ * @param {number[]} result
6
+ * @param {number} result_offset
7
+ * @param {number} origin_x
8
+ * @param {number} origin_y
9
+ * @param {number} origin_z
10
+ * @param {number} direction_x
11
+ * @param {number} direction_y
12
+ * @param {number} direction_z
13
+ * @returns {number}
14
+ */
15
+ export function bvh_query_user_data_ray(bvh: BVH, root: number, result: number[], result_offset: number, origin_x: number, origin_y: number, origin_z: number, direction_x: number, direction_y: number, direction_z: number): number;
16
+ //# sourceMappingURL=bvh_query_user_data_ray.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bvh_query_user_data_ray.d.ts","sourceRoot":"","sources":["../../../../../../src/core/bvh2/bvh3/query/bvh_query_user_data_ray.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;GAaG;AACH,wDAXW,MAAM,UACN,MAAM,EAAE,iBACR,MAAM,YACN,MAAM,YACN,MAAM,YACN,MAAM,eACN,MAAM,eACN,MAAM,eACN,MAAM,GACJ,MAAM,CAsElB"}
@@ -0,0 +1,90 @@
1
+ import { SCRATCH_UINT32_TRAVERSAL_STACK } from "../../../collection/SCRATCH_UINT32_TRAVERSAL_STACK.js";
2
+ import { aabb3_intersects_ray } from "../../../geom/3d/aabb/aabb3_intersects_ray.js";
3
+ import { COLUMN_CHILD_1, COLUMN_CHILD_2, COLUMN_USER_DATA, ELEMENT_WORD_COUNT, NULL_NODE } from "../BVH.js";
4
+
5
+ const stack = SCRATCH_UINT32_TRAVERSAL_STACK;
6
+
7
+
8
+ /**
9
+ *
10
+ * @param {BVH} bvh
11
+ * @param {number} root
12
+ * @param {number[]} result
13
+ * @param {number} result_offset
14
+ * @param {number} origin_x
15
+ * @param {number} origin_y
16
+ * @param {number} origin_z
17
+ * @param {number} direction_x
18
+ * @param {number} direction_y
19
+ * @param {number} direction_z
20
+ * @returns {number}
21
+ */
22
+ export function bvh_query_user_data_ray(
23
+ bvh, root,
24
+ result, result_offset,
25
+ origin_x, origin_y, origin_z,
26
+ direction_x, direction_y, direction_z
27
+ ) {
28
+
29
+ if (root === NULL_NODE) {
30
+ return 0;
31
+ }
32
+
33
+
34
+ /**
35
+ *
36
+ * @type {number}
37
+ */
38
+ const stack_top = stack.pointer++;
39
+
40
+ stack[stack_top] = root;
41
+
42
+ let result_cursor = result_offset;
43
+
44
+ /*
45
+ For performance, we bind data directly to avoid extra copies required to read out AABB
46
+ */
47
+ const float32 = bvh.__data_float32;
48
+ const uint32 = bvh.__data_uint32;
49
+
50
+ do {
51
+ stack.pointer--;
52
+
53
+ /**
54
+ *
55
+ * @type {number}
56
+ */
57
+ const node = stack[stack.pointer];
58
+
59
+ const address = node * ELEMENT_WORD_COUNT;
60
+
61
+ // test node against the ray
62
+ const intersects = aabb3_intersects_ray(
63
+ float32[address], float32[address + 1], float32[address + 2],
64
+ float32[address + 3], float32[address + 4], float32[address + 5],
65
+ origin_x, origin_y, origin_z,
66
+ direction_x, direction_y, direction_z
67
+ );
68
+
69
+ if (!intersects) {
70
+ continue;
71
+ }
72
+
73
+ // get fist child to check if this is a leaf node or not
74
+ const child_1 = uint32[address + COLUMN_CHILD_1];
75
+
76
+ if (child_1 !== NULL_NODE) {
77
+
78
+ // this is not a leaf node, push children onto traversal stack
79
+ stack[stack.pointer++] = child_1;
80
+ stack[stack.pointer++] = uint32[address + COLUMN_CHILD_2];
81
+
82
+ } else {
83
+ // leaf node
84
+
85
+ result[result_cursor++] = uint32[address + COLUMN_USER_DATA];
86
+ }
87
+ } while (stack.pointer > stack_top);
88
+
89
+ return result_cursor - result_offset;
90
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"Color.d.ts","sourceRoot":"","sources":["../../../../src/core/color/Color.js"],"names":[],"mappings":"AAeA;;GAEG;AACH;IA8hBI;;;;;;OAMG;IACH,kBALW,MAAM,KACN,MAAM,KACN,MAAM,GACJ,KAAK,CAIjB;IAED;;;;;;OAMG;IACH,kBALW,MAAM,KACN,MAAM,KACN,MAAM,GACL,KAAK,CAQhB;IAGD;;;;OAIG;IACH,kBAHW,MAAM,GACL,KAAK,CAQhB;IAED;;;;OAIG;IACH,kCAHW,KAAK,UACL,KAAK,QAIf;IAED;;;;OAIG;IACH,kCAHW,KAAK,UACL,KAAK,QAIf;IArlBD;;;;;;OAMG;IACH,gBALW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,EAkChB;IA/BG;;;;OAIG;IACH,GAFU,MAAM,CAEN;IACV;;;;OAIG;IACH,GAFU,MAAM,CAEN;IACV;;;;OAIG;IACH,GAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,GAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,oBAFU,OAAO,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,CAAC,CAE5C;IAWjC;;;OAGG;IACH,mBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,mBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,mBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,mBAEC;IAdD;;;OAGG;IACH,gBAEC;IAUD;;;;;OAKG;IACH,UAJW,MAAM,KACN,MAAM,KACN,MAAM,QAKhB;IAED;;;OAGG;IACH,QAFW,MAAM,QAIhB;IAED;;;;;;OAMG;IACH,OALW,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,QAwBhB;IAED;;;;;OAKG;IACH,UAJW,MAAM,KACN,MAAM,KACN,MAAM,QAsBhB;IAED;;;;;OAKG;IACH,UAJW,MAAM,KACN,MAAM,KACN,MAAM,QAqDhB;IAED;;;;;;;OAOG;IACH,UALW,MAAM,KACN,MAAM,KACN,MAAM,QAyDhB;IAED;;;;;OAKG;IACH,UAJW,MAAM,KACN,MAAM,KACN,MAAM,QA6ChB;IAED;;;OAGG;IACH,oBAFY,MAAM,CAIjB;IAED;;;;MAEC;IAED;;;OAGG;IACH,UAFa,MAAM,CAKlB;IAED;;;OAGG;IACH,gBAFW,MAAM,QAQhB;IAED;;;;OAIG;IACH,SAFa,MAAM,CAQlB;IAED;;;OAGG;IACH,mBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,cAFW,KAAK,WAOf;IAED;;;OAGG;IACH,YAFW,KAAK,QAKf;IAED;;;OAGG;IACH,SAFa,KAAK,CAQjB;IAED;;;OAGG;IACH,QAFa,MAAM,CAIlB;IAED;;;;;aAGC;IAED;;;;;MAOC;IAWD;;;;OAIG;IACH,0BAHW,MAAM,EAAE,sBACR,MAAM,QAOhB;IAED;;;OAGG;IACH,2CAKC;IAED;;;OAGG;IACH,6CAQC;IAED;;;;OAIG;IACH,WAHW,MAAM,GACJ,IAAI,CAYhB;IAED;;;;;OAKG;IACH,cAJW,KAAK,KACL,KAAK,KACL,MAAM,QAOhB;IA1ED,sDAOC;CA8HJ;;aAIS,SAAS,KAAK,CAAC;eAMf,SAAS,KAAK,CAAC;cAMf,SAAS,KAAK,CAAC;gBAMf,SAAS,KAAK,CAAC;cAMf,SAAS,KAAK,CAAC;iBAMf,SAAS,KAAK,CAAC;eAMf,SAAS,KAAK,CAAC;eAMf,SAAS,KAAK,CAAC;qBAMf,SAAS,KAAK,CAAC;;mBA5pBN,4BAA4B"}
1
+ {"version":3,"file":"Color.d.ts","sourceRoot":"","sources":["../../../../src/core/color/Color.js"],"names":[],"mappings":"AAeA;;GAEG;AACH;IAwiBI;;;;;;OAMG;IACH,kBALW,MAAM,KACN,MAAM,KACN,MAAM,GACJ,KAAK,CAIjB;IAED;;;;;;OAMG;IACH,kBALW,MAAM,KACN,MAAM,KACN,MAAM,GACL,KAAK,CAQhB;IAGD;;;;OAIG;IACH,kBAHW,MAAM,GACL,KAAK,CAQhB;IAED;;;;OAIG;IACH,kCAHW,KAAK,UACL,KAAK,QAIf;IAED;;;;OAIG;IACH,kCAHW,KAAK,UACL,KAAK,QAIf;IA/lBD;;;;;;OAMG;IACH,gBALW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,EAkChB;IA/BG;;;;OAIG;IACH,GAFU,MAAM,CAEN;IACV;;;;OAIG;IACH,GAFU,MAAM,CAEN;IACV;;;;OAIG;IACH,GAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,GAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,oBAFU,OAAO,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,CAAC,CAE5C;IAWjC;;;OAGG;IACH,mBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,mBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,mBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,mBAEC;IAdD;;;OAGG;IACH,gBAEC;IAUD;;;OAGG;IACH,qBAEC;IAED;;;;;OAKG;IACH,UAJW,MAAM,KACN,MAAM,KACN,MAAM,QAKhB;IAED;;;OAGG;IACH,QAFW,MAAM,QAIhB;IAED;;;;;;OAMG;IACH,OALW,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,QAwBhB;IAED;;;;;OAKG;IACH,UAJW,MAAM,KACN,MAAM,KACN,MAAM,QAsBhB;IAED;;;;;OAKG;IACH,UAJW,MAAM,KACN,MAAM,KACN,MAAM,QAqDhB;IAED;;;;;;;OAOG;IACH,UALW,MAAM,KACN,MAAM,KACN,MAAM,QAyDhB;IAED;;;;;OAKG;IACH,UAJW,MAAM,KACN,MAAM,KACN,MAAM,QA6ChB;IAED;;;OAGG;IACH,oBAFY,MAAM,CAIjB;IAED;;;;MAEC;IAED;;;OAGG;IACH,UAFa,MAAM,CAKlB;IAED;;;OAGG;IACH,gBAFW,MAAM,QAUhB;IAED;;;;OAIG;IACH,SAFa,MAAM,CAQlB;IAED;;;OAGG;IACH,mBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,cAFW,KAAK,WAOf;IAED;;;OAGG;IACH,YAFW,KAAK,QAKf;IAED;;;OAGG;IACH,SAFa,KAAK,CAQjB;IAED;;;OAGG;IACH,QAFa,MAAM,CAIlB;IAED;;;;;aAGC;IAED;;;;;MAOC;IAWD;;;;OAIG;IACH,0BAHW,MAAM,EAAE,sBACR,MAAM,QAOhB;IAED;;;OAGG;IACH,2CAKC;IAED;;;OAGG;IACH,6CAQC;IAED;;;;OAIG;IACH,WAHW,MAAM,GACJ,IAAI,CAYhB;IAED;;;;;OAKG;IACH,cAJW,KAAK,KACL,KAAK,KACL,MAAM,QAOhB;IA1ED,sDAOC;CA8HJ;;aAIS,SAAS,KAAK,CAAC;eAMf,SAAS,KAAK,CAAC;cAMf,SAAS,KAAK,CAAC;gBAMf,SAAS,KAAK,CAAC;cAMf,SAAS,KAAK,CAAC;iBAMf,SAAS,KAAK,CAAC;eAMf,SAAS,KAAK,CAAC;eAMf,SAAS,KAAK,CAAC;qBAMf,SAAS,KAAK,CAAC;;mBArqBN,4BAA4B"}
@@ -1,17 +1,17 @@
1
1
  import { assert } from "../assert.js";
2
+ import { float2uint8 } from "../binary/float2uint8.js";
2
3
  import Signal from "../events/signal/Signal.js";
3
- import { parse_color } from "./parse_color.js";
4
- import { min2 } from "../math/min2.js";
4
+ import { clamp01 } from "../math/clamp01.js";
5
+ import { lerp } from "../math/lerp.js";
5
6
  import { max2 } from "../math/max2.js";
7
+ import { min2 } from "../math/min2.js";
6
8
  import { min3 } from "../math/min3.js";
9
+ import { rgb2hex } from "./hex/rgb2hex.js";
7
10
  import { rgb2hsv } from "./hsv/rgb2hsv.js";
11
+ import { parse_color } from "./parse_color.js";
8
12
  import { rgb2uint24 } from "./rgb2uint24.js";
9
- import { clamp01 } from "../math/clamp01.js";
10
- import { rgb2hex } from "./hex/rgb2hex.js";
11
13
  import { linear_to_sRGB } from "./sRGB/linear_to_sRGB.js";
12
14
  import { sRGB_to_linear } from "./sRGB/sRGB_to_linear.js";
13
- import { lerp } from "../math/lerp.js";
14
- import { float2uint8 } from "../binary/float2uint8.js";
15
15
 
16
16
  /**
17
17
  * @class
@@ -22,7 +22,7 @@ export class Color {
22
22
  * @param {number} r value from 0 to 1
23
23
  * @param {number} g value from 0 to 1
24
24
  * @param {number} b value from 0 to 1
25
- * @param {number} [a] value from 0 to 1
25
+ * @param {number} [a] value from 0 to 1 Alpha channel (transparency)
26
26
  */
27
27
  constructor(r = 0, g = 0, b = 0, a = 1) {
28
28
  /**
@@ -122,6 +122,14 @@ export class Color {
122
122
  this.a = v;
123
123
  }
124
124
 
125
+ /**
126
+ * Pretending to be an array
127
+ * @return {number}
128
+ */
129
+ get length() {
130
+ return 4;
131
+ }
132
+
125
133
  /**
126
134
  *
127
135
  * @param {number} r
@@ -400,6 +408,8 @@ export class Color {
400
408
  * @param {number} value
401
409
  */
402
410
  fromUint(value) {
411
+ assert.isNonNegativeInteger(value, 'value');
412
+
403
413
  const r = value >> 16;
404
414
  const g = (value >> 8) & 0xFF;
405
415
  const b = (value) & 0xFF;
@@ -1 +1 @@
1
- {"version":3,"file":"BVH2D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/2d/bvh/BVH2D.js"],"names":[],"mappings":"AASA,8BAA+B;AAC/B,+BAAgC;AAChC,+BAAgC;AAChC,8BAA+B;AAE/B;;;;;GAKG;AACH,+BAFU,MAAM,CAE+B;AAE/C;;;GAGG;AACH,wBAFU,MAAM,CAEoB;AAcpC;;;;;GAKG;AACH,iCAFU,MAAM,CAEoB;AAgBpC;;;;GAIG;AACH;IAEI;;;;OAIG;IACH,sBAA2E;IAE3E;;;;OAIG;IACH,uBAAsD;IAEtD;;;;OAIG;IACH,sBAAoD;IAEpD;;;;OAIG;IACH,mBAA8B;IAE9B;;;;OAIG;IACH,eAAW;IAEX;;;;OAIG;IACH,eAAY;IAEZ;;;;OAIG;IACH,uBAAmB;IAEnB;;;;OAIG;IACH,eAAmB;IAEnB;;;OAGG;IACH,mBAEC;IAUD;;;OAGG;IACH,+BAMC;IAlBD;;;OAGG;IACH,4BAEC;IAcD,wBAgBC;IAED;;;;OAIG;IACH,uBAqBC;IAED;;OAEG;IACH,aAIC;IAED;;;OAGG;IACH,iBAFa,MAAM,CAmDlB;IAED;;;;OAIG;IACH,iBAFW,MAAM,QAMhB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,OAAO,CAOnB;IAED;;;;OAIG;IACH,uBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,uBAHW,MAAM,SACN,MAAM,QAOhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAGD;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,oBAHW,MAAM,UACN,MAAM,QAKhB;IAED;;;;OAIG;IACH,kBAHW,MAAM,UACN,MAAM,EAAE,GAAC,YAAY,QAa/B;IAED;;;;OAIG;IACH,kBAHW,MAAM,QACN,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,QAkBpC;IAED;;;;OAIG;IACH,mBAHW,MAAM,QACN,MAAM,EAAE,QAWlB;IAED;;;;;;;;;OASG;IACH,4BARW,MAAM,MACN,MAAM,MACN,MAAM,MAEN,MAAM,MACN,MAAM,QAkBhB;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACJ,MAAM,CAkBlB;IAED;;;;;OAKG;IACH,wCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CA6BlB;IAED;;;;;OAKG;IACH,oCAJW,MAAM,WACN,MAAM,WACN,MAAM,QA+BhB;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,IAAI,CA0GhB;IAED;;;;;OAKG;IACH,wBAuBC;IAED;;;;OAIG;IACH,yBA4BC;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,IAAI,CA6ChB;IAED;;;;;;OAMG;IACH,gBAoMC;IAED;;;OAGG;IACH,oBAIC;IAED;;;;OAIG;IACH,yCA8BC;IAED;;;;;OAKG;IACH,+BAJW,MAAM,EAAE,sBACR,MAAM,GACJ,MAAM,CAWlB;IAED;;;;;OAKG;IACH,0BA6BC;IAED;;;;;OAKG;IACH,cAJW,MAAM,KACN,MAAM,GACJ,OAAO,CAsCnB;CACJ"}
1
+ {"version":3,"file":"BVH2D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/2d/bvh/BVH2D.js"],"names":[],"mappings":"AAUA,8BAA+B;AAC/B,+BAAgC;AAChC,+BAAgC;AAChC,8BAA+B;AAE/B;;;;;GAKG;AACH,+BAFU,MAAM,CAE+B;AAE/C;;;GAGG;AACH,wBAFU,MAAM,CAEoB;AAcpC;;;;;GAKG;AACH,iCAFU,MAAM,CAEoB;AAgBpC;;;;GAIG;AACH;IAEI;;;;OAIG;IACH,sBAA2E;IAE3E;;;;OAIG;IACH,uBAAsD;IAEtD;;;;OAIG;IACH,sBAAoD;IAEpD;;;;OAIG;IACH,mBAA8B;IAE9B;;;;OAIG;IACH,eAAW;IAEX;;;;OAIG;IACH,eAAY;IAEZ;;;;OAIG;IACH,uBAAmB;IAEnB;;;;OAIG;IACH,eAAmB;IAEnB;;;OAGG;IACH,mBAEC;IAUD;;;OAGG;IACH,+BAMC;IAlBD;;;OAGG;IACH,4BAEC;IAcD,wBAgBC;IAED;;;;OAIG;IACH,uBAqBC;IAED;;OAEG;IACH,aAIC;IAED;;;OAGG;IACH,iBAFa,MAAM,CAmDlB;IAED;;;;OAIG;IACH,iBAFW,MAAM,QAMhB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,OAAO,CAOnB;IAED;;;;OAIG;IACH,uBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,uBAHW,MAAM,SACN,MAAM,QAOhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAGD;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,oBAHW,MAAM,UACN,MAAM,QAKhB;IAED;;;;OAIG;IACH,kBAHW,MAAM,UACN,MAAM,EAAE,GAAC,YAAY,QAa/B;IAED;;;;OAIG;IACH,kBAHW,MAAM,QACN,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,QAkBpC;IAED;;;;OAIG;IACH,mBAHW,MAAM,QACN,MAAM,EAAE,QAWlB;IAED;;;;;;;;;OASG;IACH,4BARW,MAAM,MACN,MAAM,MACN,MAAM,MAEN,MAAM,MACN,MAAM,QAkBhB;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACJ,MAAM,CAkBlB;IAED;;;;;OAKG;IACH,wCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CA6BlB;IAED;;;;;OAKG;IACH,oCAJW,MAAM,WACN,MAAM,WACN,MAAM,QAgBhB;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,IAAI,CAgHhB;IAED;;;;;OAKG;IACH,wBAuBC;IAED;;;;OAIG;IACH,yBA4BC;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,IAAI,CA6ChB;IAED;;;;;;OAMG;IACH,gBAuMC;IAED;;;OAGG;IACH,oBAIC;IAED;;;;OAIG;IACH,yCA8BC;IAED;;;;;OAKG;IACH,+BAJW,MAAM,EAAE,sBACR,MAAM,GACJ,MAAM,CAWlB;IAED;;;;;OAKG;IACH,0BA6BC;IAED;;;;;OAKG;IACH,cAJW,MAAM,KACN,MAAM,GACJ,OAAO,CAsCnB;CACJ"}
@@ -4,6 +4,7 @@ import { array_copy } from "../../../collection/array/array_copy.js";
4
4
  import { typed_array_copy } from "../../../collection/array/typed/typed_array_copy.js";
5
5
  import { max2 } from "../../../math/max2.js";
6
6
  import { min2 } from "../../../math/min2.js";
7
+ import { aabb2_array_combine } from "../aabb/aabb2_array_combine.js";
7
8
  import { aabb2_compute_area } from "../aabb/aabb2_compute_area.js";
8
9
 
9
10
 
@@ -536,31 +537,16 @@ export class BVH2D {
536
537
  const address_a = ELEMENT_WORD_COUNT * index_a;
537
538
  const address_b = ELEMENT_WORD_COUNT * index_b;
538
539
 
539
- const float32 = this.__data_float32;
540
-
541
- const a_x0 = float32[address_a];
542
- const b_x0 = float32[address_b];
543
- const x0 = min2(a_x0, b_x0);
544
-
545
- const a_y0 = float32[address_a + 1];
546
- const b_y0 = float32[address_b + 1];
547
- const y0 = min2(a_y0, b_y0);
540
+ const address_destination = ELEMENT_WORD_COUNT * destination;
548
541
 
549
- const a_x1 = float32[address_a + 2];
550
- const b_x1 = float32[address_b + 2];
551
- const x1 = max2(a_x1, b_x1);
552
-
553
- const a_y1 = float32[address_a + 3];
554
- const b_y1 = float32[address_b + 3];
555
- const y1 = max2(a_y1, b_y1);
556
-
557
- const address_destination = destination * ELEMENT_WORD_COUNT;
542
+ const float32 = this.__data_float32;
558
543
 
559
- float32[address_destination] = x0;
560
- float32[address_destination + 1] = y0;
544
+ aabb2_array_combine(
545
+ float32,address_destination,
546
+ float32,address_a,
547
+ float32,address_b
548
+ );
561
549
 
562
- float32[address_destination + 2] = x1;
563
- float32[address_destination + 3] = y1;
564
550
  }
565
551
 
566
552
  /**
@@ -586,10 +572,16 @@ export class BVH2D {
586
572
  // Find the best sibling for this node
587
573
  let index = this.__root;
588
574
 
589
- while (this.node_is_leaf(index) === false) {
575
+ while (true) {
590
576
  const node_address = index * ELEMENT_WORD_COUNT;
591
577
 
592
578
  const child1 = uint32[node_address + COLUMN_CHILD_1];
579
+
580
+ if(child1 === NULL_NODE){
581
+ // it's a leaf node
582
+ break;
583
+ }
584
+
593
585
  const child2 = uint32[node_address + COLUMN_CHILD_2];
594
586
 
595
587
  const area = this.node_get_surface_area(index);
@@ -803,20 +795,23 @@ export class BVH2D {
803
795
  //b2TreeNode* A = m_nodes + iA;
804
796
  const uint32 = this.__data_uint32;
805
797
 
806
- if (this.node_is_leaf(iA) || uint32[iA * ELEMENT_WORD_COUNT + COLUMN_HEIGHT] < 2) {
798
+ const iB = uint32[iA * ELEMENT_WORD_COUNT + COLUMN_CHILD_1];
799
+
800
+ const is_leaf_node = iB === NULL_NODE;
801
+
802
+ if (is_leaf_node || uint32[iA * ELEMENT_WORD_COUNT + COLUMN_HEIGHT] < 2) {
807
803
  return iA;
808
804
  }
809
805
 
810
- const iB = uint32[iA * ELEMENT_WORD_COUNT + COLUMN_CHILD_1];
811
806
  const iC = uint32[iA * ELEMENT_WORD_COUNT + COLUMN_CHILD_2];
812
807
 
813
808
  assert.notEqual(iA, iB, 'child1 equal to parent');
814
809
  assert.notEqual(iA, iB, 'child2 equal to parent');
815
810
 
816
811
  assert.greaterThanOrEqual(iB, 0);
817
- assert.lessThan(iB, this.node_capacity);
812
+ assert.lessThan(iB, this.__capacity);
818
813
  assert.greaterThanOrEqual(iC, 0);
819
- assert.lessThan(iC, this.node_capacity);
814
+ assert.lessThan(iC, this.__capacity);
820
815
 
821
816
  //b2TreeNode* B = m_nodes + iB;
822
817
  //b2TreeNode* C = m_nodes + iC;
@@ -835,9 +830,9 @@ export class BVH2D {
835
830
  // b2TreeNode* G = m_nodes + iG;
836
831
 
837
832
  assert.greaterThanOrEqual(iF, 0);
838
- assert.lessThan(iF, this.node_capacity);
833
+ assert.lessThan(iF, this.__capacity);
839
834
  assert.greaterThanOrEqual(iG, 0);
840
- assert.lessThan(iG, this.node_capacity);
835
+ assert.lessThan(iG, this.__capacity);
841
836
 
842
837
  // Swap A and C
843
838
  uint32[iC * ELEMENT_WORD_COUNT + COLUMN_CHILD_1] = iA;
@@ -305,16 +305,16 @@ test("move leaf node", () => {
305
305
  expect(actual_bounds).toEqual(a_new_bounds);
306
306
  });
307
307
 
308
- test.skip("performance, insert 100k random nodes", () => {
308
+ test.skip("performance, insert 1m random nodes", () => {
309
309
 
310
310
  const random = seededRandom(1);
311
311
 
312
312
  const bvh = new BVH2D();
313
313
 
314
- const min_bound = -1000;
315
- const max_bound = 1000;
314
+ const min_bound = 1;
315
+ const max_bound = 99;
316
316
 
317
- const OBJECT_COUNT = 100000;
317
+ const OBJECT_COUNT = 1000000;
318
318
 
319
319
  const leaves = new Uint32Array(OBJECT_COUNT);
320
320
  for (let i = 0; i < OBJECT_COUNT; i++) {
@@ -325,13 +325,14 @@ test.skip("performance, insert 100k random nodes", () => {
325
325
  const x = randomFloatBetween(random, min_bound, max_bound);
326
326
  const y = randomFloatBetween(random, min_bound, max_bound);
327
327
 
328
- const extents = randomFloatBetween(random, 1, 10);
328
+ const extents_x = randomFloatBetween(random, 0.05, 1);
329
+ const extents_y = randomFloatBetween(random, 0.05, 1);
329
330
 
330
- const x0 = x - extents;
331
- const y0 = y - extents;
331
+ const x0 = x - extents_x;
332
+ const y0 = y - extents_y;
332
333
 
333
- const x1 = x + extents;
334
- const y1 = y + extents;
334
+ const x1 = x + extents_x;
335
+ const y1 = y + extents_y;
335
336
 
336
337
  // console.log([x0, y0, z0, x1, y1, z1].join(', '))
337
338
 
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bvh2d_query_all_data_by_circle.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bvh2d_query_all_data_by_circle.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/2d/bvh/bvh2d_query_all_data_by_circle.spec.js"],"names":[],"mappings":""}