@woosh/meep-engine 3.40.0 → 3.42.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-image-decoder.js +1 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/editor/selection/editor_pick.d.ts.map +1 -1
- package/editor/selection/editor_pick.js +2 -1
- package/editor/tools/TransformToolV2.d.ts.map +1 -1
- package/editor/tools/TransformToolV2.js +7 -1
- package/editor/tools/engine/ToolEngine.d.ts.map +1 -1
- package/editor/tools/engine/ToolEngine.js +10 -0
- package/editor/tools/v2/TransformControls.d.ts.map +1 -1
- package/editor/tools/v2/TransformControls.js +7 -20
- package/editor/tools/v2/handle/gizmo_drag_plane.d.ts.map +1 -1
- package/editor/tools/v2/handle/gizmo_drag_plane.js +4 -0
- package/editor/view/ecs/EntityEditor.d.ts.map +1 -1
- package/editor/view/ecs/EntityEditor.js +3 -1
- package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphView.js +28 -12
- package/package.json +1 -1
- package/samples/engine/first-scene/index.html +4 -1
- package/samples/engine/first-scene/main.js +14 -9
- package/src/core/binary/utf8/utf8_decode.js +3 -3
- package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.d.ts.map +1 -1
- package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.js +112 -113
- package/src/core/bvh2/bvh3/ebvh_nodes_sort_sah_local4.js +2 -2
- package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +14 -14
- package/src/core/collection/RingBuffer.d.ts.map +1 -1
- package/src/core/collection/RingBuffer.js +4 -0
- package/src/core/collection/array/array_contains_duplicates.d.ts.map +1 -1
- package/src/core/collection/array/array_contains_duplicates.js +2 -1
- package/src/core/collection/array/array_copy.d.ts.map +1 -1
- package/src/core/collection/array/array_copy.js +23 -0
- package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts +2 -2
- package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts.map +1 -1
- package/src/core/collection/array/typed/sparse_typed_array_hash.js +9 -8
- package/src/core/collection/array/typed/uint16_array_hash.d.ts +2 -2
- package/src/core/collection/array/typed/uint16_array_hash.js +4 -4
- package/src/core/collection/array/typed/uint8_array_hash.d.ts +2 -2
- package/src/core/collection/array/typed/uint8_array_hash.js +4 -4
- package/src/core/collection/array/weightedRandomFromArray.d.ts +1 -0
- package/src/core/collection/array/weightedRandomFromArray.d.ts.map +1 -1
- package/src/core/collection/array/weightedRandomFromArray.js +9 -1
- package/src/core/collection/heap/BinaryHeap.d.ts.map +1 -1
- package/src/core/collection/heap/BinaryHeap.js +4 -0
- package/src/core/collection/list/List.d.ts.map +1 -1
- package/src/core/collection/list/List.js +4 -2
- package/src/core/collection/set/ArraySet.js +1 -1
- package/src/core/collection/set/HashSet.d.ts +1 -1
- package/src/core/collection/set/HashSet.d.ts.map +1 -1
- package/src/core/collection/set/HashSet.js +4 -2
- package/src/core/debug/matchers/IsEqual.js +1 -1
- package/src/core/debug/matchers/IsIterableContaining.d.ts.map +1 -1
- package/src/core/debug/matchers/IsIterableContaining.js +61 -74
- package/src/core/events/signal/SignalBinding.js +101 -101
- package/src/core/function/extractFunctionBody.js +13 -13
- package/src/core/function/objectsEqual.d.ts.map +1 -1
- package/src/core/function/objectsEqual.js +15 -14
- package/src/core/geom/3d/frustum/frustum3_compute_closest_point.d.ts.map +1 -1
- package/src/core/geom/3d/frustum/frustum3_compute_closest_point.js +207 -172
- package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/gjk_epa_penetration.js +5 -4
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts.map +1 -1
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js +8 -2
- package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts +24 -0
- package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/swing_twist_clamp.js +62 -0
- package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts +15 -0
- package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/swing_twist_compose.js +36 -0
- package/src/core/geom/3d/quaternion/swing_twist_error.d.ts +39 -0
- package/src/core/geom/3d/quaternion/swing_twist_error.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/swing_twist_error.js +85 -0
- package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts +20 -0
- package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_ray_intersection.js +182 -0
- package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts +11 -6
- package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js +27 -13
- package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts +25 -0
- package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts.map +1 -0
- package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.js +166 -0
- package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts +5 -3
- package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts.map +1 -1
- package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.js +5 -3
- package/src/core/math/noise/curl_noise_3dt.d.ts.map +1 -1
- package/src/core/math/noise/curl_noise_3dt.js +20 -10
- package/src/core/math/noise/sdnoise.d.ts +16 -5
- package/src/core/math/noise/sdnoise.d.ts.map +1 -1
- package/src/core/math/noise/sdnoise.js +43 -9
- package/src/core/math/spline/spline3_hermite_nearest_point.d.ts +16 -1
- package/src/core/math/spline/spline3_hermite_nearest_point.d.ts.map +1 -1
- package/src/core/math/spline/spline3_hermite_nearest_point.js +44 -3
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +6 -2
- package/src/engine/animation/curve/AnimationCurve.d.ts +3 -0
- package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
- package/src/engine/animation/curve/AnimationCurve.js +6 -1
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +9 -0
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +26 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +2 -0
- package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/AbilitySet.js +9 -0
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/LedgeGrab.js +6 -0
- package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/Slide.js +1 -0
- package/src/engine/control/first-person/abilities/WallRun.d.ts +4 -1
- package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/WallRun.js +13 -1
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +1 -1
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -1
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +6 -5
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +3 -3
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -1
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +9 -8
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +13 -4
- package/src/engine/ecs/EntityManager.d.ts +9 -1
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +44 -42
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.js +2 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.js +1 -0
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +3 -0
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +20 -0
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -1
- package/src/engine/ecs/gpu/GPUStateAuthority.js +21 -0
- package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts +13 -0
- package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts.map +1 -0
- package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.js +12 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +6 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -1
- package/src/engine/ecs/gpu/gpu_authority_grant.js +7 -1
- package/src/engine/ecs/gpu/gpu_authority_held.d.ts +14 -0
- package/src/engine/ecs/gpu/gpu_authority_held.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_held.js +23 -0
- package/src/engine/ecs/gpu/gpu_authority_hold.d.ts +23 -0
- package/src/engine/ecs/gpu/gpu_authority_hold.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_hold.js +41 -0
- package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts +14 -0
- package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_unhold.js +32 -0
- package/src/engine/ecs/ik/IKGoal.d.ts +59 -0
- package/src/engine/ecs/ik/IKGoal.d.ts.map +1 -0
- package/src/engine/ecs/ik/IKGoal.js +83 -0
- package/src/engine/ecs/ik/IKGoalSystem.d.ts +75 -0
- package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -0
- package/src/engine/ecs/ik/IKGoalSystem.js +1456 -0
- package/src/engine/ecs/ik/PLAN.md +179 -0
- package/src/engine/ecs/parent/EntityNode.js +3 -3
- package/src/engine/ecs/speaker/VoiceSystem.d.ts +2 -2
- package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
- package/src/engine/ecs/speaker/VoiceSystem.js +4 -0
- package/src/engine/ecs/storage/BinaryBufferDeSerializer.js +5 -5
- package/src/engine/ecs/storage/BinaryBufferSerializer.d.ts.map +1 -1
- package/src/engine/ecs/storage/BinaryBufferSerializer.js +4 -5
- package/src/engine/ecs/storage/binary/BinarySerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/BinarySerializationRegistry.js +3 -2
- package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +7 -3
- package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.js +1 -1
- package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.js +8 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +9 -2
- package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts +33 -0
- package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts.map +1 -0
- package/src/engine/ecs/system/orderSystemsByDeclaredAccess.js +282 -0
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +5 -2
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +3 -0
- package/src/engine/ecs/terrain/ecs/splat/SplatMapping.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +1 -0
- package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.js +13 -1
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -0
- package/src/engine/ecs/transform/T64WorldCache.js +139 -139
- package/src/engine/ecs/transform/t64_evaluate_local.d.ts +25 -0
- package/src/engine/ecs/transform/t64_evaluate_local.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_evaluate_local.js +35 -0
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts +5 -3
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -1
- package/src/engine/ecs/transform/t64_evaluate_world.js +128 -126
- package/src/engine/graphics/ecs/light/LightSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/light/LightSerializationAdapter.js +13 -1
- package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts +5 -0
- package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.js +27 -0
- package/src/engine/graphics/ecs/water/Water.d.ts +11 -0
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +17 -0
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +3 -1
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts +9 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.js +24 -0
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts +30 -9
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterWaves.js +41 -9
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.js +30 -26
- package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts +6 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.js +22 -0
- package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.d.ts.map +1 -1
- package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.js +3 -5
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts +20 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts.map +1 -1
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +36 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +2 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +337 -329
- package/src/engine/graphics3/AnimationSystem.d.ts +2 -0
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem.js +360 -352
- package/src/engine/graphics3/WaterSystem.d.ts +12 -3
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +78 -46
- package/src/engine/input/devices/PointerDevice.d.ts.map +1 -1
- package/src/engine/input/devices/PointerDevice.js +29 -4
- package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts +1 -0
- package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.js +14 -3
- package/src/engine/physics/cloth/MEASUREMENTS.md +130 -0
- package/src/engine/physics/cloth/PLAN.md +16 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +5 -6
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +5 -6
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +4 -7
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +4 -7
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +4 -3
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +4 -3
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +10 -0
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +24 -24
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +46 -43
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +1 -1
- package/src/engine/physics/constraint/solve_constraints.d.ts +0 -35
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +1 -83
- package/src/engine/physics/ecs/ContactProbe.d.ts +73 -0
- package/src/engine/physics/ecs/ContactProbe.d.ts.map +1 -0
- package/src/engine/physics/ecs/ContactProbe.js +103 -0
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts +44 -0
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -0
- package/src/engine/physics/ecs/ContactProbeSystem.js +397 -0
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +1 -1
- package/src/engine/physics/fluid/ecs/FluidComponent.js +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +12 -3
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +8 -2
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts +19 -0
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js +41 -2
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +9 -3
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js +26 -10
- package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts +205 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.js +245 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts +21 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.js +63 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts +33 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +874 -0
- package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts +27 -0
- package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.js +77 -0
- package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts +36 -0
- package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/two_bone_path_solve.js +97 -0
- package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts +33 -11
- package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts.map +1 -1
- package/src/engine/physics/inverse_kinematics/two_joint_ik.js +158 -67
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +3 -6
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +22 -9
- package/src/engine/ui/DraggableAspect.d.ts +5 -1
- package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
- package/src/engine/ui/DraggableAspect.js +61 -4
- package/src/format/image/avif/heif/ItemProperty.d.ts +1 -1
- package/src/format/image/avif/heif/ItemProperty.js +1 -1
- package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts.map +1 -1
- package/src/format/image/png/chunk/png_chunk_decode_iTXt.js +17 -6
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts +2 -4
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +20 -13
- package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -1
- package/src/shade/playground/water_refraction/README.md +10 -11
- package/src/shade/playground/water_refraction/main.js +9 -8
- package/src/shade/playground/water_refraction/world.js +1 -1
- package/src/shade/playground/water_surface/README.md +43 -0
- package/src/shade/playground/water_surface/index.html +30 -0
- package/src/shade/playground/water_surface/main.d.ts +2 -0
- package/src/shade/playground/water_surface/main.d.ts.map +1 -0
- package/src/shade/playground/water_surface/main.js +154 -0
- package/src/shade/playground/water_surface/world.d.ts +44 -0
- package/src/shade/playground/water_surface/world.d.ts.map +1 -0
- package/src/shade/playground/water_surface/world.js +160 -0
- package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.js +10 -1
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +10 -4
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +251 -23
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +12 -4
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +12 -4
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
- package/src/shade/renderer/animation/chunk_pose_accumulator.js +14 -1
- package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts +78 -0
- package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts.map +1 -0
- package/src/shade/renderer/animation/pose/PoseChannelIndex.js +274 -0
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts +40 -3
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.js +77 -3
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +21 -3
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/pose_evaluate_local.js +79 -11
- package/src/shade/renderer/animation/shader_animation_apply.js +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts +3 -2
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.js +187 -176
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +5 -0
- package/src/shade/renderer/binding/BufferBinding.js +2 -2
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +5 -3
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +10 -3
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +17 -9
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +3 -0
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +16 -0
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +2 -0
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +11 -0
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts +1 -1
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.js +9 -3
- package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.d.ts.map +1 -1
- package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.js +2 -2
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +85 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +12 -6
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +7 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +3 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property.d.ts +3 -1
- package/src/shade/renderer/object_property/chunk_write_object_property.d.ts.map +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property.js +5 -2
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +4 -0
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +6 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +2 -1
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts +1 -1
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js +135 -73
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts +7 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js +29 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts +19 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts.map +1 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.js +167 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts +25 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts.map +1 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.js +124 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts +19 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts.map +1 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.js +48 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +17 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +29 -3
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.js +42 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.js +39 -0
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +2 -0
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +15 -0
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +110 -30
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +16 -8
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +31 -26
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +0 -1
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/shader_water_meshlets.js +1 -39
- package/src/shade/renderer/water/shader_water.d.ts +0 -1
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +201 -72
- package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts +70 -0
- package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/GPUWaterSurface.js +199 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +5 -2
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +32 -12
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +22 -0
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +217 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +65 -11
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +163 -28
- package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts +51 -0
- package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/WATER_LOD.js +95 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts +10 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod.js +127 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts +17 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.js +246 -0
- package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts +118 -0
- package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/shader_water_lod.js +727 -0
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts +60 -0
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +228 -0
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +17 -0
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +49 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +22 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +143 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +15 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +121 -0
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +83 -0
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/shader_water_particles.js +502 -0
- package/src/shade/renderer/water/surface/shader_water_cull.d.ts +42 -0
- package/src/shade/renderer/water/surface/shader_water_cull.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_cull.js +269 -0
- package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts +15 -0
- package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_waves_combine.js +73 -0
- package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts +11 -0
- package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_waves_derive.js +78 -0
- package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts +35 -0
- package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.js +103 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts +22 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.js +57 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts +22 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.js +25 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts +14 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.js +48 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts +23 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.js +169 -0
- package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts +26 -0
- package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.js +161 -0
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +18 -6
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +11 -3
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts +0 -28
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts.map +0 -1
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.js +0 -86
- package/src/engine/ecs/ik/IKConstraint.d.ts +0 -52
- package/src/engine/ecs/ik/IKConstraint.d.ts.map +0 -1
- package/src/engine/ecs/ik/IKConstraint.js +0 -95
- package/src/engine/ecs/ik/IKProblem.d.ts +0 -45
- package/src/engine/ecs/ik/IKProblem.d.ts.map +0 -1
- package/src/engine/ecs/ik/IKProblem.js +0 -58
- package/src/engine/ecs/ik/IKSolver.d.ts +0 -8
- package/src/engine/ecs/ik/IKSolver.d.ts.map +0 -1
- package/src/engine/ecs/ik/IKSolver.js +0 -9
- package/src/engine/ecs/ik/InverseKinematics.d.ts +0 -48
- package/src/engine/ecs/ik/InverseKinematics.d.ts.map +0 -1
- package/src/engine/ecs/ik/InverseKinematics.js +0 -119
- package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts +0 -19
- package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts.map +0 -1
- package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.js +0 -72
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts +0 -54
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +0 -1
- package/src/engine/ecs/ik/InverseKinematicsSystem.js +0 -212
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts +0 -8
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts.map +0 -1
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +0 -153
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts +0 -5
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +0 -1
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +0 -120
- package/src/engine/ecs/ik/ik_bone_chain.d.ts +0 -64
- package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +0 -1
- package/src/engine/ecs/ik/ik_bone_chain.js +0 -142
- package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts +0 -42
- package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts.map +0 -1
- package/src/engine/ecs/ik/ik_probe_terrain_contact.js +0 -123
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +0 -18
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +0 -1
- package/src/engine/ecs/ik/ik_write_local_rotation.js +0 -32
- package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts +0 -29
- package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts.map +0 -1
- package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.js +0 -44
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +0 -4
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +0 -1
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +0 -32
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +0 -25
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +0 -128
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +0 -9
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/chunk_water_tessellation.js +0 -144
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +0 -13
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/chunk_water_wave.js +0 -40
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +0 -4
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_tiles.js +0 -123
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +0 -6
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_wave_batch.js +0 -85
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +0 -6
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_wave_domain.js +0 -83
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gjk_epa_penetration.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/gjk/gjk_epa_penetration.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gjk_epa_penetration.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/gjk/gjk_epa_penetration.js"],"names":[],"mappings":"AAmkBA;;;;;;;;;;;;;;;;GAgBG;AACH,yCATW,YAAY,GAAC,MAAM,EAAE,KACrB,eAAe,KACf,eAAe,GACb,MAAM,CA0BlB;AA7DD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,4BAFU,MAAM,CAEgB;;;;;;;8BA1dnB;IAAE,OAAO,SAAW,YAAY,QAAE,MAAM,QAAE,CAAC,YAAY,GAAC,MAAM,EAAE,CAAC,QAAE,MAAM,KAAG,IAAI,CAAA;CAAE"}
|
|
@@ -533,9 +533,6 @@ function epa(A, B, out) {
|
|
|
533
533
|
// Degenerate: no face survived. Report no usable axis (the caller treats a
|
|
534
534
|
// non-positive depth as a miss) rather than reading a stale face and
|
|
535
535
|
// throwing out of the narrowphase step.
|
|
536
|
-
out[0] = 0;
|
|
537
|
-
out[1] = 0;
|
|
538
|
-
out[2] = 0;
|
|
539
536
|
return 0;
|
|
540
537
|
}
|
|
541
538
|
|
|
@@ -545,11 +542,15 @@ function epa(A, B, out) {
|
|
|
545
542
|
best = f;
|
|
546
543
|
}
|
|
547
544
|
}
|
|
545
|
+
const depth = FACE_DIST[best];
|
|
546
|
+
if (!(depth > 0) || !Number.isFinite(depth)) {
|
|
547
|
+
return 0;
|
|
548
|
+
}
|
|
548
549
|
const bn = best * 3;
|
|
549
550
|
out[0] = FACE_N[bn];
|
|
550
551
|
out[1] = FACE_N[bn + 1];
|
|
551
552
|
out[2] = FACE_N[bn + 2];
|
|
552
|
-
return
|
|
553
|
+
return depth;
|
|
553
554
|
}
|
|
554
555
|
|
|
555
556
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"line3_compute_segment_point_distance_eikonal.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,iEAbW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,
|
|
1
|
+
{"version":3,"file":"line3_compute_segment_point_distance_eikonal.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,iEAbW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAwFlB"}
|
|
@@ -26,7 +26,13 @@ export function line3_compute_segment_point_distance_eikonal(
|
|
|
26
26
|
const ab_z = z1 - z0;
|
|
27
27
|
const L = Math.hypot(ab_x, ab_y, ab_z);
|
|
28
28
|
|
|
29
|
-
if (L < 1e-9)
|
|
29
|
+
if (L < 1e-9) {
|
|
30
|
+
// A point-like edge still leaves the distance from its endpoints to the target.
|
|
31
|
+
return Math.min(
|
|
32
|
+
d0 + Math.hypot(px - x0, py - y0, pz - z0),
|
|
33
|
+
d1 + Math.hypot(px - x1, py - y1, pz - z1)
|
|
34
|
+
);
|
|
35
|
+
}
|
|
30
36
|
|
|
31
37
|
// Vector AC
|
|
32
38
|
const ac_x = px - x0;
|
|
@@ -93,4 +99,4 @@ export function line3_compute_segment_point_distance_eikonal(
|
|
|
93
99
|
const dist_to_v1 = Math.hypot(px - x1, py - y1, pz - z1);
|
|
94
100
|
return Math.min(d0 + dist_to_v0, d1 + dist_to_v1);
|
|
95
101
|
}
|
|
96
|
-
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project a rotation into a box of swing-twist limits: the twist about X and the swing over Y and Z,
|
|
3
|
+
* as {@link swing_twist_error_array} measures them, each clamped to its own `[lower, upper]`.
|
|
4
|
+
*
|
|
5
|
+
* This is the box a physics `Joint` with `swingTwist` on allows: the joint solver limits each of
|
|
6
|
+
* the three positions separately, so Y and Z swing are a box and not a cone. A rotation already
|
|
7
|
+
* inside is written back unchanged, bit for bit; one outside is composed again from the clamped
|
|
8
|
+
* positions ({@link swing_twist_compose_array}).
|
|
9
|
+
*
|
|
10
|
+
* An axis that is not limited takes `-Infinity` / `Infinity`; a locked one takes `0` / `0`.
|
|
11
|
+
*
|
|
12
|
+
* `out` may be `q`.
|
|
13
|
+
*
|
|
14
|
+
* @param {Float64Array} out
|
|
15
|
+
* @param {number} out_offset receives `[x, y, z, w]`
|
|
16
|
+
* @param {Float64Array} q
|
|
17
|
+
* @param {number} q_offset `[x, y, z, w]`, unit
|
|
18
|
+
* @param {Float64Array} lower
|
|
19
|
+
* @param {Float64Array} upper
|
|
20
|
+
* @param {number} limit_offset `[twist, swing y, swing z]` in `lower` and `upper`, radians
|
|
21
|
+
* @returns {boolean} whether any position was outside its limits
|
|
22
|
+
*/
|
|
23
|
+
export function swing_twist_clamp_array(out: Float64Array, out_offset: number, q: Float64Array, q_offset: number, lower: Float64Array, upper: Float64Array, limit_offset: number): boolean;
|
|
24
|
+
//# sourceMappingURL=swing_twist_clamp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swing_twist_clamp.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/swing_twist_clamp.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,6CATW,YAAY,cACZ,MAAM,KACN,YAAY,YACZ,MAAM,SACN,YAAY,SACZ,YAAY,gBACZ,MAAM,GACJ,OAAO,CAgCnB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { swing_twist_compose_array } from "./swing_twist_compose.js";
|
|
2
|
+
import { swing_twist_error_array } from "./swing_twist_error.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The three swing-twist positions, measured and then clamped.
|
|
6
|
+
* @type {Float64Array}
|
|
7
|
+
*/
|
|
8
|
+
const e = new Float64Array(3);
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Project a rotation into a box of swing-twist limits: the twist about X and the swing over Y and Z,
|
|
12
|
+
* as {@link swing_twist_error_array} measures them, each clamped to its own `[lower, upper]`.
|
|
13
|
+
*
|
|
14
|
+
* This is the box a physics `Joint` with `swingTwist` on allows: the joint solver limits each of
|
|
15
|
+
* the three positions separately, so Y and Z swing are a box and not a cone. A rotation already
|
|
16
|
+
* inside is written back unchanged, bit for bit; one outside is composed again from the clamped
|
|
17
|
+
* positions ({@link swing_twist_compose_array}).
|
|
18
|
+
*
|
|
19
|
+
* An axis that is not limited takes `-Infinity` / `Infinity`; a locked one takes `0` / `0`.
|
|
20
|
+
*
|
|
21
|
+
* `out` may be `q`.
|
|
22
|
+
*
|
|
23
|
+
* @param {Float64Array} out
|
|
24
|
+
* @param {number} out_offset receives `[x, y, z, w]`
|
|
25
|
+
* @param {Float64Array} q
|
|
26
|
+
* @param {number} q_offset `[x, y, z, w]`, unit
|
|
27
|
+
* @param {Float64Array} lower
|
|
28
|
+
* @param {Float64Array} upper
|
|
29
|
+
* @param {number} limit_offset `[twist, swing y, swing z]` in `lower` and `upper`, radians
|
|
30
|
+
* @returns {boolean} whether any position was outside its limits
|
|
31
|
+
*/
|
|
32
|
+
export function swing_twist_clamp_array(out, out_offset, q, q_offset, lower, upper, limit_offset) {
|
|
33
|
+
swing_twist_error_array(q, q_offset, e);
|
|
34
|
+
|
|
35
|
+
let clamped = false;
|
|
36
|
+
|
|
37
|
+
for (let k = 0; k < 3; k++) {
|
|
38
|
+
const lo = lower[limit_offset + k];
|
|
39
|
+
const hi = upper[limit_offset + k];
|
|
40
|
+
|
|
41
|
+
const value = e[k];
|
|
42
|
+
|
|
43
|
+
if (value < lo) {
|
|
44
|
+
e[k] = lo;
|
|
45
|
+
clamped = true;
|
|
46
|
+
} else if (value > hi) {
|
|
47
|
+
e[k] = hi;
|
|
48
|
+
clamped = true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (clamped) {
|
|
53
|
+
swing_twist_compose_array(out, out_offset, e, 0);
|
|
54
|
+
} else if (out !== q || out_offset !== q_offset) {
|
|
55
|
+
out[out_offset] = q[q_offset];
|
|
56
|
+
out[out_offset + 1] = q[q_offset + 1];
|
|
57
|
+
out[out_offset + 2] = q[q_offset + 2];
|
|
58
|
+
out[out_offset + 3] = q[q_offset + 3];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return clamped;
|
|
62
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The rotation whose swing-twist positions are `e[e_offset ..+2]`: the inverse of
|
|
3
|
+
* {@link swing_twist_error_array}.
|
|
4
|
+
*
|
|
5
|
+
* `e[0]` is the twist about X, `e[1]`, `e[2]` the swing as `φ·axis` over Y and Z, and the rotation is
|
|
6
|
+
* `swing ⊗ twist`. Composed back from what {@link swing_twist_error_array} measured, it is the
|
|
7
|
+
* measured rotation, on the hemisphere with `w ≥ 0`.
|
|
8
|
+
*
|
|
9
|
+
* @param {Float64Array} out
|
|
10
|
+
* @param {number} out_offset receives `[x, y, z, w]`
|
|
11
|
+
* @param {Float64Array} e
|
|
12
|
+
* @param {number} e_offset `[twist, swing y, swing z]`, radians
|
|
13
|
+
*/
|
|
14
|
+
export function swing_twist_compose_array(out: Float64Array, out_offset: number, e: Float64Array, e_offset: number): void;
|
|
15
|
+
//# sourceMappingURL=swing_twist_compose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swing_twist_compose.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/swing_twist_compose.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,+CALW,YAAY,cACZ,MAAM,KACN,YAAY,YACZ,MAAM,QAwBhB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The rotation whose swing-twist positions are `e[e_offset ..+2]`: the inverse of
|
|
3
|
+
* {@link swing_twist_error_array}.
|
|
4
|
+
*
|
|
5
|
+
* `e[0]` is the twist about X, `e[1]`, `e[2]` the swing as `φ·axis` over Y and Z, and the rotation is
|
|
6
|
+
* `swing ⊗ twist`. Composed back from what {@link swing_twist_error_array} measured, it is the
|
|
7
|
+
* measured rotation, on the hemisphere with `w ≥ 0`.
|
|
8
|
+
*
|
|
9
|
+
* @param {Float64Array} out
|
|
10
|
+
* @param {number} out_offset receives `[x, y, z, w]`
|
|
11
|
+
* @param {Float64Array} e
|
|
12
|
+
* @param {number} e_offset `[twist, swing y, swing z]`, radians
|
|
13
|
+
*/
|
|
14
|
+
export function swing_twist_compose_array(out, out_offset, e, e_offset) {
|
|
15
|
+
const twist = e[e_offset];
|
|
16
|
+
const y = e[e_offset + 1];
|
|
17
|
+
const z = e[e_offset + 2];
|
|
18
|
+
|
|
19
|
+
const tx = Math.sin(twist * 0.5);
|
|
20
|
+
const tw = Math.cos(twist * 0.5);
|
|
21
|
+
|
|
22
|
+
const phi = Math.sqrt(y * y + z * z);
|
|
23
|
+
|
|
24
|
+
// sin(φ/2) / φ, which is 1/2 as φ goes to 0, as the measure's small-angle branch is
|
|
25
|
+
const s = phi < 1e-9 ? 0.5 : Math.sin(phi * 0.5) / phi;
|
|
26
|
+
|
|
27
|
+
const sy = y * s;
|
|
28
|
+
const sz = z * s;
|
|
29
|
+
const sw = Math.cos(phi * 0.5);
|
|
30
|
+
|
|
31
|
+
// (0, sy, sz, sw) ⊗ (tx, 0, 0, tw)
|
|
32
|
+
out[out_offset] = sw * tx;
|
|
33
|
+
out[out_offset + 1] = sy * tw + sz * tx;
|
|
34
|
+
out[out_offset + 2] = sz * tw - sy * tx;
|
|
35
|
+
out[out_offset + 3] = sw * tw;
|
|
36
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swing-twist decomposition of the relative rotation `qD = conj(qA)⊗qB`, giving
|
|
3
|
+
* the per-frame-axis angular positions used by wide-cone angular DOFs.
|
|
4
|
+
*
|
|
5
|
+
* Decomposes `qD = swing ⊗ twist`, with **twist** the rotation about frame
|
|
6
|
+
* axis X (the bone / twist axis) and **swing** the residual tilt (a rotation
|
|
7
|
+
* about an axis in the YZ plane that carries X to its new direction). Writes,
|
|
8
|
+
* into `out`:
|
|
9
|
+
* - `out[0]` = signed twist angle about X, in `(−π, π]` — *exact*, so a twist
|
|
10
|
+
* limit engages at the true angle, not the `2·sin(θ/2)` small-angle proxy;
|
|
11
|
+
* - `out[1]`, `out[2]` = the swing angle distributed over Y and Z
|
|
12
|
+
* (`φ·axis`, φ the true swing angle), so independent Y/Z swing limits form
|
|
13
|
+
* an accurate (box-shaped) cone that holds at large tilt.
|
|
14
|
+
* Reduces continuously to the small-angle vector near identity. Pure scratch /
|
|
15
|
+
* locals — no allocation, suitable for the per-substep hot loop. (The Quaternion
|
|
16
|
+
* class has an object-based `computeSwingAndTwist`; this is the inlined,
|
|
17
|
+
* allocation-free form — see the bench that justifies it.)
|
|
18
|
+
*
|
|
19
|
+
* The physics joint solver measures a `Joint`'s angular DOFs with it, and IK clamps to the same
|
|
20
|
+
* measure ({@link swing_twist_clamp_array}), so the two agree on what a limit allows.
|
|
21
|
+
*
|
|
22
|
+
* @param {number} dx qD x
|
|
23
|
+
* @param {number} dy qD y
|
|
24
|
+
* @param {number} dz qD z
|
|
25
|
+
* @param {number} dw qD w
|
|
26
|
+
* @param {Float64Array} out length-3 destination (frame-axis positions)
|
|
27
|
+
*/
|
|
28
|
+
export function swing_twist_error(dx: number, dy: number, dz: number, dw: number, out: Float64Array): void;
|
|
29
|
+
/**
|
|
30
|
+
* {@link swing_twist_error} with `qD` read from `q[q_offset ..+3]`, `[x, y, z, w]`: the one place the
|
|
31
|
+
* arithmetic lives. For a caller whose inlining budget is spent, where a call taking the four numbers
|
|
32
|
+
* would box each into a new heap object.
|
|
33
|
+
*
|
|
34
|
+
* @param {Float64Array} q
|
|
35
|
+
* @param {number} q_offset
|
|
36
|
+
* @param {Float64Array} out length-3 destination (frame-axis positions)
|
|
37
|
+
*/
|
|
38
|
+
export function swing_twist_error_array(q: Float64Array, q_offset: number, out: Float64Array): void;
|
|
39
|
+
//# sourceMappingURL=swing_twist_error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swing_twist_error.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/swing_twist_error.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,sCANW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,OACN,YAAY,QAWtB;AAKD;;;;;;;;GAQG;AACH,2CAJW,YAAY,YACZ,MAAM,OACN,YAAY,QAoCtB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swing-twist decomposition of the relative rotation `qD = conj(qA)⊗qB`, giving
|
|
3
|
+
* the per-frame-axis angular positions used by wide-cone angular DOFs.
|
|
4
|
+
*
|
|
5
|
+
* Decomposes `qD = swing ⊗ twist`, with **twist** the rotation about frame
|
|
6
|
+
* axis X (the bone / twist axis) and **swing** the residual tilt (a rotation
|
|
7
|
+
* about an axis in the YZ plane that carries X to its new direction). Writes,
|
|
8
|
+
* into `out`:
|
|
9
|
+
* - `out[0]` = signed twist angle about X, in `(−π, π]` — *exact*, so a twist
|
|
10
|
+
* limit engages at the true angle, not the `2·sin(θ/2)` small-angle proxy;
|
|
11
|
+
* - `out[1]`, `out[2]` = the swing angle distributed over Y and Z
|
|
12
|
+
* (`φ·axis`, φ the true swing angle), so independent Y/Z swing limits form
|
|
13
|
+
* an accurate (box-shaped) cone that holds at large tilt.
|
|
14
|
+
* Reduces continuously to the small-angle vector near identity. Pure scratch /
|
|
15
|
+
* locals — no allocation, suitable for the per-substep hot loop. (The Quaternion
|
|
16
|
+
* class has an object-based `computeSwingAndTwist`; this is the inlined,
|
|
17
|
+
* allocation-free form — see the bench that justifies it.)
|
|
18
|
+
*
|
|
19
|
+
* The physics joint solver measures a `Joint`'s angular DOFs with it, and IK clamps to the same
|
|
20
|
+
* measure ({@link swing_twist_clamp_array}), so the two agree on what a limit allows.
|
|
21
|
+
*
|
|
22
|
+
* @param {number} dx qD x
|
|
23
|
+
* @param {number} dy qD y
|
|
24
|
+
* @param {number} dz qD z
|
|
25
|
+
* @param {number} dw qD w
|
|
26
|
+
* @param {Float64Array} out length-3 destination (frame-axis positions)
|
|
27
|
+
*/
|
|
28
|
+
export function swing_twist_error(dx, dy, dz, dw, out) {
|
|
29
|
+
const q = swing_twist_inputs;
|
|
30
|
+
|
|
31
|
+
q[0] = dx;
|
|
32
|
+
q[1] = dy;
|
|
33
|
+
q[2] = dz;
|
|
34
|
+
q[3] = dw;
|
|
35
|
+
|
|
36
|
+
swing_twist_error_array(q, 0, out);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Where {@link swing_twist_error} packs its quaternion. */
|
|
40
|
+
const swing_twist_inputs = new Float64Array(4);
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* {@link swing_twist_error} with `qD` read from `q[q_offset ..+3]`, `[x, y, z, w]`: the one place the
|
|
44
|
+
* arithmetic lives. For a caller whose inlining budget is spent, where a call taking the four numbers
|
|
45
|
+
* would box each into a new heap object.
|
|
46
|
+
*
|
|
47
|
+
* @param {Float64Array} q
|
|
48
|
+
* @param {number} q_offset
|
|
49
|
+
* @param {Float64Array} out length-3 destination (frame-axis positions)
|
|
50
|
+
*/
|
|
51
|
+
export function swing_twist_error_array(q, q_offset, out) {
|
|
52
|
+
let dx = q[q_offset], dy = q[q_offset + 1], dz = q[q_offset + 2], dw = q[q_offset + 3];
|
|
53
|
+
|
|
54
|
+
// Shortest arc: work with the hemisphere where dw ≥ 0.
|
|
55
|
+
if (dw < 0) { dx = -dx; dy = -dy; dz = -dz; dw = -dw; }
|
|
56
|
+
|
|
57
|
+
const nxt = Math.sqrt(dx * dx + dw * dw); // |twist| (before normalising)
|
|
58
|
+
let sy, sz, sw;
|
|
59
|
+
if (nxt < 1e-12) {
|
|
60
|
+
// dw ≈ 0 and dx ≈ 0: a ~180° pure swing — twist is undefined, take 0.
|
|
61
|
+
out[0] = 0;
|
|
62
|
+
// Swing is qD itself; distribute its angle over Y/Z below.
|
|
63
|
+
sy = dy; sz = dz; sw = dw;
|
|
64
|
+
} else {
|
|
65
|
+
out[0] = 2 * Math.atan2(dx, dw); // exact signed twist about X
|
|
66
|
+
const tx = dx / nxt, tw = dw / nxt; // normalised twist (tx,0,0,tw)
|
|
67
|
+
// swing = qD ⊗ conj(twist); its X component is identically 0.
|
|
68
|
+
sy = dy * tw - dz * tx;
|
|
69
|
+
sz = dy * tx + dz * tw;
|
|
70
|
+
sw = dw * tw + dx * tx;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (sw < 0) { sy = -sy; sz = -sz; sw = -sw; }
|
|
74
|
+
const syz = Math.sqrt(sy * sy + sz * sz);
|
|
75
|
+
if (syz < 1e-9) {
|
|
76
|
+
// Near-zero swing: small-angle vector (continuous with φ·axis as φ→0).
|
|
77
|
+
out[1] = 2 * sy;
|
|
78
|
+
out[2] = 2 * sz;
|
|
79
|
+
} else {
|
|
80
|
+
const phi = 2 * Math.atan2(syz, sw); // exact swing angle in [0, π]
|
|
81
|
+
const s = phi / syz;
|
|
82
|
+
out[1] = sy * s;
|
|
83
|
+
out[2] = sz * s;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -20,4 +20,24 @@
|
|
|
20
20
|
* @returns {boolean}
|
|
21
21
|
*/
|
|
22
22
|
export function tri3_ray_intersection(result: SurfacePoint3, origin_x: number, origin_y: number, origin_z: number, direction_x: number, direction_y: number, direction_z: number, ax: number, ay: number, az: number, bx: number, by: number, bz: number, cx: number, cy: number, cz: number): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Ray-triangle intersection with vertices read from a packed triangle,
|
|
25
|
+
* [ax, ay, az, bx, by, bz, cx, cy, cz] at triangle_offset.
|
|
26
|
+
*
|
|
27
|
+
* All nine coordinates are read before validation or output writes so output
|
|
28
|
+
* callbacks can mutate the source without changing this intersection.
|
|
29
|
+
* The arithmetic and output order match tri3_ray_intersection.
|
|
30
|
+
*
|
|
31
|
+
* @param {import("../SurfacePoint3.js").SurfacePoint3} result
|
|
32
|
+
* @param {number} origin_x
|
|
33
|
+
* @param {number} origin_y
|
|
34
|
+
* @param {number} origin_z
|
|
35
|
+
* @param {number} direction_x
|
|
36
|
+
* @param {number} direction_y
|
|
37
|
+
* @param {number} direction_z
|
|
38
|
+
* @param {ArrayLike<number>|number[]|Float32Array|Float64Array} triangle
|
|
39
|
+
* @param {number} [triangle_offset=0]
|
|
40
|
+
* @returns {boolean}
|
|
41
|
+
*/
|
|
42
|
+
export function tri3_ray_intersection_triangle_array(result: import("../SurfacePoint3.js").SurfacePoint3, origin_x: number, origin_y: number, origin_z: number, direction_x: number, direction_y: number, direction_z: number, triangle: ArrayLike<number> | number[] | Float32Array | Float64Array, triangle_offset?: number): boolean;
|
|
23
43
|
//# sourceMappingURL=tri3_ray_intersection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tri3_ray_intersection.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/triangle/tri3_ray_intersection.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uEAjBW,MAAM,YACN,MAAM,YACN,MAAM,eACN,MAAM,eACN,MAAM,eACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,OAAO,CAoJnB"}
|
|
1
|
+
{"version":3,"file":"tri3_ray_intersection.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/triangle/tri3_ray_intersection.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uEAjBW,MAAM,YACN,MAAM,YACN,MAAM,eACN,MAAM,eACN,MAAM,eACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,OAAO,CAoJnB;AAGD;;;;;;;;;;;;;;;;;;GAkBG;AACH,6DAXW,OAAO,qBAAqB,EAAE,aAAa,YAC3C,MAAM,YACN,MAAM,YACN,MAAM,eACN,MAAM,eACN,MAAM,eACN,MAAM,YACN,UAAU,MAAM,CAAC,GAAC,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,oBACpD,MAAM,GACJ,OAAO,CAmKnB"}
|
|
@@ -170,3 +170,185 @@ export function tri3_ray_intersection(
|
|
|
170
170
|
return true;
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Ray-triangle intersection with vertices read from a packed triangle,
|
|
176
|
+
* [ax, ay, az, bx, by, bz, cx, cy, cz] at triangle_offset.
|
|
177
|
+
*
|
|
178
|
+
* All nine coordinates are read before validation or output writes so output
|
|
179
|
+
* callbacks can mutate the source without changing this intersection.
|
|
180
|
+
* The arithmetic and output order match tri3_ray_intersection.
|
|
181
|
+
*
|
|
182
|
+
* @param {import("../SurfacePoint3.js").SurfacePoint3} result
|
|
183
|
+
* @param {number} origin_x
|
|
184
|
+
* @param {number} origin_y
|
|
185
|
+
* @param {number} origin_z
|
|
186
|
+
* @param {number} direction_x
|
|
187
|
+
* @param {number} direction_y
|
|
188
|
+
* @param {number} direction_z
|
|
189
|
+
* @param {ArrayLike<number>|number[]|Float32Array|Float64Array} triangle
|
|
190
|
+
* @param {number} [triangle_offset=0]
|
|
191
|
+
* @returns {boolean}
|
|
192
|
+
*/
|
|
193
|
+
export function tri3_ray_intersection_triangle_array(
|
|
194
|
+
result,
|
|
195
|
+
origin_x, origin_y, origin_z,
|
|
196
|
+
direction_x, direction_y, direction_z,
|
|
197
|
+
triangle, triangle_offset = 0
|
|
198
|
+
) {
|
|
199
|
+
const ax = triangle[triangle_offset];
|
|
200
|
+
const ay = triangle[triangle_offset + 1];
|
|
201
|
+
const az = triangle[triangle_offset + 2];
|
|
202
|
+
const bx = triangle[triangle_offset + 3];
|
|
203
|
+
const by = triangle[triangle_offset + 4];
|
|
204
|
+
const bz = triangle[triangle_offset + 5];
|
|
205
|
+
const cx = triangle[triangle_offset + 6];
|
|
206
|
+
const cy = triangle[triangle_offset + 7];
|
|
207
|
+
const cz = triangle[triangle_offset + 8];
|
|
208
|
+
|
|
209
|
+
// Finite primitive numbers keep the valid path unboxed. The fallback
|
|
210
|
+
// preserves the scalar form's validation order and diagnostic messages.
|
|
211
|
+
if (!(Number.isFinite(ax) && Number.isFinite(ay) && Number.isFinite(az)
|
|
212
|
+
&& Number.isFinite(bx) && Number.isFinite(by) && Number.isFinite(bz)
|
|
213
|
+
&& Number.isFinite(cx) && Number.isFinite(cy) && Number.isFinite(cz))) {
|
|
214
|
+
assert.isNumber(ax, 'ax');
|
|
215
|
+
assert.isNumber(ay, 'ay');
|
|
216
|
+
assert.isNumber(az, 'az');
|
|
217
|
+
|
|
218
|
+
assert.isNumber(bx, 'bx');
|
|
219
|
+
assert.isNumber(by, 'by');
|
|
220
|
+
assert.isNumber(bz, 'bz');
|
|
221
|
+
|
|
222
|
+
assert.isNumber(cx, 'cx');
|
|
223
|
+
assert.isNumber(cy, 'cy');
|
|
224
|
+
assert.isNumber(cz, 'cz');
|
|
225
|
+
|
|
226
|
+
// nan checks
|
|
227
|
+
assert.notNaN(ax, 'ax');
|
|
228
|
+
assert.notNaN(ay, 'ay');
|
|
229
|
+
assert.notNaN(az, 'az');
|
|
230
|
+
|
|
231
|
+
assert.notNaN(bx, 'bx');
|
|
232
|
+
assert.notNaN(by, 'by');
|
|
233
|
+
assert.notNaN(bz, 'bz');
|
|
234
|
+
|
|
235
|
+
assert.notNaN(cx, 'cx');
|
|
236
|
+
assert.notNaN(cy, 'cy');
|
|
237
|
+
assert.notNaN(cz, 'cz');
|
|
238
|
+
|
|
239
|
+
// finate number check
|
|
240
|
+
assert.isFinite(ax, 'ax');
|
|
241
|
+
assert.isFinite(ay, 'ay');
|
|
242
|
+
assert.isFinite(az, 'az');
|
|
243
|
+
|
|
244
|
+
assert.isFinite(bx, 'bx');
|
|
245
|
+
assert.isFinite(by, 'by');
|
|
246
|
+
assert.isFinite(bz, 'bz');
|
|
247
|
+
|
|
248
|
+
assert.isFinite(cx, 'cx');
|
|
249
|
+
assert.isFinite(cy, 'cy');
|
|
250
|
+
assert.isFinite(cz, 'cz');
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// edge1 = a - b
|
|
256
|
+
const edge1_x = bx - ax;
|
|
257
|
+
const edge1_y = by - ay;
|
|
258
|
+
const edge1_z = bz - az;
|
|
259
|
+
|
|
260
|
+
// edge2 = c - a
|
|
261
|
+
const edge2_x = cx - ax;
|
|
262
|
+
const edge2_y = cy - ay;
|
|
263
|
+
const edge2_z = cz - az;
|
|
264
|
+
|
|
265
|
+
// Compute triangle normal
|
|
266
|
+
|
|
267
|
+
// normal = edge1 x edge2
|
|
268
|
+
const normal_x = edge1_y * edge2_z - edge1_z * edge2_y;
|
|
269
|
+
const normal_y = edge1_z * edge2_x - edge1_x * edge2_z;
|
|
270
|
+
const normal_z = edge1_x * edge2_y - edge1_y * edge2_x
|
|
271
|
+
|
|
272
|
+
let DdN = v3_dot(direction_x, direction_y, direction_z, normal_x, normal_y, normal_z);
|
|
273
|
+
let sign = 1;
|
|
274
|
+
|
|
275
|
+
if (DdN === 0) {
|
|
276
|
+
// ray and the triangle normal are orthogonal, means that the ray can not pass penetrate triangle
|
|
277
|
+
return false;
|
|
278
|
+
} else if (DdN < 0) {
|
|
279
|
+
sign = -1;
|
|
280
|
+
DdN = -DdN;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// diff = origin - a
|
|
284
|
+
const diff_x = origin_x - ax;
|
|
285
|
+
const diff_y = origin_y - ay;
|
|
286
|
+
const diff_z = origin_z - az;
|
|
287
|
+
|
|
288
|
+
// edge3 = diff x edge2
|
|
289
|
+
const edge3_x = diff_y * edge2_z - diff_z * edge2_y;
|
|
290
|
+
const edge3_y = diff_z * edge2_x - diff_x * edge2_z;
|
|
291
|
+
const edge3_z = diff_x * edge2_y - diff_y * edge2_x;
|
|
292
|
+
|
|
293
|
+
// DdQxE2 = sign * ( direction . edge3)
|
|
294
|
+
const DdQxE2 = sign * v3_dot(direction_x, direction_y, direction_z, edge3_x, edge3_y, edge3_z);
|
|
295
|
+
|
|
296
|
+
if (DdQxE2 < 0) {
|
|
297
|
+
// b1 < 0, no intersection
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
const edge4_x = edge1_y * diff_z - edge1_z * diff_y;
|
|
302
|
+
const edge4_y = edge1_z * diff_x - edge1_x * diff_z;
|
|
303
|
+
const edge4_z = edge1_x * diff_y - edge1_y * diff_x;
|
|
304
|
+
|
|
305
|
+
const DdE1xQ = sign * v3_dot(direction_x, direction_y, direction_z, edge4_x, edge4_y, edge4_z);
|
|
306
|
+
|
|
307
|
+
if (DdE1xQ < 0) {
|
|
308
|
+
// b2 < 0, no intersection
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (DdQxE2 + DdE1xQ > DdN) {
|
|
313
|
+
// b1+b2 > 1, no intersection
|
|
314
|
+
return false;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// Line intersects triangle, check if ray does.
|
|
318
|
+
const QdN = -sign * v3_dot(diff_x, diff_y, diff_z, normal_x, normal_y, normal_z);
|
|
319
|
+
|
|
320
|
+
if (QdN < 0) {
|
|
321
|
+
// t < 0, no intersection
|
|
322
|
+
return false;
|
|
323
|
+
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// Ray intersects triangle.
|
|
327
|
+
const t = QdN / DdN;
|
|
328
|
+
|
|
329
|
+
// `normal_x/y/z` is the raw `edge1 x edge2`, whose length is twice the triangle's area - it was
|
|
330
|
+
// written straight into `SurfacePoint3.normal`, which is documented as a surface normal and is
|
|
331
|
+
// a unit vector out of every other producer in the tree.
|
|
332
|
+
//
|
|
333
|
+
// NOTE: normalised but NOT turned to meet the ray, unlike `tri3_raycast`. This normal keeps the
|
|
334
|
+
// winding's facing on purpose: `StaticSceneBVH.raycast_nearest` derives `geometric_back_face`
|
|
335
|
+
// from `dot(normal, direction)`, and a normal pre-flipped toward the ray would report every hit
|
|
336
|
+
// as front-facing.
|
|
337
|
+
const normal_length = Math.sqrt(normal_x * normal_x + normal_y * normal_y + normal_z * normal_z);
|
|
338
|
+
|
|
339
|
+
const inv_normal_length = 1 / normal_length;
|
|
340
|
+
|
|
341
|
+
result.normal.set(
|
|
342
|
+
normal_x * inv_normal_length,
|
|
343
|
+
normal_y * inv_normal_length,
|
|
344
|
+
normal_z * inv_normal_length
|
|
345
|
+
);
|
|
346
|
+
|
|
347
|
+
result.position.set(
|
|
348
|
+
direction_x * t + origin_x,
|
|
349
|
+
direction_y * t + origin_y,
|
|
350
|
+
direction_z * t + origin_z,
|
|
351
|
+
);
|
|
352
|
+
|
|
353
|
+
return true;
|
|
354
|
+
}
|
|
@@ -8,16 +8,21 @@
|
|
|
8
8
|
*
|
|
9
9
|
* The matrix N is built so that the eigenvector of its largest eigenvalue
|
|
10
10
|
* IS the optimal rotation quaternion (in scalar-last form, matching meep's
|
|
11
|
-
* `Quaternion`).
|
|
11
|
+
* `Quaternion`). Largest means signed, not by magnitude: for a coplanar set
|
|
12
|
+
* (every set of two) det S = 0, which makes N's spectrum symmetric about zero,
|
|
13
|
+
* so −λmax is an eigenvalue too (±count for a perfect fit). N is decomposed
|
|
14
|
+
* directly (Jacobi), which needs no gap between the top two eigenvalues, so a
|
|
15
|
+
* set whose twist is weakly determined (nearly parallel vectors) is solved as
|
|
16
|
+
* exactly as a well-spread one.
|
|
12
17
|
*
|
|
13
18
|
* Inputs are unit vectors so no centroid subtraction is needed — the rotation
|
|
14
19
|
* is recovered from the cross-correlations alone.
|
|
15
20
|
*
|
|
16
|
-
* @param {Float32Array|number[]} a_xyz
|
|
17
|
-
* @param {Float32Array|number[]} b_xyz
|
|
21
|
+
* @param {Float32Array|Float64Array|number[]} a_xyz Target vectors, which R·b_i is fitted onto — Length: count*3, unit length per triple
|
|
22
|
+
* @param {Float32Array|Float64Array|number[]} b_xyz Source vectors, which R rotates — Length: count*3, unit length per triple
|
|
18
23
|
* @param {number} count
|
|
19
|
-
* @param {Float32Array|number[]} out_quaternion Length 4 (x, y, z, w)
|
|
20
|
-
* @returns {number} The maximum eigenvalue
|
|
24
|
+
* @param {Float32Array|Float64Array|number[]} out_quaternion Length 4 (x, y, z, w)
|
|
25
|
+
* @returns {number} The maximum eigenvalue = Σ a_i · R·b_i at the optimum. For a perfect alignment this equals `count`.
|
|
21
26
|
*/
|
|
22
|
-
export function v3_rigid_align_paired_unit_vectors(a_xyz: Float32Array | number[], b_xyz: Float32Array | number[], count: number, out_quaternion: Float32Array | number[]): number;
|
|
27
|
+
export function v3_rigid_align_paired_unit_vectors(a_xyz: Float32Array | Float64Array | number[], b_xyz: Float32Array | Float64Array | number[], count: number, out_quaternion: Float32Array | Float64Array | number[]): number;
|
|
23
28
|
//# sourceMappingURL=v3_rigid_align_paired_unit_vectors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3_rigid_align_paired_unit_vectors.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js"],"names":[],"mappings":"AAMA
|
|
1
|
+
{"version":3,"file":"v3_rigid_align_paired_unit_vectors.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,0DANW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,SAClC,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,SAClC,MAAM,kBACN,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,GAChC,MAAM,CA+ElB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { matrix_top_eigenvector_power_iteration } from "../../math/linalg/eigen/matrix_top_eigenvector_power_iteration.js";
|
|
3
|
-
import { SquareMatrix } from "../../math/matrix/SquareMatrix.js"
|
|
1
|
+
import { matrix_symmetric_4x4_eigen } from "../../math/linalg/eigen/matrix_symmetric_4x4_eigen.js";
|
|
4
2
|
|
|
5
|
-
const scratch_horn_n = new
|
|
3
|
+
const scratch_horn_n = new Float64Array(16);
|
|
4
|
+
const scratch_eigen_values = new Float64Array(4);
|
|
5
|
+
const scratch_eigen_vectors = new Float64Array(16);
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Closed-form solution for the rotation that best aligns two sets of unit
|
|
@@ -14,16 +14,21 @@ const scratch_horn_n = new SquareMatrix(4, BinaryDataType.Float64);
|
|
|
14
14
|
*
|
|
15
15
|
* The matrix N is built so that the eigenvector of its largest eigenvalue
|
|
16
16
|
* IS the optimal rotation quaternion (in scalar-last form, matching meep's
|
|
17
|
-
* `Quaternion`).
|
|
17
|
+
* `Quaternion`). Largest means signed, not by magnitude: for a coplanar set
|
|
18
|
+
* (every set of two) det S = 0, which makes N's spectrum symmetric about zero,
|
|
19
|
+
* so −λmax is an eigenvalue too (±count for a perfect fit). N is decomposed
|
|
20
|
+
* directly (Jacobi), which needs no gap between the top two eigenvalues, so a
|
|
21
|
+
* set whose twist is weakly determined (nearly parallel vectors) is solved as
|
|
22
|
+
* exactly as a well-spread one.
|
|
18
23
|
*
|
|
19
24
|
* Inputs are unit vectors so no centroid subtraction is needed — the rotation
|
|
20
25
|
* is recovered from the cross-correlations alone.
|
|
21
26
|
*
|
|
22
|
-
* @param {Float32Array|number[]} a_xyz
|
|
23
|
-
* @param {Float32Array|number[]} b_xyz
|
|
27
|
+
* @param {Float32Array|Float64Array|number[]} a_xyz Target vectors, which R·b_i is fitted onto — Length: count*3, unit length per triple
|
|
28
|
+
* @param {Float32Array|Float64Array|number[]} b_xyz Source vectors, which R rotates — Length: count*3, unit length per triple
|
|
24
29
|
* @param {number} count
|
|
25
|
-
* @param {Float32Array|number[]} out_quaternion Length 4 (x, y, z, w)
|
|
26
|
-
* @returns {number} The maximum eigenvalue
|
|
30
|
+
* @param {Float32Array|Float64Array|number[]} out_quaternion Length 4 (x, y, z, w)
|
|
31
|
+
* @returns {number} The maximum eigenvalue = Σ a_i · R·b_i at the optimum. For a perfect alignment this equals `count`.
|
|
27
32
|
*/
|
|
28
33
|
export function v3_rigid_align_paired_unit_vectors(a_xyz, b_xyz, count, out_quaternion) {
|
|
29
34
|
|
|
@@ -72,9 +77,8 @@ export function v3_rigid_align_paired_unit_vectors(a_xyz, b_xyz, count, out_quat
|
|
|
72
77
|
const Nyw = Szx - Sxz;
|
|
73
78
|
const Nzw = Sxy - Syx;
|
|
74
79
|
|
|
75
|
-
|
|
76
|
-
const d =
|
|
77
|
-
// SquareMatrix is column-major: d[col * 4 + row]
|
|
80
|
+
// Symmetric, so the index is row*4 + col and col*4 + row alike.
|
|
81
|
+
const d = scratch_horn_n;
|
|
78
82
|
d[0] = Nxx;
|
|
79
83
|
d[5] = Nyy;
|
|
80
84
|
d[10] = Nzz;
|
|
@@ -92,5 +96,15 @@ export function v3_rigid_align_paired_unit_vectors(a_xyz, b_xyz, count, out_quat
|
|
|
92
96
|
d[11] = Nzw;
|
|
93
97
|
d[14] = Nzw;
|
|
94
98
|
|
|
95
|
-
|
|
99
|
+
const values = scratch_eigen_values;
|
|
100
|
+
const vectors = scratch_eigen_vectors;
|
|
101
|
+
matrix_symmetric_4x4_eigen(values, vectors, d);
|
|
102
|
+
|
|
103
|
+
// Eigenpairs come back ascending; the last is the largest.
|
|
104
|
+
out_quaternion[0] = vectors[12];
|
|
105
|
+
out_quaternion[1] = vectors[13];
|
|
106
|
+
out_quaternion[2] = vectors[14];
|
|
107
|
+
out_quaternion[3] = vectors[15];
|
|
108
|
+
|
|
109
|
+
return values[3];
|
|
96
110
|
}
|