@woosh/meep-engine 3.44.0 → 3.46.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 (447) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/assert.d.ts.map +1 -1
  4. package/src/core/assert.js +5 -1
  5. package/src/core/binary/hash/XXH128Hash.d.ts +1 -37
  6. package/src/core/binary/hash/XXH128Hash.d.ts.map +1 -1
  7. package/src/core/binary/hash/XXH128Hash.js +4 -55
  8. package/src/core/binary/hash/XXH3_SECRET.d.ts +1 -12
  9. package/src/core/binary/hash/XXH3_SECRET.d.ts.map +1 -1
  10. package/src/core/binary/hash/XXH3_SECRET.js +4 -25
  11. package/src/core/binary/hash/crc32.d.ts +1 -15
  12. package/src/core/binary/hash/crc32.d.ts.map +1 -1
  13. package/src/core/binary/hash/crc32.js +4 -96
  14. package/src/core/binary/hash/xxh3_128.d.ts +1 -9
  15. package/src/core/binary/hash/xxh3_128.d.ts.map +1 -1
  16. package/src/core/binary/hash/xxh3_128.js +4 -341
  17. package/src/core/binary/hash/xxh3_64.d.ts +1 -8
  18. package/src/core/binary/hash/xxh3_64.d.ts.map +1 -1
  19. package/src/core/binary/hash/xxh3_64.js +4 -241
  20. package/src/core/binary/hash/xxh3_common.d.ts +1 -223
  21. package/src/core/binary/hash/xxh3_common.d.ts.map +1 -1
  22. package/src/core/binary/hash/xxh3_common.js +90 -476
  23. package/src/core/collection/array/array_sort_insertion_ascending.d.ts +19 -0
  24. package/src/core/collection/array/array_sort_insertion_ascending.d.ts.map +1 -0
  25. package/src/core/collection/array/array_sort_insertion_ascending.js +31 -0
  26. package/src/core/collection/array/combine_hash.d.ts +6 -0
  27. package/src/core/collection/array/combine_hash.d.ts.map +1 -1
  28. package/src/core/collection/array/combine_hash.js +6 -0
  29. package/src/core/function/FunctionCompiler.js +2 -2
  30. package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts +27 -0
  31. package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts.map +1 -0
  32. package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.js +39 -0
  33. package/src/core/geom/3d/aabb/aabb3_from_v3_array.d.ts.map +1 -1
  34. package/src/core/geom/3d/aabb/aabb3_from_v3_array.js +4 -1
  35. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +2 -2
  36. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -1
  37. package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +1 -1
  38. package/src/core/geom/3d/mat4/m4_multiply.d.ts +3 -0
  39. package/src/core/geom/3d/mat4/m4_multiply.d.ts.map +1 -1
  40. package/src/core/geom/3d/mat4/m4_multiply.js +3 -0
  41. package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts +30 -0
  42. package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts.map +1 -0
  43. package/src/core/geom/3d/mat4/m4_multiply_f64.js +106 -0
  44. package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts +21 -0
  45. package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts.map +1 -0
  46. package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.js +36 -0
  47. package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts +25 -0
  48. package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts.map +1 -0
  49. package/src/core/geom/3d/pose/pose3_apply_point_array.js +40 -0
  50. package/src/core/geom/3d/pose/pose3_compose_array.d.ts +28 -0
  51. package/src/core/geom/3d/pose/pose3_compose_array.d.ts.map +1 -0
  52. package/src/core/geom/3d/pose/pose3_compose_array.js +41 -0
  53. package/src/core/geom/3d/pose/pose3_to_local_array.d.ts +29 -0
  54. package/src/core/geom/3d/pose/pose3_to_local_array.d.ts.map +1 -0
  55. package/src/core/geom/3d/pose/pose3_to_local_array.js +42 -0
  56. package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts +28 -0
  57. package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts.map +1 -0
  58. package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.js +66 -0
  59. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts +22 -0
  60. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts.map +1 -0
  61. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.js +30 -0
  62. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts +23 -0
  63. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts.map +1 -0
  64. package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.js +31 -0
  65. package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts +26 -0
  66. package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts.map +1 -0
  67. package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.js +46 -0
  68. package/src/core/geom/ConicRay.js +2 -2
  69. package/src/core/geom/Vector4.d.ts.map +1 -1
  70. package/src/core/geom/Vector4.js +8 -5
  71. package/src/core/geom/vec3/v3_distance_array.d.ts +11 -0
  72. package/src/core/geom/vec3/v3_distance_array.d.ts.map +1 -0
  73. package/src/core/geom/vec3/v3_distance_array.js +19 -0
  74. package/src/core/geom/vec3/v3_normalize_array_checked.d.ts +23 -0
  75. package/src/core/geom/vec3/v3_normalize_array_checked.d.ts.map +1 -0
  76. package/src/core/geom/vec3/v3_normalize_array_checked.js +49 -0
  77. package/src/core/geom/vec3/v3_reject_array.d.ts +15 -0
  78. package/src/core/geom/vec3/v3_reject_array.d.ts.map +1 -0
  79. package/src/core/geom/vec3/v3_reject_array.js +32 -0
  80. package/src/core/graph/csr/csr_build_incidence.d.ts +26 -0
  81. package/src/core/graph/csr/csr_build_incidence.d.ts.map +1 -0
  82. package/src/core/graph/csr/csr_build_incidence.js +71 -0
  83. package/src/core/graph/csr/csr_graph_color_greedy.d.ts +25 -0
  84. package/src/core/graph/csr/csr_graph_color_greedy.d.ts.map +1 -0
  85. package/src/core/graph/csr/csr_graph_color_greedy.js +83 -0
  86. package/src/core/graph/csr/csr_graph_validate_coloring.d.ts +15 -0
  87. package/src/core/graph/csr/csr_graph_validate_coloring.d.ts.map +1 -0
  88. package/src/core/graph/csr/csr_graph_validate_coloring.js +33 -0
  89. package/src/core/math/hash/XXH128Hash.d.ts +38 -0
  90. package/src/core/math/hash/XXH128Hash.d.ts.map +1 -0
  91. package/src/core/math/hash/XXH128Hash.js +55 -0
  92. package/src/core/math/hash/XXH3_SECRET.d.ts +13 -0
  93. package/src/core/math/hash/XXH3_SECRET.d.ts.map +1 -0
  94. package/src/core/math/hash/XXH3_SECRET.js +25 -0
  95. package/src/core/math/hash/crc32.d.ts +16 -0
  96. package/src/core/math/hash/crc32.d.ts.map +1 -0
  97. package/src/core/math/hash/crc32.js +96 -0
  98. package/src/core/math/hash/xxh3_128.d.ts +10 -0
  99. package/src/core/math/hash/xxh3_128.d.ts.map +1 -0
  100. package/src/core/math/hash/xxh3_128.js +341 -0
  101. package/src/core/math/hash/xxh3_64.d.ts +9 -0
  102. package/src/core/math/hash/xxh3_64.d.ts.map +1 -0
  103. package/src/core/math/hash/xxh3_64.js +241 -0
  104. package/src/core/math/hash/xxh3_common.d.ts +224 -0
  105. package/src/core/math/hash/xxh3_common.d.ts.map +1 -0
  106. package/src/core/math/hash/xxh3_common.js +476 -0
  107. package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts +26 -0
  108. package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts.map +1 -0
  109. package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.js +71 -0
  110. package/src/core/math/lookup/ParameterLookupTable.js +2 -2
  111. package/src/core/math/max2_exact.d.ts +15 -0
  112. package/src/core/math/max2_exact.d.ts.map +1 -0
  113. package/src/core/math/max2_exact.js +30 -0
  114. package/src/core/math/min2_exact.d.ts +20 -0
  115. package/src/core/math/min2_exact.d.ts.map +1 -0
  116. package/src/core/math/min2_exact.js +35 -0
  117. package/src/core/model/node-graph/node/NodeInstancePortReference.js +2 -2
  118. package/src/core/model/reactive/model/ReactiveBinaryExpression.js +2 -2
  119. package/src/core/model/reactive/model/terminal/ReactiveReference.js +2 -2
  120. package/src/engine/asset/AssetDescription.js +2 -2
  121. package/src/engine/ecs/animation/Animation.js +2 -2
  122. package/src/engine/ecs/animation/AnimationClip.d.ts.map +1 -1
  123. package/src/engine/ecs/animation/AnimationClip.js +7 -5
  124. package/src/engine/ecs/gui/GUIElement.d.ts.map +1 -1
  125. package/src/engine/ecs/gui/GUIElement.js +7 -5
  126. package/src/engine/ecs/gui/hud/HeadsUpDisplay.js +2 -2
  127. package/src/engine/ecs/gui/position/ViewportPosition.d.ts.map +1 -1
  128. package/src/engine/ecs/gui/position/ViewportPosition.js +11 -7
  129. package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
  130. package/src/engine/ecs/ik/IKGoalSystem.js +3 -19
  131. package/src/engine/ecs/parent/parent_entity_model_of.d.ts +17 -0
  132. package/src/engine/ecs/parent/parent_entity_model_of.d.ts.map +1 -0
  133. package/src/engine/ecs/parent/parent_entity_model_of.js +26 -0
  134. package/src/engine/ecs/transform/Transform64.d.ts +1 -1
  135. package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
  136. package/src/engine/ecs/transform/Transform64.js +5 -4
  137. package/src/engine/ecs/transform/t64_read_pose_array.d.ts +15 -0
  138. package/src/engine/ecs/transform/t64_read_pose_array.d.ts.map +1 -0
  139. package/src/engine/ecs/transform/t64_read_pose_array.js +24 -0
  140. package/src/engine/graphics/ecs/animation/animator/AnimationClip.d.ts.map +1 -1
  141. package/src/engine/graphics/ecs/animation/animator/AnimationClip.js +8 -5
  142. package/src/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -2
  143. package/src/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -2
  144. package/src/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -2
  145. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -2
  146. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +2 -2
  147. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.d.ts.map +1 -1
  148. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +8 -5
  149. package/src/engine/graphics/ecs/decal/v2/Decal.d.ts.map +1 -1
  150. package/src/engine/graphics/ecs/decal/v2/Decal.js +9 -8
  151. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts +2 -0
  152. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts.map +1 -1
  153. package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.js +10 -21
  154. package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.d.ts.map +1 -1
  155. package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.js +9 -6
  156. package/src/engine/graphics3/AnimationGraphSystem.d.ts +5 -0
  157. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
  158. package/src/engine/graphics3/AnimationGraphSystem.js +48 -2
  159. package/src/engine/graphics3/AnimationSystem.d.ts +5 -0
  160. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
  161. package/src/engine/graphics3/AnimationSystem.js +47 -2
  162. package/src/engine/graphics3/ParticipatingMedia.js +204 -204
  163. package/src/engine/graphics3/animation/AnimationClips.d.ts +5 -0
  164. package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
  165. package/src/engine/graphics3/animation/AnimationClips.js +5 -0
  166. package/src/engine/graphics3/register_clips.d.ts +29 -0
  167. package/src/engine/graphics3/register_clips.d.ts.map +1 -1
  168. package/src/engine/graphics3/register_clips.js +52 -0
  169. package/src/engine/grid/obstacle/GridObstacle.js +2 -2
  170. package/src/engine/intelligence/behavior/selector/WeightedElement.js +2 -2
  171. package/src/engine/interpolation/Interpolated.js +2 -2
  172. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +9 -0
  173. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
  174. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +3 -1
  175. package/src/engine/physics/cloth/PLAN.md +10 -8
  176. package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts +22 -0
  177. package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts.map +1 -1
  178. package/src/engine/physics/cloth/build/cloth_bind_in_frame.js +51 -19
  179. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
  180. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +16 -2
  181. package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts.map +1 -1
  182. package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.js +19 -24
  183. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +7 -0
  184. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
  185. package/src/engine/physics/cloth/collider/ClothColliderIndex.js +85 -67
  186. package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts.map +1 -1
  187. package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +19 -101
  188. package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts +2 -5
  189. package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts.map +1 -1
  190. package/src/engine/physics/cloth/collider/cloth_collider_pack.js +7 -15
  191. package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
  192. package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +16 -61
  193. package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -1
  194. package/src/engine/physics/cloth/ecs/Cloth.js +7 -5
  195. package/src/engine/physics/cloth/ecs/ClothCollider.d.ts.map +1 -1
  196. package/src/engine/physics/cloth/ecs/ClothCollider.js +7 -5
  197. package/src/engine/physics/cloth/ecs/ClothColliderFlags.d.ts +0 -1
  198. package/src/engine/physics/cloth/ecs/ClothColliderFlags.js +6 -19
  199. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +1 -2
  200. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
  201. package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +3 -12
  202. package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts.map +1 -1
  203. package/src/engine/physics/cloth/ecs/ClothDynamics.js +20 -11
  204. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  205. package/src/engine/physics/cloth/ecs/ClothWorld.js +40 -130
  206. package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
  207. package/src/engine/physics/cloth/ecs/cloth_build_rows.js +17 -58
  208. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
  209. package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +3 -3
  210. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
  211. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +44 -104
  212. package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts.map +1 -1
  213. package/src/engine/physics/cloth/ecs/cloth_geodesic.js +6 -13
  214. package/src/engine/physics/cloth/ecs/cloth_holds.d.ts.map +1 -1
  215. package/src/engine/physics/cloth/ecs/cloth_holds.js +15 -40
  216. package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
  217. package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +45 -79
  218. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
  219. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +7 -27
  220. package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
  221. package/src/engine/physics/cloth/ecs/cloth_write_back.js +30 -62
  222. package/src/engine/physics/cloth/playground/cloth_playground_build.d.ts.map +1 -1
  223. package/src/engine/physics/cloth/playground/cloth_playground_build.js +2 -3
  224. package/src/engine/physics/cloth/playground/collide_main.js +2 -28
  225. package/src/engine/physics/cloth/playground/garment_main.js +4 -19
  226. package/src/engine/physics/cloth/playground/main.js +6 -48
  227. package/src/engine/physics/cloth/playground/rig_main.js +947 -955
  228. package/src/engine/physics/cloth/playground/wind_main.js +8 -7
  229. package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
  230. package/src/engine/physics/cloth/solver/ClothState.js +16 -76
  231. package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts +10 -8
  232. package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts.map +1 -1
  233. package/src/engine/physics/cloth/solver/cloth_color_particles.js +30 -102
  234. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
  235. package/src/engine/physics/cloth/solver/cloth_contact_find.js +3 -2
  236. package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts.map +1 -1
  237. package/src/engine/physics/cloth/solver/cloth_hold_line.js +2 -14
  238. package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts +21 -0
  239. package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts.map +1 -0
  240. package/src/engine/physics/cloth/solver/cloth_kinetic_energy.js +45 -0
  241. package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts +32 -0
  242. package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts.map +1 -0
  243. package/src/engine/physics/cloth/solver/cloth_particle_coupling.js +133 -0
  244. package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts +16 -0
  245. package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts.map +1 -0
  246. package/src/engine/physics/cloth/solver/cloth_particle_of_source.js +19 -0
  247. package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
  248. package/src/engine/physics/cloth/solver/cloth_self_find.js +6 -55
  249. package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
  250. package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +30 -65
  251. package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
  252. package/src/engine/physics/cloth/solver/cloth_step.js +6 -28
  253. package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
  254. package/src/engine/physics/cloth/solver/cloth_step_instance.js +2 -3
  255. package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts +21 -0
  256. package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts.map +1 -0
  257. package/src/engine/physics/cloth/solver/cloth_stretch_residual.js +54 -0
  258. package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts +15 -0
  259. package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts.map +1 -1
  260. package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.js +28 -0
  261. package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts +30 -0
  262. package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts.map +1 -0
  263. package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.js +56 -0
  264. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
  265. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +3 -17
  266. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +2 -1
  267. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
  268. package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -25
  269. package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts +3 -1
  270. package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -1
  271. package/src/engine/physics/cloth/wind/cloth_sample_air.js +40 -62
  272. package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
  273. package/src/engine/physics/ecs/ContactProbeSystem.js +2 -18
  274. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  275. package/src/engine/physics/ecs/PhysicsSystem.js +9 -50
  276. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  277. package/src/engine/physics/fluid/FluidField.js +7 -5
  278. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
  279. package/src/engine/physics/fluid/ecs/FluidComponent.js +19 -11
  280. package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts +24 -0
  281. package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts.map +1 -0
  282. package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.js +42 -0
  283. package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts +25 -0
  284. package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts.map +1 -0
  285. package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.js +40 -0
  286. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +2 -2
  287. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +2 -2
  288. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  289. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +11 -7
  290. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
  291. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +11 -7
  292. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  293. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +16 -9
  294. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -1
  295. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +40 -90
  296. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
  297. package/src/engine/physics/narrowphase/capsule_contacts.js +3 -5
  298. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
  299. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +2 -14
  300. package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -1
  301. package/src/engine/physics/narrowphase/hull_sphere_contact.js +2 -5
  302. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
  303. package/src/engine/physics/narrowphase/narrowphase_step.js +13 -32
  304. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
  305. package/src/engine/physics/narrowphase/sphere_box_contact.js +2 -5
  306. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
  307. package/src/engine/sound/ecs/audio/AudioEmitter.js +12 -7
  308. package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts.map +1 -1
  309. package/src/engine/sound/ecs/trigger/AudioEventTrigger.js +192 -191
  310. package/src/engine/sound/simulation/core/AcousticMedium.js +2 -2
  311. package/src/engine/sound/simulation/definition/AcousticDirectivity.js +2 -2
  312. package/src/engine/sound/simulation/definition/AcousticMaterial.d.ts.map +1 -1
  313. package/src/engine/sound/simulation/definition/AcousticMaterial.js +11 -7
  314. package/src/engine/sound/sopra/definition/BusDefinition.d.ts.map +1 -1
  315. package/src/engine/sound/sopra/definition/BusDefinition.js +5 -4
  316. package/src/engine/sound/sopra/definition/DuckingRule.d.ts.map +1 -1
  317. package/src/engine/sound/sopra/definition/DuckingRule.js +7 -5
  318. package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -1
  319. package/src/engine/sound/sopra/definition/EventDescription.js +23 -13
  320. package/src/engine/sound/sopra/definition/MixerSnapshot.js +2 -2
  321. package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts.map +1 -1
  322. package/src/engine/sound/sopra/definition/ParameterDefinition.js +7 -5
  323. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +2 -2
  324. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts.map +1 -1
  325. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +4 -3
  326. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +2 -2
  327. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +3 -3
  328. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts.map +1 -1
  329. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +16 -9
  330. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.js +2 -2
  331. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +1 -1
  332. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -1
  333. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +2 -2
  334. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -1
  335. package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +7 -5
  336. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -1
  337. package/src/engine/sound/sopra/definition/effect/EqEffect.js +8 -5
  338. package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +2 -2
  339. package/src/engine/sound/sopra/legacy/SoundEmitter.d.ts.map +1 -1
  340. package/src/engine/sound/sopra/legacy/SoundEmitter.js +357 -352
  341. package/src/engine/sound/sopra/legacy/SoundTrack.d.ts.map +1 -1
  342. package/src/engine/sound/sopra/legacy/SoundTrack.js +281 -278
  343. package/src/format/image/png/PNGReader.js +644 -644
  344. package/src/format/image/png/crc32.d.ts +1 -1
  345. package/src/format/image/png/crc32.js +7 -8
  346. package/src/format/texture/basis/transcode/etc1s_to_astc.d.ts.map +1 -1
  347. package/src/format/texture/basis/transcode/etc1s_to_astc.js +2 -1
  348. package/src/shade/descriptor/binding/BindGroupLayoutDescriptor.js +2 -2
  349. package/src/shade/descriptor/binding/BindGroupLayoutEntry.d.ts.map +1 -1
  350. package/src/shade/descriptor/binding/BindGroupLayoutEntry.js +12 -8
  351. package/src/shade/descriptor/binding/StorageTextureBindingLayout.js +2 -2
  352. package/src/shade/descriptor/binding/TextureBindingLayout.js +2 -2
  353. package/src/shade/descriptor/blend/BlendComponent.js +2 -2
  354. package/src/shade/descriptor/pipeline/PipelineDescriptorBase.js +2 -2
  355. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +2 -2
  356. package/src/shade/descriptor/pipeline/ProgrammableStage.js +2 -2
  357. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +2 -2
  358. package/src/shade/descriptor/pipeline/render/ColorTargetState.js +2 -2
  359. package/src/shade/descriptor/pipeline/render/FragmentState.js +2 -2
  360. package/src/shade/descriptor/pipeline/render/PrimitiveState.js +2 -2
  361. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
  362. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +8 -5
  363. package/src/shade/descriptor/pipeline/render/VertexAttribute.js +2 -2
  364. package/src/shade/descriptor/texture/SamplerDescriptor.d.ts.map +1 -1
  365. package/src/shade/descriptor/texture/SamplerDescriptor.js +20 -12
  366. package/src/shade/descriptor/texture/TextureDescriptor.d.ts.map +1 -1
  367. package/src/shade/descriptor/texture/TextureDescriptor.js +11 -7
  368. package/src/shade/device/graph/BufferResourceDescriptor.d.ts.map +1 -1
  369. package/src/shade/device/graph/BufferResourceDescriptor.js +196 -193
  370. package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
  371. package/src/shade/device/graph/TextureResourceDescriptor.js +178 -173
  372. package/src/shade/device/timing/profile/sgpt_read_header.js +1 -1
  373. package/src/shade/device/timing/profile/sgpt_read_records.js +1 -1
  374. package/src/shade/device/timing/profile/sgpt_write_header.js +1 -1
  375. package/src/shade/device/timing/profile/sgpt_write_record.js +1 -1
  376. package/src/shade/playground/image_decode_bench/main.js +2 -1
  377. package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.d.ts.map +1 -1
  378. package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js +2 -1
  379. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
  380. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +2 -1
  381. package/src/shade/playground/ssr_variance/statistics.d.ts.map +1 -1
  382. package/src/shade/playground/ssr_variance/statistics.js +2 -1
  383. package/src/shade/playground/texture_encode/main.d.ts.map +1 -1
  384. package/src/shade/playground/texture_encode/main.js +2 -1
  385. package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -1
  386. package/src/shade/playground/volumetrics_froxel/measure.js +2 -1
  387. package/src/shade/renderer/binding/BufferBinding.js +2 -2
  388. package/src/shade/renderer/buffer/table/gpu_database_check_links.d.ts.map +1 -1
  389. package/src/shade/renderer/buffer/table/gpu_database_check_links.js +2 -1
  390. package/src/shade/renderer/camera/Camera.js +2 -2
  391. package/src/shade/renderer/geometry/Attribute.js +2 -2
  392. package/src/shade/renderer/geometry/Geometry.js +2 -2
  393. package/src/shade/renderer/geometry/geometry_deduplicate_vertices.js +2 -2
  394. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +2 -2
  395. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -1
  396. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +3 -2
  397. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -1
  398. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +2 -1
  399. package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts.map +1 -1
  400. package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js +2 -1
  401. package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts.map +1 -1
  402. package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js +2 -1
  403. package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts.map +1 -1
  404. package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js +3 -2
  405. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -1
  406. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.js +2 -1
  407. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -1
  408. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +2 -1
  409. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_asset_id.js +13 -13
  410. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_directory_block_checksum.js +41 -41
  411. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_frame_checksum.js +41 -41
  412. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_header_checksum.js +25 -25
  413. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
  414. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +3 -2
  415. package/src/shade/renderer/material/StandardShadeMaterial.d.ts.map +1 -1
  416. package/src/shade/renderer/material/StandardShadeMaterial.js +13 -8
  417. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -1
  418. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +3 -2
  419. package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.d.ts.map +1 -1
  420. package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.js +14 -5
  421. package/src/shade/renderer/scene/optimization/sampler2d_from_image_bitmap.js +1 -1
  422. package/src/shade/renderer/shader/type/WGSLStructField.js +2 -2
  423. package/src/shade/renderer/shader/type/WebGPUArray.js +2 -2
  424. package/src/shade/renderer/shader/type/WebGPUStruct.d.ts.map +1 -1
  425. package/src/shade/renderer/shader/type/WebGPUStruct.js +9 -6
  426. package/src/shade/renderer/texture/ShadeTexture.d.ts.map +1 -1
  427. package/src/shade/renderer/texture/ShadeTexture.js +17 -10
  428. package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +2 -2
  429. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +4 -4
  430. package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +6 -6
  431. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
  432. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +46 -55
  433. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +3 -3
  434. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -1
  435. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +14 -4
  436. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +10 -1
  437. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -1
  438. package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +82 -40
  439. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +4 -1
  440. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  441. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +8 -4
  442. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +98 -86
  443. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -1
  444. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +440 -298
  445. package/src/view/common/HTMLElementCacheKey.d.ts.map +1 -1
  446. package/src/view/common/HTMLElementCacheKey.js +4 -3
  447. package/src/view/minimap/MinimapMarker.js +2 -2
@@ -0,0 +1,66 @@
1
+ import { assert } from "../../../assert.js";
2
+
3
+ /**
4
+ * Limit a rotation's angle: `out` turns about the same axis as `q` by `min(θ, max_angle)`, exactly.
5
+ *
6
+ * The rotation is read as an axis and an angle and the angle is replaced, so the answer is the
7
+ * limit itself and not an approximation of it. The alternative it exists to replace — nlerp from
8
+ * the identity towards `q` by `max_angle / θ` — follows the chord rather than the arc and
9
+ * undershoots more the larger `θ` is: at `θ = π` asked for `π/4` it turns `0.64` rad, not `0.785`.
10
+ *
11
+ * `q` and `-q` name the same rotation; the angle is measured on the one with `w ≥ 0`, so `θ` is
12
+ * the shorter turn, in `[0, π]`. A rotation within the limit is passed through unchanged, sign
13
+ * included; one beyond it is written with `w ≥ 0`. The identity (no axis) is within any limit.
14
+ *
15
+ * Sign convention: `(x, y, z, w)` — `w` last, matching {@link Quaternion} and the rest of the
16
+ * `core/geom/3d/quaternion/` family.
17
+ *
18
+ * `out` may be `q`: every component is read before the first write.
19
+ *
20
+ * **Precondition: `q` is a unit quaternion.** The angle is `2·atan2(|v|, w)`, which does not care,
21
+ * but a limited rotation is written unit and an unlimited one as it came.
22
+ *
23
+ * @param {number[]|Float32Array|Float64Array} out
24
+ * @param {number} out_offset receives 4 floats (x, y, z, w)
25
+ * @param {number[]|Float32Array|Float64Array} q `[x, y, z, w]`
26
+ * @param {number} q_offset
27
+ * @param {number} max_angle radians, `≥ 0`
28
+ */
29
+ export function quat3_clamp_angle_array(out, out_offset, q, q_offset, max_angle) {
30
+ assert.isNumber(max_angle, 'max_angle');
31
+ assert.greaterThanOrEqual(max_angle, 0, 'max_angle must be non-negative');
32
+
33
+ let x = q[q_offset], y = q[q_offset + 1], z = q[q_offset + 2], w = q[q_offset + 3];
34
+
35
+ const pass_x = x, pass_y = y, pass_z = z, pass_w = w;
36
+
37
+ if (w < 0) {
38
+ x = -x;
39
+ y = -y;
40
+ z = -z;
41
+ w = -w;
42
+ }
43
+
44
+ const sin_half = Math.sqrt(x * x + y * y + z * z);
45
+
46
+ // atan2 rather than acos(w): accurate near the identity, where acos loses half the digits
47
+ const angle = 2 * Math.atan2(sin_half, w);
48
+
49
+ if (angle <= max_angle) {
50
+ out[out_offset] = pass_x;
51
+ out[out_offset + 1] = pass_y;
52
+ out[out_offset + 2] = pass_z;
53
+ out[out_offset + 3] = pass_w;
54
+
55
+ return;
56
+ }
57
+
58
+ // sin_half > 0 here: a zero vector part has angle 0, within any limit
59
+ const half = max_angle * 0.5;
60
+ const k = Math.sin(half) / sin_half;
61
+
62
+ out[out_offset] = x * k;
63
+ out[out_offset + 1] = y * k;
64
+ out[out_offset + 2] = z * k;
65
+ out[out_offset + 3] = Math.cos(half);
66
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Hamilton product with the left operand conjugated, `out = a* ⊗ b`, both read from arrays.
3
+ *
4
+ * For unit quaternions the conjugate is the inverse, so this is `a⁻¹ ⊗ b`: the rotation `b` expressed
5
+ * in the frame `a` rotates into — a world orientation written in a parent's or a body's frame. Callers
6
+ * used to build `a*` in a scratch array and hand it to {@link quat3_multiply_array}; the conjugate's
7
+ * signs are folded into the product here instead, so there is no scratch and no extra pass.
8
+ *
9
+ * Sign convention: `(x, y, z, w)` — `w` last, matching {@link Quaternion} and the rest of the
10
+ * `core/geom/3d/quaternion/` family.
11
+ *
12
+ * `out` may be `a` or `b`: all eight components are read before the first write.
13
+ *
14
+ * @param {number[]|Float32Array|Float64Array} out
15
+ * @param {number} out_offset offset into `out`; receives 4 floats (x, y, z, w)
16
+ * @param {number[]|Float32Array|Float64Array} a `[x, y, z, w]`, the operand that is conjugated
17
+ * @param {number} a_offset
18
+ * @param {number[]|Float32Array|Float64Array} b `[x, y, z, w]`
19
+ * @param {number} b_offset
20
+ */
21
+ export function quat3_multiply_conjugate_left_array(out: number[] | Float32Array | Float64Array, out_offset: number, a: number[] | Float32Array | Float64Array, a_offset: number, b: number[] | Float32Array | Float64Array, b_offset: number): void;
22
+ //# sourceMappingURL=quat3_multiply_conjugate_left_array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quat3_multiply_conjugate_left_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,yDAPW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,QAWhB"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Hamilton product with the left operand conjugated, `out = a* ⊗ b`, both read from arrays.
3
+ *
4
+ * For unit quaternions the conjugate is the inverse, so this is `a⁻¹ ⊗ b`: the rotation `b` expressed
5
+ * in the frame `a` rotates into — a world orientation written in a parent's or a body's frame. Callers
6
+ * used to build `a*` in a scratch array and hand it to {@link quat3_multiply_array}; the conjugate's
7
+ * signs are folded into the product here instead, so there is no scratch and no extra pass.
8
+ *
9
+ * Sign convention: `(x, y, z, w)` — `w` last, matching {@link Quaternion} and the rest of the
10
+ * `core/geom/3d/quaternion/` family.
11
+ *
12
+ * `out` may be `a` or `b`: all eight components are read before the first write.
13
+ *
14
+ * @param {number[]|Float32Array|Float64Array} out
15
+ * @param {number} out_offset offset into `out`; receives 4 floats (x, y, z, w)
16
+ * @param {number[]|Float32Array|Float64Array} a `[x, y, z, w]`, the operand that is conjugated
17
+ * @param {number} a_offset
18
+ * @param {number[]|Float32Array|Float64Array} b `[x, y, z, w]`
19
+ * @param {number} b_offset
20
+ */
21
+ export function quat3_multiply_conjugate_left_array(out, out_offset, a, a_offset, b, b_offset) {
22
+ const ax = a[a_offset], ay = a[a_offset + 1], az = a[a_offset + 2], aw = a[a_offset + 3];
23
+ const bx = b[b_offset], by = b[b_offset + 1], bz = b[b_offset + 2], bw = b[b_offset + 3];
24
+
25
+ // quat3_multiply with (ax, ay, az) negated
26
+ out[out_offset] = aw * bx - ax * bw - ay * bz + az * by;
27
+ out[out_offset + 1] = aw * by + ax * bz - ay * bw - az * bx;
28
+ out[out_offset + 2] = aw * bz - ax * by + ay * bx - az * bw;
29
+ out[out_offset + 3] = aw * bw + ax * bx + ay * by + az * bz;
30
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Hamilton product with the right operand conjugated, `out = a ⊗ b*`, both read from arrays.
3
+ *
4
+ * For unit quaternions the conjugate is the inverse, so this is `a ⊗ b⁻¹`: the world-frame rotation
5
+ * that takes orientation `b` to orientation `a` — the turn a holder made since a hold began, the
6
+ * rotation a body must make to reach a target. Callers used to build `b*` in a scratch array, or pass
7
+ * its components negated, to {@link quat3_multiply_array}; the conjugate's signs are folded into the
8
+ * product here instead.
9
+ *
10
+ * Sign convention: `(x, y, z, w)` — `w` last, matching {@link Quaternion} and the rest of the
11
+ * `core/geom/3d/quaternion/` family.
12
+ *
13
+ * `out` may be `a` or `b`: all eight components are read before the first write.
14
+ *
15
+ * @param {number[]|Float32Array|Float64Array} out
16
+ * @param {number} out_offset offset into `out`; receives 4 floats (x, y, z, w)
17
+ * @param {number[]|Float32Array|Float64Array} a `[x, y, z, w]`
18
+ * @param {number} a_offset
19
+ * @param {number[]|Float32Array|Float64Array} b `[x, y, z, w]`, the operand that is conjugated
20
+ * @param {number} b_offset
21
+ */
22
+ export function quat3_multiply_conjugate_right_array(out: number[] | Float32Array | Float64Array, out_offset: number, a: number[] | Float32Array | Float64Array, a_offset: number, b: number[] | Float32Array | Float64Array, b_offset: number): void;
23
+ //# sourceMappingURL=quat3_multiply_conjugate_right_array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quat3_multiply_conjugate_right_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,0DAPW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,QAWhB"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Hamilton product with the right operand conjugated, `out = a ⊗ b*`, both read from arrays.
3
+ *
4
+ * For unit quaternions the conjugate is the inverse, so this is `a ⊗ b⁻¹`: the world-frame rotation
5
+ * that takes orientation `b` to orientation `a` — the turn a holder made since a hold began, the
6
+ * rotation a body must make to reach a target. Callers used to build `b*` in a scratch array, or pass
7
+ * its components negated, to {@link quat3_multiply_array}; the conjugate's signs are folded into the
8
+ * product here instead.
9
+ *
10
+ * Sign convention: `(x, y, z, w)` — `w` last, matching {@link Quaternion} and the rest of the
11
+ * `core/geom/3d/quaternion/` family.
12
+ *
13
+ * `out` may be `a` or `b`: all eight components are read before the first write.
14
+ *
15
+ * @param {number[]|Float32Array|Float64Array} out
16
+ * @param {number} out_offset offset into `out`; receives 4 floats (x, y, z, w)
17
+ * @param {number[]|Float32Array|Float64Array} a `[x, y, z, w]`
18
+ * @param {number} a_offset
19
+ * @param {number[]|Float32Array|Float64Array} b `[x, y, z, w]`, the operand that is conjugated
20
+ * @param {number} b_offset
21
+ */
22
+ export function quat3_multiply_conjugate_right_array(out, out_offset, a, a_offset, b, b_offset) {
23
+ const ax = a[a_offset], ay = a[a_offset + 1], az = a[a_offset + 2], aw = a[a_offset + 3];
24
+ const bx = b[b_offset], by = b[b_offset + 1], bz = b[b_offset + 2], bw = b[b_offset + 3];
25
+
26
+ // quat3_multiply with (bx, by, bz) negated
27
+ out[out_offset] = ax * bw - aw * bx - ay * bz + az * by;
28
+ out[out_offset + 1] = ay * bw - aw * by + ax * bz - az * bx;
29
+ out[out_offset + 2] = az * bw - aw * bz - ax * by + ay * bx;
30
+ out[out_offset + 3] = aw * bw + ax * bx + ay * by + az * bz;
31
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The face normal of triangle `abc`, NOT normalised: the raw cross product `(c − b) × (a − b)`, whose
3
+ * magnitude is twice the triangle's area and whose direction follows the counter-clockwise winding
4
+ * `a → b → c`, the same winding {@link tri3_compute_normal} uses.
5
+ *
6
+ * The magnitude is the point. A pass that accumulates one normal per incident face and normalises at
7
+ * the end wants each face to pull in proportion to how much surface it is, so that a sliver beside a
8
+ * large face hardly moves the result and retriangulating the same surface does not change it. A
9
+ * triangle with no area contributes a zero vector, which is the right vote for nothing, where a
10
+ * normalising helper has to invent some unit vector.
11
+ *
12
+ * Each corner is its own array and offset, so corners may live in one shared position buffer
13
+ * (`positions, index * 3`) or anywhere else. `out` may alias any of them.
14
+ *
15
+ * @param {number[]|Float32Array|Float64Array} out
16
+ * @param {number} out_offset
17
+ * @param {number[]|Float32Array|Float64Array} a
18
+ * @param {number} a_offset
19
+ * @param {number[]|Float32Array|Float64Array} b
20
+ * @param {number} b_offset
21
+ * @param {number[]|Float32Array|Float64Array} c
22
+ * @param {number} c_offset
23
+ * @returns {void}
24
+ */
25
+ export function tri3_compute_normal_area_weighted_array(out: number[] | Float32Array | Float64Array, out_offset: number, a: number[] | Float32Array | Float64Array, a_offset: number, b: number[] | Float32Array | Float64Array, b_offset: number, c: number[] | Float32Array | Float64Array, c_offset: number): void;
26
+ //# sourceMappingURL=tri3_compute_normal_area_weighted_array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tri3_compute_normal_area_weighted_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,6DAVW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,GACJ,IAAI,CAuBhB"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * The face normal of triangle `abc`, NOT normalised: the raw cross product `(c − b) × (a − b)`, whose
3
+ * magnitude is twice the triangle's area and whose direction follows the counter-clockwise winding
4
+ * `a → b → c`, the same winding {@link tri3_compute_normal} uses.
5
+ *
6
+ * The magnitude is the point. A pass that accumulates one normal per incident face and normalises at
7
+ * the end wants each face to pull in proportion to how much surface it is, so that a sliver beside a
8
+ * large face hardly moves the result and retriangulating the same surface does not change it. A
9
+ * triangle with no area contributes a zero vector, which is the right vote for nothing, where a
10
+ * normalising helper has to invent some unit vector.
11
+ *
12
+ * Each corner is its own array and offset, so corners may live in one shared position buffer
13
+ * (`positions, index * 3`) or anywhere else. `out` may alias any of them.
14
+ *
15
+ * @param {number[]|Float32Array|Float64Array} out
16
+ * @param {number} out_offset
17
+ * @param {number[]|Float32Array|Float64Array} a
18
+ * @param {number} a_offset
19
+ * @param {number[]|Float32Array|Float64Array} b
20
+ * @param {number} b_offset
21
+ * @param {number[]|Float32Array|Float64Array} c
22
+ * @param {number} c_offset
23
+ * @returns {void}
24
+ */
25
+ export function tri3_compute_normal_area_weighted_array(
26
+ out, out_offset,
27
+ a, a_offset,
28
+ b, b_offset,
29
+ c, c_offset
30
+ ) {
31
+ const bx = b[b_offset];
32
+ const by = b[b_offset + 1];
33
+ const bz = b[b_offset + 2];
34
+
35
+ const cb_x = c[c_offset] - bx;
36
+ const cb_y = c[c_offset + 1] - by;
37
+ const cb_z = c[c_offset + 2] - bz;
38
+
39
+ const ab_x = a[a_offset] - bx;
40
+ const ab_y = a[a_offset + 1] - by;
41
+ const ab_z = a[a_offset + 2] - bz;
42
+
43
+ out[out_offset] = cb_y * ab_z - cb_z * ab_y;
44
+ out[out_offset + 1] = cb_z * ab_x - cb_x * ab_z;
45
+ out[out_offset + 2] = cb_x * ab_y - cb_y * ab_x;
46
+ }
@@ -1,5 +1,5 @@
1
1
  import { assert } from "../assert.js";
2
- import { combine_hash } from "../collection/array/combine_hash.js";
2
+ import { hash_mix2 } from "../math/hash/hash_mix2.js";
3
3
  import { EPSILON } from "../math/EPSILON.js";
4
4
  import { epsilonEquals } from "../math/epsilonEquals.js";
5
5
  import { PI2 } from "../math/PI2.js";
@@ -90,7 +90,7 @@ export class ConicRay {
90
90
  * @return {number}
91
91
  */
92
92
  hash() {
93
- return combine_hash(
93
+ return hash_mix2(
94
94
  computeHashFloat(this.angle),
95
95
  this.direction.hash()
96
96
  );
@@ -1 +1 @@
1
- {"version":3,"file":"Vector4.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Vector4.js"],"names":[],"mappings":"AAMA;;;GAGG;AAGH;;GAEG;AACH;;;;;;;;;;;;;GAaG;AACH,8DAFwB,MAAM;IAuc1B;;;;;;OAMG;IACH,gBALW,OAAO,MACP,OAAO,qBAEP,OAAO,QASjB;IApbD;;;;OAIG;IACH,uDAEC;IArCD;;;;;;;;OAQG;IACH,gBAPW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,EAuBhB;IAXG,UAAW;IACX,UAAW;IACX,UAAW;IACX,UAAW;IAEX;;;;OAIG;IACH,wBAA6B;IAoBjC;;;OAGG;IACH,iBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,iBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,iBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,iBAEC;IAdD;;;OAGG;IACH,gBAEC;IAUD;;;;OAIG;IACH,qBAHW,MAAM,EAAE,WACR,MAAM,QAShB;IAED;;;;OAIG;IACH,oBAHW,MAAM,EAAE,WACR,MAAM,QAOhB;IAED;;;;;;;OAOG;IACH,iDAFa,OAAO,CAkCnB;IAED;;;OAGG;IACH,oBAFW,OAAO,QAQjB;IAED;;;;OAIG;IACH,+BAFa,OAAO,CAOnB;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,kBAlBW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,OAAO,CAoBnB;IAED;;;;OAIG;IACH,WAHW,OAAO,GACL,MAAM,CAIlB;IAED;;;;OAIG;IACH,SAHW,OAAO,GAAC,OAAO,GACb,OAAO,CASnB;IAED;;;;;;;OAOG;IACH,QANW,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,GACJ,IAAI,CAShB;IAED;;;;;OAKG;IACH,iBAJW,OAAO,SACP,MAAM,GACJ,IAAI,CAShB;IAED;;;;OAIG;IACH,qBAHW;QAAC,QAAQ,EAAE,MAAM,EAAE,GAAC,YAAY,CAAA;KAAC,GAC/B,OAAO,CAInB;IAED;;;;OAIG;IACH,gBAHW,MAAM,EAAE,GAAC,YAAY,GACpB,OAAO,CASlB;IAED;;;;OAIG;IACH,WAHW,OAAO,GACL,OAAO,CAInB;IAED;;;OAGG;IACH,SAFa,OAAO,CAQnB;IAED;;;OAGG;IACH,mBAFW,UAAU,QAyBpB;IAED;;;;OAIG;IACH,aAHW,OAAO,GACL,OAAO,CAInB;IAED;;;OAGG;IACH,QAFY,MAAM,CASjB;IAED;;;;OAIG;IACH,gBAJW,OAAO,MACP,OAAO,mBAKjB;IAGD;;OAEG;IACH,WAFa,MAAM,EAAE,CAQpB;IAED;;;;OAIG;IACH,mBAHW,MAAM,EAAE,UACR,MAAM,QAIhB;IAED;;;;;MAOC;IAED,0BAEC;IAED;;;OAGG;IACH,uBAFW,YAAY,QAOtB;IAED;;;OAGG;IACH,yBAFW,YAAY,QAStB;IAmBL;;;OAGG;IACH,oBAFU,OAAO,CAEU;IAE3B,mBAlXe,MAAM,EAAE,WACR,MAAM,UAiXM;IAC3B,iBArWe,MAAM,EAAE,WACR,MAAM,UAoWI;CATxB;;kBAaS,MAAM;;;yBAvfH,OAAO,iBAAiB,EAAE,UAAU;sBACpC,OAAO,cAAc,EAAE,OAAO;2BAK9B,OAAO,2BAA2B,EAAE,YAAY"}
1
+ {"version":3,"file":"Vector4.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Vector4.js"],"names":[],"mappings":"AAOA;;;GAGG;AAGH;;GAEG;AACH;;;;;;;;;;;;;GAaG;AACH,8DAFwB,MAAM;IAyc1B;;;;;;OAMG;IACH,gBALW,OAAO,MACP,OAAO,qBAEP,OAAO,QASjB;IAtbD;;;;OAIG;IACH,uDAEC;IArCD;;;;;;;;OAQG;IACH,gBAPW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,EAuBhB;IAXG,UAAW;IACX,UAAW;IACX,UAAW;IACX,UAAW;IAEX;;;;OAIG;IACH,wBAA6B;IAoBjC;;;OAGG;IACH,iBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,iBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,iBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,iBAEC;IAdD;;;OAGG;IACH,gBAEC;IAUD;;;;OAIG;IACH,qBAHW,MAAM,EAAE,WACR,MAAM,QAShB;IAED;;;;OAIG;IACH,oBAHW,MAAM,EAAE,WACR,MAAM,QAOhB;IAED;;;;;;;OAOG;IACH,iDAFa,OAAO,CAkCnB;IAED;;;OAGG;IACH,oBAFW,OAAO,QAQjB;IAED;;;;OAIG;IACH,+BAFa,OAAO,CAOnB;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,kBAlBW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,OAAO,CAoBnB;IAED;;;;OAIG;IACH,WAHW,OAAO,GACL,MAAM,CAIlB;IAED;;;;OAIG;IACH,SAHW,OAAO,GAAC,OAAO,GACb,OAAO,CASnB;IAED;;;;;;;OAOG;IACH,QANW,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,GACJ,IAAI,CAShB;IAED;;;;;OAKG;IACH,iBAJW,OAAO,SACP,MAAM,GACJ,IAAI,CAShB;IAED;;;;OAIG;IACH,qBAHW;QAAC,QAAQ,EAAE,MAAM,EAAE,GAAC,YAAY,CAAA;KAAC,GAC/B,OAAO,CAInB;IAED;;;;OAIG;IACH,gBAHW,MAAM,EAAE,GAAC,YAAY,GACpB,OAAO,CASlB;IAED;;;;OAIG;IACH,WAHW,OAAO,GACL,OAAO,CAInB;IAED;;;OAGG;IACH,SAFa,OAAO,CAQnB;IAED;;;OAGG;IACH,mBAFW,UAAU,QAyBpB;IAED;;;;OAIG;IACH,aAHW,OAAO,GACL,OAAO,CAInB;IAED;;;OAGG;IACH,QAFY,MAAM,CAWjB;IAED;;;;OAIG;IACH,gBAJW,OAAO,MACP,OAAO,mBAKjB;IAGD;;OAEG;IACH,WAFa,MAAM,EAAE,CAQpB;IAED;;;;OAIG;IACH,mBAHW,MAAM,EAAE,UACR,MAAM,QAIhB;IAED;;;;;MAOC;IAED,0BAEC;IAED;;;OAGG;IACH,uBAFW,YAAY,QAOtB;IAED;;;OAGG;IACH,yBAFW,YAAY,QAStB;IAmBL;;;OAGG;IACH,oBAFU,OAAO,CAEU;IAE3B,mBApXe,MAAM,EAAE,WACR,MAAM,UAmXM;IAC3B,iBAvWe,MAAM,EAAE,WACR,MAAM,UAsWI;CATxB;;kBAaS,MAAM;;;yBAzfH,OAAO,iBAAiB,EAAE,UAAU;sBACpC,OAAO,cAAc,EAAE,OAAO;2BAK9B,OAAO,2BAA2B,EAAE,YAAY"}
@@ -1,5 +1,6 @@
1
1
  import { assert } from "../assert.js";
2
- import { combine_hash } from "../collection/array/combine_hash.js";
2
+ import { hash_mix2 } from "../math/hash/hash_mix2.js";
3
+ import { hash_mix3 } from "../math/hash/hash_mix3.js";
3
4
  import { Signal } from "../events/signal/Signal.js";
4
5
  import { lerp } from "../math/lerp.js";
5
6
  import { computeHashFloat } from "../primitives/numbers/computeHashFloat.js";
@@ -405,10 +406,12 @@ export class Vector4 extends Float64Array {
405
406
  * @return {number}
406
407
  */
407
408
  hash() {
408
- return combine_hash(
409
- computeHashFloat(this[0]),
410
- computeHashFloat(this[1]),
411
- computeHashFloat(this[2]),
409
+ return hash_mix2(
410
+ hash_mix3(
411
+ computeHashFloat(this[0]),
412
+ computeHashFloat(this[1]),
413
+ computeHashFloat(this[2])
414
+ ),
412
415
  computeHashFloat(this[3])
413
416
  );
414
417
  }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Euclidean distance between two 3-vectors stored in arrays.
3
+ *
4
+ * @param {number[]|Float32Array|Float64Array} a
5
+ * @param {number} a_offset
6
+ * @param {number[]|Float32Array|Float64Array} b
7
+ * @param {number} b_offset
8
+ * @returns {number}
9
+ */
10
+ export function v3_distance_array(a: number[] | Float32Array | Float64Array, a_offset: number, b: number[] | Float32Array | Float64Array, b_offset: number): number;
11
+ //# sourceMappingURL=v3_distance_array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3_distance_array.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_distance_array.js"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,qCANW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,GACJ,MAAM,CAWlB"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Euclidean distance between two 3-vectors stored in arrays.
3
+ *
4
+ * @param {number[]|Float32Array|Float64Array} a
5
+ * @param {number} a_offset
6
+ * @param {number[]|Float32Array|Float64Array} b
7
+ * @param {number} b_offset
8
+ * @returns {number}
9
+ */
10
+ export function v3_distance_array(
11
+ a, a_offset,
12
+ b, b_offset
13
+ ) {
14
+ const dx = b[b_offset] - a[a_offset];
15
+ const dy = b[b_offset + 1] - a[a_offset + 1];
16
+ const dz = b[b_offset + 2] - a[a_offset + 2];
17
+
18
+ return Math.sqrt(dx * dx + dy * dy + dz * dz);
19
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Normalise a vector, reporting whether it had a direction to normalise.
3
+ *
4
+ * Unlike {@link v3_normalize_array}, which passes a zero vector through and scales anything else, a
5
+ * vector whose squared length is below `epsilon_sqr` is refused: `false` is returned and `output` is
6
+ * not written at all, so with `output === input` the vector is left as it was. A vector that short
7
+ * has a direction made of rounding, and a caller that builds a rotation from it wants to know.
8
+ *
9
+ * So is a vector with no finite squared length — a NaN component, an infinite one, or one so long
10
+ * its square overflows — since none of those leaves a unit vector to write.
11
+ *
12
+ * `output` may alias `input`.
13
+ *
14
+ * @param {number[]|Float32Array|Float64Array} output
15
+ * @param {number} output_offset
16
+ * @param {number[]|Float32Array|Float64Array} input
17
+ * @param {number} input_offset
18
+ * @param {number} epsilon_sqr squared length below which the vector has no direction; positive, since at
19
+ * zero a zero vector would pass and normalise to NaN
20
+ * @returns {boolean} true when `output` received the unit vector, false when it was not written
21
+ */
22
+ export function v3_normalize_array_checked(output: number[] | Float32Array | Float64Array, output_offset: number, input: number[] | Float32Array | Float64Array, input_offset: number, epsilon_sqr: number): boolean;
23
+ //# sourceMappingURL=v3_normalize_array_checked.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3_normalize_array_checked.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_normalize_array_checked.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,mDARW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,gBAClC,MAAM,eACN,MAAM,GAEJ,OAAO,CA2BnB"}
@@ -0,0 +1,49 @@
1
+ import { assert } from "../../assert.js";
2
+
3
+ /**
4
+ * Normalise a vector, reporting whether it had a direction to normalise.
5
+ *
6
+ * Unlike {@link v3_normalize_array}, which passes a zero vector through and scales anything else, a
7
+ * vector whose squared length is below `epsilon_sqr` is refused: `false` is returned and `output` is
8
+ * not written at all, so with `output === input` the vector is left as it was. A vector that short
9
+ * has a direction made of rounding, and a caller that builds a rotation from it wants to know.
10
+ *
11
+ * So is a vector with no finite squared length — a NaN component, an infinite one, or one so long
12
+ * its square overflows — since none of those leaves a unit vector to write.
13
+ *
14
+ * `output` may alias `input`.
15
+ *
16
+ * @param {number[]|Float32Array|Float64Array} output
17
+ * @param {number} output_offset
18
+ * @param {number[]|Float32Array|Float64Array} input
19
+ * @param {number} input_offset
20
+ * @param {number} epsilon_sqr squared length below which the vector has no direction; positive, since at
21
+ * zero a zero vector would pass and normalise to NaN
22
+ * @returns {boolean} true when `output` received the unit vector, false when it was not written
23
+ */
24
+ export function v3_normalize_array_checked(
25
+ output, output_offset,
26
+ input, input_offset,
27
+ epsilon_sqr
28
+ ) {
29
+ assert.greaterThan(epsilon_sqr, 0, 'epsilon_sqr');
30
+
31
+ const x = input[input_offset];
32
+ const y = input[input_offset + 1];
33
+ const z = input[input_offset + 2];
34
+
35
+ const length_sqr = x * x + y * y + z * z;
36
+
37
+ // Written so that NaN, which fails every comparison, lands on the refusing side.
38
+ if (!(length_sqr >= epsilon_sqr && length_sqr < Infinity)) {
39
+ return false;
40
+ }
41
+
42
+ const inverse = 1 / Math.sqrt(length_sqr);
43
+
44
+ output[output_offset] = x * inverse;
45
+ output[output_offset + 1] = y * inverse;
46
+ output[output_offset + 2] = z * inverse;
47
+
48
+ return true;
49
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Vector rejection: the part of `v` square to the unit vector `n`, `v − (v·n) n`. Equivalently, `v`
3
+ * projected onto the plane through the origin whose normal is `n`.
4
+ *
5
+ * `n` must be of unit length; nothing here normalises it. `output` may alias `input` or `normal`.
6
+ *
7
+ * @param {number[]|Float32Array|Float64Array} output
8
+ * @param {number} output_offset
9
+ * @param {number[]|Float32Array|Float64Array} input `v`
10
+ * @param {number} input_offset
11
+ * @param {number[]|Float32Array|Float64Array} normal `n`, unit length
12
+ * @param {number} normal_offset
13
+ */
14
+ export function v3_reject_array(output: number[] | Float32Array | Float64Array, output_offset: number, input: number[] | Float32Array | Float64Array, input_offset: number, normal: number[] | Float32Array | Float64Array, normal_offset: number): void;
15
+ //# sourceMappingURL=v3_reject_array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3_reject_array.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_reject_array.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wCAPW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,gBAClC,MAAM,UACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,QAoBhB"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Vector rejection: the part of `v` square to the unit vector `n`, `v − (v·n) n`. Equivalently, `v`
3
+ * projected onto the plane through the origin whose normal is `n`.
4
+ *
5
+ * `n` must be of unit length; nothing here normalises it. `output` may alias `input` or `normal`.
6
+ *
7
+ * @param {number[]|Float32Array|Float64Array} output
8
+ * @param {number} output_offset
9
+ * @param {number[]|Float32Array|Float64Array} input `v`
10
+ * @param {number} input_offset
11
+ * @param {number[]|Float32Array|Float64Array} normal `n`, unit length
12
+ * @param {number} normal_offset
13
+ */
14
+ export function v3_reject_array(
15
+ output, output_offset,
16
+ input, input_offset,
17
+ normal, normal_offset
18
+ ) {
19
+ const x = input[input_offset];
20
+ const y = input[input_offset + 1];
21
+ const z = input[input_offset + 2];
22
+
23
+ const nx = normal[normal_offset];
24
+ const ny = normal[normal_offset + 1];
25
+ const nz = normal[normal_offset + 2];
26
+
27
+ const d = x * nx + y * ny + z * nz;
28
+
29
+ output[output_offset] = x - d * nx;
30
+ output[output_offset + 1] = y - d * ny;
31
+ output[output_offset + 2] = z - d * nz;
32
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Group the indices of a key array by key, as CSR: for every bucket `k`, the items
3
+ * `out_items[out_offset[k] .. out_offset[k + 1])` are the indices `i` with `keys[i] === k`, in ascending order.
4
+ *
5
+ * This is the counting sort behind every "which rows touch this vertex" table — count each key into
6
+ * `out_offset[k + 1]`, prefix-sum, then scatter each index through a per-bucket cursor. A key array with a
7
+ * fixed arity (two vertices per edge, three per triangle) is passed flat, and an item is then the flat index
8
+ * `element · arity + slot`; a caller that wants the element divides by the arity. Ascending order within a
9
+ * bucket is what makes the result a function of the keys alone, and what lets a consumer walking a bucket
10
+ * read its elements' tables forwards.
11
+ *
12
+ * A negative key is skipped: it is in no bucket and its index appears nowhere — the form a parent array takes
13
+ * at its roots.
14
+ *
15
+ * Allocation-free: `out_offset` itself is the scatter cursor. After the scatter every `out_offset[k]` has
16
+ * advanced to the start of bucket `k + 1`, so one shift down by a slot restores the starts.
17
+ *
18
+ * @param {Int32Array|Uint32Array|number[]} out_offset written whole, `bucket_count + 1` entries; the last is the
19
+ * number of items written
20
+ * @param {Int32Array|Uint32Array|number[]} out_items at least as long as the number of non-negative keys
21
+ * @param {ArrayLike<number>} keys bucket of each index, in `[0, bucket_count)`, or negative for none
22
+ * @param {number} key_count how many leading entries of `keys` to group
23
+ * @param {number} bucket_count
24
+ */
25
+ export function csr_build_incidence(out_offset: Int32Array | Uint32Array | number[], out_items: Int32Array | Uint32Array | number[], keys: ArrayLike<number>, key_count: number, bucket_count: number): void;
26
+ //# sourceMappingURL=csr_build_incidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csr_build_incidence.d.ts","sourceRoot":"","sources":["../../../../../src/core/graph/csr/csr_build_incidence.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,gDAPW,UAAU,GAAC,WAAW,GAAC,MAAM,EAAE,aAE/B,UAAU,GAAC,WAAW,GAAC,MAAM,EAAE,QAC/B,UAAU,MAAM,CAAC,aACjB,MAAM,gBACN,MAAM,QA8ChB"}
@@ -0,0 +1,71 @@
1
+ import { assert } from "../../assert.js";
2
+
3
+ /**
4
+ * Group the indices of a key array by key, as CSR: for every bucket `k`, the items
5
+ * `out_items[out_offset[k] .. out_offset[k + 1])` are the indices `i` with `keys[i] === k`, in ascending order.
6
+ *
7
+ * This is the counting sort behind every "which rows touch this vertex" table — count each key into
8
+ * `out_offset[k + 1]`, prefix-sum, then scatter each index through a per-bucket cursor. A key array with a
9
+ * fixed arity (two vertices per edge, three per triangle) is passed flat, and an item is then the flat index
10
+ * `element · arity + slot`; a caller that wants the element divides by the arity. Ascending order within a
11
+ * bucket is what makes the result a function of the keys alone, and what lets a consumer walking a bucket
12
+ * read its elements' tables forwards.
13
+ *
14
+ * A negative key is skipped: it is in no bucket and its index appears nowhere — the form a parent array takes
15
+ * at its roots.
16
+ *
17
+ * Allocation-free: `out_offset` itself is the scatter cursor. After the scatter every `out_offset[k]` has
18
+ * advanced to the start of bucket `k + 1`, so one shift down by a slot restores the starts.
19
+ *
20
+ * @param {Int32Array|Uint32Array|number[]} out_offset written whole, `bucket_count + 1` entries; the last is the
21
+ * number of items written
22
+ * @param {Int32Array|Uint32Array|number[]} out_items at least as long as the number of non-negative keys
23
+ * @param {ArrayLike<number>} keys bucket of each index, in `[0, bucket_count)`, or negative for none
24
+ * @param {number} key_count how many leading entries of `keys` to group
25
+ * @param {number} bucket_count
26
+ */
27
+ export function csr_build_incidence(out_offset, out_items, keys, key_count, bucket_count) {
28
+ assert.isNonNegativeInteger(key_count, 'key_count');
29
+ assert.isNonNegativeInteger(bucket_count, 'bucket_count');
30
+ assert.greaterThanOrEqual(out_offset.length, bucket_count + 1, 'out_offset shorter than bucket_count + 1');
31
+ assert.greaterThanOrEqual(keys.length, key_count, 'keys shorter than key_count');
32
+
33
+ for (let k = 0; k <= bucket_count; k++) {
34
+ out_offset[k] = 0;
35
+ }
36
+
37
+ for (let i = 0; i < key_count; i++) {
38
+ const key = keys[i];
39
+
40
+ if (key < 0) {
41
+ continue;
42
+ }
43
+
44
+ assert.lessThan(key, bucket_count, 'key out of range');
45
+
46
+ out_offset[key + 1]++;
47
+ }
48
+
49
+ for (let k = 0; k < bucket_count; k++) {
50
+ out_offset[k + 1] += out_offset[k];
51
+ }
52
+
53
+ assert.greaterThanOrEqual(out_items.length, out_offset[bucket_count], 'out_items shorter than the item count');
54
+
55
+ // `out_offset[k]` is bucket `k`'s write cursor; it ends at the start of bucket `k + 1`
56
+ for (let i = 0; i < key_count; i++) {
57
+ const key = keys[i];
58
+
59
+ if (key < 0) {
60
+ continue;
61
+ }
62
+
63
+ out_items[out_offset[key]++] = i;
64
+ }
65
+
66
+ for (let k = bucket_count; k > 0; k--) {
67
+ out_offset[k] = out_offset[k - 1];
68
+ }
69
+
70
+ out_offset[0] = 0;
71
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Greedy graph colouring over a CSR adjacency: visit the vertices in `order`, and give each the lowest colour
3
+ * none of its already-coloured neighbours holds.
4
+ *
5
+ * Greedy colouring is order-sensitive, and the order is the caller's — Welsh–Powell's largest-degree-first
6
+ * is the usual choice, and the reason it is a parameter rather than a policy. For a given order the result
7
+ * is fully determined: the order of neighbours within a row, and duplicate entries in a row, do not change
8
+ * it. A vertex's colour is at most its degree, so the colour count is at most the largest degree plus one.
9
+ *
10
+ * Works on the raw CSR arrays rather than a {@link CSRGraph}, so any row-pointer/column-index pair can be
11
+ * coloured without being copied into one; for a `CSRGraph` pass `graph.edge_addresses, graph.adjacency`.
12
+ * A self-loop is ignored, since a vertex is uncoloured while its own colour is being chosen.
13
+ *
14
+ * Allocation-free per call, beyond growing the module scratch to `vertex_count + 1`; not reentrant.
15
+ *
16
+ * @param {Uint32Array|Int32Array|number[]} out_colors colour of every vertex, written for `[0, vertex_count)`
17
+ * @param {Uint32Array|Int32Array|ArrayLike<number>} edge_addresses row offsets, `vertex_count + 1` entries
18
+ * @param {Uint32Array|Int32Array|ArrayLike<number>} adjacency neighbour ids, rows
19
+ * `adjacency[edge_addresses[v] .. edge_addresses[v + 1])`
20
+ * @param {ArrayLike<number>} order a permutation of `[0, vertex_count)`, the visit order
21
+ * @param {number} vertex_count
22
+ * @returns {number} number of colours used; colours are `[0, count)`
23
+ */
24
+ export function csr_graph_color_greedy(out_colors: Uint32Array | Int32Array | number[], edge_addresses: Uint32Array | Int32Array | ArrayLike<number>, adjacency: Uint32Array | Int32Array | ArrayLike<number>, order: ArrayLike<number>, vertex_count: number): number;
25
+ //# sourceMappingURL=csr_graph_color_greedy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csr_graph_color_greedy.d.ts","sourceRoot":"","sources":["../../../../../src/core/graph/csr/csr_graph_color_greedy.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,mDARW,WAAW,GAAC,UAAU,GAAC,MAAM,EAAE,kBAC/B,WAAW,GAAC,UAAU,GAAC,UAAU,MAAM,CAAC,aACxC,WAAW,GAAC,UAAU,GAAC,UAAU,MAAM,CAAC,SAExC,UAAU,MAAM,CAAC,gBACjB,MAAM,GACJ,MAAM,CAmDlB"}