@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,66 @@
|
|
|
1
|
+
import { assert } from "../../../assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Limit a rotation's angle: `out` turns about the same axis as `q` by `min(θ, max_angle)`, exactly.
|
|
5
|
+
*
|
|
6
|
+
* The rotation is read as an axis and an angle and the angle is replaced, so the answer is the
|
|
7
|
+
* limit itself and not an approximation of it. The alternative it exists to replace — nlerp from
|
|
8
|
+
* the identity towards `q` by `max_angle / θ` — follows the chord rather than the arc and
|
|
9
|
+
* undershoots more the larger `θ` is: at `θ = π` asked for `π/4` it turns `0.64` rad, not `0.785`.
|
|
10
|
+
*
|
|
11
|
+
* `q` and `-q` name the same rotation; the angle is measured on the one with `w ≥ 0`, so `θ` is
|
|
12
|
+
* the shorter turn, in `[0, π]`. A rotation within the limit is passed through unchanged, sign
|
|
13
|
+
* included; one beyond it is written with `w ≥ 0`. The identity (no axis) is within any limit.
|
|
14
|
+
*
|
|
15
|
+
* Sign convention: `(x, y, z, w)` — `w` last, matching {@link Quaternion} and the rest of the
|
|
16
|
+
* `core/geom/3d/quaternion/` family.
|
|
17
|
+
*
|
|
18
|
+
* `out` may be `q`: every component is read before the first write.
|
|
19
|
+
*
|
|
20
|
+
* **Precondition: `q` is a unit quaternion.** The angle is `2·atan2(|v|, w)`, which does not care,
|
|
21
|
+
* but a limited rotation is written unit and an unlimited one as it came.
|
|
22
|
+
*
|
|
23
|
+
* @param {number[]|Float32Array|Float64Array} out
|
|
24
|
+
* @param {number} out_offset receives 4 floats (x, y, z, w)
|
|
25
|
+
* @param {number[]|Float32Array|Float64Array} q `[x, y, z, w]`
|
|
26
|
+
* @param {number} q_offset
|
|
27
|
+
* @param {number} max_angle radians, `≥ 0`
|
|
28
|
+
*/
|
|
29
|
+
export function quat3_clamp_angle_array(out, out_offset, q, q_offset, max_angle) {
|
|
30
|
+
assert.isNumber(max_angle, 'max_angle');
|
|
31
|
+
assert.greaterThanOrEqual(max_angle, 0, 'max_angle must be non-negative');
|
|
32
|
+
|
|
33
|
+
let x = q[q_offset], y = q[q_offset + 1], z = q[q_offset + 2], w = q[q_offset + 3];
|
|
34
|
+
|
|
35
|
+
const pass_x = x, pass_y = y, pass_z = z, pass_w = w;
|
|
36
|
+
|
|
37
|
+
if (w < 0) {
|
|
38
|
+
x = -x;
|
|
39
|
+
y = -y;
|
|
40
|
+
z = -z;
|
|
41
|
+
w = -w;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const sin_half = Math.sqrt(x * x + y * y + z * z);
|
|
45
|
+
|
|
46
|
+
// atan2 rather than acos(w): accurate near the identity, where acos loses half the digits
|
|
47
|
+
const angle = 2 * Math.atan2(sin_half, w);
|
|
48
|
+
|
|
49
|
+
if (angle <= max_angle) {
|
|
50
|
+
out[out_offset] = pass_x;
|
|
51
|
+
out[out_offset + 1] = pass_y;
|
|
52
|
+
out[out_offset + 2] = pass_z;
|
|
53
|
+
out[out_offset + 3] = pass_w;
|
|
54
|
+
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// sin_half > 0 here: a zero vector part has angle 0, within any limit
|
|
59
|
+
const half = max_angle * 0.5;
|
|
60
|
+
const k = Math.sin(half) / sin_half;
|
|
61
|
+
|
|
62
|
+
out[out_offset] = x * k;
|
|
63
|
+
out[out_offset + 1] = y * k;
|
|
64
|
+
out[out_offset + 2] = z * k;
|
|
65
|
+
out[out_offset + 3] = Math.cos(half);
|
|
66
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hamilton product with the left operand conjugated, `out = a* ⊗ b`, both read from arrays.
|
|
3
|
+
*
|
|
4
|
+
* For unit quaternions the conjugate is the inverse, so this is `a⁻¹ ⊗ b`: the rotation `b` expressed
|
|
5
|
+
* in the frame `a` rotates into — a world orientation written in a parent's or a body's frame. Callers
|
|
6
|
+
* used to build `a*` in a scratch array and hand it to {@link quat3_multiply_array}; the conjugate's
|
|
7
|
+
* signs are folded into the product here instead, so there is no scratch and no extra pass.
|
|
8
|
+
*
|
|
9
|
+
* Sign convention: `(x, y, z, w)` — `w` last, matching {@link Quaternion} and the rest of the
|
|
10
|
+
* `core/geom/3d/quaternion/` family.
|
|
11
|
+
*
|
|
12
|
+
* `out` may be `a` or `b`: all eight components are read before the first write.
|
|
13
|
+
*
|
|
14
|
+
* @param {number[]|Float32Array|Float64Array} out
|
|
15
|
+
* @param {number} out_offset offset into `out`; receives 4 floats (x, y, z, w)
|
|
16
|
+
* @param {number[]|Float32Array|Float64Array} a `[x, y, z, w]`, the operand that is conjugated
|
|
17
|
+
* @param {number} a_offset
|
|
18
|
+
* @param {number[]|Float32Array|Float64Array} b `[x, y, z, w]`
|
|
19
|
+
* @param {number} b_offset
|
|
20
|
+
*/
|
|
21
|
+
export function quat3_multiply_conjugate_left_array(out: number[] | Float32Array | Float64Array, out_offset: number, a: number[] | Float32Array | Float64Array, a_offset: number, b: number[] | Float32Array | Float64Array, b_offset: number): void;
|
|
22
|
+
//# sourceMappingURL=quat3_multiply_conjugate_left_array.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quat3_multiply_conjugate_left_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,yDAPW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,QAWhB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hamilton product with the left operand conjugated, `out = a* ⊗ b`, both read from arrays.
|
|
3
|
+
*
|
|
4
|
+
* For unit quaternions the conjugate is the inverse, so this is `a⁻¹ ⊗ b`: the rotation `b` expressed
|
|
5
|
+
* in the frame `a` rotates into — a world orientation written in a parent's or a body's frame. Callers
|
|
6
|
+
* used to build `a*` in a scratch array and hand it to {@link quat3_multiply_array}; the conjugate's
|
|
7
|
+
* signs are folded into the product here instead, so there is no scratch and no extra pass.
|
|
8
|
+
*
|
|
9
|
+
* Sign convention: `(x, y, z, w)` — `w` last, matching {@link Quaternion} and the rest of the
|
|
10
|
+
* `core/geom/3d/quaternion/` family.
|
|
11
|
+
*
|
|
12
|
+
* `out` may be `a` or `b`: all eight components are read before the first write.
|
|
13
|
+
*
|
|
14
|
+
* @param {number[]|Float32Array|Float64Array} out
|
|
15
|
+
* @param {number} out_offset offset into `out`; receives 4 floats (x, y, z, w)
|
|
16
|
+
* @param {number[]|Float32Array|Float64Array} a `[x, y, z, w]`, the operand that is conjugated
|
|
17
|
+
* @param {number} a_offset
|
|
18
|
+
* @param {number[]|Float32Array|Float64Array} b `[x, y, z, w]`
|
|
19
|
+
* @param {number} b_offset
|
|
20
|
+
*/
|
|
21
|
+
export function quat3_multiply_conjugate_left_array(out, out_offset, a, a_offset, b, b_offset) {
|
|
22
|
+
const ax = a[a_offset], ay = a[a_offset + 1], az = a[a_offset + 2], aw = a[a_offset + 3];
|
|
23
|
+
const bx = b[b_offset], by = b[b_offset + 1], bz = b[b_offset + 2], bw = b[b_offset + 3];
|
|
24
|
+
|
|
25
|
+
// quat3_multiply with (ax, ay, az) negated
|
|
26
|
+
out[out_offset] = aw * bx - ax * bw - ay * bz + az * by;
|
|
27
|
+
out[out_offset + 1] = aw * by + ax * bz - ay * bw - az * bx;
|
|
28
|
+
out[out_offset + 2] = aw * bz - ax * by + ay * bx - az * bw;
|
|
29
|
+
out[out_offset + 3] = aw * bw + ax * bx + ay * by + az * bz;
|
|
30
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hamilton product with the right operand conjugated, `out = a ⊗ b*`, both read from arrays.
|
|
3
|
+
*
|
|
4
|
+
* For unit quaternions the conjugate is the inverse, so this is `a ⊗ b⁻¹`: the world-frame rotation
|
|
5
|
+
* that takes orientation `b` to orientation `a` — the turn a holder made since a hold began, the
|
|
6
|
+
* rotation a body must make to reach a target. Callers used to build `b*` in a scratch array, or pass
|
|
7
|
+
* its components negated, to {@link quat3_multiply_array}; the conjugate's signs are folded into the
|
|
8
|
+
* product here instead.
|
|
9
|
+
*
|
|
10
|
+
* Sign convention: `(x, y, z, w)` — `w` last, matching {@link Quaternion} and the rest of the
|
|
11
|
+
* `core/geom/3d/quaternion/` family.
|
|
12
|
+
*
|
|
13
|
+
* `out` may be `a` or `b`: all eight components are read before the first write.
|
|
14
|
+
*
|
|
15
|
+
* @param {number[]|Float32Array|Float64Array} out
|
|
16
|
+
* @param {number} out_offset offset into `out`; receives 4 floats (x, y, z, w)
|
|
17
|
+
* @param {number[]|Float32Array|Float64Array} a `[x, y, z, w]`
|
|
18
|
+
* @param {number} a_offset
|
|
19
|
+
* @param {number[]|Float32Array|Float64Array} b `[x, y, z, w]`, the operand that is conjugated
|
|
20
|
+
* @param {number} b_offset
|
|
21
|
+
*/
|
|
22
|
+
export function quat3_multiply_conjugate_right_array(out: number[] | Float32Array | Float64Array, out_offset: number, a: number[] | Float32Array | Float64Array, a_offset: number, b: number[] | Float32Array | Float64Array, b_offset: number): void;
|
|
23
|
+
//# sourceMappingURL=quat3_multiply_conjugate_right_array.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quat3_multiply_conjugate_right_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,0DAPW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,QAWhB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hamilton product with the right operand conjugated, `out = a ⊗ b*`, both read from arrays.
|
|
3
|
+
*
|
|
4
|
+
* For unit quaternions the conjugate is the inverse, so this is `a ⊗ b⁻¹`: the world-frame rotation
|
|
5
|
+
* that takes orientation `b` to orientation `a` — the turn a holder made since a hold began, the
|
|
6
|
+
* rotation a body must make to reach a target. Callers used to build `b*` in a scratch array, or pass
|
|
7
|
+
* its components negated, to {@link quat3_multiply_array}; the conjugate's signs are folded into the
|
|
8
|
+
* product here instead.
|
|
9
|
+
*
|
|
10
|
+
* Sign convention: `(x, y, z, w)` — `w` last, matching {@link Quaternion} and the rest of the
|
|
11
|
+
* `core/geom/3d/quaternion/` family.
|
|
12
|
+
*
|
|
13
|
+
* `out` may be `a` or `b`: all eight components are read before the first write.
|
|
14
|
+
*
|
|
15
|
+
* @param {number[]|Float32Array|Float64Array} out
|
|
16
|
+
* @param {number} out_offset offset into `out`; receives 4 floats (x, y, z, w)
|
|
17
|
+
* @param {number[]|Float32Array|Float64Array} a `[x, y, z, w]`
|
|
18
|
+
* @param {number} a_offset
|
|
19
|
+
* @param {number[]|Float32Array|Float64Array} b `[x, y, z, w]`, the operand that is conjugated
|
|
20
|
+
* @param {number} b_offset
|
|
21
|
+
*/
|
|
22
|
+
export function quat3_multiply_conjugate_right_array(out, out_offset, a, a_offset, b, b_offset) {
|
|
23
|
+
const ax = a[a_offset], ay = a[a_offset + 1], az = a[a_offset + 2], aw = a[a_offset + 3];
|
|
24
|
+
const bx = b[b_offset], by = b[b_offset + 1], bz = b[b_offset + 2], bw = b[b_offset + 3];
|
|
25
|
+
|
|
26
|
+
// quat3_multiply with (bx, by, bz) negated
|
|
27
|
+
out[out_offset] = ax * bw - aw * bx - ay * bz + az * by;
|
|
28
|
+
out[out_offset + 1] = ay * bw - aw * by + ax * bz - az * bx;
|
|
29
|
+
out[out_offset + 2] = az * bw - aw * bz - ax * by + ay * bx;
|
|
30
|
+
out[out_offset + 3] = aw * bw + ax * bx + ay * by + az * bz;
|
|
31
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The face normal of triangle `abc`, NOT normalised: the raw cross product `(c − b) × (a − b)`, whose
|
|
3
|
+
* magnitude is twice the triangle's area and whose direction follows the counter-clockwise winding
|
|
4
|
+
* `a → b → c`, the same winding {@link tri3_compute_normal} uses.
|
|
5
|
+
*
|
|
6
|
+
* The magnitude is the point. A pass that accumulates one normal per incident face and normalises at
|
|
7
|
+
* the end wants each face to pull in proportion to how much surface it is, so that a sliver beside a
|
|
8
|
+
* large face hardly moves the result and retriangulating the same surface does not change it. A
|
|
9
|
+
* triangle with no area contributes a zero vector, which is the right vote for nothing, where a
|
|
10
|
+
* normalising helper has to invent some unit vector.
|
|
11
|
+
*
|
|
12
|
+
* Each corner is its own array and offset, so corners may live in one shared position buffer
|
|
13
|
+
* (`positions, index * 3`) or anywhere else. `out` may alias any of them.
|
|
14
|
+
*
|
|
15
|
+
* @param {number[]|Float32Array|Float64Array} out
|
|
16
|
+
* @param {number} out_offset
|
|
17
|
+
* @param {number[]|Float32Array|Float64Array} a
|
|
18
|
+
* @param {number} a_offset
|
|
19
|
+
* @param {number[]|Float32Array|Float64Array} b
|
|
20
|
+
* @param {number} b_offset
|
|
21
|
+
* @param {number[]|Float32Array|Float64Array} c
|
|
22
|
+
* @param {number} c_offset
|
|
23
|
+
* @returns {void}
|
|
24
|
+
*/
|
|
25
|
+
export function tri3_compute_normal_area_weighted_array(out: number[] | Float32Array | Float64Array, out_offset: number, a: number[] | Float32Array | Float64Array, a_offset: number, b: number[] | Float32Array | Float64Array, b_offset: number, c: number[] | Float32Array | Float64Array, c_offset: number): void;
|
|
26
|
+
//# sourceMappingURL=tri3_compute_normal_area_weighted_array.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tri3_compute_normal_area_weighted_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,6DAVW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,GACJ,IAAI,CAuBhB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The face normal of triangle `abc`, NOT normalised: the raw cross product `(c − b) × (a − b)`, whose
|
|
3
|
+
* magnitude is twice the triangle's area and whose direction follows the counter-clockwise winding
|
|
4
|
+
* `a → b → c`, the same winding {@link tri3_compute_normal} uses.
|
|
5
|
+
*
|
|
6
|
+
* The magnitude is the point. A pass that accumulates one normal per incident face and normalises at
|
|
7
|
+
* the end wants each face to pull in proportion to how much surface it is, so that a sliver beside a
|
|
8
|
+
* large face hardly moves the result and retriangulating the same surface does not change it. A
|
|
9
|
+
* triangle with no area contributes a zero vector, which is the right vote for nothing, where a
|
|
10
|
+
* normalising helper has to invent some unit vector.
|
|
11
|
+
*
|
|
12
|
+
* Each corner is its own array and offset, so corners may live in one shared position buffer
|
|
13
|
+
* (`positions, index * 3`) or anywhere else. `out` may alias any of them.
|
|
14
|
+
*
|
|
15
|
+
* @param {number[]|Float32Array|Float64Array} out
|
|
16
|
+
* @param {number} out_offset
|
|
17
|
+
* @param {number[]|Float32Array|Float64Array} a
|
|
18
|
+
* @param {number} a_offset
|
|
19
|
+
* @param {number[]|Float32Array|Float64Array} b
|
|
20
|
+
* @param {number} b_offset
|
|
21
|
+
* @param {number[]|Float32Array|Float64Array} c
|
|
22
|
+
* @param {number} c_offset
|
|
23
|
+
* @returns {void}
|
|
24
|
+
*/
|
|
25
|
+
export function tri3_compute_normal_area_weighted_array(
|
|
26
|
+
out, out_offset,
|
|
27
|
+
a, a_offset,
|
|
28
|
+
b, b_offset,
|
|
29
|
+
c, c_offset
|
|
30
|
+
) {
|
|
31
|
+
const bx = b[b_offset];
|
|
32
|
+
const by = b[b_offset + 1];
|
|
33
|
+
const bz = b[b_offset + 2];
|
|
34
|
+
|
|
35
|
+
const cb_x = c[c_offset] - bx;
|
|
36
|
+
const cb_y = c[c_offset + 1] - by;
|
|
37
|
+
const cb_z = c[c_offset + 2] - bz;
|
|
38
|
+
|
|
39
|
+
const ab_x = a[a_offset] - bx;
|
|
40
|
+
const ab_y = a[a_offset + 1] - by;
|
|
41
|
+
const ab_z = a[a_offset + 2] - bz;
|
|
42
|
+
|
|
43
|
+
out[out_offset] = cb_y * ab_z - cb_z * ab_y;
|
|
44
|
+
out[out_offset + 1] = cb_z * ab_x - cb_x * ab_z;
|
|
45
|
+
out[out_offset + 2] = cb_x * ab_y - cb_y * ab_x;
|
|
46
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { assert } from "../assert.js";
|
|
2
|
-
import {
|
|
2
|
+
import { hash_mix2 } from "../math/hash/hash_mix2.js";
|
|
3
3
|
import { EPSILON } from "../math/EPSILON.js";
|
|
4
4
|
import { epsilonEquals } from "../math/epsilonEquals.js";
|
|
5
5
|
import { PI2 } from "../math/PI2.js";
|
|
@@ -90,7 +90,7 @@ export class ConicRay {
|
|
|
90
90
|
* @return {number}
|
|
91
91
|
*/
|
|
92
92
|
hash() {
|
|
93
|
-
return
|
|
93
|
+
return hash_mix2(
|
|
94
94
|
computeHashFloat(this.angle),
|
|
95
95
|
this.direction.hash()
|
|
96
96
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Vector4.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Vector4.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Vector4.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Vector4.js"],"names":[],"mappings":"AAOA;;;GAGG;AAGH;;GAEG;AACH;;;;;;;;;;;;;GAaG;AACH,8DAFwB,MAAM;IAyc1B;;;;;;OAMG;IACH,gBALW,OAAO,MACP,OAAO,qBAEP,OAAO,QASjB;IAtbD;;;;OAIG;IACH,uDAEC;IArCD;;;;;;;;OAQG;IACH,gBAPW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,EAuBhB;IAXG,UAAW;IACX,UAAW;IACX,UAAW;IACX,UAAW;IAEX;;;;OAIG;IACH,wBAA6B;IAoBjC;;;OAGG;IACH,iBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,iBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,iBAEC;IAdD;;;OAGG;IACH,gBAEC;IAkBD;;;OAGG;IACH,iBAEC;IAdD;;;OAGG;IACH,gBAEC;IAUD;;;;OAIG;IACH,qBAHW,MAAM,EAAE,WACR,MAAM,QAShB;IAED;;;;OAIG;IACH,oBAHW,MAAM,EAAE,WACR,MAAM,QAOhB;IAED;;;;;;;OAOG;IACH,iDAFa,OAAO,CAkCnB;IAED;;;OAGG;IACH,oBAFW,OAAO,QAQjB;IAED;;;;OAIG;IACH,+BAFa,OAAO,CAOnB;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,kBAlBW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,OAAO,CAoBnB;IAED;;;;OAIG;IACH,WAHW,OAAO,GACL,MAAM,CAIlB;IAED;;;;OAIG;IACH,SAHW,OAAO,GAAC,OAAO,GACb,OAAO,CASnB;IAED;;;;;;;OAOG;IACH,QANW,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,GACJ,IAAI,CAShB;IAED;;;;;OAKG;IACH,iBAJW,OAAO,SACP,MAAM,GACJ,IAAI,CAShB;IAED;;;;OAIG;IACH,qBAHW;QAAC,QAAQ,EAAE,MAAM,EAAE,GAAC,YAAY,CAAA;KAAC,GAC/B,OAAO,CAInB;IAED;;;;OAIG;IACH,gBAHW,MAAM,EAAE,GAAC,YAAY,GACpB,OAAO,CASlB;IAED;;;;OAIG;IACH,WAHW,OAAO,GACL,OAAO,CAInB;IAED;;;OAGG;IACH,SAFa,OAAO,CAQnB;IAED;;;OAGG;IACH,mBAFW,UAAU,QAyBpB;IAED;;;;OAIG;IACH,aAHW,OAAO,GACL,OAAO,CAInB;IAED;;;OAGG;IACH,QAFY,MAAM,CAWjB;IAED;;;;OAIG;IACH,gBAJW,OAAO,MACP,OAAO,mBAKjB;IAGD;;OAEG;IACH,WAFa,MAAM,EAAE,CAQpB;IAED;;;;OAIG;IACH,mBAHW,MAAM,EAAE,UACR,MAAM,QAIhB;IAED;;;;;MAOC;IAED,0BAEC;IAED;;;OAGG;IACH,uBAFW,YAAY,QAOtB;IAED;;;OAGG;IACH,yBAFW,YAAY,QAStB;IAmBL;;;OAGG;IACH,oBAFU,OAAO,CAEU;IAE3B,mBApXe,MAAM,EAAE,WACR,MAAM,UAmXM;IAC3B,iBAvWe,MAAM,EAAE,WACR,MAAM,UAsWI;CATxB;;kBAaS,MAAM;;;yBAzfH,OAAO,iBAAiB,EAAE,UAAU;sBACpC,OAAO,cAAc,EAAE,OAAO;2BAK9B,OAAO,2BAA2B,EAAE,YAAY"}
|
package/src/core/geom/Vector4.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { assert } from "../assert.js";
|
|
2
|
-
import {
|
|
2
|
+
import { hash_mix2 } from "../math/hash/hash_mix2.js";
|
|
3
|
+
import { hash_mix3 } from "../math/hash/hash_mix3.js";
|
|
3
4
|
import { Signal } from "../events/signal/Signal.js";
|
|
4
5
|
import { lerp } from "../math/lerp.js";
|
|
5
6
|
import { computeHashFloat } from "../primitives/numbers/computeHashFloat.js";
|
|
@@ -405,10 +406,12 @@ export class Vector4 extends Float64Array {
|
|
|
405
406
|
* @return {number}
|
|
406
407
|
*/
|
|
407
408
|
hash() {
|
|
408
|
-
return
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
409
|
+
return hash_mix2(
|
|
410
|
+
hash_mix3(
|
|
411
|
+
computeHashFloat(this[0]),
|
|
412
|
+
computeHashFloat(this[1]),
|
|
413
|
+
computeHashFloat(this[2])
|
|
414
|
+
),
|
|
412
415
|
computeHashFloat(this[3])
|
|
413
416
|
);
|
|
414
417
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Euclidean distance between two 3-vectors stored in arrays.
|
|
3
|
+
*
|
|
4
|
+
* @param {number[]|Float32Array|Float64Array} a
|
|
5
|
+
* @param {number} a_offset
|
|
6
|
+
* @param {number[]|Float32Array|Float64Array} b
|
|
7
|
+
* @param {number} b_offset
|
|
8
|
+
* @returns {number}
|
|
9
|
+
*/
|
|
10
|
+
export function v3_distance_array(a: number[] | Float32Array | Float64Array, a_offset: number, b: number[] | Float32Array | Float64Array, b_offset: number): number;
|
|
11
|
+
//# sourceMappingURL=v3_distance_array.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3_distance_array.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_distance_array.js"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,qCANW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,KACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,YAClC,MAAM,GACJ,MAAM,CAWlB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Euclidean distance between two 3-vectors stored in arrays.
|
|
3
|
+
*
|
|
4
|
+
* @param {number[]|Float32Array|Float64Array} a
|
|
5
|
+
* @param {number} a_offset
|
|
6
|
+
* @param {number[]|Float32Array|Float64Array} b
|
|
7
|
+
* @param {number} b_offset
|
|
8
|
+
* @returns {number}
|
|
9
|
+
*/
|
|
10
|
+
export function v3_distance_array(
|
|
11
|
+
a, a_offset,
|
|
12
|
+
b, b_offset
|
|
13
|
+
) {
|
|
14
|
+
const dx = b[b_offset] - a[a_offset];
|
|
15
|
+
const dy = b[b_offset + 1] - a[a_offset + 1];
|
|
16
|
+
const dz = b[b_offset + 2] - a[a_offset + 2];
|
|
17
|
+
|
|
18
|
+
return Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
19
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalise a vector, reporting whether it had a direction to normalise.
|
|
3
|
+
*
|
|
4
|
+
* Unlike {@link v3_normalize_array}, which passes a zero vector through and scales anything else, a
|
|
5
|
+
* vector whose squared length is below `epsilon_sqr` is refused: `false` is returned and `output` is
|
|
6
|
+
* not written at all, so with `output === input` the vector is left as it was. A vector that short
|
|
7
|
+
* has a direction made of rounding, and a caller that builds a rotation from it wants to know.
|
|
8
|
+
*
|
|
9
|
+
* So is a vector with no finite squared length — a NaN component, an infinite one, or one so long
|
|
10
|
+
* its square overflows — since none of those leaves a unit vector to write.
|
|
11
|
+
*
|
|
12
|
+
* `output` may alias `input`.
|
|
13
|
+
*
|
|
14
|
+
* @param {number[]|Float32Array|Float64Array} output
|
|
15
|
+
* @param {number} output_offset
|
|
16
|
+
* @param {number[]|Float32Array|Float64Array} input
|
|
17
|
+
* @param {number} input_offset
|
|
18
|
+
* @param {number} epsilon_sqr squared length below which the vector has no direction; positive, since at
|
|
19
|
+
* zero a zero vector would pass and normalise to NaN
|
|
20
|
+
* @returns {boolean} true when `output` received the unit vector, false when it was not written
|
|
21
|
+
*/
|
|
22
|
+
export function v3_normalize_array_checked(output: number[] | Float32Array | Float64Array, output_offset: number, input: number[] | Float32Array | Float64Array, input_offset: number, epsilon_sqr: number): boolean;
|
|
23
|
+
//# sourceMappingURL=v3_normalize_array_checked.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3_normalize_array_checked.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_normalize_array_checked.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,mDARW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,gBAClC,MAAM,eACN,MAAM,GAEJ,OAAO,CA2BnB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { assert } from "../../assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Normalise a vector, reporting whether it had a direction to normalise.
|
|
5
|
+
*
|
|
6
|
+
* Unlike {@link v3_normalize_array}, which passes a zero vector through and scales anything else, a
|
|
7
|
+
* vector whose squared length is below `epsilon_sqr` is refused: `false` is returned and `output` is
|
|
8
|
+
* not written at all, so with `output === input` the vector is left as it was. A vector that short
|
|
9
|
+
* has a direction made of rounding, and a caller that builds a rotation from it wants to know.
|
|
10
|
+
*
|
|
11
|
+
* So is a vector with no finite squared length — a NaN component, an infinite one, or one so long
|
|
12
|
+
* its square overflows — since none of those leaves a unit vector to write.
|
|
13
|
+
*
|
|
14
|
+
* `output` may alias `input`.
|
|
15
|
+
*
|
|
16
|
+
* @param {number[]|Float32Array|Float64Array} output
|
|
17
|
+
* @param {number} output_offset
|
|
18
|
+
* @param {number[]|Float32Array|Float64Array} input
|
|
19
|
+
* @param {number} input_offset
|
|
20
|
+
* @param {number} epsilon_sqr squared length below which the vector has no direction; positive, since at
|
|
21
|
+
* zero a zero vector would pass and normalise to NaN
|
|
22
|
+
* @returns {boolean} true when `output` received the unit vector, false when it was not written
|
|
23
|
+
*/
|
|
24
|
+
export function v3_normalize_array_checked(
|
|
25
|
+
output, output_offset,
|
|
26
|
+
input, input_offset,
|
|
27
|
+
epsilon_sqr
|
|
28
|
+
) {
|
|
29
|
+
assert.greaterThan(epsilon_sqr, 0, 'epsilon_sqr');
|
|
30
|
+
|
|
31
|
+
const x = input[input_offset];
|
|
32
|
+
const y = input[input_offset + 1];
|
|
33
|
+
const z = input[input_offset + 2];
|
|
34
|
+
|
|
35
|
+
const length_sqr = x * x + y * y + z * z;
|
|
36
|
+
|
|
37
|
+
// Written so that NaN, which fails every comparison, lands on the refusing side.
|
|
38
|
+
if (!(length_sqr >= epsilon_sqr && length_sqr < Infinity)) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const inverse = 1 / Math.sqrt(length_sqr);
|
|
43
|
+
|
|
44
|
+
output[output_offset] = x * inverse;
|
|
45
|
+
output[output_offset + 1] = y * inverse;
|
|
46
|
+
output[output_offset + 2] = z * inverse;
|
|
47
|
+
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vector rejection: the part of `v` square to the unit vector `n`, `v − (v·n) n`. Equivalently, `v`
|
|
3
|
+
* projected onto the plane through the origin whose normal is `n`.
|
|
4
|
+
*
|
|
5
|
+
* `n` must be of unit length; nothing here normalises it. `output` may alias `input` or `normal`.
|
|
6
|
+
*
|
|
7
|
+
* @param {number[]|Float32Array|Float64Array} output
|
|
8
|
+
* @param {number} output_offset
|
|
9
|
+
* @param {number[]|Float32Array|Float64Array} input `v`
|
|
10
|
+
* @param {number} input_offset
|
|
11
|
+
* @param {number[]|Float32Array|Float64Array} normal `n`, unit length
|
|
12
|
+
* @param {number} normal_offset
|
|
13
|
+
*/
|
|
14
|
+
export function v3_reject_array(output: number[] | Float32Array | Float64Array, output_offset: number, input: number[] | Float32Array | Float64Array, input_offset: number, normal: number[] | Float32Array | Float64Array, normal_offset: number): void;
|
|
15
|
+
//# sourceMappingURL=v3_reject_array.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3_reject_array.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_reject_array.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wCAPW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,gBAClC,MAAM,UACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,QAoBhB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vector rejection: the part of `v` square to the unit vector `n`, `v − (v·n) n`. Equivalently, `v`
|
|
3
|
+
* projected onto the plane through the origin whose normal is `n`.
|
|
4
|
+
*
|
|
5
|
+
* `n` must be of unit length; nothing here normalises it. `output` may alias `input` or `normal`.
|
|
6
|
+
*
|
|
7
|
+
* @param {number[]|Float32Array|Float64Array} output
|
|
8
|
+
* @param {number} output_offset
|
|
9
|
+
* @param {number[]|Float32Array|Float64Array} input `v`
|
|
10
|
+
* @param {number} input_offset
|
|
11
|
+
* @param {number[]|Float32Array|Float64Array} normal `n`, unit length
|
|
12
|
+
* @param {number} normal_offset
|
|
13
|
+
*/
|
|
14
|
+
export function v3_reject_array(
|
|
15
|
+
output, output_offset,
|
|
16
|
+
input, input_offset,
|
|
17
|
+
normal, normal_offset
|
|
18
|
+
) {
|
|
19
|
+
const x = input[input_offset];
|
|
20
|
+
const y = input[input_offset + 1];
|
|
21
|
+
const z = input[input_offset + 2];
|
|
22
|
+
|
|
23
|
+
const nx = normal[normal_offset];
|
|
24
|
+
const ny = normal[normal_offset + 1];
|
|
25
|
+
const nz = normal[normal_offset + 2];
|
|
26
|
+
|
|
27
|
+
const d = x * nx + y * ny + z * nz;
|
|
28
|
+
|
|
29
|
+
output[output_offset] = x - d * nx;
|
|
30
|
+
output[output_offset + 1] = y - d * ny;
|
|
31
|
+
output[output_offset + 2] = z - d * nz;
|
|
32
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Group the indices of a key array by key, as CSR: for every bucket `k`, the items
|
|
3
|
+
* `out_items[out_offset[k] .. out_offset[k + 1])` are the indices `i` with `keys[i] === k`, in ascending order.
|
|
4
|
+
*
|
|
5
|
+
* This is the counting sort behind every "which rows touch this vertex" table — count each key into
|
|
6
|
+
* `out_offset[k + 1]`, prefix-sum, then scatter each index through a per-bucket cursor. A key array with a
|
|
7
|
+
* fixed arity (two vertices per edge, three per triangle) is passed flat, and an item is then the flat index
|
|
8
|
+
* `element · arity + slot`; a caller that wants the element divides by the arity. Ascending order within a
|
|
9
|
+
* bucket is what makes the result a function of the keys alone, and what lets a consumer walking a bucket
|
|
10
|
+
* read its elements' tables forwards.
|
|
11
|
+
*
|
|
12
|
+
* A negative key is skipped: it is in no bucket and its index appears nowhere — the form a parent array takes
|
|
13
|
+
* at its roots.
|
|
14
|
+
*
|
|
15
|
+
* Allocation-free: `out_offset` itself is the scatter cursor. After the scatter every `out_offset[k]` has
|
|
16
|
+
* advanced to the start of bucket `k + 1`, so one shift down by a slot restores the starts.
|
|
17
|
+
*
|
|
18
|
+
* @param {Int32Array|Uint32Array|number[]} out_offset written whole, `bucket_count + 1` entries; the last is the
|
|
19
|
+
* number of items written
|
|
20
|
+
* @param {Int32Array|Uint32Array|number[]} out_items at least as long as the number of non-negative keys
|
|
21
|
+
* @param {ArrayLike<number>} keys bucket of each index, in `[0, bucket_count)`, or negative for none
|
|
22
|
+
* @param {number} key_count how many leading entries of `keys` to group
|
|
23
|
+
* @param {number} bucket_count
|
|
24
|
+
*/
|
|
25
|
+
export function csr_build_incidence(out_offset: Int32Array | Uint32Array | number[], out_items: Int32Array | Uint32Array | number[], keys: ArrayLike<number>, key_count: number, bucket_count: number): void;
|
|
26
|
+
//# sourceMappingURL=csr_build_incidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csr_build_incidence.d.ts","sourceRoot":"","sources":["../../../../../src/core/graph/csr/csr_build_incidence.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,gDAPW,UAAU,GAAC,WAAW,GAAC,MAAM,EAAE,aAE/B,UAAU,GAAC,WAAW,GAAC,MAAM,EAAE,QAC/B,UAAU,MAAM,CAAC,aACjB,MAAM,gBACN,MAAM,QA8ChB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { assert } from "../../assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Group the indices of a key array by key, as CSR: for every bucket `k`, the items
|
|
5
|
+
* `out_items[out_offset[k] .. out_offset[k + 1])` are the indices `i` with `keys[i] === k`, in ascending order.
|
|
6
|
+
*
|
|
7
|
+
* This is the counting sort behind every "which rows touch this vertex" table — count each key into
|
|
8
|
+
* `out_offset[k + 1]`, prefix-sum, then scatter each index through a per-bucket cursor. A key array with a
|
|
9
|
+
* fixed arity (two vertices per edge, three per triangle) is passed flat, and an item is then the flat index
|
|
10
|
+
* `element · arity + slot`; a caller that wants the element divides by the arity. Ascending order within a
|
|
11
|
+
* bucket is what makes the result a function of the keys alone, and what lets a consumer walking a bucket
|
|
12
|
+
* read its elements' tables forwards.
|
|
13
|
+
*
|
|
14
|
+
* A negative key is skipped: it is in no bucket and its index appears nowhere — the form a parent array takes
|
|
15
|
+
* at its roots.
|
|
16
|
+
*
|
|
17
|
+
* Allocation-free: `out_offset` itself is the scatter cursor. After the scatter every `out_offset[k]` has
|
|
18
|
+
* advanced to the start of bucket `k + 1`, so one shift down by a slot restores the starts.
|
|
19
|
+
*
|
|
20
|
+
* @param {Int32Array|Uint32Array|number[]} out_offset written whole, `bucket_count + 1` entries; the last is the
|
|
21
|
+
* number of items written
|
|
22
|
+
* @param {Int32Array|Uint32Array|number[]} out_items at least as long as the number of non-negative keys
|
|
23
|
+
* @param {ArrayLike<number>} keys bucket of each index, in `[0, bucket_count)`, or negative for none
|
|
24
|
+
* @param {number} key_count how many leading entries of `keys` to group
|
|
25
|
+
* @param {number} bucket_count
|
|
26
|
+
*/
|
|
27
|
+
export function csr_build_incidence(out_offset, out_items, keys, key_count, bucket_count) {
|
|
28
|
+
assert.isNonNegativeInteger(key_count, 'key_count');
|
|
29
|
+
assert.isNonNegativeInteger(bucket_count, 'bucket_count');
|
|
30
|
+
assert.greaterThanOrEqual(out_offset.length, bucket_count + 1, 'out_offset shorter than bucket_count + 1');
|
|
31
|
+
assert.greaterThanOrEqual(keys.length, key_count, 'keys shorter than key_count');
|
|
32
|
+
|
|
33
|
+
for (let k = 0; k <= bucket_count; k++) {
|
|
34
|
+
out_offset[k] = 0;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
for (let i = 0; i < key_count; i++) {
|
|
38
|
+
const key = keys[i];
|
|
39
|
+
|
|
40
|
+
if (key < 0) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
assert.lessThan(key, bucket_count, 'key out of range');
|
|
45
|
+
|
|
46
|
+
out_offset[key + 1]++;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
for (let k = 0; k < bucket_count; k++) {
|
|
50
|
+
out_offset[k + 1] += out_offset[k];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
assert.greaterThanOrEqual(out_items.length, out_offset[bucket_count], 'out_items shorter than the item count');
|
|
54
|
+
|
|
55
|
+
// `out_offset[k]` is bucket `k`'s write cursor; it ends at the start of bucket `k + 1`
|
|
56
|
+
for (let i = 0; i < key_count; i++) {
|
|
57
|
+
const key = keys[i];
|
|
58
|
+
|
|
59
|
+
if (key < 0) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
out_items[out_offset[key]++] = i;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
for (let k = bucket_count; k > 0; k--) {
|
|
67
|
+
out_offset[k] = out_offset[k - 1];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
out_offset[0] = 0;
|
|
71
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Greedy graph colouring over a CSR adjacency: visit the vertices in `order`, and give each the lowest colour
|
|
3
|
+
* none of its already-coloured neighbours holds.
|
|
4
|
+
*
|
|
5
|
+
* Greedy colouring is order-sensitive, and the order is the caller's — Welsh–Powell's largest-degree-first
|
|
6
|
+
* is the usual choice, and the reason it is a parameter rather than a policy. For a given order the result
|
|
7
|
+
* is fully determined: the order of neighbours within a row, and duplicate entries in a row, do not change
|
|
8
|
+
* it. A vertex's colour is at most its degree, so the colour count is at most the largest degree plus one.
|
|
9
|
+
*
|
|
10
|
+
* Works on the raw CSR arrays rather than a {@link CSRGraph}, so any row-pointer/column-index pair can be
|
|
11
|
+
* coloured without being copied into one; for a `CSRGraph` pass `graph.edge_addresses, graph.adjacency`.
|
|
12
|
+
* A self-loop is ignored, since a vertex is uncoloured while its own colour is being chosen.
|
|
13
|
+
*
|
|
14
|
+
* Allocation-free per call, beyond growing the module scratch to `vertex_count + 1`; not reentrant.
|
|
15
|
+
*
|
|
16
|
+
* @param {Uint32Array|Int32Array|number[]} out_colors colour of every vertex, written for `[0, vertex_count)`
|
|
17
|
+
* @param {Uint32Array|Int32Array|ArrayLike<number>} edge_addresses row offsets, `vertex_count + 1` entries
|
|
18
|
+
* @param {Uint32Array|Int32Array|ArrayLike<number>} adjacency neighbour ids, rows
|
|
19
|
+
* `adjacency[edge_addresses[v] .. edge_addresses[v + 1])`
|
|
20
|
+
* @param {ArrayLike<number>} order a permutation of `[0, vertex_count)`, the visit order
|
|
21
|
+
* @param {number} vertex_count
|
|
22
|
+
* @returns {number} number of colours used; colours are `[0, count)`
|
|
23
|
+
*/
|
|
24
|
+
export function csr_graph_color_greedy(out_colors: Uint32Array | Int32Array | number[], edge_addresses: Uint32Array | Int32Array | ArrayLike<number>, adjacency: Uint32Array | Int32Array | ArrayLike<number>, order: ArrayLike<number>, vertex_count: number): number;
|
|
25
|
+
//# sourceMappingURL=csr_graph_color_greedy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csr_graph_color_greedy.d.ts","sourceRoot":"","sources":["../../../../../src/core/graph/csr/csr_graph_color_greedy.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,mDARW,WAAW,GAAC,UAAU,GAAC,MAAM,EAAE,kBAC/B,WAAW,GAAC,UAAU,GAAC,UAAU,MAAM,CAAC,aACxC,WAAW,GAAC,UAAU,GAAC,UAAU,MAAM,CAAC,SAExC,UAAU,MAAM,CAAC,gBACjB,MAAM,GACJ,MAAM,CAmDlB"}
|