@woosh/meep-engine 2.154.0 → 2.156.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/README.md +1 -1
- package/build/bundle-worker-image-decoder.js +1 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/editor/view/ecs/ComponentControlView.d.ts +0 -9
- package/editor/view/ecs/ComponentControlView.js +2 -98
- package/package.json +1 -1
- package/src/core/binary/32BitEncoder.js +1 -1
- package/src/core/binary/to_half_float_uint16.js +3 -3
- package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.js +275 -253
- package/src/core/cache/Cache.d.ts.map +1 -1
- package/src/core/cache/Cache.js +7 -0
- package/src/core/cache/FrequencySketch.d.ts.map +1 -1
- package/src/core/cache/FrequencySketch.js +8 -4
- package/src/core/clipboard/obtainClipBoard.d.ts +6 -0
- package/src/core/clipboard/obtainClipBoard.d.ts.map +1 -0
- package/src/core/clipboard/obtainClipBoard.js +29 -0
- package/src/core/clipboard/safeClipboardReadText.d.ts +6 -0
- package/src/core/clipboard/safeClipboardReadText.d.ts.map +1 -0
- package/src/core/clipboard/safeClipboardReadText.js +55 -0
- package/src/core/clipboard/safeClipboardWriteText.d.ts +8 -0
- package/src/core/clipboard/safeClipboardWriteText.d.ts.map +1 -0
- package/src/core/clipboard/safeClipboardWriteText.js +23 -0
- package/src/core/collection/array/array_quick_sort_by_lookup_map.js +1 -1
- package/src/core/collection/array/array_set_diff_sorting.d.ts.map +1 -1
- package/src/core/collection/array/array_set_diff_sorting.js +4 -1
- package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
- package/src/core/collection/array/array_shuffle.js +30 -27
- package/src/core/collection/array/binarySearchLowIndex.d.ts.map +1 -1
- package/src/core/collection/array/binarySearchLowIndex.js +4 -3
- package/src/core/collection/array/typed/array_buffer_hash.js +1 -1
- package/src/core/collection/array/typed/is_typed_array_equals.d.ts.map +1 -1
- package/src/core/collection/array/typed/is_typed_array_equals.js +12 -2
- package/src/core/collection/heap/BinaryHeap.d.ts.map +1 -1
- package/src/core/collection/heap/BinaryHeap.js +12 -2
- package/src/core/collection/queue/Deque.d.ts.map +1 -1
- package/src/core/collection/queue/Deque.js +10 -8
- package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
- package/src/core/collection/table/RowFirstTable.js +4 -2
- package/src/core/collection/table/RowFirstTableSpec.js +2 -2
- package/src/core/color/operations/color_lerp.d.ts.map +1 -1
- package/src/core/color/operations/color_lerp.js +10 -3
- package/src/core/color/rgb2uint32.js +1 -1
- package/src/core/color/rgbe9995_to_rgb.js +1 -1
- package/src/core/function/objectsEqual.d.ts.map +1 -1
- package/src/core/function/objectsEqual.js +2 -1
- package/src/core/geom/2d/aabb/AABB2.d.ts.map +1 -1
- package/src/core/geom/2d/aabb/AABB2.js +12 -11
- package/src/core/geom/2d/convex-hull/convex_hull_jarvis_2d.d.ts.map +1 -1
- package/src/core/geom/2d/convex-hull/convex_hull_jarvis_2d.js +30 -4
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.d.ts.map +1 -1
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.js +6 -2
- package/src/core/geom/2d/hash-grid/SpatialHashGrid.d.ts.map +1 -1
- package/src/core/geom/2d/hash-grid/SpatialHashGrid.js +388 -386
- package/src/core/geom/2d/hash-grid/shg_query_elements_line.d.ts.map +1 -1
- package/src/core/geom/2d/hash-grid/shg_query_elements_line.js +8 -3
- package/src/core/geom/2d/quad-tree/QuadTreeDatum.d.ts.map +1 -1
- package/src/core/geom/2d/quad-tree/QuadTreeDatum.js +9 -1
- package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.d.ts +3 -1
- package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.d.ts.map +1 -1
- package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.js +3 -1
- package/src/core/geom/2d/quad-tree-binary/QuadTree.js +714 -714
- package/src/core/geom/2d/r-tree/StaticR2Tree.d.ts.map +1 -1
- package/src/core/geom/2d/r-tree/StaticR2Tree.js +5 -4
- package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.js +33 -29
- package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.js +3 -1
- package/src/core/geom/3d/aabb/aabb3_signed_distance_to_aabb3.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_signed_distance_to_aabb3.js +10 -7
- package/src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.js +30 -9
- package/src/core/geom/3d/aabb/compute_aabb_from_points.js +3 -3
- package/src/core/geom/3d/box/box3_raycast.d.ts +37 -0
- package/src/core/geom/3d/box/box3_raycast.d.ts.map +1 -0
- package/src/core/geom/3d/box/box3_raycast.js +81 -0
- package/src/core/geom/3d/capsule/capsule_raycast.d.ts +35 -0
- package/src/core/geom/3d/capsule/capsule_raycast.d.ts.map +1 -0
- package/src/core/geom/3d/capsule/capsule_raycast.js +93 -0
- package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.d.ts.map +1 -1
- package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.js +4 -0
- package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +1 -1
- 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 +3 -2
- package/src/core/geom/3d/mat4/decompose_matrix_4_array.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/decompose_matrix_4_array.js +12 -2
- package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.js +2 -2
- package/src/core/geom/3d/mat4/m4_multiply_alphatensor.d.ts +1 -1
- package/src/core/geom/3d/mat4/m4_multiply_alphatensor.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_multiply_alphatensor.js +19 -13
- package/src/core/geom/3d/octahedra/octahedral_direction_to_uv.d.ts.map +1 -1
- package/src/core/geom/3d/octahedra/octahedral_direction_to_uv.js +3 -2
- package/src/core/geom/3d/plane/plane3_compute_plane_intersection.js +3 -2
- package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/MeshShape3D.js +7 -0
- package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.js +3 -2
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -1
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +153 -148
- package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.d.ts.map +1 -1
- package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.js +7 -0
- package/src/core/geom/3d/sphere/harmonics/sh3_sample_by_direction.d.ts.map +1 -1
- package/src/core/geom/3d/sphere/harmonics/sh3_sample_by_direction.js +13 -10
- package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.d.ts +1 -1
- package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.js +2 -2
- package/src/core/geom/3d/sphere/sphere_raycast.d.ts +33 -0
- package/src/core/geom/3d/sphere/sphere_raycast.d.ts.map +1 -0
- package/src/core/geom/3d/sphere/sphere_raycast.js +47 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.d.ts +24 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.js +39 -0
- package/src/core/geom/3d/tetrahedra/triangle/trace_triangular_depth_map.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/triangle/trace_triangular_depth_map.js +4 -2
- package/src/core/geom/3d/topology/bounds/computeTriangleClusterNormalBoundingCone.js +3 -3
- package/src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js +1 -1
- package/src/core/geom/3d/topology/tm_vertex_compute_normal.d.ts.map +1 -1
- package/src/core/geom/3d/topology/tm_vertex_compute_normal.js +4 -2
- package/src/core/geom/3d/util/make_justified_point_grid.d.ts.map +1 -1
- package/src/core/geom/3d/util/make_justified_point_grid.js +18 -10
- package/src/core/geom/ConicRay.d.ts.map +1 -1
- package/src/core/geom/ConicRay.js +11 -13
- package/src/core/geom/packing/max-rect/removeRedundantBoxes.d.ts.map +1 -1
- package/src/core/geom/packing/max-rect/removeRedundantBoxes.js +19 -4
- package/src/core/geom/vec3/v3_array_copy.d.ts +3 -3
- package/src/core/geom/vec3/v3_array_copy.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_array_copy.js +2 -2
- package/src/core/geom/vec3/v3_cross.d.ts +17 -0
- package/src/core/geom/vec3/v3_cross.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_cross.js +20 -0
- package/src/core/geom/vec3/v3_orthonormal_matrix_from_normal.d.ts.map +1 -0
- package/src/{engine/graphics/sh3/path_tracer/sampling → core/geom/vec3}/v3_orthonormal_matrix_from_normal.js +1 -1
- package/src/core/geom/vec3/v3_subtract.d.ts +16 -0
- package/src/core/geom/vec3/v3_subtract.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_subtract.js +19 -0
- package/src/core/graph/coloring/colorizeGraph.js +2 -2
- package/src/core/graph/csr/CSRGraph.d.ts.map +1 -1
- package/src/core/graph/csr/CSRGraph.js +325 -319
- package/src/core/graph/layout/CircleLayout.d.ts.map +1 -1
- package/src/core/graph/layout/CircleLayout.js +8 -6
- package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -1
- package/src/core/graph/metis/native/refine/compute_kway_params.js +139 -138
- package/src/core/graph/mn_graph_coarsen.d.ts.map +1 -1
- package/src/core/graph/mn_graph_coarsen.js +4 -2
- package/src/core/graph/v2/NodeContainer.js +7 -7
- package/src/core/localization/LocalizationEngine.js +1 -1
- package/src/core/math/bell_membership_function.d.ts.map +1 -1
- package/src/core/math/bell_membership_function.js +3 -1
- package/src/core/math/complex/complex_add.d.ts +4 -4
- package/src/core/math/complex/complex_add.d.ts.map +1 -1
- package/src/core/math/complex/complex_add.js +3 -3
- package/src/core/math/complex/complex_div.d.ts +4 -4
- package/src/core/math/complex/complex_div.d.ts.map +1 -1
- package/src/core/math/complex/complex_div.js +3 -3
- package/src/core/math/complex/complex_mul.d.ts +4 -4
- package/src/core/math/complex/complex_mul.d.ts.map +1 -1
- package/src/core/math/complex/complex_mul.js +3 -3
- package/src/core/math/complex/complex_sub.d.ts +4 -4
- package/src/core/math/complex/complex_sub.d.ts.map +1 -1
- package/src/core/math/complex/complex_sub.js +3 -3
- package/src/core/math/idct_1d.d.ts +4 -4
- package/src/core/math/idct_1d.d.ts.map +1 -1
- package/src/core/math/idct_1d.js +3 -3
- package/src/core/math/noise/create_simplex_noise_2d.d.ts.map +1 -1
- package/src/core/math/noise/create_simplex_noise_2d.js +4 -2
- package/src/core/math/noise/sdnoise.d.ts.map +1 -1
- package/src/core/math/noise/sdnoise.js +12 -9
- package/src/core/math/physics/mie/compute_bhmie_optical_properties.d.ts.map +1 -1
- package/src/core/math/physics/mie/compute_bhmie_optical_properties.js +94 -50
- package/src/core/math/physics/mie/lorenz_mie_coefs.d.ts +3 -6
- package/src/core/math/physics/mie/lorenz_mie_coefs.d.ts.map +1 -1
- package/src/core/math/physics/mie/lorenz_mie_coefs.js +180 -157
- package/src/core/math/physics/mie/mie_ab_to_optical_properties.d.ts +3 -4
- package/src/core/math/physics/mie/mie_ab_to_optical_properties.d.ts.map +1 -1
- package/src/core/math/physics/mie/mie_ab_to_optical_properties.js +47 -21
- package/src/core/math/random/randomIntegerBetween.d.ts.map +1 -1
- package/src/core/math/random/randomIntegerBetween.js +4 -1
- package/src/core/math/solveCubic.d.ts.map +1 -1
- package/src/core/math/solveCubic.js +95 -82
- package/src/core/math/spline/computeCatmullRomSplineUniformDistance.d.ts.map +1 -1
- package/src/core/math/spline/computeCatmullRomSplineUniformDistance.js +13 -0
- package/src/core/math/statistics/softmax.js +1 -1
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +1 -0
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/NodeGraphVisualData.js +2 -1
- package/src/core/model/node-graph/visual/NodeVisualData.js +1 -1
- package/src/core/model/object/ImmutableObjectPool.d.ts +7 -0
- package/src/core/model/object/ImmutableObjectPool.d.ts.map +1 -1
- package/src/core/model/object/ImmutableObjectPool.js +20 -10
- package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.d.ts.map +1 -1
- package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.js +39 -2
- package/src/core/model/reactive/model/terminal/ReactiveReference.d.ts.map +1 -1
- package/src/core/model/reactive/model/terminal/ReactiveReference.js +2 -0
- package/src/core/parser/simple/readHexToken.d.ts.map +1 -1
- package/src/core/parser/simple/readHexToken.js +6 -0
- package/src/core/primitives/numbers/number_pretty_print.d.ts.map +1 -1
- package/src/core/primitives/numbers/number_pretty_print.js +4 -1
- package/src/core/primitives/strings/string_jaro_winkler.js +1 -1
- package/src/core/process/CompositeProcess.js +1 -1
- package/src/core/process/action/AsynchronousDelayAction.d.ts.map +1 -1
- package/src/core/process/action/AsynchronousDelayAction.js +3 -0
- package/src/core/process/executor/ConcurrentExecutor.d.ts.map +1 -1
- package/src/core/process/executor/ConcurrentExecutor.js +3 -2
- package/src/core/process/task/util/randomCountTask.d.ts.map +1 -1
- package/src/core/process/task/util/randomCountTask.js +3 -1
- package/src/core/process/undo/ActionProcessor.d.ts.map +1 -1
- package/src/core/process/undo/ActionProcessor.js +5 -3
- package/src/core/process/worker/WorkerBuilder.js +3 -3
- package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
- package/src/engine/animation/curve/AnimationCurve.js +4 -2
- package/src/engine/control/first-person/DESIGN.md +1 -1
- package/src/engine/control/first-person/FirstPersonMotionPhase.d.ts +55 -0
- package/src/engine/control/first-person/FirstPersonMotionPhase.d.ts.map +1 -0
- package/src/engine/control/first-person/FirstPersonMotionPhase.js +134 -0
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +23 -2
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerController.js +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +168 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +115 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +71 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +255 -55
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +82 -43
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/LedgeGrab.js +405 -213
- package/src/engine/control/first-person/abilities/Mantle.d.ts +6 -0
- package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/Mantle.js +104 -45
- package/src/engine/control/first-person/abilities/ScrambleUp.d.ts +61 -0
- package/src/engine/control/first-person/abilities/ScrambleUp.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/ScrambleUp.js +182 -0
- package/src/engine/control/first-person/math/jumpDynamics.d.ts +84 -0
- package/src/engine/control/first-person/math/jumpDynamics.d.ts.map +1 -0
- package/src/engine/control/first-person/math/jumpDynamics.js +108 -0
- package/src/engine/control/first-person/prototype_first_person_controller.js +45 -1
- package/src/engine/graphics/camera/testClippingPlaneComputation.js +1 -1
- package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +8 -0
- package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +1 -1
- package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +1 -1
- package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +1 -1
- package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +1 -1
- package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +1 -1
- package/src/engine/graphics/shadows/testShadowMapRendering.js +1 -1
- package/src/engine/physics/CONSTRAINT_SOLVER_BENCH_LOG.md +208 -0
- package/src/engine/physics/CONSTRAINT_SOLVER_IMPROVEMENTS_PLAN.md +364 -0
- package/src/engine/physics/PLAN.md +6 -5
- package/src/engine/physics/constraint/solve_constraints.d.ts +4 -1
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +147 -33
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +1750 -1747
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +3 -3
- package/src/engine/physics/gjk/gjk_epa_penetration.d.ts +12 -8
- package/src/engine/physics/gjk/gjk_epa_penetration.d.ts.map +1 -1
- package/src/engine/physics/gjk/gjk_epa_penetration.js +447 -158
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +22 -25
- package/src/engine/physics/narrowphase/convex_decomposition.d.ts +32 -13
- package/src/engine/physics/narrowphase/convex_decomposition.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_decomposition.js +61 -65
- package/src/engine/physics/narrowphase/mesh_convex_hull.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/mesh_convex_hull.js +13 -8
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_concave.js +5 -3
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_hit.js +81 -78
- package/src/engine/sound/SoundEngine.d.ts.map +1 -1
- package/src/engine/sound/SoundEngine.js +28 -0
- package/src/engine/sound/dB2Volume.d.ts +1 -1
- package/src/engine/sound/dB2Volume.d.ts.map +1 -1
- package/src/engine/sound/dB2Volume.js +1 -1
- package/src/engine/sound/ecs/SoundController.d.ts +4 -0
- package/src/engine/sound/ecs/SoundController.d.ts.map +1 -1
- package/src/engine/sound/ecs/SoundController.js +4 -0
- package/src/engine/sound/ecs/SoundControllerSystem.d.ts +5 -0
- package/src/engine/sound/ecs/SoundControllerSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/SoundControllerSystem.js +5 -0
- package/src/engine/sound/ecs/audio/AudioEmitter.d.ts +69 -0
- package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -0
- package/src/engine/sound/ecs/audio/AudioEmitter.js +83 -0
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +97 -0
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -0
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +238 -0
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +90 -0
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -0
- package/src/engine/sound/ecs/audio/LiveEmitterSet.js +324 -0
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +59 -0
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -0
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +140 -0
- package/src/engine/sound/ecs/emitter/SoundEmitter.d.ts +16 -65
- package/src/engine/sound/ecs/emitter/SoundEmitter.d.ts.map +1 -1
- package/src/engine/sound/ecs/emitter/SoundEmitter.js +19 -224
- package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts +26 -29
- package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts.map +1 -1
- package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.js +168 -135
- package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts +36 -59
- package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/emitter/SoundEmitterSystem.js +154 -390
- package/src/engine/sound/ecs/emitter/SoundTrack.d.ts +20 -23
- package/src/engine/sound/ecs/emitter/SoundTrack.d.ts.map +1 -1
- package/src/engine/sound/ecs/emitter/SoundTrack.js +34 -152
- package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +993 -0
- package/src/engine/sound/sopra/README.md +643 -7
- package/src/engine/sound/sopra/SopraEngine.d.ts +229 -0
- package/src/engine/sound/sopra/SopraEngine.d.ts.map +1 -0
- package/src/engine/sound/sopra/SopraEngine.js +423 -0
- package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.d.ts +26 -0
- package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.d.ts.map +1 -0
- package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.js +71 -0
- package/src/engine/sound/sopra/asset/BufferProvider.d.ts +24 -0
- package/src/engine/sound/sopra/asset/BufferProvider.d.ts.map +1 -0
- package/src/engine/sound/sopra/asset/BufferProvider.js +29 -0
- package/src/engine/sound/sopra/asset/StubBufferProvider.d.ts +31 -0
- package/src/engine/sound/sopra/asset/StubBufferProvider.d.ts.map +1 -0
- package/src/engine/sound/sopra/asset/StubBufferProvider.js +58 -0
- package/src/engine/sound/sopra/definition/BusDefinition.d.ts +83 -0
- package/src/engine/sound/sopra/definition/BusDefinition.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/BusDefinition.js +142 -0
- package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.d.ts +17 -0
- package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.js +54 -0
- package/src/engine/sound/sopra/definition/DuckingRule.d.ts +71 -0
- package/src/engine/sound/sopra/definition/DuckingRule.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/DuckingRule.js +106 -0
- package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.js +31 -0
- package/src/engine/sound/sopra/definition/EventDescription.d.ts +132 -0
- package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/EventDescription.js +259 -0
- package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts +17 -0
- package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.js +71 -0
- package/src/engine/sound/sopra/definition/MixerSnapshot.d.ts +51 -0
- package/src/engine/sound/sopra/definition/MixerSnapshot.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/MixerSnapshot.js +83 -0
- package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.js +39 -0
- package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts +72 -0
- package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/ParameterDefinition.js +117 -0
- package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.js +31 -0
- package/src/engine/sound/sopra/definition/SopraPanningModel.d.ts +14 -0
- package/src/engine/sound/sopra/definition/SopraPanningModel.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/SopraPanningModel.js +20 -0
- package/src/engine/sound/sopra/definition/VoiceStealMode.d.ts +10 -0
- package/src/engine/sound/sopra/definition/VoiceStealMode.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/VoiceStealMode.js +18 -0
- package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.d.ts +93 -0
- package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +109 -0
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts +80 -0
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +181 -0
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.d.ts +17 -0
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.js +74 -0
- package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.d.ts +34 -0
- package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +100 -0
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +101 -0
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +230 -0
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.d.ts +17 -0
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.js +54 -0
- package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts +103 -0
- package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +191 -0
- package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.js +39 -0
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.d.ts +40 -0
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.js +91 -0
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.d.ts +17 -0
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.js +42 -0
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.d.ts +44 -0
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.js +77 -0
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.js +27 -0
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +65 -0
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +131 -0
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.d.ts +17 -0
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.js +41 -0
- package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts +24 -0
- package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.js +24 -0
- package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts +70 -0
- package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +120 -0
- package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.js +31 -0
- package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts +74 -0
- package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/effect/EqEffect.js +128 -0
- package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.js +29 -0
- package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts +49 -0
- package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +101 -0
- package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.js +25 -0
- package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts +31 -0
- package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts.map +1 -0
- package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.js +106 -0
- package/src/engine/sound/sopra/runtime/BusGraph.d.ts +79 -0
- package/src/engine/sound/sopra/runtime/BusGraph.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/BusGraph.js +227 -0
- package/src/engine/sound/sopra/runtime/EventInstance.d.ts +144 -0
- package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/EventInstance.js +579 -0
- package/src/engine/sound/sopra/runtime/ParameterStore.d.ts +42 -0
- package/src/engine/sound/sopra/runtime/ParameterStore.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/ParameterStore.js +98 -0
- package/src/engine/sound/sopra/runtime/SopraPlaybackContext.d.ts +42 -0
- package/src/engine/sound/sopra/runtime/SopraPlaybackContext.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/SopraPlaybackContext.js +68 -0
- package/src/engine/sound/sopra/runtime/Voice.d.ts +67 -0
- package/src/engine/sound/sopra/runtime/Voice.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/Voice.js +145 -0
- package/src/engine/sound/sopra/runtime/VoiceManager.d.ts +38 -0
- package/src/engine/sound/sopra/runtime/VoiceManager.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/VoiceManager.js +136 -0
- package/src/engine/sound/sopra/runtime/VoicePool.d.ts +12 -0
- package/src/engine/sound/sopra/runtime/VoicePool.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/VoicePool.js +17 -0
- package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts +11 -0
- package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts.map +1 -0
- package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.js +42 -0
- package/src/engine/sound/sopra/serialization/sopraJSON.d.ts +33 -0
- package/src/engine/sound/sopra/serialization/sopraJSON.d.ts.map +1 -0
- package/src/engine/sound/sopra/serialization/sopraJSON.js +99 -0
- package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts +27 -0
- package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts.map +1 -0
- package/src/engine/sound/sopra/serialization/sopraSerializationHarness.js +49 -0
- package/src/engine/sound/sopra/util/MockAudioContext.d.ts +74 -0
- package/src/engine/sound/sopra/util/MockAudioContext.d.ts.map +1 -0
- package/src/engine/sound/sopra/util/MockAudioContext.js +215 -0
- package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts +15 -0
- package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts.map +1 -0
- package/src/engine/sound/sopra/util/buildAttenuationCurve.js +40 -0
- package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts +34 -0
- package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts.map +1 -0
- package/src/engine/sound/sopra/util/fadeOutAndStop.js +60 -0
- package/src/engine/sound/volume2dB.d.ts +1 -1
- package/src/engine/sound/volume2dB.d.ts.map +1 -1
- package/src/engine/sound/volume2dB.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/sampling/v3_orthonormal_matrix_from_normal.d.ts.map +0 -1
- package/src/engine/physics/narrowphase/ray_shapes.d.ts +0 -66
- package/src/engine/physics/narrowphase/ray_shapes.d.ts.map +0 -1
- package/src/engine/physics/narrowphase/ray_shapes.js +0 -187
- package/src/engine/sound/ecs/emitter/SoundEmitterChannel.d.ts +0 -23
- package/src/engine/sound/ecs/emitter/SoundEmitterChannel.d.ts.map +0 -1
- package/src/engine/sound/ecs/emitter/SoundEmitterChannel.js +0 -32
- package/src/engine/sound/ecs/emitter/SoundTrackNodes.d.ts +0 -18
- package/src/engine/sound/ecs/emitter/SoundTrackNodes.d.ts.map +0 -1
- package/src/engine/sound/ecs/emitter/SoundTrackNodes.js +0 -18
- package/src/engine/sound/sopra/AbstractAudioClip.d.ts +0 -26
- package/src/engine/sound/sopra/AbstractAudioClip.d.ts.map +0 -1
- package/src/engine/sound/sopra/AbstractAudioClip.js +0 -29
- package/src/engine/sound/sopra/ContainerAudioClip.d.ts +0 -12
- package/src/engine/sound/sopra/ContainerAudioClip.d.ts.map +0 -1
- package/src/engine/sound/sopra/ContainerAudioClip.js +0 -13
- package/src/engine/sound/sopra/RandomContainerAudioClip.d.ts +0 -12
- package/src/engine/sound/sopra/RandomContainerAudioClip.d.ts.map +0 -1
- package/src/engine/sound/sopra/RandomContainerAudioClip.js +0 -15
- package/src/engine/sound/sopra/SequenceContainerAudioClip.d.ts +0 -7
- package/src/engine/sound/sopra/SequenceContainerAudioClip.d.ts.map +0 -1
- package/src/engine/sound/sopra/SequenceContainerAudioClip.js +0 -8
- package/src/engine/sound/sopra/SilenceAudioClip.d.ts +0 -13
- package/src/engine/sound/sopra/SilenceAudioClip.d.ts.map +0 -1
- package/src/engine/sound/sopra/SilenceAudioClip.js +0 -15
- /package/src/{engine/graphics/sh3/path_tracer/sampling → core/geom/vec3}/v3_orthonormal_matrix_from_normal.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticR2Tree.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/2d/r-tree/StaticR2Tree.js"],"names":[],"mappings":"AAoEA;;;GAGG;AACH;IAEI;;;OAGG;IACH,sBAAc;IAEd;;;;OAIG;IACH,+BAAc;IAEd;;;;OAIG;IACH,4BAAwB;IAExB;;;;OAIG;IACH,0BAAsB;IAOtB;;;OAGG;IACH,kBAFW,WAAW,QASrB;IAFG,6BAA0D;IAK9D,6BASC;IAED;;;OAGG;IACH,oBAFW,MAAM,QAchB;IAGD;;;;;;;;OAQG;IACH,mBAPW,MAAM,WACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QAwBhB;IAED;;;OAGG;IACH,uBAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,4BAHW,MAAM,GACJ,MAAM,CAQlB;IAGD;;;OAGG;IACH,oBAFW,MAAM,EAAE,QAgFlB;IAED;;;;;OAKG;IACH,sBAYC;IAED;;OAEG;IACH,
|
|
1
|
+
{"version":3,"file":"StaticR2Tree.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/2d/r-tree/StaticR2Tree.js"],"names":[],"mappings":"AAoEA;;;GAGG;AACH;IAEI;;;OAGG;IACH,sBAAc;IAEd;;;;OAIG;IACH,+BAAc;IAEd;;;;OAIG;IACH,4BAAwB;IAExB;;;;OAIG;IACH,0BAAsB;IAOtB;;;OAGG;IACH,kBAFW,WAAW,QASrB;IAFG,6BAA0D;IAK9D,6BASC;IAED;;;OAGG;IACH,oBAFW,MAAM,QAchB;IAGD;;;;;;;;OAQG;IACH,mBAPW,MAAM,WACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QAwBhB;IAED;;;OAGG;IACH,uBAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,4BAHW,MAAM,GACJ,MAAM,CAQlB;IAGD;;;OAGG;IACH,oBAFW,MAAM,EAAE,QAgFlB;IAED;;;;;OAKG;IACH,sBAYC;IAED;;OAEG;IACH,cAuEC;CACJ"}
|
|
@@ -28,8 +28,8 @@ function build_normalized_morton_2d(
|
|
|
28
28
|
|
|
29
29
|
const x0 = data[address];
|
|
30
30
|
const y0 = data[address + 1];
|
|
31
|
-
const x1 = data[address +
|
|
32
|
-
const y1 = data[address +
|
|
31
|
+
const x1 = data[address + 2];
|
|
32
|
+
const y1 = data[address + 3];
|
|
33
33
|
|
|
34
34
|
const cx = (x0 + x1) * 0.5;
|
|
35
35
|
const cy = (y0 + y1) * 0.5;
|
|
@@ -345,8 +345,9 @@ export class StaticR2Tree {
|
|
|
345
345
|
float32, leaf_offset_1
|
|
346
346
|
);
|
|
347
347
|
} else if (leaf_index_0 < node_count_leaf) {
|
|
348
|
-
// only left child node is valid
|
|
349
|
-
|
|
348
|
+
// only left child node is valid; a 2D box is 4 floats [x0,y0,x1,y1] (copying 6 would spill into
|
|
349
|
+
// the following node's data)
|
|
350
|
+
array_copy(float32, leaf_offset_0, float32, offset, 4);
|
|
350
351
|
} else {
|
|
351
352
|
//initialize to 0-size box same position as previous node
|
|
352
353
|
copy_box_zero_size(this.__data_float32, offset, (offset - BINARY_NODE_SIZE));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aabb3_detailed_volume_intersection.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.js"],"names":[],"mappings":"AA8CA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,gEAbW,MAAM,EAAE,sBACR,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,cAEN,MAAM,UADN,MAAM,EAAE,eAER,MAAM,GACJ,MAAM,
|
|
1
|
+
{"version":3,"file":"aabb3_detailed_volume_intersection.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.js"],"names":[],"mappings":"AA8CA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,gEAbW,MAAM,EAAE,sBACR,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,cAEN,MAAM,UADN,MAAM,EAAE,eAER,MAAM,GACJ,MAAM,CAyOlB"}
|
|
@@ -242,47 +242,51 @@ export function aabb3_detailed_volume_intersection(
|
|
|
242
242
|
const aabb_plane_nz = scratch_aabb_planes[aabb_plane_address + 2];
|
|
243
243
|
const aabb_plane_constant = scratch_aabb_planes[aabb_plane_address + 3];
|
|
244
244
|
|
|
245
|
-
|
|
245
|
+
// The 4 frustum side-edges are each the intersection of one +/-x plane (index 0 or 1) with one +/-y
|
|
246
|
+
// plane (index 2 or 3). The previous (i, (i+2)%4) pairing produced only 2 of those 4 edges, each twice
|
|
247
|
+
// (missing the +x/-y and -x/+y edges), so AABB-vs-edge contact points on those edges were never found.
|
|
248
|
+
// Enumerate all four non-parallel pairs explicitly.
|
|
249
|
+
for (let pa = 0; pa < 2; pa++) {
|
|
246
250
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
if ((plane_mask & plane_bit_mask) === 0) {
|
|
250
|
-
// non-intersecting plane, ignore
|
|
251
|
+
if ((plane_mask & (1 << pa)) === 0) {
|
|
251
252
|
continue;
|
|
252
253
|
}
|
|
253
254
|
|
|
254
|
-
const cp_0 =
|
|
255
|
-
|
|
256
|
-
const next_orthogonal_plane_index = (frustum_plane_index + 2) % 4;
|
|
257
|
-
const cp_1 = next_orthogonal_plane_index * 4;
|
|
255
|
+
const cp_0 = pa * 4;
|
|
258
256
|
|
|
259
|
-
|
|
260
|
-
scratch_v3_array, 0,
|
|
261
|
-
aabb_plane_nx, aabb_plane_ny, aabb_plane_nz, aabb_plane_constant,
|
|
262
|
-
planes[cp_0], planes[cp_0 + 1], planes[cp_0 + 2], planes[cp_0 + 3],
|
|
263
|
-
planes[cp_1], planes[cp_1 + 1], planes[cp_1 + 2], planes[cp_1 + 3]
|
|
264
|
-
);
|
|
257
|
+
for (let pb = 2; pb < 4; pb++) {
|
|
265
258
|
|
|
266
|
-
|
|
259
|
+
if ((plane_mask & (1 << pb)) === 0) {
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
267
262
|
|
|
268
|
-
const
|
|
269
|
-
const intersection_point_y = scratch_v3_array[1];
|
|
270
|
-
const intersection_point_z = scratch_v3_array[2];
|
|
263
|
+
const cp_1 = pb * 4;
|
|
271
264
|
|
|
272
|
-
const
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
265
|
+
const intersection_exists = plane3_compute_convex_3_plane_intersection(
|
|
266
|
+
scratch_v3_array, 0,
|
|
267
|
+
aabb_plane_nx, aabb_plane_ny, aabb_plane_nz, aabb_plane_constant,
|
|
268
|
+
planes[cp_0], planes[cp_0 + 1], planes[cp_0 + 2], planes[cp_0 + 3],
|
|
269
|
+
planes[cp_1], planes[cp_1 + 1], planes[cp_1 + 2], planes[cp_1 + 3]
|
|
276
270
|
);
|
|
277
271
|
|
|
278
|
-
if (
|
|
279
|
-
|
|
272
|
+
if (intersection_exists) {
|
|
273
|
+
|
|
274
|
+
const intersection_point_x = scratch_v3_array[0];
|
|
275
|
+
const intersection_point_y = scratch_v3_array[1];
|
|
276
|
+
const intersection_point_z = scratch_v3_array[2];
|
|
280
277
|
|
|
281
|
-
|
|
278
|
+
const point_within_box = !(
|
|
279
|
+
(intersection_point_x + EPSILON) < x0 || (intersection_point_x - EPSILON) > x1
|
|
280
|
+
|| (intersection_point_y + EPSILON) < y0 || (intersection_point_y - EPSILON) > y1
|
|
281
|
+
|| (intersection_point_z + EPSILON) < z0 || (intersection_point_z - EPSILON) > z1
|
|
282
|
+
);
|
|
282
283
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
284
|
+
if (point_within_box) {
|
|
285
|
+
// point is within the AABB bounds
|
|
286
|
+
destination[destination_cursor++] = intersection_point_x;
|
|
287
|
+
destination[destination_cursor++] = intersection_point_y;
|
|
288
|
+
destination[destination_cursor++] = intersection_point_z;
|
|
289
|
+
}
|
|
286
290
|
}
|
|
287
291
|
}
|
|
288
292
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aabb3_near_distance_to_intersection_ray_segment.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH,oEAhBW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,YACN,MAAM,YACN,MAAM,YACN,MAAM,mBACN,MAAM,mBACN,MAAM,mBACN,MAAM,gBACN,MAAM,gBACN,MAAM,GACJ,MAAM,
|
|
1
|
+
{"version":3,"file":"aabb3_near_distance_to_intersection_ray_segment.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH,oEAhBW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,YACN,MAAM,YACN,MAAM,YACN,MAAM,mBACN,MAAM,mBACN,MAAM,mBACN,MAAM,gBACN,MAAM,gBACN,MAAM,GACJ,MAAM,CAkDlB"}
|
|
@@ -59,7 +59,9 @@ export function aabb3_near_distance_to_intersection_ray_segment(
|
|
|
59
59
|
const t_box_min = Math.max(t_min_x, t_min_y, t_min_z, min_distance);
|
|
60
60
|
const t_box_max = Math.min(t_max_x, t_max_y, t_max_z, max_distance);
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
// Negated `<=` so a NaN bound (ray parallel to a slab with the origin exactly on that slab's face) is
|
|
63
|
+
// treated as a miss; `t_box_min > t_box_max` would be false for NaN and leak NaN out as the result.
|
|
64
|
+
if (!(t_box_min <= t_box_max)) {
|
|
63
65
|
// signal a miss
|
|
64
66
|
return Infinity;
|
|
65
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aabb3_signed_distance_to_aabb3.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/aabb3_signed_distance_to_aabb3.js"],"names":[],"mappings":"AAAA,+
|
|
1
|
+
{"version":3,"file":"aabb3_signed_distance_to_aabb3.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/aabb3_signed_distance_to_aabb3.js"],"names":[],"mappings":"AAAA,+KA8BC"}
|
|
@@ -16,13 +16,16 @@ export function aabb3_signed_distance_to_aabb3(
|
|
|
16
16
|
const dy = Math.max(yp0, yp1);
|
|
17
17
|
const dz = Math.max(zp0, zp1);
|
|
18
18
|
|
|
19
|
-
//straight-line distance
|
|
20
|
-
let distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
21
|
-
|
|
22
19
|
if (dx < 0 && dy < 0 && dz < 0) {
|
|
23
|
-
//penetration
|
|
24
|
-
return -
|
|
25
|
-
} else {
|
|
26
|
-
return distance;
|
|
20
|
+
//penetration: boxes overlap on every axis
|
|
21
|
+
return -Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
27
22
|
}
|
|
23
|
+
|
|
24
|
+
// Separated on at least one axis. Only the positive (separating) components contribute to the gap;
|
|
25
|
+
// a negative component means the boxes already overlap on that axis and must not inflate the distance.
|
|
26
|
+
const sx = dx > 0 ? dx : 0;
|
|
27
|
+
const sy = dy > 0 ? dy : 0;
|
|
28
|
+
const sz = dz > 0 ? dz : 0;
|
|
29
|
+
|
|
30
|
+
return Math.sqrt(sx * sx + sy * sy + sz * sz);
|
|
28
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aabb3_transformed_compute_plane_side.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;GAeG;AACH,yDAbW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,kBACN,MAAM,kBACN,MAAM,kBACN,MAAM,gBACN,MAAM,oBACN,MAAM,EAAE,GAAC,YAAY,GACnB,MAAM,
|
|
1
|
+
{"version":3,"file":"aabb3_transformed_compute_plane_side.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;GAeG;AACH,yDAbW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,kBACN,MAAM,kBACN,MAAM,kBACN,MAAM,gBACN,MAAM,oBACN,MAAM,EAAE,GAAC,YAAY,GACnB,MAAM,CAmElB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {v3_distance_above_plane} from "../../vec3/v3_distance_above_plane.js";
|
|
2
2
|
import {aabb3_build_corners} from "./aabb3_build_corners.js";
|
|
3
|
-
import {aabb3_matrix4_project_by_corners} from "./aabb3_matrix4_project_by_corners.js";
|
|
4
3
|
|
|
5
4
|
const scratch_corners = new Float32Array(24);
|
|
5
|
+
const scratch_transformed = new Float32Array(24);
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Figure out which side of a plane an Axis-Aligned Bounding Box lies, after applying transform matrix to it
|
|
@@ -33,19 +33,40 @@ export function aabb3_transformed_compute_plane_side(
|
|
|
33
33
|
x0, y0, z0, x1, y1, z1
|
|
34
34
|
);
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
// Transform all 8 corners by the matrix, keeping each transformed corner. We intentionally do NOT use
|
|
37
|
+
// aabb3_matrix4_project_by_corners here: it re-bounds the transformed corners down to a single 6-value
|
|
38
|
+
// AABB written back into the same buffer, which would leave 6 of the 8 classification slots holding stale,
|
|
39
|
+
// untransformed corners.
|
|
40
|
+
const m0 = transform_matrix[0], m1 = transform_matrix[1], m2 = transform_matrix[2], m3 = transform_matrix[3];
|
|
41
|
+
const m4 = transform_matrix[4], m5 = transform_matrix[5], m6 = transform_matrix[6], m7 = transform_matrix[7];
|
|
42
|
+
const m8 = transform_matrix[8], m9 = transform_matrix[9], m10 = transform_matrix[10], m11 = transform_matrix[11];
|
|
43
|
+
const m12 = transform_matrix[12], m13 = transform_matrix[13], m14 = transform_matrix[14], m15 = transform_matrix[15];
|
|
44
|
+
|
|
45
|
+
for (let i = 0; i < 24; i += 3) {
|
|
46
|
+
const _x = scratch_corners[i];
|
|
47
|
+
const _y = scratch_corners[i + 1];
|
|
48
|
+
const _z = scratch_corners[i + 2];
|
|
49
|
+
|
|
50
|
+
const t_x = m0 * _x + m4 * _y + m8 * _z + m12;
|
|
51
|
+
const t_y = m1 * _x + m5 * _y + m9 * _z + m13;
|
|
52
|
+
const t_z = m2 * _x + m6 * _y + m10 * _z + m14;
|
|
53
|
+
const t_w = m3 * _x + m7 * _y + m11 * _z + m15;
|
|
54
|
+
|
|
55
|
+
// perspective divide; harmless (w === 1) for the affine model matrices this is called with.
|
|
56
|
+
const d = 1 / t_w;
|
|
57
|
+
|
|
58
|
+
scratch_transformed[i] = t_x * d;
|
|
59
|
+
scratch_transformed[i + 1] = t_y * d;
|
|
60
|
+
scratch_transformed[i + 2] = t_z * d;
|
|
61
|
+
}
|
|
41
62
|
|
|
42
63
|
let has_above = false, has_below = false;
|
|
43
64
|
|
|
44
65
|
for (let i = 0; i < 8; i++) {
|
|
45
66
|
const i3 = i * 3;
|
|
46
|
-
const x =
|
|
47
|
-
const y =
|
|
48
|
-
const z =
|
|
67
|
+
const x = scratch_transformed[i3];
|
|
68
|
+
const y = scratch_transformed[i3 + 1];
|
|
69
|
+
const z = scratch_transformed[i3 + 2];
|
|
49
70
|
|
|
50
71
|
if (v3_distance_above_plane(x, y, z, plane_normal_x, plane_normal_y, plane_normal_z, plane_offset)) {
|
|
51
72
|
has_above = true;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { max2 } from "../../../math/max2.js";
|
|
2
|
+
import { min2 } from "../../../math/min2.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Multidimensional axis-aligned bounding box calculation
|
|
@@ -27,7 +27,7 @@ export function compute_aabb_from_points(
|
|
|
27
27
|
|
|
28
28
|
for (i = 0; i < input_count; i++) {
|
|
29
29
|
|
|
30
|
-
const offset_0 =
|
|
30
|
+
const offset_0 = input_offset + i * d;
|
|
31
31
|
|
|
32
32
|
for (j = 0; j < d; j++) {
|
|
33
33
|
const v = input[offset_0 + j];
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ray ↔ box intersection in the box's LOCAL frame: an axis-aligned box centred
|
|
3
|
+
* at the origin spanning `[−hx,hx] × [−hy,hy] × [−hz,hz]` — the canonical pose of
|
|
4
|
+
* `BoxShape3D` (an oriented box transformed into its own frame). Slab method.
|
|
5
|
+
* Returns the hit distance `t` and writes the outward unit FACE normal into
|
|
6
|
+
* `outNormal[outOffset .. outOffset+2]`.
|
|
7
|
+
*
|
|
8
|
+
* Conventions (shared with {@link sphere_raycast} / {@link capsule_raycast}):
|
|
9
|
+
* - the ray direction is assumed UNIT length, so `t` is a true distance;
|
|
10
|
+
* - the first crossing at or after the origin within `tMax` is returned; a ray
|
|
11
|
+
* starting INSIDE the box returns its exit face;
|
|
12
|
+
* - on a miss the function returns `Infinity` and leaves `outNormal` untouched.
|
|
13
|
+
*
|
|
14
|
+
* Distinct from {@link aabb3_raycast}, which takes an arbitrary min/max box and
|
|
15
|
+
* returns a boolean + hit POSITION + a quantized normal. This one serves the
|
|
16
|
+
* raycast/narrowphase need: the entry distance, the EXACT face normal, `tMax`
|
|
17
|
+
* clamping, and origin-inside handling.
|
|
18
|
+
*
|
|
19
|
+
* @param {Float64Array|number[]} outNormal destination for the unit normal
|
|
20
|
+
* @param {number} outOffset offset into `outNormal` (3 floats are written)
|
|
21
|
+
* @param {number} ox ray origin x (local)
|
|
22
|
+
* @param {number} oy ray origin y (local)
|
|
23
|
+
* @param {number} oz ray origin z (local)
|
|
24
|
+
* @param {number} dx ray direction x (local, unit)
|
|
25
|
+
* @param {number} dy ray direction y (local, unit)
|
|
26
|
+
* @param {number} dz ray direction z (local, unit)
|
|
27
|
+
* @param {number} tMax maximum ray distance
|
|
28
|
+
* @param {number} hx half-extent along x
|
|
29
|
+
* @param {number} hy half-extent along y
|
|
30
|
+
* @param {number} hz half-extent along z
|
|
31
|
+
* @returns {number} hit distance `t`, or `Infinity` on a miss
|
|
32
|
+
*
|
|
33
|
+
* @author Alex Goldring
|
|
34
|
+
* @copyright Company Named Limited (c) 2026
|
|
35
|
+
*/
|
|
36
|
+
export function box3_raycast(outNormal: Float64Array | number[], outOffset: number, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, tMax: number, hx: number, hy: number, hz: number): number;
|
|
37
|
+
//# sourceMappingURL=box3_raycast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"box3_raycast.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/box/box3_raycast.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wCAjBW,YAAY,GAAC,MAAM,EAAE,aACrB,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAkDlB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ray ↔ box intersection in the box's LOCAL frame: an axis-aligned box centred
|
|
3
|
+
* at the origin spanning `[−hx,hx] × [−hy,hy] × [−hz,hz]` — the canonical pose of
|
|
4
|
+
* `BoxShape3D` (an oriented box transformed into its own frame). Slab method.
|
|
5
|
+
* Returns the hit distance `t` and writes the outward unit FACE normal into
|
|
6
|
+
* `outNormal[outOffset .. outOffset+2]`.
|
|
7
|
+
*
|
|
8
|
+
* Conventions (shared with {@link sphere_raycast} / {@link capsule_raycast}):
|
|
9
|
+
* - the ray direction is assumed UNIT length, so `t` is a true distance;
|
|
10
|
+
* - the first crossing at or after the origin within `tMax` is returned; a ray
|
|
11
|
+
* starting INSIDE the box returns its exit face;
|
|
12
|
+
* - on a miss the function returns `Infinity` and leaves `outNormal` untouched.
|
|
13
|
+
*
|
|
14
|
+
* Distinct from {@link aabb3_raycast}, which takes an arbitrary min/max box and
|
|
15
|
+
* returns a boolean + hit POSITION + a quantized normal. This one serves the
|
|
16
|
+
* raycast/narrowphase need: the entry distance, the EXACT face normal, `tMax`
|
|
17
|
+
* clamping, and origin-inside handling.
|
|
18
|
+
*
|
|
19
|
+
* @param {Float64Array|number[]} outNormal destination for the unit normal
|
|
20
|
+
* @param {number} outOffset offset into `outNormal` (3 floats are written)
|
|
21
|
+
* @param {number} ox ray origin x (local)
|
|
22
|
+
* @param {number} oy ray origin y (local)
|
|
23
|
+
* @param {number} oz ray origin z (local)
|
|
24
|
+
* @param {number} dx ray direction x (local, unit)
|
|
25
|
+
* @param {number} dy ray direction y (local, unit)
|
|
26
|
+
* @param {number} dz ray direction z (local, unit)
|
|
27
|
+
* @param {number} tMax maximum ray distance
|
|
28
|
+
* @param {number} hx half-extent along x
|
|
29
|
+
* @param {number} hy half-extent along y
|
|
30
|
+
* @param {number} hz half-extent along z
|
|
31
|
+
* @returns {number} hit distance `t`, or `Infinity` on a miss
|
|
32
|
+
*
|
|
33
|
+
* @author Alex Goldring
|
|
34
|
+
* @copyright Company Named Limited (c) 2026
|
|
35
|
+
*/
|
|
36
|
+
export function box3_raycast(outNormal, outOffset, ox, oy, oz, dx, dy, dz, tMax, hx, hy, hz) {
|
|
37
|
+
let tmin = -Infinity, tmax = Infinity;
|
|
38
|
+
let enterAxis = 0, enterSign = 0, exitAxis = 0, exitSign = 0;
|
|
39
|
+
|
|
40
|
+
// X slab.
|
|
41
|
+
if (dx !== 0) {
|
|
42
|
+
const inv = 1 / dx;
|
|
43
|
+
let tn = (-hx - ox) * inv, tf = (hx - ox) * inv, nsign = -1;
|
|
44
|
+
if (tn > tf) { const tmp = tn; tn = tf; tf = tmp; nsign = 1; }
|
|
45
|
+
if (tn > tmin) { tmin = tn; enterAxis = 0; enterSign = nsign; }
|
|
46
|
+
if (tf < tmax) { tmax = tf; exitAxis = 0; exitSign = -nsign; }
|
|
47
|
+
} else if (ox < -hx || ox > hx) {
|
|
48
|
+
return Infinity;
|
|
49
|
+
}
|
|
50
|
+
// Y slab.
|
|
51
|
+
if (dy !== 0) {
|
|
52
|
+
const inv = 1 / dy;
|
|
53
|
+
let tn = (-hy - oy) * inv, tf = (hy - oy) * inv, nsign = -1;
|
|
54
|
+
if (tn > tf) { const tmp = tn; tn = tf; tf = tmp; nsign = 1; }
|
|
55
|
+
if (tn > tmin) { tmin = tn; enterAxis = 1; enterSign = nsign; }
|
|
56
|
+
if (tf < tmax) { tmax = tf; exitAxis = 1; exitSign = -nsign; }
|
|
57
|
+
} else if (oy < -hy || oy > hy) {
|
|
58
|
+
return Infinity;
|
|
59
|
+
}
|
|
60
|
+
// Z slab.
|
|
61
|
+
if (dz !== 0) {
|
|
62
|
+
const inv = 1 / dz;
|
|
63
|
+
let tn = (-hz - oz) * inv, tf = (hz - oz) * inv, nsign = -1;
|
|
64
|
+
if (tn > tf) { const tmp = tn; tn = tf; tf = tmp; nsign = 1; }
|
|
65
|
+
if (tn > tmin) { tmin = tn; enterAxis = 2; enterSign = nsign; }
|
|
66
|
+
if (tf < tmax) { tmax = tf; exitAxis = 2; exitSign = -nsign; }
|
|
67
|
+
} else if (oz < -hz || oz > hz) {
|
|
68
|
+
return Infinity;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (tmax < tmin || tmax < 0) return Infinity;
|
|
72
|
+
|
|
73
|
+
let t, axis, sign;
|
|
74
|
+
if (tmin >= 0) { t = tmin; axis = enterAxis; sign = enterSign; }
|
|
75
|
+
else { t = tmax; axis = exitAxis; sign = exitSign; } // origin inside the box
|
|
76
|
+
|
|
77
|
+
if (t > tMax) return Infinity;
|
|
78
|
+
outNormal[outOffset] = 0; outNormal[outOffset + 1] = 0; outNormal[outOffset + 2] = 0;
|
|
79
|
+
outNormal[outOffset + axis] = sign;
|
|
80
|
+
return t;
|
|
81
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ray ↔ capsule intersection in the capsule's LOCAL frame: a capsule along the
|
|
3
|
+
* local Y axis — a cylinder of radius `r` over `y ∈ [−hh, hh]` capped by
|
|
4
|
+
* hemispheres of radius `r` at `(0, ±hh, 0)` — the canonical pose of
|
|
5
|
+
* `CapsuleShape3D` (`hh = height / 2`). Tests the infinite cylinder (clamped to
|
|
6
|
+
* the segment) and the two cap spheres, taking the nearest valid crossing.
|
|
7
|
+
* Returns the hit distance `t` and writes the outward unit surface normal into
|
|
8
|
+
* `outNormal[outOffset .. outOffset+2]`.
|
|
9
|
+
*
|
|
10
|
+
* Conventions (shared with {@link sphere_raycast} / {@link box3_raycast}):
|
|
11
|
+
* - the ray direction is assumed UNIT length, so `t` is a true distance;
|
|
12
|
+
* - the first surface crossing at or after the origin within `tMax` is returned;
|
|
13
|
+
* - on a miss the function returns `Infinity` and leaves `outNormal` untouched.
|
|
14
|
+
*
|
|
15
|
+
* No prior ray-vs-capsule primitive existed in `core/geom`; this fills that gap
|
|
16
|
+
* (useful for picking, sensors, and the raycast narrowphase).
|
|
17
|
+
*
|
|
18
|
+
* @param {Float64Array|number[]} outNormal destination for the unit normal
|
|
19
|
+
* @param {number} outOffset offset into `outNormal` (3 floats are written)
|
|
20
|
+
* @param {number} ox ray origin x (local)
|
|
21
|
+
* @param {number} oy ray origin y (local)
|
|
22
|
+
* @param {number} oz ray origin z (local)
|
|
23
|
+
* @param {number} dx ray direction x (local, unit)
|
|
24
|
+
* @param {number} dy ray direction y (local, unit)
|
|
25
|
+
* @param {number} dz ray direction z (local, unit)
|
|
26
|
+
* @param {number} tMax maximum ray distance
|
|
27
|
+
* @param {number} r capsule radius
|
|
28
|
+
* @param {number} hh half-height of the cylindrical section (`height / 2`)
|
|
29
|
+
* @returns {number} hit distance `t`, or `Infinity` on a miss
|
|
30
|
+
*
|
|
31
|
+
* @author Alex Goldring
|
|
32
|
+
* @copyright Company Named Limited (c) 2026
|
|
33
|
+
*/
|
|
34
|
+
export function capsule_raycast(outNormal: Float64Array | number[], outOffset: number, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, tMax: number, r: number, hh: number): number;
|
|
35
|
+
//# sourceMappingURL=capsule_raycast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capsule_raycast.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/capsule/capsule_raycast.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,2CAhBW,YAAY,GAAC,MAAM,EAAE,aACrB,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QACN,MAAM,KACN,MAAM,MACN,MAAM,GACJ,MAAM,CAgElB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ray ↔ capsule intersection in the capsule's LOCAL frame: a capsule along the
|
|
3
|
+
* local Y axis — a cylinder of radius `r` over `y ∈ [−hh, hh]` capped by
|
|
4
|
+
* hemispheres of radius `r` at `(0, ±hh, 0)` — the canonical pose of
|
|
5
|
+
* `CapsuleShape3D` (`hh = height / 2`). Tests the infinite cylinder (clamped to
|
|
6
|
+
* the segment) and the two cap spheres, taking the nearest valid crossing.
|
|
7
|
+
* Returns the hit distance `t` and writes the outward unit surface normal into
|
|
8
|
+
* `outNormal[outOffset .. outOffset+2]`.
|
|
9
|
+
*
|
|
10
|
+
* Conventions (shared with {@link sphere_raycast} / {@link box3_raycast}):
|
|
11
|
+
* - the ray direction is assumed UNIT length, so `t` is a true distance;
|
|
12
|
+
* - the first surface crossing at or after the origin within `tMax` is returned;
|
|
13
|
+
* - on a miss the function returns `Infinity` and leaves `outNormal` untouched.
|
|
14
|
+
*
|
|
15
|
+
* No prior ray-vs-capsule primitive existed in `core/geom`; this fills that gap
|
|
16
|
+
* (useful for picking, sensors, and the raycast narrowphase).
|
|
17
|
+
*
|
|
18
|
+
* @param {Float64Array|number[]} outNormal destination for the unit normal
|
|
19
|
+
* @param {number} outOffset offset into `outNormal` (3 floats are written)
|
|
20
|
+
* @param {number} ox ray origin x (local)
|
|
21
|
+
* @param {number} oy ray origin y (local)
|
|
22
|
+
* @param {number} oz ray origin z (local)
|
|
23
|
+
* @param {number} dx ray direction x (local, unit)
|
|
24
|
+
* @param {number} dy ray direction y (local, unit)
|
|
25
|
+
* @param {number} dz ray direction z (local, unit)
|
|
26
|
+
* @param {number} tMax maximum ray distance
|
|
27
|
+
* @param {number} r capsule radius
|
|
28
|
+
* @param {number} hh half-height of the cylindrical section (`height / 2`)
|
|
29
|
+
* @returns {number} hit distance `t`, or `Infinity` on a miss
|
|
30
|
+
*
|
|
31
|
+
* @author Alex Goldring
|
|
32
|
+
* @copyright Company Named Limited (c) 2026
|
|
33
|
+
*/
|
|
34
|
+
export function capsule_raycast(outNormal, outOffset, ox, oy, oz, dx, dy, dz, tMax, r, hh) {
|
|
35
|
+
let best = Infinity;
|
|
36
|
+
let nx = 0, ny = 0, nz = 0;
|
|
37
|
+
const r2 = r * r;
|
|
38
|
+
const inv_r = 1 / r;
|
|
39
|
+
|
|
40
|
+
// --- Cylinder side (infinite cylinder about Y, projected to XZ). ---
|
|
41
|
+
const a = dx * dx + dz * dz;
|
|
42
|
+
if (a > 1e-12) {
|
|
43
|
+
const b = ox * dx + oz * dz;
|
|
44
|
+
const c = ox * ox + oz * oz - r2;
|
|
45
|
+
const disc = b * b - a * c;
|
|
46
|
+
if (disc >= 0) {
|
|
47
|
+
const sq = Math.sqrt(disc);
|
|
48
|
+
const inv_a = 1 / a;
|
|
49
|
+
// Both roots; the smaller non-negative one whose hit lies on the
|
|
50
|
+
// cylindrical section is the side contact.
|
|
51
|
+
const roots = (-b - sq) * inv_a;
|
|
52
|
+
const rootf = (-b + sq) * inv_a;
|
|
53
|
+
for (let i = 0; i < 2; i++) {
|
|
54
|
+
const t = i === 0 ? roots : rootf;
|
|
55
|
+
if (t < 0 || t >= best || t > tMax) continue;
|
|
56
|
+
const y = oy + dy * t;
|
|
57
|
+
if (y < -hh || y > hh) continue; // off the cylinder, onto a cap
|
|
58
|
+
best = t;
|
|
59
|
+
const px = ox + dx * t, pz = oz + dz * t;
|
|
60
|
+
nx = px * inv_r; ny = 0; nz = pz * inv_r;
|
|
61
|
+
break; // roots is the nearer; if it qualified we're done
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// --- Cap spheres at (0, ±hh, 0), each valid only on its outer hemisphere. ---
|
|
67
|
+
for (let cap = 0; cap < 2; cap++) {
|
|
68
|
+
const cy = cap === 0 ? hh : -hh;
|
|
69
|
+
const oyc = oy - cy;
|
|
70
|
+
const bb = ox * dx + oyc * dy + oz * dz;
|
|
71
|
+
const cc = ox * ox + oyc * oyc + oz * oz - r2;
|
|
72
|
+
const disc = bb * bb - cc;
|
|
73
|
+
if (disc < 0) continue;
|
|
74
|
+
const sq = Math.sqrt(disc);
|
|
75
|
+
const tn = -bb - sq, tf = -bb + sq;
|
|
76
|
+
for (let i = 0; i < 2; i++) {
|
|
77
|
+
const t = i === 0 ? tn : tf;
|
|
78
|
+
if (t < 0 || t >= best || t > tMax) continue;
|
|
79
|
+
const hy = oy + dy * t;
|
|
80
|
+
// Only the hemisphere beyond the segment end belongs to this cap.
|
|
81
|
+
if (cap === 0 ? hy < hh : hy > -hh) continue;
|
|
82
|
+
best = t;
|
|
83
|
+
nx = (ox + dx * t) * inv_r;
|
|
84
|
+
ny = (hy - cy) * inv_r;
|
|
85
|
+
nz = (oz + dz * t) * inv_r;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (best === Infinity) return Infinity;
|
|
91
|
+
outNormal[outOffset] = nx; outNormal[outOffset + 1] = ny; outNormal[outOffset + 2] = nz;
|
|
92
|
+
return best;
|
|
93
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compute_bounding_cone_of_2_cones.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.js"],"names":[],"mappings":"AAiBA;;;;;GAKG;AACH,
|
|
1
|
+
{"version":3,"file":"compute_bounding_cone_of_2_cones.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.js"],"names":[],"mappings":"AAiBA;;;;;GAKG;AACH,mGAyEC"}
|
|
@@ -51,6 +51,10 @@ export function compute_bounding_cone_of_2_cones(result, a, b) {
|
|
|
51
51
|
|
|
52
52
|
// compute normal vectors bounding each cone in the common plane
|
|
53
53
|
tangent.crossVectors(a.direction, b.direction);
|
|
54
|
+
// the cross of two unit directions has length sin(angle); quat3_createFromAxisAngle needs a unit axis,
|
|
55
|
+
// otherwise the cone edges are rotated by the wrong angle. The parallel/anti-parallel degenerate cases
|
|
56
|
+
// (|tangent| == 0) are already excluded by the containment early-returns above.
|
|
57
|
+
tangent.normalize();
|
|
54
58
|
|
|
55
59
|
const a_half_angle = a.angle;
|
|
56
60
|
|
|
@@ -72,7 +72,7 @@ export function frustum3_computeNearestPointToPoint(result, planes, target_x, ta
|
|
|
72
72
|
const plane_0_index = scratch_outer_planes[0];
|
|
73
73
|
const plane_0 = planes[plane_0_index];
|
|
74
74
|
// point lies outside exactly one plane
|
|
75
|
-
plane3_project_point(result, target_x, target_y, target_z, plane_0.normal.
|
|
75
|
+
plane3_project_point(result, target_x, target_y, target_z, plane_0.normal.x, plane_0.normal.y, plane_0.normal.z, plane_0.constant);
|
|
76
76
|
} else if (outside_plane_count === 2) {
|
|
77
77
|
// outside two planes, nearest point lies on the intersection line of two planes
|
|
78
78
|
|
|
@@ -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,CAkFlB"}
|
|
@@ -82,8 +82,9 @@ export function line3_compute_segment_point_distance_eikonal(
|
|
|
82
82
|
const coef = p / det_sqrt;
|
|
83
83
|
const s = x_local - y * coef; // Intersection with x-axis
|
|
84
84
|
|
|
85
|
-
if (s > 0) {
|
|
86
|
-
// 5. Valid Eikonal Update
|
|
85
|
+
if (s > 0 && s < L) {
|
|
86
|
+
// 5. Valid Eikonal Update — the characteristic foot must land strictly inside the segment (0, L);
|
|
87
|
+
// an s >= L means the geodesic actually wraps via the far vertex, handled by the fallback below.
|
|
87
88
|
return u0 + (p * x_local + y * det_sqrt) / q;
|
|
88
89
|
} else {
|
|
89
90
|
// 6. Fallback (The path comes strictly from one of the vertices)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decompose_matrix_4_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/decompose_matrix_4_array.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,+CALW,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"decompose_matrix_4_array.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/decompose_matrix_4_array.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,+CALW,MAAM,EAAE,yDAuElB"}
|
|
@@ -26,9 +26,19 @@ export function decompose_matrix_4_array(mat4, position, rotation, scale) {
|
|
|
26
26
|
|
|
27
27
|
const scale_z = v3_length(m31, m32, m33);
|
|
28
28
|
|
|
29
|
+
// If the upper-left 3x3 has a negative determinant the matrix encodes a reflection; fold that sign into
|
|
30
|
+
// one scale axis (matching three.js, which negates scale.x) so the extracted rotation is a proper rotation
|
|
31
|
+
// rather than a mirror (which __setFromRotationMatrix would decode incorrectly).
|
|
32
|
+
const det =
|
|
33
|
+
m11 * (m22 * m33 - m23 * m32)
|
|
34
|
+
- m12 * (m21 * m33 - m23 * m31)
|
|
35
|
+
+ m13 * (m21 * m32 - m22 * m31);
|
|
36
|
+
|
|
37
|
+
const signed_scale_x = det < 0 ? -scale_x : scale_x;
|
|
38
|
+
|
|
29
39
|
// extract rotation matrix
|
|
30
40
|
// take care of potential division by 0 when scale is 0. Result is inexact, but we get don't break the system at least
|
|
31
|
-
const is1 =
|
|
41
|
+
const is1 = signed_scale_x !== 0 ? 1 / signed_scale_x : 1e7;
|
|
32
42
|
const is2 = scale_y !== 0 ? 1 / scale_y : 1e7;
|
|
33
43
|
const is3 = scale_z !== 0 ? 1 / scale_z : 1e7;
|
|
34
44
|
|
|
@@ -53,7 +63,7 @@ export function decompose_matrix_4_array(mat4, position, rotation, scale) {
|
|
|
53
63
|
);
|
|
54
64
|
|
|
55
65
|
scale.set(
|
|
56
|
-
|
|
66
|
+
signed_scale_x,
|
|
57
67
|
scale_y,
|
|
58
68
|
scale_z
|
|
59
69
|
);
|
|
@@ -62,7 +62,7 @@ export function eulerAnglesFromMatrix(
|
|
|
62
62
|
if (a0 === a2) {
|
|
63
63
|
output[0] = atan2(coeff(m4, j, i), coeff(m4, k, i));
|
|
64
64
|
|
|
65
|
-
if ((odd && output[0] < 0) || ((
|
|
65
|
+
if ((odd && output[0] < 0) || ((!odd) && output[0] > 0)) {
|
|
66
66
|
if (output[0] > 0) {
|
|
67
67
|
output[0] -= Math.PI;
|
|
68
68
|
} else {
|
|
@@ -96,7 +96,7 @@ export function eulerAnglesFromMatrix(
|
|
|
96
96
|
|
|
97
97
|
const c2 = v2_length(coeff(m4, i, i), coeff(m4, i, j));
|
|
98
98
|
|
|
99
|
-
if ((odd && output[0] < 0) || ((
|
|
99
|
+
if ((odd && output[0] < 0) || ((!odd) && output[0] > 0)) {
|
|
100
100
|
if (output[0] > 0) {
|
|
101
101
|
output[0] -= Math.PI;
|
|
102
102
|
} else {
|
|
@@ -7,5 +7,5 @@
|
|
|
7
7
|
* @param {number[]|Float32Array} b
|
|
8
8
|
* @returns {number[]|Float32Array} `out` parameter
|
|
9
9
|
*/
|
|
10
|
-
export function m4_multiply_alphatensor(out: number[] | Float32Array,
|
|
10
|
+
export function m4_multiply_alphatensor(out: number[] | Float32Array, a_in: any, b_in: any): number[] | Float32Array;
|
|
11
11
|
//# sourceMappingURL=m4_multiply_alphatensor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"m4_multiply_alphatensor.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_multiply_alphatensor.js"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,6CALW,MAAM,EAAE,GAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"m4_multiply_alphatensor.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_multiply_alphatensor.js"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,6CALW,MAAM,EAAE,GAAC,YAAY,yBAGnB,MAAM,EAAE,GAAC,YAAY,CAoJjC"}
|