@woosh/meep-engine 3.43.0 → 3.45.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/editor/prototypeEditorShell.d.ts.map +1 -1
- package/editor/prototypeEditorShell.js +4 -2
- package/package.json +1 -1
- 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/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/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/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/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/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/engine/Clock.d.ts +15 -0
- package/src/engine/Clock.d.ts.map +1 -1
- package/src/engine/Clock.js +29 -5
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +11 -19
- 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/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/mesh-v2/MeshSkin.d.ts +57 -0
- package/src/engine/graphics/ecs/mesh-v2/MeshSkin.d.ts.map +1 -0
- package/src/engine/graphics/ecs/mesh-v2/MeshSkin.js +84 -0
- 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/graphics3/AnimationGraphSystem.d.ts +28 -13
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +107 -64
- package/src/engine/graphics3/AnimationSystem.d.ts +29 -15
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem.js +112 -61
- package/src/engine/graphics3/MeshSkinSystem.d.ts +56 -0
- package/src/engine/graphics3/MeshSkinSystem.d.ts.map +1 -0
- package/src/engine/graphics3/MeshSkinSystem.js +317 -0
- package/src/engine/graphics3/MeshSystem.d.ts +15 -35
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +21 -298
- package/src/engine/graphics3/RowChains.d.ts +76 -0
- package/src/engine/graphics3/RowChains.d.ts.map +1 -0
- package/src/engine/graphics3/RowChains.js +347 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +6 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +329 -309
- package/src/engine/graphics3/animation/AnimationClips.d.ts +56 -0
- package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -0
- package/src/engine/graphics3/animation/AnimationClips.js +79 -0
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +13 -14
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts.map +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +262 -263
- package/src/engine/graphics3/animation/write_clip_playback.d.ts +3 -3
- package/src/engine/graphics3/animation/write_clip_playback.js +4 -4
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +5 -0
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts.map +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +80 -75
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts +4 -24
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/PrefabInstance.js +60 -80
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts +16 -3
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_instantiate.js +49 -12
- package/src/engine/graphics3/prefab/prefab_place.d.ts +31 -17
- package/src/engine/graphics3/prefab/prefab_place.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_place.js +175 -130
- package/src/engine/graphics3/register_clips.d.ts +93 -0
- package/src/engine/graphics3/register_clips.d.ts.map +1 -0
- package/src/engine/graphics3/register_clips.js +166 -0
- 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/MEASUREMENTS.md +795 -0
- package/src/engine/physics/cloth/PLAN.md +349 -17
- package/src/engine/physics/cloth/build/ClothProxy.d.ts +113 -61
- package/src/engine/physics/cloth/build/ClothProxy.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/ClothProxy.js +142 -77
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts +44 -0
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts.map +1 -0
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.js +107 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts +43 -30
- 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 +371 -284
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts +62 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts.map +1 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.js +275 -0
- 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 +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +17 -62
- package/src/engine/physics/cloth/ecs/Cloth.d.ts +17 -9
- package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/Cloth.js +220 -212
- 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/ClothDynamicsFlags.js +6 -0
- package/src/engine/physics/cloth/ecs/ClothHold.d.ts +91 -0
- package/src/engine/physics/cloth/ecs/ClothHold.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothHold.js +103 -0
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +254 -48
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +277 -47
- package/src/engine/physics/cloth/ecs/ClothPin.d.ts +73 -0
- package/src/engine/physics/cloth/ecs/ClothPin.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothPin.js +92 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.d.ts +36 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.js +61 -0
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts +23 -17
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothRig.js +29 -27
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +12 -14
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +20 -15
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts +57 -36
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +754 -207
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +12 -13
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +20 -14
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts +63 -11
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.js +297 -101
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts +9 -7
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +12 -10
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +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 +60 -120
- package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts +37 -0
- package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_geodesic.js +135 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.d.ts +97 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.js +583 -0
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts +2 -2
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +168 -51
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +17 -22
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +55 -117
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts +21 -6
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +51 -42
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +5 -0
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +62 -50
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.js +65 -58
- 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 +3 -29
- package/src/engine/physics/cloth/playground/garment_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/garment_build.js +17 -5
- package/src/engine/physics/cloth/playground/garment_main.js +5 -20
- package/src/engine/physics/cloth/playground/main.js +6 -48
- package/src/engine/physics/cloth/playground/rig_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/rig_build.js +302 -296
- 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 +45 -7
- package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/ClothState.js +79 -83
- 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 +6 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.js +9 -3
- package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts +114 -0
- package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_hold_line.js +350 -0
- 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 +6 -2
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_self_find.js +19 -68
- 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_solver_constants.d.ts +24 -12
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solver_constants.js +24 -12
- package/src/engine/physics/cloth/solver/cloth_step.d.ts +16 -0
- package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step.js +189 -48
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts +1 -0
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step_instance.js +12 -6
- 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/solver/constraint/cloth_leash_row.d.ts +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.js +353 -346
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts +7 -5
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.js +7 -5
- 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 +12 -10
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/cloth_sample_air.js +60 -82
- 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/ecs/FluidObstacleSystem.d.ts +4 -4
- 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/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/simulation/Ticker.d.ts +13 -0
- package/src/engine/simulation/Ticker.d.ts.map +1 -1
- package/src/engine/simulation/Ticker.js +43 -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/RENDERER_CONTRACT.md +8 -2
- package/src/shade/playground/image_decode_bench/main.js +2 -1
- package/src/shade/playground/mesh_row_ceiling/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_blas_refit/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/main.js +11 -19
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts +6 -3
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/place_character.js +90 -90
- package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/main.js +502 -509
- 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/README.md +129 -109
- package/src/shade/playground/texture_encode/main.d.ts.map +1 -1
- package/src/shade/playground/texture_encode/main.js +1431 -1430
- 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/animation/GPUAnimationManager.d.ts +45 -14
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +316 -64
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +5 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +11 -1
- 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/geometry/BoxGeometry.d.ts +1 -11
- package/src/shade/renderer/geometry/BoxGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/BoxGeometry.js +6 -13
- package/src/shade/renderer/geometry/CapsuleGeometry.d.ts +19 -0
- package/src/shade/renderer/geometry/CapsuleGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/CapsuleGeometry.js +24 -0
- package/src/shade/renderer/geometry/ConeGeometry.d.ts +20 -0
- package/src/shade/renderer/geometry/ConeGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/ConeGeometry.js +33 -0
- package/src/shade/renderer/geometry/CylinderGeometry.d.ts +21 -0
- package/src/shade/renderer/geometry/CylinderGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/CylinderGeometry.js +35 -0
- package/src/shade/renderer/geometry/PlaneGeometry.d.ts +17 -0
- package/src/shade/renderer/geometry/PlaneGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/PlaneGeometry.js +22 -0
- package/src/shade/renderer/geometry/TorusGeometry.d.ts +18 -0
- package/src/shade/renderer/geometry/TorusGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/TorusGeometry.js +23 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.d.ts +21 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.js +34 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.d.ts +19 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.js +205 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.d.ts +21 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.js +36 -0
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.d.ts +1 -1
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.js +44 -9
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.d.ts +20 -0
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.js +190 -0
- 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/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/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +7 -2
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts +26 -8
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js +56 -39
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts +7 -0
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js +46 -4
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.js +4 -2
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/sort/defs.js +79 -79
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +7 -3
- package/src/shade/renderer/particles/GPUParticleSystem.js +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +4 -3
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +200 -194
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +6 -2
- 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/particles/warmup/graph_particle_warmup.d.ts.map +1 -1
- package/src/shade/renderer/particles/warmup/graph_particle_warmup.js +334 -329
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +7 -2
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +16 -4
- package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +2444 -2345
- package/src/shade/renderer/texture/encode/chunk_astc_encode_block_4x4_rgb.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_astc_encode_block_4x4_rgb.js +312 -310
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.d.ts +3 -3
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.js +383 -375
- package/src/shade/renderer/texture/encode/chunk_bc6h_encode_block_mode11.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc6h_encode_block_mode11.js +349 -346
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.d.ts +58 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.js +536 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.d.ts +21 -7
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.js +291 -327
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.d.ts +25 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.js +99 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.d.ts +5 -3
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.js +47 -71
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.d.ts +10 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.js +50 -0
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.d.ts +4 -5
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.js +7 -8
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_transport.js +7 -5
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +8 -2
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts +3 -2
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -1
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +3 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +3 -1
- package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/GPUWaterSurface.js +3 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +11 -4
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +37 -20
- package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
- package/src/shade/wgsl/validate_wgsl_source.js +74 -3
- package/src/engine/graphics3/register_instance_animation.d.ts +0 -114
- package/src/engine/graphics3/register_instance_animation.d.ts.map +0 -1
- package/src/engine/graphics3/register_instance_animation.js +0 -201
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prototypeEditorShell.d.ts","sourceRoot":"","sources":["../../editor/prototypeEditorShell.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prototypeEditorShell.d.ts","sourceRoot":"","sources":["../../editor/prototypeEditorShell.js"],"names":[],"mappings":"AAyLA;;;;;GAKG;AACH,2BAFU,QAAQ;IAAC,MAAM,SAAS;IAAC,MAAM,SAAS;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,UAAS;CAAC,CAAC,CAEzD"}
|
|
@@ -32,6 +32,7 @@ import {
|
|
|
32
32
|
import {
|
|
33
33
|
ShadedGeometrySystem
|
|
34
34
|
} from "../src/engine/graphics3/ShadedGeometrySystem.js";
|
|
35
|
+
import { MeshSkinSystem } from "../src/engine/graphics3/MeshSkinSystem.js";
|
|
35
36
|
import { GPUParticleEmitterSystem } from "../src/engine/graphics3/GPUParticleEmitterSystem.js";
|
|
36
37
|
import { enableEditor } from "./enableEditor.js";
|
|
37
38
|
|
|
@@ -96,9 +97,10 @@ async function addGraphicsSystems(engine) {
|
|
|
96
97
|
|
|
97
98
|
await em.addSystem(meshes);
|
|
98
99
|
|
|
99
|
-
// a model
|
|
100
|
-
// system that owns
|
|
100
|
+
// a model becomes entities: its primitives are drawn by the system that owns primitives
|
|
101
|
+
// (D47), and the skinned ones deformed by the system that owns skins
|
|
101
102
|
await em.addSystem(new ShadedGeometrySystem(engine.graphics, EngineHarness.shadeScene(engine)));
|
|
103
|
+
await em.addSystem(new MeshSkinSystem(engine.graphics, EngineHarness.shadeScene(engine)));
|
|
102
104
|
|
|
103
105
|
/*
|
|
104
106
|
One outline pass and both of its sources, because the editor offers a `Highlight` editor and
|
package/package.json
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sort `array[start, end)` ascending by `>`, in place, by insertion.
|
|
3
|
+
*
|
|
4
|
+
* For a few elements — a query's handful of hits — an insertion sort is as fast as anything
|
|
5
|
+
* cleverer and allocates nothing, where `Array.prototype.sort` copies the elements into a work array
|
|
6
|
+
* of its own on every call and `TypedArray.prototype.sort` over a range needs a `subarray` view. Its
|
|
7
|
+
* cost is quadratic, so a caller that can be handed many elements picks its own cut-over to
|
|
8
|
+
* something linear-logarithmic or a radix sort.
|
|
9
|
+
*
|
|
10
|
+
* Stable. Numbers only: the comparison is `>`, so a NaN never moves past anything and leaves the
|
|
11
|
+
* range unsorted around it.
|
|
12
|
+
*
|
|
13
|
+
* @param {number[]|Uint32Array|Int32Array|Float32Array|Float64Array} array
|
|
14
|
+
* @param {number} start first index of the range
|
|
15
|
+
* @param {number} end one past the last index of the range
|
|
16
|
+
* @returns {void}
|
|
17
|
+
*/
|
|
18
|
+
export function array_sort_insertion_ascending(array: number[] | Uint32Array | Int32Array | Float32Array | Float64Array, start: number, end: number): void;
|
|
19
|
+
//# sourceMappingURL=array_sort_insertion_ascending.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array_sort_insertion_ascending.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/array/array_sort_insertion_ascending.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,sDALW,MAAM,EAAE,GAAC,WAAW,GAAC,UAAU,GAAC,YAAY,GAAC,YAAY,SACzD,MAAM,OACN,MAAM,GACJ,IAAI,CAehB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sort `array[start, end)` ascending by `>`, in place, by insertion.
|
|
3
|
+
*
|
|
4
|
+
* For a few elements — a query's handful of hits — an insertion sort is as fast as anything
|
|
5
|
+
* cleverer and allocates nothing, where `Array.prototype.sort` copies the elements into a work array
|
|
6
|
+
* of its own on every call and `TypedArray.prototype.sort` over a range needs a `subarray` view. Its
|
|
7
|
+
* cost is quadratic, so a caller that can be handed many elements picks its own cut-over to
|
|
8
|
+
* something linear-logarithmic or a radix sort.
|
|
9
|
+
*
|
|
10
|
+
* Stable. Numbers only: the comparison is `>`, so a NaN never moves past anything and leaves the
|
|
11
|
+
* range unsorted around it.
|
|
12
|
+
*
|
|
13
|
+
* @param {number[]|Uint32Array|Int32Array|Float32Array|Float64Array} array
|
|
14
|
+
* @param {number} start first index of the range
|
|
15
|
+
* @param {number} end one past the last index of the range
|
|
16
|
+
* @returns {void}
|
|
17
|
+
*/
|
|
18
|
+
export function array_sort_insertion_ascending(array, start, end) {
|
|
19
|
+
for (let i = start + 1; i < end; i++) {
|
|
20
|
+
const v = array[i];
|
|
21
|
+
|
|
22
|
+
let j = i - 1;
|
|
23
|
+
|
|
24
|
+
while (j >= start && array[j] > v) {
|
|
25
|
+
array[j + 1] = array[j];
|
|
26
|
+
j--;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
array[j + 1] = v;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -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
|
*/
|
|
@@ -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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { assert } from "../../../assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Limit a rotation's angle: `out` turns about the same axis as `q` by `min(θ, max_angle)`, exactly.
|
|
5
|
+
*
|
|
6
|
+
* The rotation is read as an axis and an angle and the angle is replaced, so the answer is the
|
|
7
|
+
* limit itself and not an approximation of it. The alternative it exists to replace — nlerp from
|
|
8
|
+
* the identity towards `q` by `max_angle / θ` — follows the chord rather than the arc and
|
|
9
|
+
* undershoots more the larger `θ` is: at `θ = π` asked for `π/4` it turns `0.64` rad, not `0.785`.
|
|
10
|
+
*
|
|
11
|
+
* `q` and `-q` name the same rotation; the angle is measured on the one with `w ≥ 0`, so `θ` is
|
|
12
|
+
* the shorter turn, in `[0, π]`. A rotation within the limit is passed through unchanged, sign
|
|
13
|
+
* included; one beyond it is written with `w ≥ 0`. The identity (no axis) is within any limit.
|
|
14
|
+
*
|
|
15
|
+
* Sign convention: `(x, y, z, w)` — `w` last, matching {@link Quaternion} and the rest of the
|
|
16
|
+
* `core/geom/3d/quaternion/` family.
|
|
17
|
+
*
|
|
18
|
+
* `out` may be `q`: every component is read before the first write.
|
|
19
|
+
*
|
|
20
|
+
* **Precondition: `q` is a unit quaternion.** The angle is `2·atan2(|v|, w)`, which does not care,
|
|
21
|
+
* but a limited rotation is written unit and an unlimited one as it came.
|
|
22
|
+
*
|
|
23
|
+
* @param {number[]|Float32Array|Float64Array} out
|
|
24
|
+
* @param {number} out_offset receives 4 floats (x, y, z, w)
|
|
25
|
+
* @param {number[]|Float32Array|Float64Array} q `[x, y, z, w]`
|
|
26
|
+
* @param {number} q_offset
|
|
27
|
+
* @param {number} max_angle radians, `≥ 0`
|
|
28
|
+
*/
|
|
29
|
+
export function quat3_clamp_angle_array(out, out_offset, q, q_offset, max_angle) {
|
|
30
|
+
assert.isNumber(max_angle, 'max_angle');
|
|
31
|
+
assert.greaterThanOrEqual(max_angle, 0, 'max_angle must be non-negative');
|
|
32
|
+
|
|
33
|
+
let x = q[q_offset], y = q[q_offset + 1], z = q[q_offset + 2], w = q[q_offset + 3];
|
|
34
|
+
|
|
35
|
+
const pass_x = x, pass_y = y, pass_z = z, pass_w = w;
|
|
36
|
+
|
|
37
|
+
if (w < 0) {
|
|
38
|
+
x = -x;
|
|
39
|
+
y = -y;
|
|
40
|
+
z = -z;
|
|
41
|
+
w = -w;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const sin_half = Math.sqrt(x * x + y * y + z * z);
|
|
45
|
+
|
|
46
|
+
// atan2 rather than acos(w): accurate near the identity, where acos loses half the digits
|
|
47
|
+
const angle = 2 * Math.atan2(sin_half, w);
|
|
48
|
+
|
|
49
|
+
if (angle <= max_angle) {
|
|
50
|
+
out[out_offset] = pass_x;
|
|
51
|
+
out[out_offset + 1] = pass_y;
|
|
52
|
+
out[out_offset + 2] = pass_z;
|
|
53
|
+
out[out_offset + 3] = pass_w;
|
|
54
|
+
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// sin_half > 0 here: a zero vector part has angle 0, within any limit
|
|
59
|
+
const half = max_angle * 0.5;
|
|
60
|
+
const k = Math.sin(half) / sin_half;
|
|
61
|
+
|
|
62
|
+
out[out_offset] = x * k;
|
|
63
|
+
out[out_offset + 1] = y * k;
|
|
64
|
+
out[out_offset + 2] = z * k;
|
|
65
|
+
out[out_offset + 3] = Math.cos(half);
|
|
66
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hamilton product with the left operand conjugated, `out = a* ⊗ b`, both read from arrays.
|
|
3
|
+
*
|
|
4
|
+
* For unit quaternions the conjugate is the inverse, so this is `a⁻¹ ⊗ b`: the rotation `b` expressed
|
|
5
|
+
* in the frame `a` rotates into — a world orientation written in a parent's or a body's frame. Callers
|
|
6
|
+
* used to build `a*` in a scratch array and hand it to {@link quat3_multiply_array}; the conjugate's
|
|
7
|
+
* signs are folded into the product here instead, so there is no scratch and no extra pass.
|
|
8
|
+
*
|
|
9
|
+
* Sign convention: `(x, y, z, w)` — `w` last, matching {@link Quaternion} and the rest of the
|
|
10
|
+
* `core/geom/3d/quaternion/` family.
|
|
11
|
+
*
|
|
12
|
+
* `out` may be `a` or `b`: all eight components are read before the first write.
|
|
13
|
+
*
|
|
14
|
+
* @param {number[]|Float32Array|Float64Array} out
|
|
15
|
+
* @param {number} out_offset offset into `out`; receives 4 floats (x, y, z, w)
|
|
16
|
+
* @param {number[]|Float32Array|Float64Array} a `[x, y, z, w]`, the operand that is conjugated
|
|
17
|
+
* @param {number} a_offset
|
|
18
|
+
* @param {number[]|Float32Array|Float64Array} b `[x, y, z, w]`
|
|
19
|
+
* @param {number} b_offset
|
|
20
|
+
*/
|
|
21
|
+
export function quat3_multiply_conjugate_left_array(out: number[] | Float32Array | Float64Array, out_offset: number, a: number[] | Float32Array | Float64Array, a_offset: number, b: number[] | Float32Array | Float64Array, b_offset: number): void;
|
|
22
|
+
//# sourceMappingURL=quat3_multiply_conjugate_left_array.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quat3_multiply_conjugate_left_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,yDAPW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,QAWhB"}
|