@woosh/meep-engine 2.33.23 → 2.33.27

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 (302) hide show
  1. package/core/binary/BitSet.js +151 -167
  2. package/core/binary/BitSet.spec.js +99 -1
  3. package/core/binary/ValidatingBitSetWrapper.js +81 -0
  4. package/core/bvh2/BinaryNode.js +1 -1
  5. package/core/bvh2/aabb3/AABB3.js +21 -10
  6. package/core/bvh2/aabb3/AABB3Math.js +1 -1
  7. package/core/bvh2/binary/2/BinaryUint32BVH.js +498 -0
  8. package/core/bvh2/binary/2/BinaryUint32BVH.spec.js +54 -0
  9. package/core/bvh2/binary/IndexedBinaryBVH.js +22 -26
  10. package/core/bvh2/traversal/ThreeClippingPlaneComputingBVHVisitor.js +5 -1
  11. package/core/bvh2/traversal/__detailed_box_volume_intersection.js +22 -5
  12. package/core/cache/Cache.d.ts +4 -2
  13. package/core/cache/Cache.js +5 -2
  14. package/core/collection/ArrayUtils.js +1 -1
  15. package/core/collection/HashMap.d.ts +9 -2
  16. package/core/collection/HashSet.d.ts +7 -2
  17. package/core/collection/HashSet.js +7 -2
  18. package/core/collection/array/arrayQuickSort.js +9 -6
  19. package/core/collection/array/array_swap.js +22 -0
  20. package/core/collection/array/binarySearchHighIndex.js +1 -1
  21. package/core/collection/array/computeHashArray.js +22 -0
  22. package/core/collection/array/computeHashIntegerArray.js +15 -0
  23. package/core/collection/array/copyArray.js +2 -2
  24. package/core/collection/array/typed/typed_array_copy.js +1 -1
  25. package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
  26. package/core/color/Color.js +2 -1
  27. package/core/function/FunctionCompiler.js +2 -1
  28. package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
  29. package/core/geom/3d/frustum/array_setFromProjectionMatrix.js +3 -3
  30. package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +1 -1
  31. package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
  32. package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
  33. package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
  34. package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
  35. package/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +1 -1
  36. package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
  37. package/core/geom/3d/shape/AbstractShape3D.js +65 -0
  38. package/core/geom/3d/shape/TransformedShape3D.js +181 -0
  39. package/core/geom/3d/shape/TransformedShape3D.spec.js +33 -0
  40. package/core/geom/3d/shape/UnionShape3D.js +255 -0
  41. package/core/geom/3d/shape/UnitCubeShape3D.js +101 -0
  42. package/core/geom/3d/shape/UnitCubeShape3D.spec.js +42 -0
  43. package/core/geom/3d/shape/UnitSphereShape3D.js +55 -0
  44. package/core/geom/3d/shape/util/compute_signed_distance_gradient_by_sampling.js +48 -0
  45. package/core/geom/3d/shape/util/shape_to_visual_entity.js +159 -0
  46. package/core/geom/AABB2.js +1 -1
  47. package/core/geom/ConicRay.js +3 -1
  48. package/core/geom/LineSegment.js +0 -78
  49. package/core/geom/Matrix4.js +7 -8
  50. package/core/geom/Rectangle.js +2 -1
  51. package/core/geom/Vector1.js +1 -1
  52. package/core/geom/Vector3.js +2 -1
  53. package/core/geom/Vector4.js +2 -1
  54. package/core/geom/random/randomPointInBox.js +7 -3
  55. package/core/geom/random/randomPointInPoint.js +6 -3
  56. package/core/geom/random/randomPointInSphere.js +9 -5
  57. package/core/geom/random/randomPointOnBox.js +7 -3
  58. package/core/geom/random/randomPointOnSphere.js +6 -3
  59. package/core/geom/v3_length.js +8 -3
  60. package/core/graph/graph_k_means_cluster.js +1 -1
  61. package/core/json/resolvePathByArray.js +2 -2
  62. package/core/math/MathUtils.js +0 -354
  63. package/core/math/MathUtils.spec.js +7 -1
  64. package/core/math/gaussian.js +9 -0
  65. package/core/math/hash/computeHashFloat.js +17 -0
  66. package/core/math/hash/computeHashFloatArray.js +34 -0
  67. package/core/math/hash/computeObjectHash.js +54 -0
  68. package/core/math/intersects1D.js +19 -0
  69. package/core/math/interval/NumericInterval.js +2 -2
  70. package/core/math/isValueBetween.js +10 -0
  71. package/core/math/isValueBetweenInclusive.js +10 -0
  72. package/core/math/noise/curl_noise_3dt.js +1 -1
  73. package/core/math/noise/sdnoise.js +10 -10
  74. package/core/math/overlap1D.js +19 -0
  75. package/core/math/pingpong.js +17 -0
  76. package/core/math/random/makeRangedRandom.js +19 -0
  77. package/core/math/random/randomFloatBetween.js +14 -0
  78. package/core/math/random/randomFromArray.js +19 -0
  79. package/core/math/random/randomGaussian.js +15 -0
  80. package/core/math/random/randomIntegerBetween.js +14 -0
  81. package/core/math/random/roundFair.js +15 -0
  82. package/core/math/separation1D.js +21 -0
  83. package/core/math/solveQuadratic.js +25 -0
  84. package/core/model/BoundedValue.js +1 -1
  85. package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
  86. package/core/model/node-graph/node/Port.js +1 -1
  87. package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
  88. package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
  89. package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
  90. package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
  91. package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
  92. package/core/model/stat/LinearModifier.js +1 -1
  93. package/core/parser/simple/Token.d.ts +13 -0
  94. package/core/parser/simple/Token.js +61 -27
  95. package/{engine/graphics/render/forward_plus/materials → core/primitives/strings}/insert_after.js +3 -0
  96. package/core/primitives/strings/insert_after_or_replace.js +27 -0
  97. package/editor/process/symbolic/makeHelperBoxGeometry.js +44 -0
  98. package/editor/tools/FoliagePaintTool.js +4 -4
  99. package/editor/view/ecs/EntityEditor.js +2 -2
  100. package/editor/view/ecs/components/particles/ParticleEmitterController.js +2 -2
  101. package/engine/EngineHarness.js +1 -0
  102. package/engine/animation/AnimationUtils.js +5 -5
  103. package/engine/animation/curve/AnimationCurve.js +72 -0
  104. package/engine/animation/curve/Keyframe.js +27 -0
  105. package/engine/animation/keyed2/AnimationTrack.js +27 -3
  106. package/engine/asset/Asset.js +1 -1
  107. package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
  108. package/engine/asset/loaders/GLTFAssetLoader.js +62 -1
  109. package/engine/asset/loaders/image/ImageDecoderWorker.js +4 -3
  110. package/engine/asset/loaders/image/ImageRGBADataAsset.js +10 -2
  111. package/engine/asset/loaders/image/ImageRGBADataLoader.js +3 -3
  112. package/engine/asset/loaders/image/codec/NativeImageDecoder.js +2 -1
  113. package/engine/asset/loaders/image/png/PNG.js +113 -6
  114. package/engine/asset/loaders/image/png/PNGReader.js +5 -0
  115. package/engine/asset/loaders/material/bitmap2sampler_gl.js +1 -1
  116. package/engine/asset/loaders/material/computeImageBitmapEquality.js +6 -1
  117. package/engine/asset/loaders/material/computeMaterialHash.js +3 -1
  118. package/engine/asset/loaders/material/computeTextureEquality.js +40 -49
  119. package/engine/asset/loaders/material/computeTextureHash.js +2 -1
  120. package/engine/ecs/EntityBuilder.js +25 -5
  121. package/engine/ecs/EntityComponentDataset.js +1 -1
  122. package/engine/ecs/animation/Animation.js +2 -1
  123. package/engine/ecs/animation/InverseKinematics.js +2 -1
  124. package/engine/ecs/attachment/AttachmentBinding.js +8 -0
  125. package/engine/ecs/attachment/AttachmentSystem.js +4 -0
  126. package/engine/ecs/attachment/TransformAttachmentBinding.js +14 -44
  127. package/engine/ecs/components/Tag.js +27 -6
  128. package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
  129. package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
  130. package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
  131. package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
  132. package/engine/ecs/foliage/InstancedFoliage.js +277 -266
  133. package/engine/ecs/foliage/ecs/Foliage2System.js +7 -7
  134. package/engine/ecs/foliage/ecs/InstancedMeshComponent.js +37 -0
  135. package/engine/ecs/foliage/ecs/{Foliage2.js → InstancedMeshLayer.js} +3 -45
  136. package/engine/ecs/foliage/ecs/InstancedMeshSerializationAdapter.js +6 -5
  137. package/engine/ecs/foliage/ecs/InstancedMeshUtils.js +7 -6
  138. package/engine/ecs/fow/FogOfWar.js +4 -0
  139. package/engine/ecs/fow/FogOfWarSystem.js +2 -0
  140. package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
  141. package/engine/ecs/gui/GUIElement.js +1 -1
  142. package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
  143. package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +2 -0
  144. package/engine/ecs/gui/position/ViewportPosition.js +2 -1
  145. package/engine/ecs/storage/binary/BinarySerializationRegistry.js +1 -1
  146. package/engine/ecs/system/AbstractContextSystem.js +1 -1
  147. package/engine/ecs/systems/RangedAttackSystem.js +1 -1
  148. package/engine/ecs/systems/SteeringSystem.js +1 -1
  149. package/engine/ecs/systems/TagSystem.js +17 -0
  150. package/engine/ecs/terrain/ecs/layers/TerrainLayer.js +12 -16
  151. package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
  152. package/engine/ecs/tooltip/TooltipComponent.js +15 -0
  153. package/engine/ecs/transform/Transform.js +19 -6
  154. package/engine/graphics/GraphicsEngine.js +11 -6
  155. package/engine/graphics/composit/CompositLayer.js +17 -4
  156. package/engine/graphics/composit/CompositingStages.js +8 -0
  157. package/engine/graphics/composit/LayerCompositer.js +35 -6
  158. package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
  159. package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
  160. package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
  161. package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
  162. package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
  163. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
  164. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
  165. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
  166. package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
  167. package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
  168. package/engine/graphics/ecs/highlight/plugin/OutlineRenderPlugin.js +11 -7
  169. package/engine/graphics/ecs/light/Light.d.ts +1 -1
  170. package/engine/graphics/ecs/light/Light.js +5 -0
  171. package/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +5 -1
  172. package/engine/graphics/ecs/mesh/Mesh.js +2 -1
  173. package/engine/graphics/ecs/mesh-v2/DrawMode.js +5 -0
  174. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
  175. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +32 -18
  176. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
  177. package/engine/graphics/geometry/AttributeSpec.js +105 -0
  178. package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
  179. package/engine/graphics/geometry/instancing/InstancedMeshGroup.js +14 -72
  180. package/engine/graphics/geometry/instancing/rewriteMaterial.js +70 -0
  181. package/engine/graphics/material/manager/MaterialManager.js +2 -1
  182. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
  183. package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
  184. package/engine/graphics/micron/buildPatchwork.js +1 -1
  185. package/engine/graphics/micron/format/MicronGeometry.js +3 -3
  186. package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
  187. package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
  188. package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
  189. package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
  190. package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +11 -9
  191. package/engine/graphics/micron/render/instanced/ThreeInstancedAdapter.js +0 -2
  192. package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
  193. package/engine/graphics/particles/ParticleEmitterLibrary.js +3 -0
  194. package/engine/graphics/particles/ecs/{ParticleEmitterSystem2.js → ParticleEmitterSystem.js} +17 -9
  195. package/engine/graphics/particles/particular/engine/ParticularEngine.js +8 -2
  196. package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +80 -16
  197. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +71 -77
  198. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +5 -0
  199. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +2 -1
  200. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +141 -14
  201. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +8 -7
  202. package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +1 -1
  203. package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
  204. package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
  205. package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
  206. package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
  207. package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +24 -0
  208. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +262 -71
  209. package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
  210. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +81 -48
  211. package/engine/graphics/particles/particular/engine/shader/debugAtlas.js +14 -0
  212. package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
  213. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
  214. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
  215. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
  216. package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
  217. package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
  218. package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
  219. package/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +141 -0
  220. package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +478 -0
  221. package/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.js +27 -0
  222. package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +938 -0
  223. package/engine/graphics/particles/particular/group/Operation.js +18 -0
  224. package/engine/graphics/particles/particular/group/OperationType.js +9 -0
  225. package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
  226. package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
  227. package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
  228. package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
  229. package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
  230. package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
  231. package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
  232. package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
  233. package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
  234. package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +16 -11
  235. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
  236. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
  237. package/engine/graphics/render/forward_plus/LightManager.js +117 -94
  238. package/engine/graphics/render/forward_plus/PointLight.js +9 -0
  239. package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
  240. package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
  241. package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
  242. package/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.js +1 -0
  243. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.js +32 -0
  244. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.js +51 -0
  245. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.js +25 -0
  246. package/engine/graphics/render/forward_plus/materials/FPlusDebugMaterial.js +3 -3
  247. package/engine/graphics/render/forward_plus/materials/ForwardPlusThreeMaterial.js +1 -1
  248. package/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.js +31 -120
  249. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.js +35 -0
  250. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.js +4 -5
  251. package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
  252. package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +10 -3
  253. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +594 -59
  254. package/engine/graphics/render/forward_plus/prototypeLightManager.js +208 -89
  255. package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
  256. package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
  257. package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
  258. package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +74 -0
  259. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
  260. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
  261. package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
  262. package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
  263. package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
  264. package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
  265. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +1 -1
  266. package/engine/graphics/shaders/TerrainShader.js +4 -5
  267. package/engine/graphics/shadows/ShadowMapRenderer.js +8 -2
  268. package/engine/graphics/texture/atlas/ManagedTextureAtlas.js +12 -1
  269. package/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +1 -1
  270. package/engine/graphics/texture/sampler/SampleTraverser.js +1 -1
  271. package/engine/graphics/texture/sampler/Sampler2D.js +3 -1
  272. package/engine/graphics/texture/sampler/convertTexture2Sampler2D.js +1 -1
  273. package/engine/graphics/texture/sampler/copy_Sampler2D_channel_data.js +66 -0
  274. package/engine/graphics/texture/sampler/distanceField.spec.js +1 -1
  275. package/engine/graphics/util/composeMatrix4.js +33 -23
  276. package/engine/graphics/util/decompose_matrix_4_array.js +61 -0
  277. package/engine/grid/components/GridObstacle.js +1 -1
  278. package/engine/intelligence/behavior/ecs/BehaviorComponent.js +30 -14
  279. package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
  280. package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
  281. package/engine/knowledge/database/StaticKnowledgeDataTable.js +6 -1
  282. package/engine/navigation/ecs/components/Path.js +1 -6
  283. package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
  284. package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
  285. package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
  286. package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
  287. package/engine/ui/notification/notificationGenerator.js +1 -1
  288. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
  289. package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
  290. package/generation/markers/actions/MarkerNodeActionSelectRandom.js +1 -1
  291. package/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +1 -1
  292. package/generation/placement/action/random/CellActionSelectRandom.js +1 -1
  293. package/generation/theme/ThemeEngine.js +1 -1
  294. package/misc/makeMaterialIconCached.js +2 -2
  295. package/package.json +1 -1
  296. package/view/elements/image/HTMLElementCacheKey.js +2 -1
  297. package/view/elements/radial/RadialText.js +2 -1
  298. package/view/minimap/gl/MinimapMarkersGL.js +6 -100
  299. package/view/minimap/gl/MinimapWorldGL.js +12 -5
  300. package/view/minimap/gl/buildMaterial.js +94 -0
  301. package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +0 -71
  302. package/engine/graphics/render/forward_plus/queryBVH_Frustum.js +0 -357
@@ -6,8 +6,13 @@ import { min2 } from "../../math/min2.js";
6
6
  import { IndexedBinaryBVHVisitor } from "./IndexedBinaryBVHVisitor.js";
7
7
  import { NodeType } from "./NodeType.js";
8
8
  import { RayLeafIntersectionVisitor } from "./RayLeafIntersectionVisitor.js";
9
+ import { array_copy } from "../../collection/array/copyArray.js";
9
10
 
10
11
 
12
+ /**
13
+ *
14
+ * @type {Float32Array|number[]}
15
+ */
11
16
  const scratch_aabb_0 = new Float32Array(6);
12
17
 
13
18
 
@@ -30,16 +35,16 @@ export default class IndexedBinaryBVH {
30
35
  this.binaryNodeCount = 0;
31
36
 
32
37
  /**
33
- *
38
+ * Total number of boxes contained in the tree, some might be unused
34
39
  * @type {number}
35
40
  */
36
41
  this.boxCount = 0;
37
42
 
38
43
  /**
39
44
  *
40
- * @type {null|Float32Array}
45
+ * @type {Float32Array|number[]}
41
46
  */
42
- this.data = null;
47
+ this.data = new Float32Array(16);
43
48
  }
44
49
 
45
50
  /**
@@ -59,7 +64,14 @@ export default class IndexedBinaryBVH {
59
64
 
60
65
  this.boxCount = this.leafNodeCount + this.binaryNodeCount;
61
66
 
62
- this.data = new Float32Array(this.boxCount * 6);
67
+ // possibly resize the storage
68
+ const storage_size = this.boxCount * 6;
69
+
70
+ if (this.data.length < storage_size) {
71
+ this.data = new Float32Array(storage_size);
72
+ } else {
73
+ this.data.fill(0);
74
+ }
63
75
  }
64
76
 
65
77
  unsortedBuiltIntermediate() {
@@ -117,7 +129,7 @@ export default class IndexedBinaryBVH {
117
129
  }
118
130
 
119
131
  //set bounds of the bvh
120
- copy_box_array(0, data, scratch_aabb_0, 0);
132
+ array_copy(data, 0, scratch_aabb_0, 0, 6);
121
133
 
122
134
  this.x0 = scratch_aabb_0[0];
123
135
  this.y0 = scratch_aabb_0[1];
@@ -238,7 +250,7 @@ export default class IndexedBinaryBVH {
238
250
  }
239
251
 
240
252
  /**
241
- *
253
+ * @deprecated use a visitor object instead
242
254
  * @param {number} startX
243
255
  * @param {number} startY
244
256
  * @param {number} startZ
@@ -265,22 +277,6 @@ export default class IndexedBinaryBVH {
265
277
  }
266
278
  }
267
279
 
268
- /**
269
- *
270
- * @param {number} source_offset
271
- * @param {number[]|Float32Array} source
272
- * @param {number[]|Float32Array} destination
273
- * @param {number} destination_offset
274
- */
275
- function copy_box_array(source_offset, source, destination, destination_offset) {
276
- destination[destination_offset] = source[source_offset];
277
- destination[destination_offset + 1] = source[source_offset + 1];
278
- destination[destination_offset + 2] = source[source_offset + 2];
279
- destination[destination_offset + 3] = source[source_offset + 3];
280
- destination[destination_offset + 4] = source[source_offset + 4];
281
- destination[destination_offset + 5] = source[source_offset + 5];
282
- }
283
-
284
280
  /**
285
281
  *
286
282
  * @param {number[]|Float32Array} source
@@ -348,23 +344,23 @@ function writeBox(array, address, x0, y0, z0, x1, y1, z1) {
348
344
  * @param {Float32Array} array
349
345
  */
350
346
  function copyBox(from, to, array) {
351
- copy_box_array(from, array, array, to);
347
+ array_copy(array, from, array, to, 6);
352
348
  }
353
349
 
354
350
  /**
355
351
  *
356
352
  * @param {number} from
357
353
  * @param {number} to
358
- * @param {Float32Array} array
354
+ * @param {Float32Array|number[]} array
359
355
  */
360
356
  function copyBoxZeroSize(from, to, array) {
361
- copy_box_array(from, array, scratch_aabb_0, 0);
357
+ array_copy(array, from, scratch_aabb_0, 0, 3);
362
358
 
363
359
  scratch_aabb_0[3] = scratch_aabb_0[0];
364
360
  scratch_aabb_0[4] = scratch_aabb_0[1];
365
361
  scratch_aabb_0[5] = scratch_aabb_0[2];
366
362
 
367
- copy_box_array(0, scratch_aabb_0, array, to);
363
+ array_copy(scratch_aabb_0, 0, array, to, 6);
368
364
  }
369
365
 
370
366
  /**
@@ -40,7 +40,11 @@ export class ThreeClippingPlaneComputingBVHVisitor extends BVHVisitor {
40
40
  */
41
41
  this.__nearPlaneConstant = 0;
42
42
 
43
-
43
+ /**
44
+ *
45
+ * @type {Float32Array}
46
+ * @private
47
+ */
44
48
  this.__planes_f32 = new Float32Array(24);
45
49
 
46
50
  this.near = 0;
@@ -7,37 +7,54 @@ import { __process_point_if_within_planes } from "./__process_point_if_within_pl
7
7
  import { plane_computeConvex3PlaneIntersection } from "../../geom/3d/plane/plane_computeConvex3PlaneIntersection.js";
8
8
  import { EPSILON } from "../../math/MathUtils.js";
9
9
 
10
+ /**
11
+ * Common piece of continuous memory for better cache coherence
12
+ * @type {ArrayBuffer}
13
+ * @private
14
+ */
15
+ const __scratch_buffer = new ArrayBuffer(
16
+ 24 * 4
17
+ + 24 * 4
18
+ + 8 * 4
19
+ + 3 * 4
20
+ );
21
+
10
22
  /**
11
23
  *
12
24
  * @type {number[]}
13
25
  */
14
- const scratch_aabb_corners = new Float32Array(24);
26
+ const scratch_aabb_corners = new Float32Array(__scratch_buffer, 0, 24);
15
27
 
16
28
  /**
17
29
  *
18
30
  * @type {number[]}
19
31
  */
20
- const scratch_aabb_planes = new Float32Array(24);
32
+ const scratch_aabb_planes = new Float32Array(__scratch_buffer, 96, 24);
21
33
 
22
34
  /**
23
35
  *
24
36
  * @type {number[]}
25
37
  */
26
- const scratch_corner_out_bitfields = new Uint32Array(8);
38
+ const scratch_corner_out_bitfields = new Uint32Array(__scratch_buffer, 192, 8);
27
39
 
28
40
  /**
29
41
  *
30
42
  * @type {number[]}
31
43
  */
32
- const scratch_v3_array = new Float32Array(3);
44
+ const scratch_v3_array = new Float32Array(__scratch_buffer, 224, 3);
33
45
 
34
46
  /**
47
+ * Figures out intersection volume between an AABB and a frustum for much tighter bounds
48
+ *
49
+ * Especially beneficial when trying to intersect a large AABB against a small frustum,
50
+ * where where traditionally only AABB corners would be considered,
51
+ * we're instead able to compute minimum bounds of the overlap of the two
35
52
  *
36
53
  * @param {AABB3} box
37
54
  * @param {number[]} planes
38
55
  * @param {number} plane_count
39
56
  * @param {number} plane_mask
40
- * @param {function} callback
57
+ * @param {function(x:number,y:number,z:number)} callback
41
58
  * @param {*} [thisArg]
42
59
  * @private
43
60
  */
@@ -4,13 +4,15 @@ export class Cache<K, V> {
4
4
  keyWeigher,
5
5
  valueWeigher,
6
6
  keyHashFunction,
7
- keyEqualityFunction
7
+ keyEqualityFunction,
8
+ capacity
8
9
  }?: {
9
10
  maxWeight?: number,
10
11
  keyWeigher?: (key: K) => number,
11
12
  valueWeigher?: (value: V) => number,
12
13
  keyHashFunction?: (key: K) => number,
13
- keyEqualityFunction?: (a: K, b: K) => boolean
14
+ keyEqualityFunction?: (a: K, b: K) => boolean,
15
+ capacity?: number
14
16
  })
15
17
 
16
18
  size(): number
@@ -16,6 +16,7 @@ export class Cache {
16
16
  * @param {function(key:Key, value:Value)} [removeListener] will be notified when element is either explicitly removed or evicted
17
17
  * @param {function(Key):number} [keyHashFunction]
18
18
  * @param {function(Key, Key):boolean} [keyEqualityFunction]
19
+ * @param {number} capacity initial capacity for the cache, helps prevent early resizing
19
20
  * @constructor
20
21
  * @template Key, Value
21
22
  */
@@ -25,7 +26,8 @@ export class Cache {
25
26
  valueWeigher = returnOne,
26
27
  removeListener = noop,
27
28
  keyHashFunction = returnZero,
28
- keyEqualityFunction = strictEquals
29
+ keyEqualityFunction = strictEquals,
30
+ capacity
29
31
  } = {}) {
30
32
 
31
33
  assert.isNumber(maxWeight, 'maxWeight');
@@ -95,7 +97,8 @@ export class Cache {
95
97
  */
96
98
  this.data = new HashMap({
97
99
  keyHashFunction,
98
- keyEqualityFunction
100
+ keyEqualityFunction,
101
+ capacity
99
102
  });
100
103
 
101
104
  /**
@@ -6,9 +6,9 @@
6
6
  */
7
7
  import { assert } from "../assert.js";
8
8
  import { returnZero } from "../function/Functions.js";
9
- import { randomIntegerBetween } from "../math/MathUtils.js";
10
9
  import { min2 } from "../math/min2.js";
11
10
  import { HashMap } from "./HashMap.js";
11
+ import { randomIntegerBetween } from "../math/random/randomIntegerBetween.js";
12
12
 
13
13
 
14
14
  /**
@@ -1,7 +1,14 @@
1
1
  export class HashMap<K, V> implements Iterable<[V, K]> {
2
- constructor({keyHashFunction, keyEqualityFunction}: {
2
+ constructor({
3
+ keyHashFunction,
4
+ keyEqualityFunction,
5
+ capacity,
6
+ loadFactor
7
+ }: {
3
8
  keyHashFunction: (k: K) => number,
4
- keyEqualityFunction: (a: K, b: K) => boolean
9
+ keyEqualityFunction: (a: K, b: K) => boolean,
10
+ capacity?: number,
11
+ loadFactor?: number
5
12
  })
6
13
 
7
14
  constructor()
@@ -1,7 +1,12 @@
1
1
  export class HashSet<T> {
2
- constructor({keyHashFunction, keyEqualityFunction}: {
2
+ constructor({
3
+ keyHashFunction,
4
+ keyEqualityFunction,
5
+ capacity
6
+ }: {
3
7
  keyHashFunction: (k: T) => number,
4
- keyEqualityFunction: (a: T, b: T) => boolean
8
+ keyEqualityFunction: (a: T, b: T) => boolean,
9
+ capacity?: number
5
10
  })
6
11
 
7
12
  constructor()
@@ -11,7 +11,11 @@ export class HashSet {
11
11
  /**
12
12
  * @template T
13
13
  */
14
- constructor({ keyHashFunction = invokeObjectHash, keyEqualityFunction = invokeObjectEquals } = {}) {
14
+ constructor({
15
+ keyHashFunction = invokeObjectHash,
16
+ keyEqualityFunction = invokeObjectEquals,
17
+ capacity
18
+ } = {}) {
15
19
 
16
20
  /**
17
21
  * Using HashMap as a backing, this is not the most efficient approach, but it works
@@ -20,7 +24,8 @@ export class HashSet {
20
24
  */
21
25
  this.__map = new HashMap({
22
26
  keyHashFunction,
23
- keyEqualityFunction
27
+ keyEqualityFunction,
28
+ capacity
24
29
  });
25
30
  }
26
31
 
@@ -5,11 +5,14 @@ const stack = [];
5
5
  /**
6
6
  * @template T
7
7
  * @param {T[]} data
8
- * @param {function(T):number} keyExtractor
8
+ * @param {function(T):number} score_function
9
+ * @param {*} score_function_context
9
10
  * @param {number} start
10
11
  * @param {number} end
12
+ * @param {function(T[],number, number):*} [swap_operator]
13
+ * @param {*} [swap_context]
11
14
  */
12
- export function arrayQuickSort(data, keyExtractor, start, end) {
15
+ export function arrayQuickSort(data, score_function, score_function_context, start, end, swap_operator = arraySwapElements, swap_context = undefined) {
13
16
  if (start >= end) {
14
17
  // section of 0 size, nothing to sort
15
18
  return;
@@ -32,15 +35,15 @@ export function arrayQuickSort(data, keyExtractor, start, end) {
32
35
 
33
36
  const pivotIndex = (left + right) >> 1;
34
37
 
35
- const pivot = keyExtractor(data[pivotIndex]);
38
+ const pivot = score_function.call(score_function_context,data[pivotIndex]);
36
39
 
37
40
  /* partition */
38
41
  while (i <= j) {
39
- while (keyExtractor(data[i]) < pivot) {
42
+ while (score_function.call(score_function_context,data[i]) < pivot) {
40
43
  i++;
41
44
  }
42
45
 
43
- while (keyExtractor(data[j]) > pivot) {
46
+ while (score_function.call(score_function_context,data[j]) > pivot) {
44
47
  j--;
45
48
  }
46
49
 
@@ -48,7 +51,7 @@ export function arrayQuickSort(data, keyExtractor, start, end) {
48
51
 
49
52
  if (i !== j) {
50
53
  //do swap
51
- arraySwapElements(data, i, j);
54
+ swap_operator.call(swap_context, data, i, j);
52
55
  }
53
56
 
54
57
  i++;
@@ -0,0 +1,22 @@
1
+ /**
2
+ *
3
+ * @param {T[]|ArrayLike<T>|TypedArray|Uint8ClampedArray|Uint8Array} a
4
+ * @param {number} a_offset
5
+ * @param {T[]|ArrayLike<T>|TypedArray|Uint8ClampedArray|Uint8Array} b
6
+ * @param {number} b_offset
7
+ * @param {number} length How many elements should be moved
8
+ */
9
+ export function array_swap(a, a_offset, b, b_offset, length) {
10
+
11
+ let i, j, k;
12
+
13
+ for (k = 0; k < length; k++) {
14
+ i = a_offset + k;
15
+ j = b_offset + k;
16
+
17
+ const t = b[j];
18
+
19
+ b[j] = a[i];
20
+ a[i] = t;
21
+ }
22
+ }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @template T,V
3
- * @param {T[]} array
3
+ * @param {T[]|ArrayLike<T>|Float32Array} array
4
4
  * @param {V} el
5
5
  * @param {function(V,T):number} compareFunction
6
6
  * @param {number} [minIndex]
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @template T
3
+ * @param {T[]} array
4
+ * @param {function(T):number} elementHashFunction
5
+ */
6
+ export function computeHashArray(array, elementHashFunction) {
7
+
8
+ const numArguments = array.length;
9
+ let hash = numArguments;
10
+
11
+ for (let i = 0; i < numArguments; i++) {
12
+
13
+ const singleValue = array[i];
14
+
15
+ const elementHash = elementHashFunction(singleValue);
16
+
17
+ hash = ((hash << 5) - hash) + elementHash;
18
+ hash |= 0; // Convert to 32bit integer
19
+ }
20
+
21
+ return hash;
22
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Computes hash on integer values
3
+ * @param {...number} value
4
+ * @returns {number}
5
+ */
6
+ export function computeHashIntegerArray(value) {
7
+ let hash = 0;
8
+ const numArguments = arguments.length;
9
+ for (let i = 0; i < numArguments; i++) {
10
+ const singleValue = arguments[i];
11
+ hash = ((hash << 5) - hash) + singleValue;
12
+ hash |= 0; // Convert to 32bit integer
13
+ }
14
+ return hash;
15
+ }
@@ -25,9 +25,9 @@ export function copyArray(source, target) {
25
25
  * Follows Java System.arraycopy interface
26
26
  * Copy data from one array to another
27
27
  * @template T
28
- * @param {T[]|ArrayLike<T>|TypedArray|Uint8ClampedArray|Uint8Array} source The source array
28
+ * @param {T[]|ArrayLike<T>|TypedArray|Uint8ClampedArray|Uint8Array|Float32Array|Float64Array} source The source array
29
29
  * @param {number} source_position Starting position where to copy from inside the source array
30
- * @param {T[]|ArrayLike<T>|TypedArray|Uint8ClampedArray|Uint8Array} destination The destination array
30
+ * @param {T[]|ArrayLike<T>|TypedArray|Uint8ClampedArray|Uint8Array|Float32Array|Float64Array} destination The destination array
31
31
  * @param {number} destination_position Starting position where to copy to inside the destination array
32
32
  * @param {number} length How many elements should be copied
33
33
  */
@@ -2,7 +2,7 @@ import { array_copy } from "../copyArray.js";
2
2
 
3
3
 
4
4
  /**
5
- *
5
+ * Assumes arrays have the same type
6
6
  * @param {TypedArray|Float32Array} source
7
7
  * @param {TypedArray|Float32Array} destination
8
8
  */
@@ -16,4 +16,19 @@ export const DataType2TypedArrayConstructorMapping = {
16
16
  [DataType.Float16]: Uint16Array,
17
17
  [DataType.Float32]: Float32Array,
18
18
  [DataType.Float64]: Float64Array,
19
+ };
20
+
21
+ /**
22
+ *
23
+ * @param {DataType} dt
24
+ * @returns {constructor|function}
25
+ */
26
+ export function compute_typed_array_constructor_from_data_type(dt) {
27
+ const r = DataType2TypedArrayConstructorMapping[dt];
28
+
29
+ if (r === undefined) {
30
+ throw new Error(`Unsupported data type '${dt}'`);
31
+ }
32
+
33
+ return r;
19
34
  }
@@ -1,11 +1,12 @@
1
1
  import { assert } from "../assert.js";
2
2
  import Signal from "../events/signal/Signal.js";
3
- import { computeHashFloat, computeHashIntegerArray } from "../math/MathUtils.js";
4
3
  import { parseColor, rgb2hsv } from "./ColorUtils.js";
5
4
  import { clamp } from "../math/clamp.js";
6
5
  import { min2 } from "../math/min2.js";
7
6
  import { max2 } from "../math/max2.js";
8
7
  import { min3 } from "../math/min3.js";
8
+ import { computeHashIntegerArray } from "../collection/array/computeHashIntegerArray.js";
9
+ import { computeHashFloat } from "../math/hash/computeHashFloat.js";
9
10
 
10
11
  class Color {
11
12
  /**
@@ -1,11 +1,12 @@
1
1
  import { assert } from "../assert.js";
2
2
  import { Cache } from "../cache/Cache.js";
3
3
  import { isArrayEqualStrict } from "../collection/array/isArrayEqualStrict.js";
4
- import { computeHashArray, computeHashIntegerArray } from "../math/MathUtils.js";
5
4
  import { invokeObjectEquals } from "../model/object/invokeObjectEquals.js";
6
5
  import { invokeObjectHash } from "../model/object/invokeObjectHash.js";
7
6
  import { computeStringHash } from "../primitives/strings/computeStringHash.js";
8
7
  import { computeUTF8StringByteSize } from "../primitives/strings/StringUtils.js";
8
+ import { computeHashArray } from "../collection/array/computeHashArray.js";
9
+ import { computeHashIntegerArray } from "../collection/array/computeHashIntegerArray.js";
9
10
 
10
11
  /**
11
12
  * Hash is an integer value, so this is an invalid value for a computed hash
@@ -1,5 +1,3 @@
1
- import { computePointDistanceToPlane } from "../../Plane.js";
2
-
3
1
  /**
4
2
  * @param {number} plane_normal_x
5
3
  * @param {number} plane_normal_y
@@ -14,38 +12,16 @@ import { computePointDistanceToPlane } from "../../Plane.js";
14
12
  * @returns {number}
15
13
  */
16
14
  export function aabb3_computeDistanceAbovePlane(
17
- plane_normal_x,
18
- plane_normal_y,
19
- plane_normal_z,
20
- plane_constant,
21
- _x0,
22
- _y0,
23
- _z0,
24
- _x1,
25
- _y1,
26
- _z1
15
+ plane_normal_x, plane_normal_y, plane_normal_z, plane_constant,
16
+ _x0, _y0, _z0,
17
+ _x1, _y1, _z1
27
18
  ) {
28
19
 
29
- let px, py, pz;
30
-
31
- // pick a corner point furthest along the normal
32
- if (plane_normal_x > 0) {
33
- px = _x1;
34
- } else {
35
- px = _x0;
36
- }
37
-
38
- if (plane_normal_y > 0) {
39
- py = _y1;
40
- } else {
41
- py = _y0;
42
- }
43
-
44
- if (plane_normal_z > 0) {
45
- pz = _z1;
46
- } else {
47
- pz = _z0;
48
- }
20
+ // pick a corner point furthest along the plane normal
21
+ const px = plane_normal_x > 0 ? _x1 : _x0;
22
+ const py = plane_normal_y > 0 ? _y1 : _y0;
23
+ const pz = plane_normal_z > 0 ? _z1 : _z0;
49
24
 
50
- return computePointDistanceToPlane(px, py, pz, plane_normal_x, plane_normal_y, plane_normal_z, plane_constant);
25
+ // dot(v4,v4) inlined for speed
26
+ return (plane_normal_x * px + plane_normal_y * py + plane_normal_z * pz) + plane_constant;
51
27
  }
@@ -1,5 +1,3 @@
1
- import { v3_length } from "../../v3_length.js";
2
-
3
1
  /**
4
2
  *
5
3
  * @param {number[]} destination
@@ -10,10 +8,12 @@ import { v3_length } from "../../v3_length.js";
10
8
  * @param {number} w
11
9
  */
12
10
  function array_set_plane_normalized(destination, destination_offset, x, y, z, w) {
13
- const length = v3_length(x, y, z);
11
+ // compute vector length
12
+ const length = Math.hypot(x, y, z);
14
13
 
15
14
  const inverseNormalLength = 1.0 / length;
16
15
 
16
+ // apply normalization
17
17
  destination[destination_offset] = x * inverseNormalLength;
18
18
  destination[destination_offset + 1] = y * inverseNormalLength;
19
19
  destination[destination_offset + 2] = z * inverseNormalLength;
@@ -1,8 +1,8 @@
1
- import { ray_computeNearestPointToPoint } from "../../LineSegment.js";
2
1
  import { computePlanePlaneIntersection, computePointDistanceToPlane } from "../../Plane.js";
3
2
  import Vector3 from "../../Vector3.js";
4
3
  import { plane3_projectPoint } from "../plane/plane3_projectPoint.js";
5
4
  import { plane_three_computeConvex3PlaneIntersection } from "../plane/plane_computeConvex3PlaneIntersection.js";
5
+ import { ray_computeNearestPointToPoint } from "../ray/ray_computeNearestPointToPoint.js";
6
6
 
7
7
  /**
8
8
  *
@@ -0,0 +1,41 @@
1
+ import { clamp } from "../../../math/clamp.js";
2
+ import { v3_distance_sqr } from "../../v3_distance_sqr.js";
3
+
4
+ /**
5
+ * Computes shortest distance between a line segment(defined by 2 points) and a point
6
+ * @param {number} x0
7
+ * @param {number} y0
8
+ * @param {number} z0
9
+ * @param {number} x1
10
+ * @param {number} y1
11
+ * @param {number} z1
12
+ * @param {number} px
13
+ * @param {number} py
14
+ * @param {number} pz
15
+ */
16
+ export function line3_computeSegmentPointDistance_sqr(x0, y0, z0, x1, y1, z1, px, py, pz) {
17
+ // get line delta
18
+ const line_delta_x = x1 - x0;
19
+ const line_delta_y = y1 - y0;
20
+ const line_delta_z = z1 - z0;
21
+
22
+ // find closest point
23
+ const sp0_x = px - x0;
24
+ const sp0_y = py - y0;
25
+ const sp0_z = pz - z0;
26
+
27
+ //
28
+ const d2 = line_delta_x * line_delta_x + line_delta_y * line_delta_y + line_delta_z * line_delta_z;
29
+
30
+ const d3 = line_delta_x * sp0_x + line_delta_y * sp0_y + line_delta_z * sp0_z;
31
+
32
+ const t = clamp(d3 / d2, 0, 1);
33
+
34
+ // compute point on the line
35
+ const lp_x = line_delta_x * t + x0;
36
+ const lp_y = line_delta_y * t + y0;
37
+ const lp_z = line_delta_z * t + z0;
38
+
39
+ // compute distance from the point in question to the point on the line
40
+ return v3_distance_sqr(px, py, pz, lp_x, lp_y, lp_z);
41
+ }
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * method to separate bits from a given integer 3 positions apart
3
+ * we only look at the first 10 bits
3
4
  * @param {number} a
4
5
  * @returns {number}
5
6
  */
6
7
  function splitBy3(a) {
7
- let x = a & 0x000003ff; // we only look at the first 10 bits
8
+ let x = a;
8
9
  x = (x | x << 16) & 0x30000ff;
9
10
  x = (x | x << 8) & 0x0300f00f;
10
11
  x = (x | x << 4) & 0x30c30c3;
@@ -0,0 +1,13 @@
1
+ const b = new ArrayBuffer(4);
2
+ const b_f32 = new Float32Array(b);
3
+ const b_i32 = new Int32Array(b);
4
+
5
+ /**
6
+ *
7
+ * @param {number} value
8
+ * @returns {number}
9
+ */
10
+ export function reinterpret_float32_as_int32(value) {
11
+ b_f32[0] = value;
12
+ return b_i32[0];
13
+ }