@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,27 @@
1
+ /**
2
+ * Round a box outward to float32: each lower bound down and each upper bound up to the nearest
3
+ * float32 on that side, so the result is the tightest float32 box that contains the input.
4
+ *
5
+ * A float32 store — a BVH node, a GPU buffer — rounds to the NEAREST float32, which is inward on
6
+ * any side that rounds that way, by up to half a float32 step. That step is a proportion of the
7
+ * magnitude, so the inward error is too: 3 cm at 1e6 m, half a metre at 1e7. A box stored that way
8
+ * stops containing what it
9
+ * bounded, and a query reaching the content through the box misses whatever lay outside it — far
10
+ * from the origin only, and silently. Rounding through this first makes the store exact.
11
+ * Measured in the rigid-body broadphase before it did this: a ray dropped onto a 2 mm plate 1e6 m
12
+ * out missed it, and so did rays a millimetre inside a 1 m crate's faces 1e5 m out.
13
+ *
14
+ * A bound that is already a float32 is kept as it is. A bound beyond the largest finite float32
15
+ * on its own side — a lower bound below `-F32_MAX`, an upper bound above `F32_MAX` — goes to that
16
+ * side's infinity; one beyond it on the other side becomes `±F32_MAX`. A NaN stays NaN.
17
+ *
18
+ * `result` may be `aabb` at the same offset.
19
+ *
20
+ * @param {number[]|Float32Array|Float64Array} result receives `[x0, y0, z0, x1, y1, z1]`
21
+ * @param {number} result_offset
22
+ * @param {number[]|Float32Array|Float64Array} aabb `[x0, y0, z0, x1, y1, z1]`
23
+ * @param {number} aabb_offset
24
+ * @returns {void}
25
+ */
26
+ export function aabb3_array_round_outward_f32(result: number[] | Float32Array | Float64Array, result_offset: number, aabb: number[] | Float32Array | Float64Array, aabb_offset: number): void;
27
+ //# sourceMappingURL=aabb3_array_round_outward_f32.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aabb3_array_round_outward_f32.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/aabb3_array_round_outward_f32.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,sDANW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,QACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,eAClC,MAAM,GACJ,IAAI,CAYhB"}
@@ -0,0 +1,39 @@
1
+ import { f32_next_down } from "../../../math/f32_next_down.js";
2
+ import { f32_next_up } from "../../../math/f32_next_up.js";
3
+
4
+ /**
5
+ * Round a box outward to float32: each lower bound down and each upper bound up to the nearest
6
+ * float32 on that side, so the result is the tightest float32 box that contains the input.
7
+ *
8
+ * A float32 store — a BVH node, a GPU buffer — rounds to the NEAREST float32, which is inward on
9
+ * any side that rounds that way, by up to half a float32 step. That step is a proportion of the
10
+ * magnitude, so the inward error is too: 3 cm at 1e6 m, half a metre at 1e7. A box stored that way
11
+ * stops containing what it
12
+ * bounded, and a query reaching the content through the box misses whatever lay outside it — far
13
+ * from the origin only, and silently. Rounding through this first makes the store exact.
14
+ * Measured in the rigid-body broadphase before it did this: a ray dropped onto a 2 mm plate 1e6 m
15
+ * out missed it, and so did rays a millimetre inside a 1 m crate's faces 1e5 m out.
16
+ *
17
+ * A bound that is already a float32 is kept as it is. A bound beyond the largest finite float32
18
+ * on its own side — a lower bound below `-F32_MAX`, an upper bound above `F32_MAX` — goes to that
19
+ * side's infinity; one beyond it on the other side becomes `±F32_MAX`. A NaN stays NaN.
20
+ *
21
+ * `result` may be `aabb` at the same offset.
22
+ *
23
+ * @param {number[]|Float32Array|Float64Array} result receives `[x0, y0, z0, x1, y1, z1]`
24
+ * @param {number} result_offset
25
+ * @param {number[]|Float32Array|Float64Array} aabb `[x0, y0, z0, x1, y1, z1]`
26
+ * @param {number} aabb_offset
27
+ * @returns {void}
28
+ */
29
+ export function aabb3_array_round_outward_f32(result, result_offset, aabb, aabb_offset) {
30
+ for (let i = 0; i < 3; i++) {
31
+ const lower = aabb[aabb_offset + i];
32
+ const lower_f32 = Math.fround(lower);
33
+ result[result_offset + i] = lower_f32 > lower ? f32_next_down(lower_f32) : lower_f32;
34
+
35
+ const upper = aabb[aabb_offset + i + 3];
36
+ const upper_f32 = Math.fround(upper);
37
+ result[result_offset + i + 3] = upper_f32 < upper ? f32_next_up(upper_f32) : upper_f32;
38
+ }
39
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"aabb3_from_v3_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/aabb3_from_v3_array.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,4CAJW,UAAU,MAAM,CAAC,GAAC,MAAM,EAAE,GAAC,YAAY,QAAM,SAC7C,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,GAAC,YAAY,gBACvC,MAAM,QA6BhB"}
1
+ {"version":3,"file":"aabb3_from_v3_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/aabb3_from_v3_array.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,4CAJW,UAAU,MAAM,CAAC,GAAC,MAAM,EAAE,GAAC,YAAY,QAAM,SAC7C,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,GAAC,YAAY,gBACvC,MAAM,QAgChB"}
@@ -10,7 +10,10 @@ import { aabb3_array_set } from "./aabb3_array_set.js";
10
10
  * @param {number} input_length length of the input array
11
11
  */
12
12
  export function aabb3_from_v3_array(result, input, input_length) {
13
- assert.equal(input_length % 3, 0, `Input must be divisible by 3, instead was ${input_length}`)
13
+ // the message is built only on failure: this runs per step in physics
14
+ if (input_length % 3 !== 0) {
15
+ assert.ok(false, `Input must be divisible by 3, instead was ${input_length}`);
16
+ }
14
17
 
15
18
  let x0 = Infinity;
16
19
  let y0 = Infinity;
@@ -37,9 +37,9 @@ export function aabb3_transform_oriented(result: number[] | Float32Array | Float
37
37
  * @param {number} result_offset
38
38
  * @param {number[]|Float32Array|Float64Array} aabb local box `[x0, y0, z0, x1, y1, z1]`
39
39
  * @param {number} aabb_offset
40
- * @param {number[]|Float64Array} pose translation then orientation (unit quaternion):
40
+ * @param {number[]|Float32Array|Float64Array} pose translation then orientation (unit quaternion):
41
41
  * `[px, py, pz, qx, qy, qz, qw]`
42
42
  * @param {number} pose_offset
43
43
  */
44
- export function aabb3_transform_oriented_array(result: number[] | Float32Array | Float64Array, result_offset: number, aabb: number[] | Float32Array | Float64Array, aabb_offset: number, pose: number[] | Float64Array, pose_offset: number): void;
44
+ export function aabb3_transform_oriented_array(result: number[] | Float32Array | Float64Array, result_offset: number, aabb: number[] | Float32Array | Float64Array, aabb_offset: number, pose: number[] | Float32Array | Float64Array, pose_offset: number): void;
45
45
  //# sourceMappingURL=aabb3_transform_oriented.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"aabb3_transform_oriented.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/aabb3_transform_oriented.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,iDAhBW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QAkBhB;AAMD;;;;;;;;;;;;;GAaG;AACH,uDARW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,QACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,eAClC,MAAM,QACN,MAAM,EAAE,GAAC,YAAY,eAErB,MAAM,QAuEhB"}
1
+ {"version":3,"file":"aabb3_transform_oriented.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/aabb3_transform_oriented.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,iDAhBW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QAkBhB;AAMD;;;;;;;;;;;;;GAaG;AACH,uDARW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,QACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,eAClC,MAAM,QACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,eAElC,MAAM,QAuEhB"}
@@ -58,7 +58,7 @@ const scratch_pose = new Float64Array(7);
58
58
  * @param {number} result_offset
59
59
  * @param {number[]|Float32Array|Float64Array} aabb local box `[x0, y0, z0, x1, y1, z1]`
60
60
  * @param {number} aabb_offset
61
- * @param {number[]|Float64Array} pose translation then orientation (unit quaternion):
61
+ * @param {number[]|Float32Array|Float64Array} pose translation then orientation (unit quaternion):
62
62
  * `[px, py, pz, qx, qy, qz, qw]`
63
63
  * @param {number} pose_offset
64
64
  */
@@ -2,6 +2,9 @@
2
2
  * Multiplies two 4x4 matrices.
3
3
  * `out = a * b`.
4
4
  *
5
+ * Hot code on `Float64Array` storage (`Transform64` included) calls {@link m4_multiply_f64} instead, an
6
+ * identical copy: this one is reached with every array kind, so V8 boxes each element it writes.
7
+ *
5
8
  * @param {number[]|ArrayLike<number>|Float32Array} out the receiving matrix
6
9
  * @param {number[]|ArrayLike<number>|Float32Array} a the first operand
7
10
  * @param {number[]|ArrayLike<number>|Float32Array} b the second operand
@@ -1 +1 @@
1
- {"version":3,"file":"m4_multiply.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_multiply.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,iCALW,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,GAAC,YAAY,KACvC,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,GAAC,YAAY,KACvC,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,GAAC,YAAY,GACrC,MAAM,EAAE,CA0EpB"}
1
+ {"version":3,"file":"m4_multiply.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_multiply.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,iCALW,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,GAAC,YAAY,KACvC,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,GAAC,YAAY,KACvC,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,GAAC,YAAY,GACrC,MAAM,EAAE,CA0EpB"}
@@ -4,6 +4,9 @@ import { assert } from "../../../assert.js";
4
4
  * Multiplies two 4x4 matrices.
5
5
  * `out = a * b`.
6
6
  *
7
+ * Hot code on `Float64Array` storage (`Transform64` included) calls {@link m4_multiply_f64} instead, an
8
+ * identical copy: this one is reached with every array kind, so V8 boxes each element it writes.
9
+ *
7
10
  * @param {number[]|ArrayLike<number>|Float32Array} out the receiving matrix
8
11
  * @param {number[]|ArrayLike<number>|Float32Array} a the first operand
9
12
  * @param {number[]|ArrayLike<number>|Float32Array} b the second operand
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Multiplies two 4x4 matrices held in `Float64Array`s.
3
+ * `out = a * b`.
4
+ *
5
+ * A deliberate duplicate of {@link m4_multiply}: the same arithmetic in the same order, so the two give
6
+ * the same result bit for bit, and they must stay identical. Change one, change the other.
7
+ *
8
+ * It exists because {@link m4_multiply} is shared. About twenty modules call it, with `Float32Array`,
9
+ * `Float64Array`, `Transform64` and plain `Array` operands, and V8 keeps one set of type feedback per
10
+ * function, so its element loads and stores go megamorphic. A megamorphic store boxes every number it
11
+ * writes into a fresh HeapNumber. Measured in the dance-stage example (2026-10-12), on `Transform64`
12
+ * operands: 193 B per call through the shared {@link m4_multiply}, ~10 B through an identical copy no
13
+ * other caller reached. `Transform64#multiplyTransforms` composes every attached entity, ~1,700 calls a
14
+ * frame there, and that boxing was a third of the main thread's allocation.
15
+ *
16
+ * So this copy must only ever see `Float64Array` storage; a `Transform64` is one. A single caller passing
17
+ * a `Float32Array` or an `Array` would pollute this copy's feedback too, and bring the boxing back for
18
+ * every caller. The assertions are what keep such a caller out: anything else goes through
19
+ * {@link m4_multiply}.
20
+ *
21
+ * All of `a` is read before the first write, and each column of `b` before the column of `out` it
22
+ * produces, so `out` may be `a` or `b`.
23
+ *
24
+ * @param {Float64Array} out the receiving matrix
25
+ * @param {Float64Array} a the first operand
26
+ * @param {Float64Array} b the second operand
27
+ * @returns {Float64Array} `out` parameter
28
+ */
29
+ export function m4_multiply_f64(out: Float64Array, a: Float64Array, b: Float64Array): Float64Array;
30
+ //# sourceMappingURL=m4_multiply_f64.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"m4_multiply_f64.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_multiply_f64.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qCALW,YAAY,KACZ,YAAY,KACZ,YAAY,GACV,YAAY,CA6ExB"}
@@ -0,0 +1,106 @@
1
+ import { assert } from "../../../assert.js";
2
+
3
+ /**
4
+ * Multiplies two 4x4 matrices held in `Float64Array`s.
5
+ * `out = a * b`.
6
+ *
7
+ * A deliberate duplicate of {@link m4_multiply}: the same arithmetic in the same order, so the two give
8
+ * the same result bit for bit, and they must stay identical. Change one, change the other.
9
+ *
10
+ * It exists because {@link m4_multiply} is shared. About twenty modules call it, with `Float32Array`,
11
+ * `Float64Array`, `Transform64` and plain `Array` operands, and V8 keeps one set of type feedback per
12
+ * function, so its element loads and stores go megamorphic. A megamorphic store boxes every number it
13
+ * writes into a fresh HeapNumber. Measured in the dance-stage example (2026-10-12), on `Transform64`
14
+ * operands: 193 B per call through the shared {@link m4_multiply}, ~10 B through an identical copy no
15
+ * other caller reached. `Transform64#multiplyTransforms` composes every attached entity, ~1,700 calls a
16
+ * frame there, and that boxing was a third of the main thread's allocation.
17
+ *
18
+ * So this copy must only ever see `Float64Array` storage; a `Transform64` is one. A single caller passing
19
+ * a `Float32Array` or an `Array` would pollute this copy's feedback too, and bring the boxing back for
20
+ * every caller. The assertions are what keep such a caller out: anything else goes through
21
+ * {@link m4_multiply}.
22
+ *
23
+ * All of `a` is read before the first write, and each column of `b` before the column of `out` it
24
+ * produces, so `out` may be `a` or `b`.
25
+ *
26
+ * @param {Float64Array} out the receiving matrix
27
+ * @param {Float64Array} a the first operand
28
+ * @param {Float64Array} b the second operand
29
+ * @returns {Float64Array} `out` parameter
30
+ */
31
+ export function m4_multiply_f64(out, a, b) {
32
+ // A bare instanceof, not assert.isInstanceOf: that one is shared by every call site in the engine,
33
+ // and once it had seen their mix of classes, this function took 21 ns a call through it against
34
+ // 15.5 ns this way (node 24, 2026-10-12, a build that keeps assertions). Each check throws before
35
+ // the first element access, so a rejected operand never reaches this copy's element feedback.
36
+ assert.ok(out instanceof Float64Array, 'out is not a Float64Array');
37
+ assert.greaterThanOrEqual(out.length, 16, 'out.length');
38
+
39
+ assert.ok(a instanceof Float64Array, 'a is not a Float64Array');
40
+ assert.greaterThanOrEqual(a.length, 16, 'a.length');
41
+
42
+ assert.ok(b instanceof Float64Array, 'b is not a Float64Array');
43
+ assert.greaterThanOrEqual(b.length, 16, 'b.length');
44
+
45
+ // Adapted from gl-matrix, by way of m4_multiply
46
+
47
+ const a00 = a[0],
48
+ a01 = a[1],
49
+ a02 = a[2],
50
+ a03 = a[3],
51
+ a10 = a[4],
52
+ a11 = a[5],
53
+ a12 = a[6],
54
+ a13 = a[7],
55
+ a20 = a[8],
56
+ a21 = a[9],
57
+ a22 = a[10],
58
+ a23 = a[11],
59
+ a30 = a[12],
60
+ a31 = a[13],
61
+ a32 = a[14],
62
+ a33 = a[15];
63
+
64
+ // Cache only the current line of the second matrix
65
+ let b0 = b[0],
66
+ b1 = b[1],
67
+ b2 = b[2],
68
+ b3 = b[3];
69
+
70
+ out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
71
+ out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
72
+ out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
73
+ out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
74
+
75
+ b0 = b[4];
76
+ b1 = b[5];
77
+ b2 = b[6];
78
+ b3 = b[7];
79
+
80
+ out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
81
+ out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
82
+ out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
83
+ out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
84
+
85
+ b0 = b[8];
86
+ b1 = b[9];
87
+ b2 = b[10];
88
+ b3 = b[11];
89
+
90
+ out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
91
+ out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
92
+ out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
93
+ out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
94
+
95
+ b0 = b[12];
96
+ b1 = b[13];
97
+ b2 = b[14];
98
+ b3 = b[15];
99
+
100
+ out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
101
+ out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
102
+ out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
103
+ out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
104
+
105
+ return out;
106
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Bring a point into a rigid pose's frame: `out = q⁻¹·(p − t)`.
3
+ *
4
+ * The inverse of {@link pose3_apply_point_array}, and with the same operands: translation and unit
5
+ * rotation separately, each an array and an offset, so a `Transform64`'s lanes, a cloth's split frame
6
+ * arrays and a packed seven-float record are all read where they sit. Nothing is allocated.
7
+ *
8
+ * `out` may be `p`, and may be `t` at the same offset: the difference is held aside before the first
9
+ * write. It may not otherwise overlap `t` or `q`.
10
+ *
11
+ * @param {number[]|Float32Array|Float64Array} out
12
+ * @param {number} out_offset receives 3 floats
13
+ * @param {number[]|Float32Array|Float64Array} t the pose's translation `[x, y, z]`
14
+ * @param {number} t_offset
15
+ * @param {number[]|Float32Array|Float64Array} q the pose's rotation, a unit quaternion `[x, y, z, w]`
16
+ * @param {number} q_offset
17
+ * @param {number[]|Float32Array|Float64Array} p the point, in the frame the pose is expressed in
18
+ * @param {number} p_offset
19
+ */
20
+ export function pose3_apply_inverse_point_array(out: number[] | Float32Array | Float64Array, out_offset: number, t: number[] | Float32Array | Float64Array, t_offset: number, q: number[] | Float32Array | Float64Array, q_offset: number, p: number[] | Float32Array | Float64Array, p_offset: number): void;
21
+ //# sourceMappingURL=pose3_apply_inverse_point_array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pose3_apply_inverse_point_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/pose/pose3_apply_inverse_point_array.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,qDATW,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,QAUhB"}
@@ -0,0 +1,36 @@
1
+ import { v3_quaternion_apply_inverse_array } from "../../vec3/v3_quaternion_apply_inverse.js";
2
+
3
+ /**
4
+ * Bring a point into a rigid pose's frame: `out = q⁻¹·(p − t)`.
5
+ *
6
+ * The inverse of {@link pose3_apply_point_array}, and with the same operands: translation and unit
7
+ * rotation separately, each an array and an offset, so a `Transform64`'s lanes, a cloth's split frame
8
+ * arrays and a packed seven-float record are all read where they sit. Nothing is allocated.
9
+ *
10
+ * `out` may be `p`, and may be `t` at the same offset: the difference is held aside before the first
11
+ * write. It may not otherwise overlap `t` or `q`.
12
+ *
13
+ * @param {number[]|Float32Array|Float64Array} out
14
+ * @param {number} out_offset receives 3 floats
15
+ * @param {number[]|Float32Array|Float64Array} t the pose's translation `[x, y, z]`
16
+ * @param {number} t_offset
17
+ * @param {number[]|Float32Array|Float64Array} q the pose's rotation, a unit quaternion `[x, y, z, w]`
18
+ * @param {number} q_offset
19
+ * @param {number[]|Float32Array|Float64Array} p the point, in the frame the pose is expressed in
20
+ * @param {number} p_offset
21
+ */
22
+ export function pose3_apply_inverse_point_array(out, out_offset, t, t_offset, q, q_offset, p, p_offset) {
23
+ const offset = scratch_offset;
24
+
25
+ offset[0] = p[p_offset] - t[t_offset];
26
+ offset[1] = p[p_offset + 1] - t[t_offset + 1];
27
+ offset[2] = p[p_offset + 2] - t[t_offset + 2];
28
+
29
+ v3_quaternion_apply_inverse_array(out, out_offset, offset, 0, q, q_offset);
30
+ }
31
+
32
+ /**
33
+ * @type {Float64Array}
34
+ * @private
35
+ */
36
+ const scratch_offset = new Float64Array(3);
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Bring a point out of a rigid pose's frame: `out = t + q·p`.
3
+ *
4
+ * A rigid pose here is a translation and a unit rotation with no scale — what a body, a holder, a
5
+ * cloth's local frame or a joint is — and the two are separate operands rather than one packed record,
6
+ * because the poses that use them are kept both ways: a `Transform64` holds its translation at lane 12
7
+ * and its rotation at lane 16, a cloth keeps its frame in two arrays, a contact record packs seven
8
+ * floats. Each operand is an array and an offset; nothing is allocated.
9
+ *
10
+ * The inverse is {@link pose3_apply_inverse_point_array}.
11
+ *
12
+ * `out` may be `p`, and may be `t` at the same offset: the rotated point is held aside before the
13
+ * first write. It may not otherwise overlap `t` or `q`.
14
+ *
15
+ * @param {number[]|Float32Array|Float64Array} out
16
+ * @param {number} out_offset receives 3 floats
17
+ * @param {number[]|Float32Array|Float64Array} t the pose's translation `[x, y, z]`
18
+ * @param {number} t_offset
19
+ * @param {number[]|Float32Array|Float64Array} q the pose's rotation, a unit quaternion `[x, y, z, w]`
20
+ * @param {number} q_offset
21
+ * @param {number[]|Float32Array|Float64Array} p the point, in the pose's frame
22
+ * @param {number} p_offset
23
+ */
24
+ export function pose3_apply_point_array(out: number[] | Float32Array | Float64Array, out_offset: number, t: number[] | Float32Array | Float64Array, t_offset: number, q: number[] | Float32Array | Float64Array, q_offset: number, p: number[] | Float32Array | Float64Array, p_offset: number): void;
25
+ //# sourceMappingURL=pose3_apply_point_array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pose3_apply_point_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/pose/pose3_apply_point_array.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,6CATW,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,QAUhB"}
@@ -0,0 +1,40 @@
1
+ import { v3_quaternion_apply_array } from "../../vec3/v3_quaternion_apply.js";
2
+
3
+ /**
4
+ * Bring a point out of a rigid pose's frame: `out = t + q·p`.
5
+ *
6
+ * A rigid pose here is a translation and a unit rotation with no scale — what a body, a holder, a
7
+ * cloth's local frame or a joint is — and the two are separate operands rather than one packed record,
8
+ * because the poses that use them are kept both ways: a `Transform64` holds its translation at lane 12
9
+ * and its rotation at lane 16, a cloth keeps its frame in two arrays, a contact record packs seven
10
+ * floats. Each operand is an array and an offset; nothing is allocated.
11
+ *
12
+ * The inverse is {@link pose3_apply_inverse_point_array}.
13
+ *
14
+ * `out` may be `p`, and may be `t` at the same offset: the rotated point is held aside before the
15
+ * first write. It may not otherwise overlap `t` or `q`.
16
+ *
17
+ * @param {number[]|Float32Array|Float64Array} out
18
+ * @param {number} out_offset receives 3 floats
19
+ * @param {number[]|Float32Array|Float64Array} t the pose's translation `[x, y, z]`
20
+ * @param {number} t_offset
21
+ * @param {number[]|Float32Array|Float64Array} q the pose's rotation, a unit quaternion `[x, y, z, w]`
22
+ * @param {number} q_offset
23
+ * @param {number[]|Float32Array|Float64Array} p the point, in the pose's frame
24
+ * @param {number} p_offset
25
+ */
26
+ export function pose3_apply_point_array(out, out_offset, t, t_offset, q, q_offset, p, p_offset) {
27
+ const rotated = scratch_rotated;
28
+
29
+ v3_quaternion_apply_array(rotated, 0, p, p_offset, q, q_offset);
30
+
31
+ out[out_offset] = t[t_offset] + rotated[0];
32
+ out[out_offset + 1] = t[t_offset + 1] + rotated[1];
33
+ out[out_offset + 2] = t[t_offset + 2] + rotated[2];
34
+ }
35
+
36
+ /**
37
+ * @type {Float64Array}
38
+ * @private
39
+ */
40
+ const scratch_rotated = new Float64Array(3);
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Compose two rigid poses, a local one hung from a parent: `t' = t_p + q_p·t_l`, `q' = q_p ⊗ q_l`.
3
+ *
4
+ * What a child's pose is once its parent's is known — a bind pose built down a hierarchy, a seeded
5
+ * subtree's rest pose. The inverse is {@link pose3_to_local_array}.
6
+ *
7
+ * Every operand is an array and an offset, translation and rotation apart — see
8
+ * {@link pose3_apply_point_array} for why. Nothing is allocated.
9
+ *
10
+ * `out_t` may be `parent_t` or `local_t` at the same offset, and `out_q` may be `parent_q` or
11
+ * `local_q` at the same offset; the translation is written before the rotations are read, so `out_t`
12
+ * may not otherwise overlap any operand.
13
+ *
14
+ * @param {number[]|Float32Array|Float64Array} out_t receives 3 floats
15
+ * @param {number} out_t_offset
16
+ * @param {number[]|Float32Array|Float64Array} out_q receives 4 floats
17
+ * @param {number} out_q_offset
18
+ * @param {number[]|Float32Array|Float64Array} parent_t the parent's translation
19
+ * @param {number} parent_t_offset
20
+ * @param {number[]|Float32Array|Float64Array} parent_q the parent's rotation, a unit quaternion
21
+ * @param {number} parent_q_offset
22
+ * @param {number[]|Float32Array|Float64Array} local_t the local pose's translation, in the parent's frame
23
+ * @param {number} local_t_offset
24
+ * @param {number[]|Float32Array|Float64Array} local_q the local pose's rotation, likewise
25
+ * @param {number} local_q_offset
26
+ */
27
+ export function pose3_compose_array(out_t: number[] | Float32Array | Float64Array, out_t_offset: number, out_q: number[] | Float32Array | Float64Array, out_q_offset: number, parent_t: number[] | Float32Array | Float64Array, parent_t_offset: number, parent_q: number[] | Float32Array | Float64Array, parent_q_offset: number, local_t: number[] | Float32Array | Float64Array, local_t_offset: number, local_q: number[] | Float32Array | Float64Array, local_q_offset: number): void;
28
+ //# sourceMappingURL=pose3_compose_array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pose3_compose_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/pose/pose3_compose_array.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,2CAbW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,gBAClC,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,gBAClC,MAAM,YACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,mBAClC,MAAM,YACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,mBAClC,MAAM,WACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,kBAClC,MAAM,WACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,kBAClC,MAAM,QAahB"}
@@ -0,0 +1,41 @@
1
+ import { quat3_multiply_array } from "../quaternion/quat3_multiply.js";
2
+ import { pose3_apply_point_array } from "./pose3_apply_point_array.js";
3
+
4
+ /**
5
+ * Compose two rigid poses, a local one hung from a parent: `t' = t_p + q_p·t_l`, `q' = q_p ⊗ q_l`.
6
+ *
7
+ * What a child's pose is once its parent's is known — a bind pose built down a hierarchy, a seeded
8
+ * subtree's rest pose. The inverse is {@link pose3_to_local_array}.
9
+ *
10
+ * Every operand is an array and an offset, translation and rotation apart — see
11
+ * {@link pose3_apply_point_array} for why. Nothing is allocated.
12
+ *
13
+ * `out_t` may be `parent_t` or `local_t` at the same offset, and `out_q` may be `parent_q` or
14
+ * `local_q` at the same offset; the translation is written before the rotations are read, so `out_t`
15
+ * may not otherwise overlap any operand.
16
+ *
17
+ * @param {number[]|Float32Array|Float64Array} out_t receives 3 floats
18
+ * @param {number} out_t_offset
19
+ * @param {number[]|Float32Array|Float64Array} out_q receives 4 floats
20
+ * @param {number} out_q_offset
21
+ * @param {number[]|Float32Array|Float64Array} parent_t the parent's translation
22
+ * @param {number} parent_t_offset
23
+ * @param {number[]|Float32Array|Float64Array} parent_q the parent's rotation, a unit quaternion
24
+ * @param {number} parent_q_offset
25
+ * @param {number[]|Float32Array|Float64Array} local_t the local pose's translation, in the parent's frame
26
+ * @param {number} local_t_offset
27
+ * @param {number[]|Float32Array|Float64Array} local_q the local pose's rotation, likewise
28
+ * @param {number} local_q_offset
29
+ */
30
+ export function pose3_compose_array(
31
+ out_t, out_t_offset,
32
+ out_q, out_q_offset,
33
+ parent_t, parent_t_offset,
34
+ parent_q, parent_q_offset,
35
+ local_t, local_t_offset,
36
+ local_q, local_q_offset
37
+ ) {
38
+ pose3_apply_point_array(out_t, out_t_offset, parent_t, parent_t_offset, parent_q, parent_q_offset, local_t, local_t_offset);
39
+
40
+ quat3_multiply_array(out_q, out_q_offset, parent_q, parent_q_offset, local_q, local_q_offset);
41
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Express a rigid pose in another pose's frame: `t' = q_f⁻¹·(t − t_f)`, `q' = q_f⁻¹ ⊗ q`.
3
+ *
4
+ * What a world pose is relative to a parent, a holder in a cloth's moving frame, a collider in the
5
+ * frame its contacts are solved in. The inverse is {@link pose3_compose_array}: composing the frame
6
+ * with the result gives the pose back.
7
+ *
8
+ * Every operand is an array and an offset, translation and rotation apart — see
9
+ * {@link pose3_apply_point_array} for why. Nothing is allocated.
10
+ *
11
+ * `out_t` may be `t` at the same offset and `out_q` may be `q` at the same offset; the translation is
12
+ * written before the rotation is read, so `out_t` may not overlap `q`, `frame_q` or `frame_t`
13
+ * otherwise, and `out_q` may not overlap `frame_q` otherwise.
14
+ *
15
+ * @param {number[]|Float32Array|Float64Array} out_t receives 3 floats
16
+ * @param {number} out_t_offset
17
+ * @param {number[]|Float32Array|Float64Array} out_q receives 4 floats
18
+ * @param {number} out_q_offset
19
+ * @param {number[]|Float32Array|Float64Array} frame_t the frame's translation
20
+ * @param {number} frame_t_offset
21
+ * @param {number[]|Float32Array|Float64Array} frame_q the frame's rotation, a unit quaternion
22
+ * @param {number} frame_q_offset
23
+ * @param {number[]|Float32Array|Float64Array} t the pose's translation, in the frame the frame is in
24
+ * @param {number} t_offset
25
+ * @param {number[]|Float32Array|Float64Array} q the pose's rotation, likewise
26
+ * @param {number} q_offset
27
+ */
28
+ export function pose3_to_local_array(out_t: number[] | Float32Array | Float64Array, out_t_offset: number, out_q: number[] | Float32Array | Float64Array, out_q_offset: number, frame_t: number[] | Float32Array | Float64Array, frame_t_offset: number, frame_q: number[] | Float32Array | Float64Array, frame_q_offset: number, t: number[] | Float32Array | Float64Array, t_offset: number, q: number[] | Float32Array | Float64Array, q_offset: number): void;
29
+ //# sourceMappingURL=pose3_to_local_array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pose3_to_local_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/pose/pose3_to_local_array.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,4CAbW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,gBAClC,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,gBAClC,MAAM,WACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,kBAClC,MAAM,WACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,kBAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,QAahB"}
@@ -0,0 +1,42 @@
1
+ import { quat3_multiply_conjugate_left_array } from "../quaternion/quat3_multiply_conjugate_left_array.js";
2
+ import { pose3_apply_inverse_point_array } from "./pose3_apply_inverse_point_array.js";
3
+
4
+ /**
5
+ * Express a rigid pose in another pose's frame: `t' = q_f⁻¹·(t − t_f)`, `q' = q_f⁻¹ ⊗ q`.
6
+ *
7
+ * What a world pose is relative to a parent, a holder in a cloth's moving frame, a collider in the
8
+ * frame its contacts are solved in. The inverse is {@link pose3_compose_array}: composing the frame
9
+ * with the result gives the pose back.
10
+ *
11
+ * Every operand is an array and an offset, translation and rotation apart — see
12
+ * {@link pose3_apply_point_array} for why. Nothing is allocated.
13
+ *
14
+ * `out_t` may be `t` at the same offset and `out_q` may be `q` at the same offset; the translation is
15
+ * written before the rotation is read, so `out_t` may not overlap `q`, `frame_q` or `frame_t`
16
+ * otherwise, and `out_q` may not overlap `frame_q` otherwise.
17
+ *
18
+ * @param {number[]|Float32Array|Float64Array} out_t receives 3 floats
19
+ * @param {number} out_t_offset
20
+ * @param {number[]|Float32Array|Float64Array} out_q receives 4 floats
21
+ * @param {number} out_q_offset
22
+ * @param {number[]|Float32Array|Float64Array} frame_t the frame's translation
23
+ * @param {number} frame_t_offset
24
+ * @param {number[]|Float32Array|Float64Array} frame_q the frame's rotation, a unit quaternion
25
+ * @param {number} frame_q_offset
26
+ * @param {number[]|Float32Array|Float64Array} t the pose's translation, in the frame the frame is in
27
+ * @param {number} t_offset
28
+ * @param {number[]|Float32Array|Float64Array} q the pose's rotation, likewise
29
+ * @param {number} q_offset
30
+ */
31
+ export function pose3_to_local_array(
32
+ out_t, out_t_offset,
33
+ out_q, out_q_offset,
34
+ frame_t, frame_t_offset,
35
+ frame_q, frame_q_offset,
36
+ t, t_offset,
37
+ q, q_offset
38
+ ) {
39
+ pose3_apply_inverse_point_array(out_t, out_t_offset, frame_t, frame_t_offset, frame_q, frame_q_offset, t, t_offset);
40
+
41
+ quat3_multiply_conjugate_left_array(out_q, out_q_offset, frame_q, frame_q_offset, q, q_offset);
42
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Limit a rotation's angle: `out` turns about the same axis as `q` by `min(θ, max_angle)`, exactly.
3
+ *
4
+ * The rotation is read as an axis and an angle and the angle is replaced, so the answer is the
5
+ * limit itself and not an approximation of it. The alternative it exists to replace — nlerp from
6
+ * the identity towards `q` by `max_angle / θ` — follows the chord rather than the arc and
7
+ * undershoots more the larger `θ` is: at `θ = π` asked for `π/4` it turns `0.64` rad, not `0.785`.
8
+ *
9
+ * `q` and `-q` name the same rotation; the angle is measured on the one with `w ≥ 0`, so `θ` is
10
+ * the shorter turn, in `[0, π]`. A rotation within the limit is passed through unchanged, sign
11
+ * included; one beyond it is written with `w ≥ 0`. The identity (no axis) is within any limit.
12
+ *
13
+ * Sign convention: `(x, y, z, w)` — `w` last, matching {@link Quaternion} and the rest of the
14
+ * `core/geom/3d/quaternion/` family.
15
+ *
16
+ * `out` may be `q`: every component is read before the first write.
17
+ *
18
+ * **Precondition: `q` is a unit quaternion.** The angle is `2·atan2(|v|, w)`, which does not care,
19
+ * but a limited rotation is written unit and an unlimited one as it came.
20
+ *
21
+ * @param {number[]|Float32Array|Float64Array} out
22
+ * @param {number} out_offset receives 4 floats (x, y, z, w)
23
+ * @param {number[]|Float32Array|Float64Array} q `[x, y, z, w]`
24
+ * @param {number} q_offset
25
+ * @param {number} max_angle radians, `≥ 0`
26
+ */
27
+ export function quat3_clamp_angle_array(out: number[] | Float32Array | Float64Array, out_offset: number, q: number[] | Float32Array | Float64Array, q_offset: number, max_angle: number): void;
28
+ //# sourceMappingURL=quat3_clamp_angle_array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quat3_clamp_angle_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/quat3_clamp_angle_array.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,6CANW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,aACN,MAAM,QAuChB"}