@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.
- package/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/core/assert.d.ts.map +1 -1
- package/src/core/assert.js +5 -1
- package/src/core/binary/hash/XXH128Hash.d.ts +1 -37
- package/src/core/binary/hash/XXH128Hash.d.ts.map +1 -1
- package/src/core/binary/hash/XXH128Hash.js +4 -55
- package/src/core/binary/hash/XXH3_SECRET.d.ts +1 -12
- package/src/core/binary/hash/XXH3_SECRET.d.ts.map +1 -1
- package/src/core/binary/hash/XXH3_SECRET.js +4 -25
- package/src/core/binary/hash/crc32.d.ts +1 -15
- package/src/core/binary/hash/crc32.d.ts.map +1 -1
- package/src/core/binary/hash/crc32.js +4 -96
- package/src/core/binary/hash/xxh3_128.d.ts +1 -9
- package/src/core/binary/hash/xxh3_128.d.ts.map +1 -1
- package/src/core/binary/hash/xxh3_128.js +4 -341
- package/src/core/binary/hash/xxh3_64.d.ts +1 -8
- package/src/core/binary/hash/xxh3_64.d.ts.map +1 -1
- package/src/core/binary/hash/xxh3_64.js +4 -241
- package/src/core/binary/hash/xxh3_common.d.ts +1 -223
- package/src/core/binary/hash/xxh3_common.d.ts.map +1 -1
- package/src/core/binary/hash/xxh3_common.js +90 -476
- package/src/core/collection/array/array_sort_insertion_ascending.d.ts +19 -0
- package/src/core/collection/array/array_sort_insertion_ascending.d.ts.map +1 -0
- package/src/core/collection/array/array_sort_insertion_ascending.js +31 -0
- package/src/core/collection/array/combine_hash.d.ts +6 -0
- package/src/core/collection/array/combine_hash.d.ts.map +1 -1
- package/src/core/collection/array/combine_hash.js +6 -0
- package/src/core/function/FunctionCompiler.js +2 -2
- package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts +27 -0
- package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts.map +1 -0
- package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.js +39 -0
- package/src/core/geom/3d/aabb/aabb3_from_v3_array.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_from_v3_array.js +4 -1
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +2 -2
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +1 -1
- package/src/core/geom/3d/mat4/m4_multiply.d.ts +3 -0
- package/src/core/geom/3d/mat4/m4_multiply.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_multiply.js +3 -0
- package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts +30 -0
- package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_multiply_f64.js +106 -0
- package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts +21 -0
- package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.js +36 -0
- package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts +25 -0
- package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_apply_point_array.js +40 -0
- package/src/core/geom/3d/pose/pose3_compose_array.d.ts +28 -0
- package/src/core/geom/3d/pose/pose3_compose_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_compose_array.js +41 -0
- package/src/core/geom/3d/pose/pose3_to_local_array.d.ts +29 -0
- package/src/core/geom/3d/pose/pose3_to_local_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_to_local_array.js +42 -0
- package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts +28 -0
- package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.js +66 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts +22 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.js +30 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts +23 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.js +31 -0
- package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts +26 -0
- package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.js +46 -0
- package/src/core/geom/ConicRay.js +2 -2
- package/src/core/geom/Vector4.d.ts.map +1 -1
- package/src/core/geom/Vector4.js +8 -5
- package/src/core/geom/vec3/v3_distance_array.d.ts +11 -0
- package/src/core/geom/vec3/v3_distance_array.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_distance_array.js +19 -0
- package/src/core/geom/vec3/v3_normalize_array_checked.d.ts +23 -0
- package/src/core/geom/vec3/v3_normalize_array_checked.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_normalize_array_checked.js +49 -0
- package/src/core/geom/vec3/v3_reject_array.d.ts +15 -0
- package/src/core/geom/vec3/v3_reject_array.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_reject_array.js +32 -0
- package/src/core/graph/csr/csr_build_incidence.d.ts +26 -0
- package/src/core/graph/csr/csr_build_incidence.d.ts.map +1 -0
- package/src/core/graph/csr/csr_build_incidence.js +71 -0
- package/src/core/graph/csr/csr_graph_color_greedy.d.ts +25 -0
- package/src/core/graph/csr/csr_graph_color_greedy.d.ts.map +1 -0
- package/src/core/graph/csr/csr_graph_color_greedy.js +83 -0
- package/src/core/graph/csr/csr_graph_validate_coloring.d.ts +15 -0
- package/src/core/graph/csr/csr_graph_validate_coloring.d.ts.map +1 -0
- package/src/core/graph/csr/csr_graph_validate_coloring.js +33 -0
- package/src/core/math/hash/XXH128Hash.d.ts +38 -0
- package/src/core/math/hash/XXH128Hash.d.ts.map +1 -0
- package/src/core/math/hash/XXH128Hash.js +55 -0
- package/src/core/math/hash/XXH3_SECRET.d.ts +13 -0
- package/src/core/math/hash/XXH3_SECRET.d.ts.map +1 -0
- package/src/core/math/hash/XXH3_SECRET.js +25 -0
- package/src/core/math/hash/crc32.d.ts +16 -0
- package/src/core/math/hash/crc32.d.ts.map +1 -0
- package/src/core/math/hash/crc32.js +96 -0
- package/src/core/math/hash/xxh3_128.d.ts +10 -0
- package/src/core/math/hash/xxh3_128.d.ts.map +1 -0
- package/src/core/math/hash/xxh3_128.js +341 -0
- package/src/core/math/hash/xxh3_64.d.ts +9 -0
- package/src/core/math/hash/xxh3_64.d.ts.map +1 -0
- package/src/core/math/hash/xxh3_64.js +241 -0
- package/src/core/math/hash/xxh3_common.d.ts +224 -0
- package/src/core/math/hash/xxh3_common.d.ts.map +1 -0
- package/src/core/math/hash/xxh3_common.js +476 -0
- package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts +26 -0
- package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts.map +1 -0
- package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.js +71 -0
- package/src/core/math/lookup/ParameterLookupTable.js +2 -2
- package/src/core/math/max2_exact.d.ts +15 -0
- package/src/core/math/max2_exact.d.ts.map +1 -0
- package/src/core/math/max2_exact.js +30 -0
- package/src/core/math/min2_exact.d.ts +20 -0
- package/src/core/math/min2_exact.d.ts.map +1 -0
- package/src/core/math/min2_exact.js +35 -0
- package/src/core/model/node-graph/node/NodeInstancePortReference.js +2 -2
- package/src/core/model/reactive/model/ReactiveBinaryExpression.js +2 -2
- package/src/core/model/reactive/model/terminal/ReactiveReference.js +2 -2
- package/src/engine/asset/AssetDescription.js +2 -2
- package/src/engine/ecs/animation/Animation.js +2 -2
- package/src/engine/ecs/animation/AnimationClip.d.ts.map +1 -1
- package/src/engine/ecs/animation/AnimationClip.js +7 -5
- package/src/engine/ecs/gui/GUIElement.d.ts.map +1 -1
- package/src/engine/ecs/gui/GUIElement.js +7 -5
- package/src/engine/ecs/gui/hud/HeadsUpDisplay.js +2 -2
- package/src/engine/ecs/gui/position/ViewportPosition.d.ts.map +1 -1
- package/src/engine/ecs/gui/position/ViewportPosition.js +11 -7
- package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
- package/src/engine/ecs/ik/IKGoalSystem.js +3 -19
- package/src/engine/ecs/parent/parent_entity_model_of.d.ts +17 -0
- package/src/engine/ecs/parent/parent_entity_model_of.d.ts.map +1 -0
- package/src/engine/ecs/parent/parent_entity_model_of.js +26 -0
- package/src/engine/ecs/transform/Transform64.d.ts +1 -1
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.js +5 -4
- package/src/engine/ecs/transform/t64_read_pose_array.d.ts +15 -0
- package/src/engine/ecs/transform/t64_read_pose_array.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_read_pose_array.js +24 -0
- package/src/engine/graphics/ecs/animation/animator/AnimationClip.d.ts.map +1 -1
- package/src/engine/graphics/ecs/animation/animator/AnimationClip.js +8 -5
- package/src/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -2
- package/src/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -2
- package/src/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -2
- package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -2
- package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +2 -2
- package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.d.ts.map +1 -1
- package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +8 -5
- package/src/engine/graphics/ecs/decal/v2/Decal.d.ts.map +1 -1
- package/src/engine/graphics/ecs/decal/v2/Decal.js +9 -8
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts +2 -0
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts.map +1 -1
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.js +10 -21
- package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.js +9 -6
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +5 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +48 -2
- package/src/engine/graphics3/AnimationSystem.d.ts +5 -0
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem.js +47 -2
- package/src/engine/graphics3/ParticipatingMedia.js +204 -204
- package/src/engine/graphics3/animation/AnimationClips.d.ts +5 -0
- package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
- package/src/engine/graphics3/animation/AnimationClips.js +5 -0
- package/src/engine/graphics3/register_clips.d.ts +29 -0
- package/src/engine/graphics3/register_clips.d.ts.map +1 -1
- package/src/engine/graphics3/register_clips.js +52 -0
- package/src/engine/grid/obstacle/GridObstacle.js +2 -2
- package/src/engine/intelligence/behavior/selector/WeightedElement.js +2 -2
- package/src/engine/interpolation/Interpolated.js +2 -2
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +9 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +3 -1
- package/src/engine/physics/cloth/PLAN.md +10 -8
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts +22 -0
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.js +51 -19
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +16 -2
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.js +19 -24
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +7 -0
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/ClothColliderIndex.js +85 -67
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +19 -101
- package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts +2 -5
- package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_pack.js +7 -15
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +16 -61
- package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/Cloth.js +7 -5
- package/src/engine/physics/cloth/ecs/ClothCollider.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothCollider.js +7 -5
- package/src/engine/physics/cloth/ecs/ClothColliderFlags.d.ts +0 -1
- package/src/engine/physics/cloth/ecs/ClothColliderFlags.js +6 -19
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +1 -2
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +3 -12
- package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothDynamics.js +20 -11
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +40 -130
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.js +17 -58
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +3 -3
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +44 -104
- package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_geodesic.js +6 -13
- package/src/engine/physics/cloth/ecs/cloth_holds.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_holds.js +15 -40
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +45 -79
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +7 -27
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +30 -62
- package/src/engine/physics/cloth/playground/cloth_playground_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/cloth_playground_build.js +2 -3
- package/src/engine/physics/cloth/playground/collide_main.js +2 -28
- package/src/engine/physics/cloth/playground/garment_main.js +4 -19
- package/src/engine/physics/cloth/playground/main.js +6 -48
- package/src/engine/physics/cloth/playground/rig_main.js +947 -955
- package/src/engine/physics/cloth/playground/wind_main.js +8 -7
- package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/ClothState.js +16 -76
- package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts +10 -8
- package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_color_particles.js +30 -102
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.js +3 -2
- package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_hold_line.js +2 -14
- package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts +21 -0
- package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_kinetic_energy.js +45 -0
- package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts +32 -0
- package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_particle_coupling.js +133 -0
- package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts +16 -0
- package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_particle_of_source.js +19 -0
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_self_find.js +6 -55
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +30 -65
- package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step.js +6 -28
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step_instance.js +2 -3
- package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts +21 -0
- package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_stretch_residual.js +54 -0
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts +15 -0
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.js +28 -0
- package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts +30 -0
- package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.js +56 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +3 -17
- package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +2 -1
- package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -25
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts +3 -1
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/cloth_sample_air.js +40 -62
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/ContactProbeSystem.js +2 -18
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +9 -50
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidField.js +7 -5
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidComponent.js +19 -11
- package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts +24 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.js +42 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts +25 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.js +40 -0
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +2 -2
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +2 -2
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +11 -7
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +11 -7
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +16 -9
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -1
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +40 -90
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_contacts.js +3 -5
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +2 -14
- package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/hull_sphere_contact.js +2 -5
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +13 -32
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_box_contact.js +2 -5
- package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/AudioEmitter.js +12 -7
- package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts.map +1 -1
- package/src/engine/sound/ecs/trigger/AudioEventTrigger.js +192 -191
- package/src/engine/sound/simulation/core/AcousticMedium.js +2 -2
- package/src/engine/sound/simulation/definition/AcousticDirectivity.js +2 -2
- package/src/engine/sound/simulation/definition/AcousticMaterial.d.ts.map +1 -1
- package/src/engine/sound/simulation/definition/AcousticMaterial.js +11 -7
- package/src/engine/sound/sopra/definition/BusDefinition.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/BusDefinition.js +5 -4
- package/src/engine/sound/sopra/definition/DuckingRule.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/DuckingRule.js +7 -5
- package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/EventDescription.js +23 -13
- package/src/engine/sound/sopra/definition/MixerSnapshot.js +2 -2
- package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/ParameterDefinition.js +7 -5
- package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +2 -2
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +4 -3
- package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +2 -2
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +3 -3
- package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +16 -9
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.js +2 -2
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +1 -1
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +2 -2
- package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +7 -5
- package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/effect/EqEffect.js +8 -5
- package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +2 -2
- package/src/engine/sound/sopra/legacy/SoundEmitter.d.ts.map +1 -1
- package/src/engine/sound/sopra/legacy/SoundEmitter.js +357 -352
- package/src/engine/sound/sopra/legacy/SoundTrack.d.ts.map +1 -1
- package/src/engine/sound/sopra/legacy/SoundTrack.js +281 -278
- package/src/format/image/png/PNGReader.js +644 -644
- package/src/format/image/png/crc32.d.ts +1 -1
- package/src/format/image/png/crc32.js +7 -8
- package/src/format/texture/basis/transcode/etc1s_to_astc.d.ts.map +1 -1
- package/src/format/texture/basis/transcode/etc1s_to_astc.js +2 -1
- package/src/shade/descriptor/binding/BindGroupLayoutDescriptor.js +2 -2
- package/src/shade/descriptor/binding/BindGroupLayoutEntry.d.ts.map +1 -1
- package/src/shade/descriptor/binding/BindGroupLayoutEntry.js +12 -8
- package/src/shade/descriptor/binding/StorageTextureBindingLayout.js +2 -2
- package/src/shade/descriptor/binding/TextureBindingLayout.js +2 -2
- package/src/shade/descriptor/blend/BlendComponent.js +2 -2
- package/src/shade/descriptor/pipeline/PipelineDescriptorBase.js +2 -2
- package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +2 -2
- package/src/shade/descriptor/pipeline/ProgrammableStage.js +2 -2
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +2 -2
- package/src/shade/descriptor/pipeline/render/ColorTargetState.js +2 -2
- package/src/shade/descriptor/pipeline/render/FragmentState.js +2 -2
- package/src/shade/descriptor/pipeline/render/PrimitiveState.js +2 -2
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +8 -5
- package/src/shade/descriptor/pipeline/render/VertexAttribute.js +2 -2
- package/src/shade/descriptor/texture/SamplerDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/texture/SamplerDescriptor.js +20 -12
- package/src/shade/descriptor/texture/TextureDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/texture/TextureDescriptor.js +11 -7
- package/src/shade/device/graph/BufferResourceDescriptor.d.ts.map +1 -1
- package/src/shade/device/graph/BufferResourceDescriptor.js +196 -193
- package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
- package/src/shade/device/graph/TextureResourceDescriptor.js +178 -173
- package/src/shade/device/timing/profile/sgpt_read_header.js +1 -1
- package/src/shade/device/timing/profile/sgpt_read_records.js +1 -1
- package/src/shade/device/timing/profile/sgpt_write_header.js +1 -1
- package/src/shade/device/timing/profile/sgpt_write_record.js +1 -1
- package/src/shade/playground/image_decode_bench/main.js +2 -1
- package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js +2 -1
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +2 -1
- package/src/shade/playground/ssr_variance/statistics.d.ts.map +1 -1
- package/src/shade/playground/ssr_variance/statistics.js +2 -1
- package/src/shade/playground/texture_encode/main.d.ts.map +1 -1
- package/src/shade/playground/texture_encode/main.js +2 -1
- package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/measure.js +2 -1
- package/src/shade/renderer/binding/BufferBinding.js +2 -2
- package/src/shade/renderer/buffer/table/gpu_database_check_links.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/gpu_database_check_links.js +2 -1
- package/src/shade/renderer/camera/Camera.js +2 -2
- package/src/shade/renderer/geometry/Attribute.js +2 -2
- package/src/shade/renderer/geometry/Geometry.js +2 -2
- package/src/shade/renderer/geometry/geometry_deduplicate_vertices.js +2 -2
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +2 -2
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +3 -2
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js +3 -2
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +2 -1
- package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_asset_id.js +13 -13
- package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_directory_block_checksum.js +41 -41
- package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_frame_checksum.js +41 -41
- package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_header_checksum.js +25 -25
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +3 -2
- package/src/shade/renderer/material/StandardShadeMaterial.d.ts.map +1 -1
- package/src/shade/renderer/material/StandardShadeMaterial.js +13 -8
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +3 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.js +14 -5
- package/src/shade/renderer/scene/optimization/sampler2d_from_image_bitmap.js +1 -1
- package/src/shade/renderer/shader/type/WGSLStructField.js +2 -2
- package/src/shade/renderer/shader/type/WebGPUArray.js +2 -2
- package/src/shade/renderer/shader/type/WebGPUStruct.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/WebGPUStruct.js +9 -6
- package/src/shade/renderer/texture/ShadeTexture.d.ts.map +1 -1
- package/src/shade/renderer/texture/ShadeTexture.js +17 -10
- package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +2 -2
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +4 -4
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +6 -6
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +46 -55
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +3 -3
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +14 -4
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +10 -1
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +82 -40
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +4 -1
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +8 -4
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +98 -86
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/shader_water_particles.js +440 -298
- package/src/view/common/HTMLElementCacheKey.d.ts.map +1 -1
- package/src/view/common/HTMLElementCacheKey.js +4 -3
- 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,
|
|
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
|
-
|
|
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,
|
|
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
|
|
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"}
|