three-stdlib 2.35.3 → 2.35.4
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/_polyfill/CapsuleGeometry.cjs +20 -17
- package/_polyfill/CapsuleGeometry.cjs.map +1 -1
- package/_polyfill/CapsuleGeometry.js +20 -17
- package/_polyfill/CapsuleGeometry.js.map +1 -1
- package/_polyfill/constants.cjs +1 -1
- package/_polyfill/constants.cjs.map +1 -1
- package/_polyfill/constants.js +1 -1
- package/_polyfill/constants.js.map +1 -1
- package/animation/AnimationClipCreator.cjs +13 -13
- package/animation/AnimationClipCreator.cjs.map +1 -1
- package/animation/AnimationClipCreator.js +13 -13
- package/animation/AnimationClipCreator.js.map +1 -1
- package/animation/CCDIKSolver.cjs +11 -11
- package/animation/CCDIKSolver.cjs.map +1 -1
- package/animation/CCDIKSolver.js +12 -12
- package/animation/CCDIKSolver.js.map +1 -1
- package/animation/MMDAnimationHelper.cjs +1 -1
- package/animation/MMDAnimationHelper.cjs.map +1 -1
- package/animation/MMDAnimationHelper.js +1 -1
- package/animation/MMDAnimationHelper.js.map +1 -1
- package/animation/MMDPhysics.cjs +4 -4
- package/animation/MMDPhysics.cjs.map +1 -1
- package/animation/MMDPhysics.js +4 -4
- package/animation/MMDPhysics.js.map +1 -1
- package/controls/ArcballControls.cjs +2 -2
- package/controls/ArcballControls.cjs.map +1 -1
- package/controls/ArcballControls.js +3 -3
- package/controls/ArcballControls.js.map +1 -1
- package/controls/FirstPersonControls.cjs +1 -1
- package/controls/FirstPersonControls.cjs.map +1 -1
- package/controls/FirstPersonControls.js +1 -1
- package/controls/FirstPersonControls.js.map +1 -1
- package/controls/OrbitControls.cjs +2 -2
- package/controls/OrbitControls.cjs.map +1 -1
- package/controls/OrbitControls.js +3 -3
- package/controls/OrbitControls.js.map +1 -1
- package/controls/PointerLockControls.cjs +2 -2
- package/controls/PointerLockControls.cjs.map +1 -1
- package/controls/PointerLockControls.js +3 -3
- package/controls/PointerLockControls.js.map +1 -1
- package/csm/CSM.cjs +4 -4
- package/csm/CSM.cjs.map +1 -1
- package/csm/CSM.js +5 -5
- package/csm/CSM.js.map +1 -1
- package/csm/CSMFrustum.cjs +1 -1
- package/csm/CSMFrustum.cjs.map +1 -1
- package/csm/CSMFrustum.js +2 -2
- package/csm/CSMFrustum.js.map +1 -1
- package/deprecated/Geometry.cjs +722 -715
- package/deprecated/Geometry.cjs.map +1 -1
- package/deprecated/Geometry.js +723 -716
- package/deprecated/Geometry.js.map +1 -1
- package/effects/AnaglyphEffect.cjs +2 -1
- package/effects/AnaglyphEffect.cjs.map +1 -1
- package/effects/AnaglyphEffect.js +3 -2
- package/effects/AnaglyphEffect.js.map +1 -1
- package/effects/OutlineEffect.cjs +2 -1
- package/effects/OutlineEffect.cjs.map +1 -1
- package/effects/OutlineEffect.js +3 -2
- package/effects/OutlineEffect.js.map +1 -1
- package/effects/ParallaxBarrierEffect.cjs +2 -1
- package/effects/ParallaxBarrierEffect.cjs.map +1 -1
- package/effects/ParallaxBarrierEffect.js +3 -2
- package/effects/ParallaxBarrierEffect.js.map +1 -1
- package/exporters/DRACOExporter.cjs +133 -122
- package/exporters/DRACOExporter.cjs.map +1 -1
- package/exporters/DRACOExporter.d.ts +23 -21
- package/exporters/DRACOExporter.js +133 -122
- package/exporters/DRACOExporter.js.map +1 -1
- package/exporters/GLTFExporter.cjs +170 -167
- package/exporters/GLTFExporter.cjs.map +1 -1
- package/exporters/GLTFExporter.js +170 -167
- package/exporters/GLTFExporter.js.map +1 -1
- package/geometries/LightningStrike.cjs +524 -515
- package/geometries/LightningStrike.cjs.map +1 -1
- package/geometries/LightningStrike.js +524 -515
- package/geometries/LightningStrike.js.map +1 -1
- package/geometries/RoundedBoxGeometry.cjs +1 -1
- package/geometries/RoundedBoxGeometry.cjs.map +1 -1
- package/geometries/RoundedBoxGeometry.js +2 -2
- package/geometries/RoundedBoxGeometry.js.map +1 -1
- package/helpers/RaycasterHelper.cjs +2 -2
- package/helpers/RaycasterHelper.cjs.map +1 -1
- package/helpers/RaycasterHelper.js +3 -3
- package/helpers/RaycasterHelper.js.map +1 -1
- package/helpers/VertexNormalsHelper.cjs +3 -3
- package/helpers/VertexNormalsHelper.cjs.map +1 -1
- package/helpers/VertexNormalsHelper.js +4 -4
- package/helpers/VertexNormalsHelper.js.map +1 -1
- package/helpers/VertexTangentsHelper.cjs +2 -2
- package/helpers/VertexTangentsHelper.cjs.map +1 -1
- package/helpers/VertexTangentsHelper.js +3 -3
- package/helpers/VertexTangentsHelper.js.map +1 -1
- package/interactive/InteractiveGroup.cjs +1 -1
- package/interactive/InteractiveGroup.cjs.map +1 -1
- package/interactive/InteractiveGroup.js +2 -2
- package/interactive/InteractiveGroup.js.map +1 -1
- package/interactive/SelectionBox.cjs +15 -15
- package/interactive/SelectionBox.cjs.map +1 -1
- package/interactive/SelectionBox.js +16 -16
- package/interactive/SelectionBox.js.map +1 -1
- package/libs/chevrotain.cjs +1 -1
- package/libs/chevrotain.cjs.map +1 -1
- package/libs/chevrotain.js +1 -1
- package/libs/chevrotain.js.map +1 -1
- package/libs/lottie.cjs +1 -1
- package/libs/lottie.cjs.map +1 -1
- package/libs/lottie.js +1 -1
- package/libs/lottie.js.map +1 -1
- package/libs/opentype.cjs +1 -1
- package/libs/opentype.cjs.map +1 -1
- package/libs/opentype.js +1 -1
- package/libs/opentype.js.map +1 -1
- package/lights/LightProbeGenerator.cjs +5 -5
- package/lights/LightProbeGenerator.cjs.map +1 -1
- package/lights/LightProbeGenerator.js +5 -5
- package/lights/LightProbeGenerator.js.map +1 -1
- package/lights/RectAreaLightUniformsLib.cjs +3 -3
- package/lights/RectAreaLightUniformsLib.cjs.map +1 -1
- package/lights/RectAreaLightUniformsLib.js +3 -3
- package/lights/RectAreaLightUniformsLib.js.map +1 -1
- package/lines/LineMaterial.cjs +2 -1
- package/lines/LineMaterial.cjs.map +1 -1
- package/lines/LineMaterial.js +3 -2
- package/lines/LineMaterial.js.map +1 -1
- package/lines/LineSegments2.cjs +13 -13
- package/lines/LineSegments2.cjs.map +1 -1
- package/lines/LineSegments2.js +14 -14
- package/lines/LineSegments2.js.map +1 -1
- package/lines/LineSegmentsGeometry.cjs +2 -2
- package/lines/LineSegmentsGeometry.cjs.map +1 -1
- package/lines/LineSegmentsGeometry.js +3 -3
- package/lines/LineSegmentsGeometry.js.map +1 -1
- package/lines/Wireframe.cjs +3 -3
- package/lines/Wireframe.cjs.map +1 -1
- package/lines/Wireframe.js +4 -4
- package/lines/Wireframe.js.map +1 -1
- package/loaders/BasisTextureLoader.cjs +441 -435
- package/loaders/BasisTextureLoader.cjs.map +1 -1
- package/loaders/BasisTextureLoader.js +441 -435
- package/loaders/BasisTextureLoader.js.map +1 -1
- package/loaders/EXRLoader.cjs +2 -1
- package/loaders/EXRLoader.cjs.map +1 -1
- package/loaders/EXRLoader.js +3 -2
- package/loaders/EXRLoader.js.map +1 -1
- package/loaders/FBXLoader.cjs +2 -2
- package/loaders/FBXLoader.cjs.map +1 -1
- package/loaders/FBXLoader.js +2 -2
- package/loaders/FBXLoader.js.map +1 -1
- package/loaders/FontLoader.cjs +2 -2
- package/loaders/FontLoader.cjs.map +1 -1
- package/loaders/FontLoader.d.ts +2 -2
- package/loaders/FontLoader.js +2 -2
- package/loaders/FontLoader.js.map +1 -1
- package/loaders/GLTFLoader.cjs +2 -2
- package/loaders/GLTFLoader.cjs.map +1 -1
- package/loaders/GLTFLoader.js +2 -2
- package/loaders/GLTFLoader.js.map +1 -1
- package/loaders/KTX2Loader.cjs +377 -374
- package/loaders/KTX2Loader.cjs.map +1 -1
- package/loaders/KTX2Loader.js +377 -374
- package/loaders/KTX2Loader.js.map +1 -1
- package/loaders/LDrawLoader.cjs +5 -4
- package/loaders/LDrawLoader.cjs.map +1 -1
- package/loaders/LDrawLoader.js +6 -5
- package/loaders/LDrawLoader.js.map +1 -1
- package/loaders/OBJLoader.cjs +5 -5
- package/loaders/OBJLoader.cjs.map +1 -1
- package/loaders/OBJLoader.js +6 -6
- package/loaders/OBJLoader.js.map +1 -1
- package/loaders/PRWMLoader.cjs +46 -43
- package/loaders/PRWMLoader.cjs.map +1 -1
- package/loaders/PRWMLoader.js +46 -43
- package/loaders/PRWMLoader.js.map +1 -1
- package/loaders/SVGLoader.cjs +1694 -1688
- package/loaders/SVGLoader.cjs.map +1 -1
- package/loaders/SVGLoader.js +1694 -1688
- package/loaders/SVGLoader.js.map +1 -1
- package/loaders/XLoader.cjs +1 -1
- package/loaders/XLoader.cjs.map +1 -1
- package/loaders/XLoader.js +1 -1
- package/loaders/XLoader.js.map +1 -1
- package/math/Capsule.cjs +3 -3
- package/math/Capsule.cjs.map +1 -1
- package/math/Capsule.js +3 -3
- package/math/Capsule.js.map +1 -1
- package/math/ColorConverter.cjs +9 -9
- package/math/ColorConverter.cjs.map +1 -1
- package/math/ColorConverter.js +9 -9
- package/math/ColorConverter.js.map +1 -1
- package/math/ConvexHull.cjs +53 -50
- package/math/ConvexHull.cjs.map +1 -1
- package/math/ConvexHull.js +53 -50
- package/math/ConvexHull.js.map +1 -1
- package/math/ImprovedNoise.cjs +1 -1
- package/math/ImprovedNoise.cjs.map +1 -1
- package/math/ImprovedNoise.js +1 -1
- package/math/ImprovedNoise.js.map +1 -1
- package/math/MeshSurfaceSampler.cjs +2 -2
- package/math/MeshSurfaceSampler.cjs.map +1 -1
- package/math/MeshSurfaceSampler.js +2 -2
- package/math/MeshSurfaceSampler.js.map +1 -1
- package/math/OBB.cjs +14 -14
- package/math/OBB.cjs.map +1 -1
- package/math/OBB.js +15 -15
- package/math/OBB.js.map +1 -1
- package/math/Octree.cjs +7 -7
- package/math/Octree.cjs.map +1 -1
- package/math/Octree.js +8 -8
- package/math/Octree.js.map +1 -1
- package/misc/ConvexObjectBreaker.cjs +271 -268
- package/misc/ConvexObjectBreaker.cjs.map +1 -1
- package/misc/ConvexObjectBreaker.js +272 -269
- package/misc/ConvexObjectBreaker.js.map +1 -1
- package/misc/Gyroscope.cjs +6 -6
- package/misc/Gyroscope.cjs.map +1 -1
- package/misc/Gyroscope.js +7 -7
- package/misc/Gyroscope.js.map +1 -1
- package/modifiers/CurveModifier.cjs +1 -1
- package/modifiers/CurveModifier.cjs.map +1 -1
- package/modifiers/CurveModifier.js +2 -2
- package/modifiers/CurveModifier.js.map +1 -1
- package/modifiers/SimplifyModifier.cjs +2 -2
- package/modifiers/SimplifyModifier.cjs.map +1 -1
- package/modifiers/SimplifyModifier.js +2 -2
- package/modifiers/SimplifyModifier.js.map +1 -1
- package/objects/BatchedMesh.cjs +2 -2
- package/objects/BatchedMesh.cjs.map +1 -1
- package/objects/BatchedMesh.js +3 -3
- package/objects/BatchedMesh.js.map +1 -1
- package/objects/GroundProjectedEnv.cjs +2 -1
- package/objects/GroundProjectedEnv.cjs.map +1 -1
- package/objects/GroundProjectedEnv.js +3 -2
- package/objects/GroundProjectedEnv.js.map +1 -1
- package/objects/Lensflare.cjs +209 -206
- package/objects/Lensflare.cjs.map +1 -1
- package/objects/Lensflare.js +209 -206
- package/objects/Lensflare.js.map +1 -1
- package/objects/Reflector.cjs +154 -146
- package/objects/Reflector.cjs.map +1 -1
- package/objects/Reflector.js +154 -146
- package/objects/Reflector.js.map +1 -1
- package/objects/ReflectorForSSRPass.cjs +183 -180
- package/objects/ReflectorForSSRPass.cjs.map +1 -1
- package/objects/ReflectorForSSRPass.js +183 -180
- package/objects/ReflectorForSSRPass.js.map +1 -1
- package/objects/Refractor.cjs +164 -161
- package/objects/Refractor.cjs.map +1 -1
- package/objects/Refractor.js +164 -161
- package/objects/Refractor.js.map +1 -1
- package/objects/ShadowMesh.cjs +1 -1
- package/objects/ShadowMesh.cjs.map +1 -1
- package/objects/ShadowMesh.js +2 -2
- package/objects/ShadowMesh.js.map +1 -1
- package/objects/Sky.cjs +35 -32
- package/objects/Sky.cjs.map +1 -1
- package/objects/Sky.d.ts +100 -6
- package/objects/Sky.js +35 -32
- package/objects/Sky.js.map +1 -1
- package/objects/Water.cjs +2 -1
- package/objects/Water.cjs.map +1 -1
- package/objects/Water.js +3 -2
- package/objects/Water.js.map +1 -1
- package/objects/Water2.cjs +143 -140
- package/objects/Water2.cjs.map +1 -1
- package/objects/Water2.js +143 -140
- package/objects/Water2.js.map +1 -1
- package/package.json +1 -1
- package/postprocessing/SAOPass.cjs +267 -264
- package/postprocessing/SAOPass.cjs.map +1 -1
- package/postprocessing/SAOPass.js +267 -264
- package/postprocessing/SAOPass.js.map +1 -1
- package/postprocessing/SSAOPass.cjs +253 -250
- package/postprocessing/SSAOPass.cjs.map +1 -1
- package/postprocessing/SSAOPass.js +253 -250
- package/postprocessing/SSAOPass.js.map +1 -1
- package/postprocessing/SSRPass.cjs +379 -376
- package/postprocessing/SSRPass.cjs.map +1 -1
- package/postprocessing/SSRPass.js +379 -376
- package/postprocessing/SSRPass.js.map +1 -1
- package/postprocessing/UnrealBloomPass.cjs +205 -202
- package/postprocessing/UnrealBloomPass.cjs.map +1 -1
- package/postprocessing/UnrealBloomPass.js +205 -202
- package/postprocessing/UnrealBloomPass.js.map +1 -1
- package/renderers/CSS2DRenderer.cjs +5 -5
- package/renderers/CSS2DRenderer.cjs.map +1 -1
- package/renderers/CSS2DRenderer.js +5 -5
- package/renderers/CSS2DRenderer.js.map +1 -1
- package/renderers/CSS3DRenderer.cjs +5 -5
- package/renderers/CSS3DRenderer.cjs.map +1 -1
- package/renderers/CSS3DRenderer.js +6 -6
- package/renderers/CSS3DRenderer.js.map +1 -1
- package/shaders/ACESFilmicToneMappingShader.cjs +71 -46
- package/shaders/ACESFilmicToneMappingShader.cjs.map +1 -1
- package/shaders/ACESFilmicToneMappingShader.js +71 -46
- package/shaders/ACESFilmicToneMappingShader.js.map +1 -1
- package/shaders/AfterimageShader.cjs +41 -22
- package/shaders/AfterimageShader.cjs.map +1 -1
- package/shaders/AfterimageShader.js +41 -22
- package/shaders/AfterimageShader.js.map +1 -1
- package/shaders/BasicShader.cjs +20 -6
- package/shaders/BasicShader.cjs.map +1 -1
- package/shaders/BasicShader.js +20 -6
- package/shaders/BasicShader.js.map +1 -1
- package/shaders/BleachBypassShader.cjs +46 -26
- package/shaders/BleachBypassShader.cjs.map +1 -1
- package/shaders/BleachBypassShader.js +46 -26
- package/shaders/BleachBypassShader.js.map +1 -1
- package/shaders/BlendShader.cjs +33 -19
- package/shaders/BlendShader.cjs.map +1 -1
- package/shaders/BlendShader.js +33 -19
- package/shaders/BlendShader.js.map +1 -1
- package/shaders/BokehShader.cjs +117 -90
- package/shaders/BokehShader.cjs.map +1 -1
- package/shaders/BokehShader.js +117 -90
- package/shaders/BokehShader.js.map +1 -1
- package/shaders/BokehShader2.cjs +333 -232
- package/shaders/BokehShader2.cjs.map +1 -1
- package/shaders/BokehShader2.js +333 -232
- package/shaders/BokehShader2.js.map +1 -1
- package/shaders/BrightnessContrastShader.cjs +38 -22
- package/shaders/BrightnessContrastShader.cjs.map +1 -1
- package/shaders/BrightnessContrastShader.js +38 -22
- package/shaders/BrightnessContrastShader.js.map +1 -1
- package/shaders/ColorCorrectionShader.cjs +35 -21
- package/shaders/ColorCorrectionShader.cjs.map +1 -1
- package/shaders/ColorCorrectionShader.js +35 -21
- package/shaders/ColorCorrectionShader.js.map +1 -1
- package/shaders/ColorifyShader.cjs +34 -19
- package/shaders/ColorifyShader.cjs.map +1 -1
- package/shaders/ColorifyShader.js +34 -19
- package/shaders/ColorifyShader.js.map +1 -1
- package/shaders/ConvolutionShader.cjs +43 -24
- package/shaders/ConvolutionShader.cjs.map +1 -1
- package/shaders/ConvolutionShader.js +43 -24
- package/shaders/ConvolutionShader.js.map +1 -1
- package/shaders/CopyShader.cjs +30 -16
- package/shaders/CopyShader.cjs.map +1 -1
- package/shaders/CopyShader.js +30 -16
- package/shaders/CopyShader.js.map +1 -1
- package/shaders/DOFMipMapShader.cjs +38 -21
- package/shaders/DOFMipMapShader.cjs.map +1 -1
- package/shaders/DOFMipMapShader.js +38 -21
- package/shaders/DOFMipMapShader.js.map +1 -1
- package/shaders/DepthLimitedBlurShader.cjs +98 -69
- package/shaders/DepthLimitedBlurShader.cjs.map +1 -1
- package/shaders/DepthLimitedBlurShader.js +98 -69
- package/shaders/DepthLimitedBlurShader.js.map +1 -1
- package/shaders/DigitalGlitch.cjs +70 -59
- package/shaders/DigitalGlitch.cjs.map +1 -1
- package/shaders/DigitalGlitch.js +70 -59
- package/shaders/DigitalGlitch.js.map +1 -1
- package/shaders/DotScreenShader.cjs +49 -28
- package/shaders/DotScreenShader.cjs.map +1 -1
- package/shaders/DotScreenShader.js +49 -28
- package/shaders/DotScreenShader.js.map +1 -1
- package/shaders/FXAAShader.cjs +1098 -1089
- package/shaders/FXAAShader.cjs.map +1 -1
- package/shaders/FXAAShader.js +1098 -1089
- package/shaders/FXAAShader.js.map +1 -1
- package/shaders/FilmShader.cjs +57 -29
- package/shaders/FilmShader.cjs.map +1 -1
- package/shaders/FilmShader.js +57 -29
- package/shaders/FilmShader.js.map +1 -1
- package/shaders/FocusShader.cjs +70 -43
- package/shaders/FocusShader.cjs.map +1 -1
- package/shaders/FocusShader.js +70 -43
- package/shaders/FocusShader.js.map +1 -1
- package/shaders/FreiChenShader.cjs +74 -53
- package/shaders/FreiChenShader.cjs.map +1 -1
- package/shaders/FreiChenShader.js +74 -53
- package/shaders/FreiChenShader.js.map +1 -1
- package/shaders/FresnelShader.cjs +55 -35
- package/shaders/FresnelShader.cjs.map +1 -1
- package/shaders/FresnelShader.js +55 -35
- package/shaders/FresnelShader.js.map +1 -1
- package/shaders/GammaCorrectionShader.cjs +33 -19
- package/shaders/GammaCorrectionShader.cjs.map +1 -1
- package/shaders/GammaCorrectionShader.js +33 -19
- package/shaders/GammaCorrectionShader.js.map +1 -1
- package/shaders/GodRaysShader.cjs +193 -116
- package/shaders/GodRaysShader.cjs.map +1 -1
- package/shaders/GodRaysShader.js +193 -116
- package/shaders/GodRaysShader.js.map +1 -1
- package/shaders/HalftoneShader.cjs +270 -192
- package/shaders/HalftoneShader.cjs.map +1 -1
- package/shaders/HalftoneShader.js +270 -192
- package/shaders/HalftoneShader.js.map +1 -1
- package/shaders/HorizontalTiltShiftShader.cjs +43 -27
- package/shaders/HorizontalTiltShiftShader.cjs.map +1 -1
- package/shaders/HorizontalTiltShiftShader.js +43 -27
- package/shaders/HorizontalTiltShiftShader.js.map +1 -1
- package/shaders/HueSaturationShader.cjs +47 -31
- package/shaders/HueSaturationShader.cjs.map +1 -1
- package/shaders/HueSaturationShader.js +47 -31
- package/shaders/HueSaturationShader.js.map +1 -1
- package/shaders/KaleidoShader.cjs +37 -24
- package/shaders/KaleidoShader.cjs.map +1 -1
- package/shaders/KaleidoShader.js +37 -24
- package/shaders/KaleidoShader.js.map +1 -1
- package/shaders/LuminosityHighPassShader.cjs +43 -24
- package/shaders/LuminosityHighPassShader.cjs.map +1 -1
- package/shaders/LuminosityHighPassShader.js +43 -24
- package/shaders/LuminosityHighPassShader.js.map +1 -1
- package/shaders/LuminosityShader.cjs +34 -17
- package/shaders/LuminosityShader.cjs.map +1 -1
- package/shaders/LuminosityShader.js +34 -17
- package/shaders/LuminosityShader.js.map +1 -1
- package/shaders/MirrorShader.cjs +39 -26
- package/shaders/MirrorShader.cjs.map +1 -1
- package/shaders/MirrorShader.js +39 -26
- package/shaders/MirrorShader.js.map +1 -1
- package/shaders/NormalMapShader.cjs +36 -21
- package/shaders/NormalMapShader.cjs.map +1 -1
- package/shaders/NormalMapShader.js +36 -21
- package/shaders/NormalMapShader.js.map +1 -1
- package/shaders/ParallaxShader.cjs +147 -97
- package/shaders/ParallaxShader.cjs.map +1 -1
- package/shaders/ParallaxShader.js +147 -97
- package/shaders/ParallaxShader.js.map +1 -1
- package/shaders/PixelShader.cjs +31 -18
- package/shaders/PixelShader.cjs.map +1 -1
- package/shaders/PixelShader.js +31 -18
- package/shaders/PixelShader.js.map +1 -1
- package/shaders/RGBShiftShader.cjs +33 -20
- package/shaders/RGBShiftShader.cjs.map +1 -1
- package/shaders/RGBShiftShader.js +33 -20
- package/shaders/RGBShiftShader.js.map +1 -1
- package/shaders/SAOShader.cjs +154 -117
- package/shaders/SAOShader.cjs.map +1 -1
- package/shaders/SAOShader.js +154 -117
- package/shaders/SAOShader.js.map +1 -1
- package/shaders/SMAAShader.cjs +358 -270
- package/shaders/SMAAShader.cjs.map +1 -1
- package/shaders/SMAAShader.js +358 -270
- package/shaders/SMAAShader.js.map +1 -1
- package/shaders/SSAOShader.cjs +236 -142
- package/shaders/SSAOShader.cjs.map +1 -1
- package/shaders/SSAOShader.js +236 -142
- package/shaders/SSAOShader.js.map +1 -1
- package/shaders/SSRShader.cjs +4 -4
- package/shaders/SSRShader.cjs.map +1 -1
- package/shaders/SSRShader.js +4 -4
- package/shaders/SSRShader.js.map +1 -1
- package/shaders/SepiaShader.cjs +36 -20
- package/shaders/SepiaShader.cjs.map +1 -1
- package/shaders/SepiaShader.js +36 -20
- package/shaders/SepiaShader.js.map +1 -1
- package/shaders/SobelOperatorShader.cjs +64 -37
- package/shaders/SobelOperatorShader.cjs.map +1 -1
- package/shaders/SobelOperatorShader.js +64 -37
- package/shaders/SobelOperatorShader.js.map +1 -1
- package/shaders/TechnicolorShader.cjs +29 -16
- package/shaders/TechnicolorShader.cjs.map +1 -1
- package/shaders/TechnicolorShader.js +29 -16
- package/shaders/TechnicolorShader.js.map +1 -1
- package/shaders/ToneMapShader.cjs +55 -35
- package/shaders/ToneMapShader.cjs.map +1 -1
- package/shaders/ToneMapShader.js +55 -35
- package/shaders/ToneMapShader.js.map +1 -1
- package/shaders/ToonShader.cjs +275 -165
- package/shaders/ToonShader.cjs.map +1 -1
- package/shaders/ToonShader.js +275 -165
- package/shaders/ToonShader.js.map +1 -1
- package/shaders/TriangleBlurShader.cjs +50 -27
- package/shaders/TriangleBlurShader.cjs.map +1 -1
- package/shaders/TriangleBlurShader.js +50 -27
- package/shaders/TriangleBlurShader.js.map +1 -1
- package/shaders/UnpackDepthRGBAShader.cjs +32 -17
- package/shaders/UnpackDepthRGBAShader.cjs.map +1 -1
- package/shaders/UnpackDepthRGBAShader.js +32 -17
- package/shaders/UnpackDepthRGBAShader.js.map +1 -1
- package/shaders/VerticalTiltShiftShader.cjs +43 -27
- package/shaders/VerticalTiltShiftShader.cjs.map +1 -1
- package/shaders/VerticalTiltShiftShader.js +43 -27
- package/shaders/VerticalTiltShiftShader.js.map +1 -1
- package/shaders/VignetteShader.cjs +43 -27
- package/shaders/VignetteShader.cjs.map +1 -1
- package/shaders/VignetteShader.js +43 -27
- package/shaders/VignetteShader.js.map +1 -1
- package/shaders/VolumeShader.cjs +264 -213
- package/shaders/VolumeShader.cjs.map +1 -1
- package/shaders/VolumeShader.js +264 -213
- package/shaders/VolumeShader.js.map +1 -1
- package/shaders/WaterRefractionShader.cjs +63 -35
- package/shaders/WaterRefractionShader.cjs.map +1 -1
- package/shaders/WaterRefractionShader.js +63 -35
- package/shaders/WaterRefractionShader.js.map +1 -1
- package/utils/GeometryCompressionUtils.cjs +2 -1
- package/utils/GeometryCompressionUtils.cjs.map +1 -1
- package/utils/GeometryCompressionUtils.js +3 -2
- package/utils/GeometryCompressionUtils.js.map +1 -1
- package/utils/RoughnessMipmapper.cjs +3 -3
- package/utils/RoughnessMipmapper.cjs.map +1 -1
- package/utils/RoughnessMipmapper.js +4 -4
- package/utils/RoughnessMipmapper.js.map +1 -1
- package/webxr/ARButton.cjs +109 -106
- package/webxr/ARButton.cjs.map +1 -1
- package/webxr/ARButton.d.ts +4 -3
- package/webxr/ARButton.js +109 -106
- package/webxr/ARButton.js.map +1 -1
- package/webxr/OculusHandPointerModel.cjs +2 -2
- package/webxr/OculusHandPointerModel.cjs.map +1 -1
- package/webxr/OculusHandPointerModel.js +2 -2
- package/webxr/OculusHandPointerModel.js.map +1 -1
- package/webxr/VRButton.cjs +98 -95
- package/webxr/VRButton.cjs.map +1 -1
- package/webxr/VRButton.d.ts +6 -5
- package/webxr/VRButton.js +98 -95
- package/webxr/VRButton.js.map +1 -1
- package/webxr/XRHandPrimitiveModel.cjs +2 -2
- package/webxr/XRHandPrimitiveModel.cjs.map +1 -1
- package/webxr/XRHandPrimitiveModel.js +3 -3
- package/webxr/XRHandPrimitiveModel.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImprovedNoise.cjs","sources":["../../src/math/ImprovedNoise.js"],"sourcesContent":["// https://cs.nyu.edu/~perlin/noise/\n\nfunction init() {\n // prettier-ignore\n const _p = [ 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10,\n 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87,\n 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211,\n 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208,\n 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5,\n 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119,\n 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232,\n 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249,\n 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205,\n 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180 ];\n\n for (let i = 0; i < 256; i++) {\n _p[256 + i] = _p[i]\n }\n\n return _p\n}\n\nconst _p = init()\n\nfunction fade(t) {\n return t * t * t * (t * (t * 6 - 15) + 10)\n}\n\nfunction lerp(t, a, b) {\n return a + t * (b - a)\n}\n\nfunction grad(hash, x, y, z) {\n const h = hash & 15\n const u = h < 8 ? x : y,\n v = h < 4 ? y : h == 12 || h == 14 ? x : z\n return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v)\n}\n\nclass ImprovedNoise {\n noise(x, y, z) {\n const floorX = Math.floor(x),\n floorY = Math.floor(y),\n floorZ = Math.floor(z)\n\n const X = floorX & 255,\n Y = floorY & 255,\n Z = floorZ & 255\n\n x -= floorX\n y -= floorY\n z -= floorZ\n\n const xMinus1 = x - 1,\n yMinus1 = y - 1,\n zMinus1 = z - 1\n\n const u = fade(x),\n v = fade(y),\n w = fade(z)\n\n const A = _p[X] + Y,\n AA = _p[A] + Z,\n AB = _p[A + 1] + Z,\n B = _p[X + 1] + Y,\n BA = _p[B] + Z,\n BB = _p[B + 1] + Z\n\n return lerp(\n w,\n lerp(\n v,\n lerp(u, grad(_p[AA], x, y, z), grad(_p[BA], xMinus1, y, z)),\n lerp(u, grad(_p[AB], x, yMinus1, z), grad(_p[BB], xMinus1, yMinus1, z)),\n ),\n lerp(\n v,\n lerp(u, grad(_p[AA + 1], x, y, zMinus1), grad(_p[BA + 1], xMinus1, y, zMinus1)),\n lerp(u, grad(_p[AB + 1], x, yMinus1, zMinus1), grad(_p[BB + 1], xMinus1, yMinus1, zMinus1)),\n ),\n )\n }\n}\n\nexport { ImprovedNoise }\n"],"names":["_p"],"mappings":";;AAEA,SAAS,OAAO;AAEd,QAAMA,MAAK;AAAA,IAAE;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IACjI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IACvH;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IACpH;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IACpH;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACtH;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACnH;AAAA,IAAK;AAAA,IAAK;AAAA,IAAG;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IACtH;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IACnH;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACrH;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA;AAE1E,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,IAAAA,IAAG,MAAM,CAAC,IAAIA,IAAG,CAAC;AAAA,EACnB;AAED,SAAOA;AACT;AAEA,MAAM,
|
|
1
|
+
{"version":3,"file":"ImprovedNoise.cjs","sources":["../../src/math/ImprovedNoise.js"],"sourcesContent":["// https://cs.nyu.edu/~perlin/noise/\n\nfunction init() {\n // prettier-ignore\n const _p = [ 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10,\n 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87,\n 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211,\n 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208,\n 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5,\n 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119,\n 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232,\n 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249,\n 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205,\n 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180 ];\n\n for (let i = 0; i < 256; i++) {\n _p[256 + i] = _p[i]\n }\n\n return _p\n}\n\nconst _p = /* @__PURE__ */ init()\n\nfunction fade(t) {\n return t * t * t * (t * (t * 6 - 15) + 10)\n}\n\nfunction lerp(t, a, b) {\n return a + t * (b - a)\n}\n\nfunction grad(hash, x, y, z) {\n const h = hash & 15\n const u = h < 8 ? x : y,\n v = h < 4 ? y : h == 12 || h == 14 ? x : z\n return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v)\n}\n\nclass ImprovedNoise {\n noise(x, y, z) {\n const floorX = Math.floor(x),\n floorY = Math.floor(y),\n floorZ = Math.floor(z)\n\n const X = floorX & 255,\n Y = floorY & 255,\n Z = floorZ & 255\n\n x -= floorX\n y -= floorY\n z -= floorZ\n\n const xMinus1 = x - 1,\n yMinus1 = y - 1,\n zMinus1 = z - 1\n\n const u = fade(x),\n v = fade(y),\n w = fade(z)\n\n const A = _p[X] + Y,\n AA = _p[A] + Z,\n AB = _p[A + 1] + Z,\n B = _p[X + 1] + Y,\n BA = _p[B] + Z,\n BB = _p[B + 1] + Z\n\n return lerp(\n w,\n lerp(\n v,\n lerp(u, grad(_p[AA], x, y, z), grad(_p[BA], xMinus1, y, z)),\n lerp(u, grad(_p[AB], x, yMinus1, z), grad(_p[BB], xMinus1, yMinus1, z)),\n ),\n lerp(\n v,\n lerp(u, grad(_p[AA + 1], x, y, zMinus1), grad(_p[BA + 1], xMinus1, y, zMinus1)),\n lerp(u, grad(_p[AB + 1], x, yMinus1, zMinus1), grad(_p[BB + 1], xMinus1, yMinus1, zMinus1)),\n ),\n )\n }\n}\n\nexport { ImprovedNoise }\n"],"names":["_p"],"mappings":";;AAEA,SAAS,OAAO;AAEd,QAAMA,MAAK;AAAA,IAAE;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IACjI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IACvH;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IACpH;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IACpH;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACtH;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACnH;AAAA,IAAK;AAAA,IAAK;AAAA,IAAG;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IACtH;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IACnH;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACrH;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA;AAE1E,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,IAAAA,IAAG,MAAM,CAAC,IAAIA,IAAG,CAAC;AAAA,EACnB;AAED,SAAOA;AACT;AAEA,MAAM,KAAqB,qBAAM;AAEjC,SAAS,KAAK,GAAG;AACf,SAAO,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM;AACzC;AAEA,SAAS,KAAK,GAAG,GAAG,GAAG;AACrB,SAAO,IAAI,KAAK,IAAI;AACtB;AAEA,SAAS,KAAK,MAAM,GAAG,GAAG,GAAG;AAC3B,QAAM,IAAI,OAAO;AACjB,QAAM,IAAI,IAAI,IAAI,IAAI,GACpB,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM,KAAK,KAAK,IAAI;AAC3C,WAAS,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,IAAI,IAAI,CAAC;AACxD;AAEA,MAAM,cAAc;AAAA,EAClB,MAAM,GAAG,GAAG,GAAG;AACb,UAAM,SAAS,KAAK,MAAM,CAAC,GACzB,SAAS,KAAK,MAAM,CAAC,GACrB,SAAS,KAAK,MAAM,CAAC;AAEvB,UAAM,IAAI,SAAS,KACjB,IAAI,SAAS,KACb,IAAI,SAAS;AAEf,SAAK;AACL,SAAK;AACL,SAAK;AAEL,UAAM,UAAU,IAAI,GAClB,UAAU,IAAI,GACd,UAAU,IAAI;AAEhB,UAAM,IAAI,KAAK,CAAC,GACd,IAAI,KAAK,CAAC,GACV,IAAI,KAAK,CAAC;AAEZ,UAAM,IAAI,GAAG,CAAC,IAAI,GAChB,KAAK,GAAG,CAAC,IAAI,GACb,KAAK,GAAG,IAAI,CAAC,IAAI,GACjB,IAAI,GAAG,IAAI,CAAC,IAAI,GAChB,KAAK,GAAG,CAAC,IAAI,GACb,KAAK,GAAG,IAAI,CAAC,IAAI;AAEnB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE;AAAA,QACA,KAAK,GAAG,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC;AAAA,QAC1D,KAAK,GAAG,KAAK,GAAG,EAAE,GAAG,GAAG,SAAS,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,SAAS,SAAS,CAAC,CAAC;AAAA,MACvE;AAAA,MACD;AAAA,QACE;AAAA,QACA,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC;AAAA,QAC9E,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,SAAS,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,SAAS,SAAS,OAAO,CAAC;AAAA,MAC3F;AAAA,IACF;AAAA,EACF;AACH;;"}
|
package/math/ImprovedNoise.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImprovedNoise.js","sources":["../../src/math/ImprovedNoise.js"],"sourcesContent":["// https://cs.nyu.edu/~perlin/noise/\n\nfunction init() {\n // prettier-ignore\n const _p = [ 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10,\n 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87,\n 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211,\n 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208,\n 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5,\n 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119,\n 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232,\n 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249,\n 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205,\n 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180 ];\n\n for (let i = 0; i < 256; i++) {\n _p[256 + i] = _p[i]\n }\n\n return _p\n}\n\nconst _p = init()\n\nfunction fade(t) {\n return t * t * t * (t * (t * 6 - 15) + 10)\n}\n\nfunction lerp(t, a, b) {\n return a + t * (b - a)\n}\n\nfunction grad(hash, x, y, z) {\n const h = hash & 15\n const u = h < 8 ? x : y,\n v = h < 4 ? y : h == 12 || h == 14 ? x : z\n return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v)\n}\n\nclass ImprovedNoise {\n noise(x, y, z) {\n const floorX = Math.floor(x),\n floorY = Math.floor(y),\n floorZ = Math.floor(z)\n\n const X = floorX & 255,\n Y = floorY & 255,\n Z = floorZ & 255\n\n x -= floorX\n y -= floorY\n z -= floorZ\n\n const xMinus1 = x - 1,\n yMinus1 = y - 1,\n zMinus1 = z - 1\n\n const u = fade(x),\n v = fade(y),\n w = fade(z)\n\n const A = _p[X] + Y,\n AA = _p[A] + Z,\n AB = _p[A + 1] + Z,\n B = _p[X + 1] + Y,\n BA = _p[B] + Z,\n BB = _p[B + 1] + Z\n\n return lerp(\n w,\n lerp(\n v,\n lerp(u, grad(_p[AA], x, y, z), grad(_p[BA], xMinus1, y, z)),\n lerp(u, grad(_p[AB], x, yMinus1, z), grad(_p[BB], xMinus1, yMinus1, z)),\n ),\n lerp(\n v,\n lerp(u, grad(_p[AA + 1], x, y, zMinus1), grad(_p[BA + 1], xMinus1, y, zMinus1)),\n lerp(u, grad(_p[AB + 1], x, yMinus1, zMinus1), grad(_p[BB + 1], xMinus1, yMinus1, zMinus1)),\n ),\n )\n }\n}\n\nexport { ImprovedNoise }\n"],"names":["_p"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ImprovedNoise.js","sources":["../../src/math/ImprovedNoise.js"],"sourcesContent":["// https://cs.nyu.edu/~perlin/noise/\n\nfunction init() {\n // prettier-ignore\n const _p = [ 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10,\n 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87,\n 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211,\n 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208,\n 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5,\n 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119,\n 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232,\n 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249,\n 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205,\n 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180 ];\n\n for (let i = 0; i < 256; i++) {\n _p[256 + i] = _p[i]\n }\n\n return _p\n}\n\nconst _p = /* @__PURE__ */ init()\n\nfunction fade(t) {\n return t * t * t * (t * (t * 6 - 15) + 10)\n}\n\nfunction lerp(t, a, b) {\n return a + t * (b - a)\n}\n\nfunction grad(hash, x, y, z) {\n const h = hash & 15\n const u = h < 8 ? x : y,\n v = h < 4 ? y : h == 12 || h == 14 ? x : z\n return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v)\n}\n\nclass ImprovedNoise {\n noise(x, y, z) {\n const floorX = Math.floor(x),\n floorY = Math.floor(y),\n floorZ = Math.floor(z)\n\n const X = floorX & 255,\n Y = floorY & 255,\n Z = floorZ & 255\n\n x -= floorX\n y -= floorY\n z -= floorZ\n\n const xMinus1 = x - 1,\n yMinus1 = y - 1,\n zMinus1 = z - 1\n\n const u = fade(x),\n v = fade(y),\n w = fade(z)\n\n const A = _p[X] + Y,\n AA = _p[A] + Z,\n AB = _p[A + 1] + Z,\n B = _p[X + 1] + Y,\n BA = _p[B] + Z,\n BB = _p[B + 1] + Z\n\n return lerp(\n w,\n lerp(\n v,\n lerp(u, grad(_p[AA], x, y, z), grad(_p[BA], xMinus1, y, z)),\n lerp(u, grad(_p[AB], x, yMinus1, z), grad(_p[BB], xMinus1, yMinus1, z)),\n ),\n lerp(\n v,\n lerp(u, grad(_p[AA + 1], x, y, zMinus1), grad(_p[BA + 1], xMinus1, y, zMinus1)),\n lerp(u, grad(_p[AB + 1], x, yMinus1, zMinus1), grad(_p[BB + 1], xMinus1, yMinus1, zMinus1)),\n ),\n )\n }\n}\n\nexport { ImprovedNoise }\n"],"names":["_p"],"mappings":"AAEA,SAAS,OAAO;AAEd,QAAMA,MAAK;AAAA,IAAE;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IACjI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAG;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IACvH;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IACpH;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IACpH;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAG;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACtH;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACnH;AAAA,IAAK;AAAA,IAAK;AAAA,IAAG;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IACtH;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IACnH;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAG;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACrH;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA;AAE1E,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,IAAAA,IAAG,MAAM,CAAC,IAAIA,IAAG,CAAC;AAAA,EACnB;AAED,SAAOA;AACT;AAEA,MAAM,KAAqB,qBAAM;AAEjC,SAAS,KAAK,GAAG;AACf,SAAO,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM;AACzC;AAEA,SAAS,KAAK,GAAG,GAAG,GAAG;AACrB,SAAO,IAAI,KAAK,IAAI;AACtB;AAEA,SAAS,KAAK,MAAM,GAAG,GAAG,GAAG;AAC3B,QAAM,IAAI,OAAO;AACjB,QAAM,IAAI,IAAI,IAAI,IAAI,GACpB,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM,KAAK,KAAK,IAAI;AAC3C,WAAS,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,IAAI,IAAI,CAAC;AACxD;AAEA,MAAM,cAAc;AAAA,EAClB,MAAM,GAAG,GAAG,GAAG;AACb,UAAM,SAAS,KAAK,MAAM,CAAC,GACzB,SAAS,KAAK,MAAM,CAAC,GACrB,SAAS,KAAK,MAAM,CAAC;AAEvB,UAAM,IAAI,SAAS,KACjB,IAAI,SAAS,KACb,IAAI,SAAS;AAEf,SAAK;AACL,SAAK;AACL,SAAK;AAEL,UAAM,UAAU,IAAI,GAClB,UAAU,IAAI,GACd,UAAU,IAAI;AAEhB,UAAM,IAAI,KAAK,CAAC,GACd,IAAI,KAAK,CAAC,GACV,IAAI,KAAK,CAAC;AAEZ,UAAM,IAAI,GAAG,CAAC,IAAI,GAChB,KAAK,GAAG,CAAC,IAAI,GACb,KAAK,GAAG,IAAI,CAAC,IAAI,GACjB,IAAI,GAAG,IAAI,CAAC,IAAI,GAChB,KAAK,GAAG,CAAC,IAAI,GACb,KAAK,GAAG,IAAI,CAAC,IAAI;AAEnB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE;AAAA,QACA,KAAK,GAAG,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC;AAAA,QAC1D,KAAK,GAAG,KAAK,GAAG,EAAE,GAAG,GAAG,SAAS,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,SAAS,SAAS,CAAC,CAAC;AAAA,MACvE;AAAA,MACD;AAAA,QACE;AAAA,QACA,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC;AAAA,QAC9E,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,SAAS,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,SAAS,SAAS,OAAO,CAAC;AAAA,MAC3F;AAAA,IACF;AAAA,EACF;AACH;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const THREE = require("three");
|
|
4
|
-
const _face = new THREE.Triangle();
|
|
5
|
-
const _color = new THREE.Vector3();
|
|
4
|
+
const _face = /* @__PURE__ */ new THREE.Triangle();
|
|
5
|
+
const _color = /* @__PURE__ */ new THREE.Vector3();
|
|
6
6
|
class MeshSurfaceSampler {
|
|
7
7
|
constructor(mesh) {
|
|
8
8
|
let geometry = mesh.geometry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeshSurfaceSampler.cjs","sources":["../../src/math/MeshSurfaceSampler.js"],"sourcesContent":["import { Triangle, Vector3 } from 'three'\n\n/**\n * Utility class for sampling weighted random points on the surface of a mesh.\n *\n * Building the sampler is a one-time O(n) operation. Once built, any number of\n * random samples may be selected in O(logn) time. Memory usage is O(n).\n *\n * References:\n * - http://www.joesfer.com/?p=84\n * - https://stackoverflow.com/a/4322940/1314762\n */\n\nconst _face = new Triangle()\nconst _color = new Vector3()\n\nclass MeshSurfaceSampler {\n constructor(mesh) {\n let geometry = mesh.geometry\n\n if (geometry.index) {\n console.warn('THREE.MeshSurfaceSampler: Converting geometry to non-indexed BufferGeometry.')\n\n geometry = geometry.toNonIndexed()\n }\n\n this.geometry = geometry\n this.randomFunction = Math.random\n\n this.positionAttribute = this.geometry.getAttribute('position')\n this.colorAttribute = this.geometry.getAttribute('color')\n this.weightAttribute = null\n\n this.distribution = null\n }\n\n setWeightAttribute(name) {\n this.weightAttribute = name ? this.geometry.getAttribute(name) : null\n\n return this\n }\n\n build() {\n const positionAttribute = this.positionAttribute\n const weightAttribute = this.weightAttribute\n\n const faceWeights = new Float32Array(positionAttribute.count / 3)\n\n // Accumulate weights for each mesh face.\n\n for (let i = 0; i < positionAttribute.count; i += 3) {\n let faceWeight = 1\n\n if (weightAttribute) {\n faceWeight = weightAttribute.getX(i) + weightAttribute.getX(i + 1) + weightAttribute.getX(i + 2)\n }\n\n _face.a.fromBufferAttribute(positionAttribute, i)\n _face.b.fromBufferAttribute(positionAttribute, i + 1)\n _face.c.fromBufferAttribute(positionAttribute, i + 2)\n faceWeight *= _face.getArea()\n\n faceWeights[i / 3] = faceWeight\n }\n\n // Store cumulative total face weights in an array, where weight index\n // corresponds to face index.\n\n this.distribution = new Float32Array(positionAttribute.count / 3)\n\n let cumulativeTotal = 0\n\n for (let i = 0; i < faceWeights.length; i++) {\n cumulativeTotal += faceWeights[i]\n\n this.distribution[i] = cumulativeTotal\n }\n\n return this\n }\n\n setRandomGenerator(randomFunction) {\n this.randomFunction = randomFunction\n return this\n }\n\n sample(targetPosition, targetNormal, targetColor) {\n const faceIndex = this.sampleFaceIndex()\n return this.sampleFace(faceIndex, targetPosition, targetNormal, targetColor)\n }\n\n sampleFaceIndex() {\n const cumulativeTotal = this.distribution[this.distribution.length - 1]\n return this.binarySearch(this.randomFunction() * cumulativeTotal)\n }\n\n binarySearch(x) {\n const dist = this.distribution\n let start = 0\n let end = dist.length - 1\n\n let index = -1\n\n while (start <= end) {\n const mid = Math.ceil((start + end) / 2)\n\n if (mid === 0 || (dist[mid - 1] <= x && dist[mid] > x)) {\n index = mid\n\n break\n } else if (x < dist[mid]) {\n end = mid - 1\n } else {\n start = mid + 1\n }\n }\n\n return index\n }\n\n sampleFace(faceIndex, targetPosition, targetNormal, targetColor) {\n let u = this.randomFunction()\n let v = this.randomFunction()\n\n if (u + v > 1) {\n u = 1 - u\n v = 1 - v\n }\n\n _face.a.fromBufferAttribute(this.positionAttribute, faceIndex * 3)\n _face.b.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 1)\n _face.c.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 2)\n\n targetPosition\n .set(0, 0, 0)\n .addScaledVector(_face.a, u)\n .addScaledVector(_face.b, v)\n .addScaledVector(_face.c, 1 - (u + v))\n\n if (targetNormal !== undefined) {\n _face.getNormal(targetNormal)\n }\n\n if (targetColor !== undefined && this.colorAttribute !== undefined) {\n _face.a.fromBufferAttribute(this.colorAttribute, faceIndex * 3)\n _face.b.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 1)\n _face.c.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 2)\n\n _color\n .set(0, 0, 0)\n .addScaledVector(_face.a, u)\n .addScaledVector(_face.b, v)\n .addScaledVector(_face.c, 1 - (u + v))\n\n targetColor.r = _color.x\n targetColor.g = _color.y\n targetColor.b = _color.z\n }\n\n return this\n }\n}\n\nexport { MeshSurfaceSampler }\n"],"names":["Triangle","Vector3"],"mappings":";;;AAaA,MAAM,
|
|
1
|
+
{"version":3,"file":"MeshSurfaceSampler.cjs","sources":["../../src/math/MeshSurfaceSampler.js"],"sourcesContent":["import { Triangle, Vector3 } from 'three'\n\n/**\n * Utility class for sampling weighted random points on the surface of a mesh.\n *\n * Building the sampler is a one-time O(n) operation. Once built, any number of\n * random samples may be selected in O(logn) time. Memory usage is O(n).\n *\n * References:\n * - http://www.joesfer.com/?p=84\n * - https://stackoverflow.com/a/4322940/1314762\n */\n\nconst _face = /* @__PURE__ */ new Triangle()\nconst _color = /* @__PURE__ */ new Vector3()\n\nclass MeshSurfaceSampler {\n constructor(mesh) {\n let geometry = mesh.geometry\n\n if (geometry.index) {\n console.warn('THREE.MeshSurfaceSampler: Converting geometry to non-indexed BufferGeometry.')\n\n geometry = geometry.toNonIndexed()\n }\n\n this.geometry = geometry\n this.randomFunction = Math.random\n\n this.positionAttribute = this.geometry.getAttribute('position')\n this.colorAttribute = this.geometry.getAttribute('color')\n this.weightAttribute = null\n\n this.distribution = null\n }\n\n setWeightAttribute(name) {\n this.weightAttribute = name ? this.geometry.getAttribute(name) : null\n\n return this\n }\n\n build() {\n const positionAttribute = this.positionAttribute\n const weightAttribute = this.weightAttribute\n\n const faceWeights = new Float32Array(positionAttribute.count / 3)\n\n // Accumulate weights for each mesh face.\n\n for (let i = 0; i < positionAttribute.count; i += 3) {\n let faceWeight = 1\n\n if (weightAttribute) {\n faceWeight = weightAttribute.getX(i) + weightAttribute.getX(i + 1) + weightAttribute.getX(i + 2)\n }\n\n _face.a.fromBufferAttribute(positionAttribute, i)\n _face.b.fromBufferAttribute(positionAttribute, i + 1)\n _face.c.fromBufferAttribute(positionAttribute, i + 2)\n faceWeight *= _face.getArea()\n\n faceWeights[i / 3] = faceWeight\n }\n\n // Store cumulative total face weights in an array, where weight index\n // corresponds to face index.\n\n this.distribution = new Float32Array(positionAttribute.count / 3)\n\n let cumulativeTotal = 0\n\n for (let i = 0; i < faceWeights.length; i++) {\n cumulativeTotal += faceWeights[i]\n\n this.distribution[i] = cumulativeTotal\n }\n\n return this\n }\n\n setRandomGenerator(randomFunction) {\n this.randomFunction = randomFunction\n return this\n }\n\n sample(targetPosition, targetNormal, targetColor) {\n const faceIndex = this.sampleFaceIndex()\n return this.sampleFace(faceIndex, targetPosition, targetNormal, targetColor)\n }\n\n sampleFaceIndex() {\n const cumulativeTotal = this.distribution[this.distribution.length - 1]\n return this.binarySearch(this.randomFunction() * cumulativeTotal)\n }\n\n binarySearch(x) {\n const dist = this.distribution\n let start = 0\n let end = dist.length - 1\n\n let index = -1\n\n while (start <= end) {\n const mid = Math.ceil((start + end) / 2)\n\n if (mid === 0 || (dist[mid - 1] <= x && dist[mid] > x)) {\n index = mid\n\n break\n } else if (x < dist[mid]) {\n end = mid - 1\n } else {\n start = mid + 1\n }\n }\n\n return index\n }\n\n sampleFace(faceIndex, targetPosition, targetNormal, targetColor) {\n let u = this.randomFunction()\n let v = this.randomFunction()\n\n if (u + v > 1) {\n u = 1 - u\n v = 1 - v\n }\n\n _face.a.fromBufferAttribute(this.positionAttribute, faceIndex * 3)\n _face.b.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 1)\n _face.c.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 2)\n\n targetPosition\n .set(0, 0, 0)\n .addScaledVector(_face.a, u)\n .addScaledVector(_face.b, v)\n .addScaledVector(_face.c, 1 - (u + v))\n\n if (targetNormal !== undefined) {\n _face.getNormal(targetNormal)\n }\n\n if (targetColor !== undefined && this.colorAttribute !== undefined) {\n _face.a.fromBufferAttribute(this.colorAttribute, faceIndex * 3)\n _face.b.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 1)\n _face.c.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 2)\n\n _color\n .set(0, 0, 0)\n .addScaledVector(_face.a, u)\n .addScaledVector(_face.b, v)\n .addScaledVector(_face.c, 1 - (u + v))\n\n targetColor.r = _color.x\n targetColor.g = _color.y\n targetColor.b = _color.z\n }\n\n return this\n }\n}\n\nexport { MeshSurfaceSampler }\n"],"names":["Triangle","Vector3"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Triangle, Vector3 } from "three";
|
|
2
|
-
const _face = new Triangle();
|
|
3
|
-
const _color = new Vector3();
|
|
2
|
+
const _face = /* @__PURE__ */ new Triangle();
|
|
3
|
+
const _color = /* @__PURE__ */ new Vector3();
|
|
4
4
|
class MeshSurfaceSampler {
|
|
5
5
|
constructor(mesh) {
|
|
6
6
|
let geometry = mesh.geometry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeshSurfaceSampler.js","sources":["../../src/math/MeshSurfaceSampler.js"],"sourcesContent":["import { Triangle, Vector3 } from 'three'\n\n/**\n * Utility class for sampling weighted random points on the surface of a mesh.\n *\n * Building the sampler is a one-time O(n) operation. Once built, any number of\n * random samples may be selected in O(logn) time. Memory usage is O(n).\n *\n * References:\n * - http://www.joesfer.com/?p=84\n * - https://stackoverflow.com/a/4322940/1314762\n */\n\nconst _face = new Triangle()\nconst _color = new Vector3()\n\nclass MeshSurfaceSampler {\n constructor(mesh) {\n let geometry = mesh.geometry\n\n if (geometry.index) {\n console.warn('THREE.MeshSurfaceSampler: Converting geometry to non-indexed BufferGeometry.')\n\n geometry = geometry.toNonIndexed()\n }\n\n this.geometry = geometry\n this.randomFunction = Math.random\n\n this.positionAttribute = this.geometry.getAttribute('position')\n this.colorAttribute = this.geometry.getAttribute('color')\n this.weightAttribute = null\n\n this.distribution = null\n }\n\n setWeightAttribute(name) {\n this.weightAttribute = name ? this.geometry.getAttribute(name) : null\n\n return this\n }\n\n build() {\n const positionAttribute = this.positionAttribute\n const weightAttribute = this.weightAttribute\n\n const faceWeights = new Float32Array(positionAttribute.count / 3)\n\n // Accumulate weights for each mesh face.\n\n for (let i = 0; i < positionAttribute.count; i += 3) {\n let faceWeight = 1\n\n if (weightAttribute) {\n faceWeight = weightAttribute.getX(i) + weightAttribute.getX(i + 1) + weightAttribute.getX(i + 2)\n }\n\n _face.a.fromBufferAttribute(positionAttribute, i)\n _face.b.fromBufferAttribute(positionAttribute, i + 1)\n _face.c.fromBufferAttribute(positionAttribute, i + 2)\n faceWeight *= _face.getArea()\n\n faceWeights[i / 3] = faceWeight\n }\n\n // Store cumulative total face weights in an array, where weight index\n // corresponds to face index.\n\n this.distribution = new Float32Array(positionAttribute.count / 3)\n\n let cumulativeTotal = 0\n\n for (let i = 0; i < faceWeights.length; i++) {\n cumulativeTotal += faceWeights[i]\n\n this.distribution[i] = cumulativeTotal\n }\n\n return this\n }\n\n setRandomGenerator(randomFunction) {\n this.randomFunction = randomFunction\n return this\n }\n\n sample(targetPosition, targetNormal, targetColor) {\n const faceIndex = this.sampleFaceIndex()\n return this.sampleFace(faceIndex, targetPosition, targetNormal, targetColor)\n }\n\n sampleFaceIndex() {\n const cumulativeTotal = this.distribution[this.distribution.length - 1]\n return this.binarySearch(this.randomFunction() * cumulativeTotal)\n }\n\n binarySearch(x) {\n const dist = this.distribution\n let start = 0\n let end = dist.length - 1\n\n let index = -1\n\n while (start <= end) {\n const mid = Math.ceil((start + end) / 2)\n\n if (mid === 0 || (dist[mid - 1] <= x && dist[mid] > x)) {\n index = mid\n\n break\n } else if (x < dist[mid]) {\n end = mid - 1\n } else {\n start = mid + 1\n }\n }\n\n return index\n }\n\n sampleFace(faceIndex, targetPosition, targetNormal, targetColor) {\n let u = this.randomFunction()\n let v = this.randomFunction()\n\n if (u + v > 1) {\n u = 1 - u\n v = 1 - v\n }\n\n _face.a.fromBufferAttribute(this.positionAttribute, faceIndex * 3)\n _face.b.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 1)\n _face.c.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 2)\n\n targetPosition\n .set(0, 0, 0)\n .addScaledVector(_face.a, u)\n .addScaledVector(_face.b, v)\n .addScaledVector(_face.c, 1 - (u + v))\n\n if (targetNormal !== undefined) {\n _face.getNormal(targetNormal)\n }\n\n if (targetColor !== undefined && this.colorAttribute !== undefined) {\n _face.a.fromBufferAttribute(this.colorAttribute, faceIndex * 3)\n _face.b.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 1)\n _face.c.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 2)\n\n _color\n .set(0, 0, 0)\n .addScaledVector(_face.a, u)\n .addScaledVector(_face.b, v)\n .addScaledVector(_face.c, 1 - (u + v))\n\n targetColor.r = _color.x\n targetColor.g = _color.y\n targetColor.b = _color.z\n }\n\n return this\n }\n}\n\nexport { MeshSurfaceSampler }\n"],"names":[],"mappings":";AAaA,MAAM,
|
|
1
|
+
{"version":3,"file":"MeshSurfaceSampler.js","sources":["../../src/math/MeshSurfaceSampler.js"],"sourcesContent":["import { Triangle, Vector3 } from 'three'\n\n/**\n * Utility class for sampling weighted random points on the surface of a mesh.\n *\n * Building the sampler is a one-time O(n) operation. Once built, any number of\n * random samples may be selected in O(logn) time. Memory usage is O(n).\n *\n * References:\n * - http://www.joesfer.com/?p=84\n * - https://stackoverflow.com/a/4322940/1314762\n */\n\nconst _face = /* @__PURE__ */ new Triangle()\nconst _color = /* @__PURE__ */ new Vector3()\n\nclass MeshSurfaceSampler {\n constructor(mesh) {\n let geometry = mesh.geometry\n\n if (geometry.index) {\n console.warn('THREE.MeshSurfaceSampler: Converting geometry to non-indexed BufferGeometry.')\n\n geometry = geometry.toNonIndexed()\n }\n\n this.geometry = geometry\n this.randomFunction = Math.random\n\n this.positionAttribute = this.geometry.getAttribute('position')\n this.colorAttribute = this.geometry.getAttribute('color')\n this.weightAttribute = null\n\n this.distribution = null\n }\n\n setWeightAttribute(name) {\n this.weightAttribute = name ? this.geometry.getAttribute(name) : null\n\n return this\n }\n\n build() {\n const positionAttribute = this.positionAttribute\n const weightAttribute = this.weightAttribute\n\n const faceWeights = new Float32Array(positionAttribute.count / 3)\n\n // Accumulate weights for each mesh face.\n\n for (let i = 0; i < positionAttribute.count; i += 3) {\n let faceWeight = 1\n\n if (weightAttribute) {\n faceWeight = weightAttribute.getX(i) + weightAttribute.getX(i + 1) + weightAttribute.getX(i + 2)\n }\n\n _face.a.fromBufferAttribute(positionAttribute, i)\n _face.b.fromBufferAttribute(positionAttribute, i + 1)\n _face.c.fromBufferAttribute(positionAttribute, i + 2)\n faceWeight *= _face.getArea()\n\n faceWeights[i / 3] = faceWeight\n }\n\n // Store cumulative total face weights in an array, where weight index\n // corresponds to face index.\n\n this.distribution = new Float32Array(positionAttribute.count / 3)\n\n let cumulativeTotal = 0\n\n for (let i = 0; i < faceWeights.length; i++) {\n cumulativeTotal += faceWeights[i]\n\n this.distribution[i] = cumulativeTotal\n }\n\n return this\n }\n\n setRandomGenerator(randomFunction) {\n this.randomFunction = randomFunction\n return this\n }\n\n sample(targetPosition, targetNormal, targetColor) {\n const faceIndex = this.sampleFaceIndex()\n return this.sampleFace(faceIndex, targetPosition, targetNormal, targetColor)\n }\n\n sampleFaceIndex() {\n const cumulativeTotal = this.distribution[this.distribution.length - 1]\n return this.binarySearch(this.randomFunction() * cumulativeTotal)\n }\n\n binarySearch(x) {\n const dist = this.distribution\n let start = 0\n let end = dist.length - 1\n\n let index = -1\n\n while (start <= end) {\n const mid = Math.ceil((start + end) / 2)\n\n if (mid === 0 || (dist[mid - 1] <= x && dist[mid] > x)) {\n index = mid\n\n break\n } else if (x < dist[mid]) {\n end = mid - 1\n } else {\n start = mid + 1\n }\n }\n\n return index\n }\n\n sampleFace(faceIndex, targetPosition, targetNormal, targetColor) {\n let u = this.randomFunction()\n let v = this.randomFunction()\n\n if (u + v > 1) {\n u = 1 - u\n v = 1 - v\n }\n\n _face.a.fromBufferAttribute(this.positionAttribute, faceIndex * 3)\n _face.b.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 1)\n _face.c.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 2)\n\n targetPosition\n .set(0, 0, 0)\n .addScaledVector(_face.a, u)\n .addScaledVector(_face.b, v)\n .addScaledVector(_face.c, 1 - (u + v))\n\n if (targetNormal !== undefined) {\n _face.getNormal(targetNormal)\n }\n\n if (targetColor !== undefined && this.colorAttribute !== undefined) {\n _face.a.fromBufferAttribute(this.colorAttribute, faceIndex * 3)\n _face.b.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 1)\n _face.c.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 2)\n\n _color\n .set(0, 0, 0)\n .addScaledVector(_face.a, u)\n .addScaledVector(_face.b, v)\n .addScaledVector(_face.c, 1 - (u + v))\n\n targetColor.r = _color.x\n targetColor.g = _color.y\n targetColor.b = _color.z\n }\n\n return this\n }\n}\n\nexport { MeshSurfaceSampler }\n"],"names":[],"mappings":"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"}
|
package/math/OBB.cjs
CHANGED
|
@@ -4,7 +4,7 @@ const THREE = require("three");
|
|
|
4
4
|
const a = {
|
|
5
5
|
c: null,
|
|
6
6
|
// center
|
|
7
|
-
u: [new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3()],
|
|
7
|
+
u: [/* @__PURE__ */ new THREE.Vector3(), /* @__PURE__ */ new THREE.Vector3(), /* @__PURE__ */ new THREE.Vector3()],
|
|
8
8
|
// basis vectors
|
|
9
9
|
e: []
|
|
10
10
|
// half width
|
|
@@ -12,7 +12,7 @@ const a = {
|
|
|
12
12
|
const b = {
|
|
13
13
|
c: null,
|
|
14
14
|
// center
|
|
15
|
-
u: [new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3()],
|
|
15
|
+
u: [/* @__PURE__ */ new THREE.Vector3(), /* @__PURE__ */ new THREE.Vector3(), /* @__PURE__ */ new THREE.Vector3()],
|
|
16
16
|
// basis vectors
|
|
17
17
|
e: []
|
|
18
18
|
// half width
|
|
@@ -20,17 +20,17 @@ const b = {
|
|
|
20
20
|
const R = [[], [], []];
|
|
21
21
|
const AbsR = [[], [], []];
|
|
22
22
|
const t = [];
|
|
23
|
-
const xAxis = new THREE.Vector3();
|
|
24
|
-
const yAxis = new THREE.Vector3();
|
|
25
|
-
const zAxis = new THREE.Vector3();
|
|
26
|
-
const v1 = new THREE.Vector3();
|
|
27
|
-
const size = new THREE.Vector3();
|
|
28
|
-
const closestPoint = new THREE.Vector3();
|
|
29
|
-
const rotationMatrix = new THREE.Matrix3();
|
|
30
|
-
const aabb = new THREE.Box3();
|
|
31
|
-
const matrix = new THREE.Matrix4();
|
|
32
|
-
const inverse = new THREE.Matrix4();
|
|
33
|
-
const localRay = new THREE.Ray();
|
|
23
|
+
const xAxis = /* @__PURE__ */ new THREE.Vector3();
|
|
24
|
+
const yAxis = /* @__PURE__ */ new THREE.Vector3();
|
|
25
|
+
const zAxis = /* @__PURE__ */ new THREE.Vector3();
|
|
26
|
+
const v1 = /* @__PURE__ */ new THREE.Vector3();
|
|
27
|
+
const size = /* @__PURE__ */ new THREE.Vector3();
|
|
28
|
+
const closestPoint = /* @__PURE__ */ new THREE.Vector3();
|
|
29
|
+
const rotationMatrix = /* @__PURE__ */ new THREE.Matrix3();
|
|
30
|
+
const aabb = /* @__PURE__ */ new THREE.Box3();
|
|
31
|
+
const matrix = /* @__PURE__ */ new THREE.Matrix4();
|
|
32
|
+
const inverse = /* @__PURE__ */ new THREE.Matrix4();
|
|
33
|
+
const localRay = /* @__PURE__ */ new THREE.Ray();
|
|
34
34
|
class OBB {
|
|
35
35
|
constructor(center = new THREE.Vector3(), halfSize = new THREE.Vector3(), rotation = new THREE.Matrix3()) {
|
|
36
36
|
this.center = center;
|
|
@@ -238,6 +238,6 @@ class OBB {
|
|
|
238
238
|
return this;
|
|
239
239
|
}
|
|
240
240
|
}
|
|
241
|
-
const obb = new OBB();
|
|
241
|
+
const obb = /* @__PURE__ */ new OBB();
|
|
242
242
|
exports.OBB = OBB;
|
|
243
243
|
//# sourceMappingURL=OBB.cjs.map
|
package/math/OBB.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OBB.cjs","sources":["../../src/math/OBB.js"],"sourcesContent":["import { Box3, MathUtils, Matrix4, Matrix3, Ray, Vector3 } from 'three'\n\n// module scope helper variables\n\nconst a = {\n c: null, // center\n u: [new Vector3(), new Vector3(), new Vector3()], // basis vectors\n e: [], // half width\n}\n\nconst b = {\n c: null, // center\n u: [new Vector3(), new Vector3(), new Vector3()], // basis vectors\n e: [], // half width\n}\n\nconst R = [[], [], []]\nconst AbsR = [[], [], []]\nconst t = []\n\nconst xAxis = new Vector3()\nconst yAxis = new Vector3()\nconst zAxis = new Vector3()\nconst v1 = new Vector3()\nconst size = new Vector3()\nconst closestPoint = new Vector3()\nconst rotationMatrix = new Matrix3()\nconst aabb = new Box3()\nconst matrix = new Matrix4()\nconst inverse = new Matrix4()\nconst localRay = new Ray()\n\n// OBB\n\nclass OBB {\n constructor(center = new Vector3(), halfSize = new Vector3(), rotation = new Matrix3()) {\n this.center = center\n this.halfSize = halfSize\n this.rotation = rotation\n }\n\n set(center, halfSize, rotation) {\n this.center = center\n this.halfSize = halfSize\n this.rotation = rotation\n\n return this\n }\n\n copy(obb) {\n this.center.copy(obb.center)\n this.halfSize.copy(obb.halfSize)\n this.rotation.copy(obb.rotation)\n\n return this\n }\n\n clone() {\n return new this.constructor().copy(this)\n }\n\n getSize(result) {\n return result.copy(this.halfSize).multiplyScalar(2)\n }\n\n /**\n * Reference: Closest Point on OBB to Point in Real-Time Collision Detection\n * by Christer Ericson (chapter 5.1.4)\n */\n clampPoint(point, result) {\n const halfSize = this.halfSize\n\n v1.subVectors(point, this.center)\n this.rotation.extractBasis(xAxis, yAxis, zAxis)\n\n // start at the center position of the OBB\n\n result.copy(this.center)\n\n // project the target onto the OBB axes and walk towards that point\n\n const x = MathUtils.clamp(v1.dot(xAxis), -halfSize.x, halfSize.x)\n result.add(xAxis.multiplyScalar(x))\n\n const y = MathUtils.clamp(v1.dot(yAxis), -halfSize.y, halfSize.y)\n result.add(yAxis.multiplyScalar(y))\n\n const z = MathUtils.clamp(v1.dot(zAxis), -halfSize.z, halfSize.z)\n result.add(zAxis.multiplyScalar(z))\n\n return result\n }\n\n containsPoint(point) {\n v1.subVectors(point, this.center)\n this.rotation.extractBasis(xAxis, yAxis, zAxis)\n\n // project v1 onto each axis and check if these points lie inside the OBB\n\n return (\n Math.abs(v1.dot(xAxis)) <= this.halfSize.x &&\n Math.abs(v1.dot(yAxis)) <= this.halfSize.y &&\n Math.abs(v1.dot(zAxis)) <= this.halfSize.z\n )\n }\n\n intersectsBox3(box3) {\n return this.intersectsOBB(obb.fromBox3(box3))\n }\n\n intersectsSphere(sphere) {\n // find the point on the OBB closest to the sphere center\n\n this.clampPoint(sphere.center, closestPoint)\n\n // if that point is inside the sphere, the OBB and sphere intersect\n\n return closestPoint.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius\n }\n\n /**\n * Reference: OBB-OBB Intersection in Real-Time Collision Detection\n * by Christer Ericson (chapter 4.4.1)\n *\n */\n intersectsOBB(obb, epsilon = Number.EPSILON) {\n // prepare data structures (the code uses the same nomenclature like the reference)\n\n a.c = this.center\n a.e[0] = this.halfSize.x\n a.e[1] = this.halfSize.y\n a.e[2] = this.halfSize.z\n this.rotation.extractBasis(a.u[0], a.u[1], a.u[2])\n\n b.c = obb.center\n b.e[0] = obb.halfSize.x\n b.e[1] = obb.halfSize.y\n b.e[2] = obb.halfSize.z\n obb.rotation.extractBasis(b.u[0], b.u[1], b.u[2])\n\n // compute rotation matrix expressing b in a's coordinate frame\n\n for (let i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n R[i][j] = a.u[i].dot(b.u[j])\n }\n }\n\n // compute translation vector\n\n v1.subVectors(b.c, a.c)\n\n // bring translation into a's coordinate frame\n\n t[0] = v1.dot(a.u[0])\n t[1] = v1.dot(a.u[1])\n t[2] = v1.dot(a.u[2])\n\n // compute common subexpressions. Add in an epsilon term to\n // counteract arithmetic errors when two edges are parallel and\n // their cross product is (near) null\n\n for (let i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n AbsR[i][j] = Math.abs(R[i][j]) + epsilon\n }\n }\n\n let ra, rb\n\n // test axes L = A0, L = A1, L = A2\n\n for (let i = 0; i < 3; i++) {\n ra = a.e[i]\n rb = b.e[0] * AbsR[i][0] + b.e[1] * AbsR[i][1] + b.e[2] * AbsR[i][2]\n if (Math.abs(t[i]) > ra + rb) return false\n }\n\n // test axes L = B0, L = B1, L = B2\n\n for (let i = 0; i < 3; i++) {\n ra = a.e[0] * AbsR[0][i] + a.e[1] * AbsR[1][i] + a.e[2] * AbsR[2][i]\n rb = b.e[i]\n if (Math.abs(t[0] * R[0][i] + t[1] * R[1][i] + t[2] * R[2][i]) > ra + rb) return false\n }\n\n // test axis L = A0 x B0\n\n ra = a.e[1] * AbsR[2][0] + a.e[2] * AbsR[1][0]\n rb = b.e[1] * AbsR[0][2] + b.e[2] * AbsR[0][1]\n if (Math.abs(t[2] * R[1][0] - t[1] * R[2][0]) > ra + rb) return false\n\n // test axis L = A0 x B1\n\n ra = a.e[1] * AbsR[2][1] + a.e[2] * AbsR[1][1]\n rb = b.e[0] * AbsR[0][2] + b.e[2] * AbsR[0][0]\n if (Math.abs(t[2] * R[1][1] - t[1] * R[2][1]) > ra + rb) return false\n\n // test axis L = A0 x B2\n\n ra = a.e[1] * AbsR[2][2] + a.e[2] * AbsR[1][2]\n rb = b.e[0] * AbsR[0][1] + b.e[1] * AbsR[0][0]\n if (Math.abs(t[2] * R[1][2] - t[1] * R[2][2]) > ra + rb) return false\n\n // test axis L = A1 x B0\n\n ra = a.e[0] * AbsR[2][0] + a.e[2] * AbsR[0][0]\n rb = b.e[1] * AbsR[1][2] + b.e[2] * AbsR[1][1]\n if (Math.abs(t[0] * R[2][0] - t[2] * R[0][0]) > ra + rb) return false\n\n // test axis L = A1 x B1\n\n ra = a.e[0] * AbsR[2][1] + a.e[2] * AbsR[0][1]\n rb = b.e[0] * AbsR[1][2] + b.e[2] * AbsR[1][0]\n if (Math.abs(t[0] * R[2][1] - t[2] * R[0][1]) > ra + rb) return false\n\n // test axis L = A1 x B2\n\n ra = a.e[0] * AbsR[2][2] + a.e[2] * AbsR[0][2]\n rb = b.e[0] * AbsR[1][1] + b.e[1] * AbsR[1][0]\n if (Math.abs(t[0] * R[2][2] - t[2] * R[0][2]) > ra + rb) return false\n\n // test axis L = A2 x B0\n\n ra = a.e[0] * AbsR[1][0] + a.e[1] * AbsR[0][0]\n rb = b.e[1] * AbsR[2][2] + b.e[2] * AbsR[2][1]\n if (Math.abs(t[1] * R[0][0] - t[0] * R[1][0]) > ra + rb) return false\n\n // test axis L = A2 x B1\n\n ra = a.e[0] * AbsR[1][1] + a.e[1] * AbsR[0][1]\n rb = b.e[0] * AbsR[2][2] + b.e[2] * AbsR[2][0]\n if (Math.abs(t[1] * R[0][1] - t[0] * R[1][1]) > ra + rb) return false\n\n // test axis L = A2 x B2\n\n ra = a.e[0] * AbsR[1][2] + a.e[1] * AbsR[0][2]\n rb = b.e[0] * AbsR[2][1] + b.e[1] * AbsR[2][0]\n if (Math.abs(t[1] * R[0][2] - t[0] * R[1][2]) > ra + rb) return false\n\n // since no separating axis is found, the OBBs must be intersecting\n\n return true\n }\n\n /**\n * Reference: Testing Box Against Plane in Real-Time Collision Detection\n * by Christer Ericson (chapter 5.2.3)\n */\n intersectsPlane(plane) {\n this.rotation.extractBasis(xAxis, yAxis, zAxis)\n\n // compute the projection interval radius of this OBB onto L(t) = this->center + t * p.normal;\n\n const r =\n this.halfSize.x * Math.abs(plane.normal.dot(xAxis)) +\n this.halfSize.y * Math.abs(plane.normal.dot(yAxis)) +\n this.halfSize.z * Math.abs(plane.normal.dot(zAxis))\n\n // compute distance of the OBB's center from the plane\n\n const d = plane.normal.dot(this.center) - plane.constant\n\n // Intersection occurs when distance d falls within [-r,+r] interval\n\n return Math.abs(d) <= r\n }\n\n /**\n * Performs a ray/OBB intersection test and stores the intersection point\n * to the given 3D vector. If no intersection is detected, *null* is returned.\n */\n intersectRay(ray, result) {\n // the idea is to perform the intersection test in the local space\n // of the OBB.\n\n this.getSize(size)\n aabb.setFromCenterAndSize(v1.set(0, 0, 0), size)\n\n // create a 4x4 transformation matrix\n\n matrix.setFromMatrix3(this.rotation)\n matrix.setPosition(this.center)\n\n // transform ray to the local space of the OBB\n\n inverse.copy(matrix).invert()\n localRay.copy(ray).applyMatrix4(inverse)\n\n // perform ray <-> AABB intersection test\n\n if (localRay.intersectBox(aabb, result)) {\n // transform the intersection point back to world space\n\n return result.applyMatrix4(matrix)\n } else {\n return null\n }\n }\n\n /**\n * Performs a ray/OBB intersection test. Returns either true or false if\n * there is a intersection or not.\n */\n intersectsRay(ray) {\n return this.intersectRay(ray, v1) !== null\n }\n\n fromBox3(box3) {\n box3.getCenter(this.center)\n\n box3.getSize(this.halfSize).multiplyScalar(0.5)\n\n this.rotation.identity()\n\n return this\n }\n\n equals(obb) {\n return obb.center.equals(this.center) && obb.halfSize.equals(this.halfSize) && obb.rotation.equals(this.rotation)\n }\n\n applyMatrix4(matrix) {\n const e = matrix.elements\n\n let sx = v1.set(e[0], e[1], e[2]).length()\n const sy = v1.set(e[4], e[5], e[6]).length()\n const sz = v1.set(e[8], e[9], e[10]).length()\n\n const det = matrix.determinant()\n if (det < 0) sx = -sx\n\n rotationMatrix.setFromMatrix4(matrix)\n\n const invSX = 1 / sx\n const invSY = 1 / sy\n const invSZ = 1 / sz\n\n rotationMatrix.elements[0] *= invSX\n rotationMatrix.elements[1] *= invSX\n rotationMatrix.elements[2] *= invSX\n\n rotationMatrix.elements[3] *= invSY\n rotationMatrix.elements[4] *= invSY\n rotationMatrix.elements[5] *= invSY\n\n rotationMatrix.elements[6] *= invSZ\n rotationMatrix.elements[7] *= invSZ\n rotationMatrix.elements[8] *= invSZ\n\n this.rotation.multiply(rotationMatrix)\n\n this.halfSize.x *= sx\n this.halfSize.y *= sy\n this.halfSize.z *= sz\n\n v1.setFromMatrixPosition(matrix)\n this.center.add(v1)\n\n return this\n }\n}\n\nconst obb = new OBB()\n\nexport { OBB }\n"],"names":["Vector3","Matrix3","Box3","Matrix4","Ray","obb","MathUtils","matrix"],"mappings":";;;AAIA,MAAM,IAAI;AAAA,EACR,GAAG;AAAA;AAAA,EACH,GAAG,CAAC,IAAIA,cAAS,GAAE,IAAIA,MAAAA,QAAS,GAAE,IAAIA,MAAAA,SAAS;AAAA;AAAA,EAC/C,GAAG,CAAE;AAAA;AACP;AAEA,MAAM,IAAI;AAAA,EACR,GAAG;AAAA;AAAA,EACH,GAAG,CAAC,IAAIA,cAAS,GAAE,IAAIA,MAAAA,QAAS,GAAE,IAAIA,MAAAA,SAAS;AAAA;AAAA,EAC/C,GAAG,CAAE;AAAA;AACP;AAEA,MAAM,IAAI,CAAC,CAAA,GAAI,CAAE,GAAE,EAAE;AACrB,MAAM,OAAO,CAAC,CAAA,GAAI,CAAE,GAAE,EAAE;AACxB,MAAM,IAAI,CAAE;AAEZ,MAAM,QAAQ,IAAIA,MAAAA,QAAS;AAC3B,MAAM,QAAQ,IAAIA,MAAAA,QAAS;AAC3B,MAAM,QAAQ,IAAIA,MAAAA,QAAS;AAC3B,MAAM,KAAK,IAAIA,MAAAA,QAAS;AACxB,MAAM,OAAO,IAAIA,MAAAA,QAAS;AAC1B,MAAM,eAAe,IAAIA,MAAAA,QAAS;AAClC,MAAM,iBAAiB,IAAIC,MAAAA,QAAS;AACpC,MAAM,OAAO,IAAIC,MAAAA,KAAM;AACvB,MAAM,SAAS,IAAIC,MAAAA,QAAS;AAC5B,MAAM,UAAU,IAAIA,MAAAA,QAAS;AAC7B,MAAM,WAAW,IAAIC,MAAAA,IAAK;AAI1B,MAAM,IAAI;AAAA,EACR,YAAY,SAAS,IAAIJ,MAAAA,WAAW,WAAW,IAAIA,MAAAA,WAAW,WAAW,IAAIC,MAAAA,WAAW;AACtF,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,SAAK,WAAW;AAAA,EACjB;AAAA,EAED,IAAI,QAAQ,UAAU,UAAU;AAC9B,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,SAAK,WAAW;AAEhB,WAAO;AAAA,EACR;AAAA,EAED,KAAKI,MAAK;AACR,SAAK,OAAO,KAAKA,KAAI,MAAM;AAC3B,SAAK,SAAS,KAAKA,KAAI,QAAQ;AAC/B,SAAK,SAAS,KAAKA,KAAI,QAAQ;AAE/B,WAAO;AAAA,EACR;AAAA,EAED,QAAQ;AACN,WAAO,IAAI,KAAK,cAAc,KAAK,IAAI;AAAA,EACxC;AAAA,EAED,QAAQ,QAAQ;AACd,WAAO,OAAO,KAAK,KAAK,QAAQ,EAAE,eAAe,CAAC;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,WAAW,OAAO,QAAQ;AACxB,UAAM,WAAW,KAAK;AAEtB,OAAG,WAAW,OAAO,KAAK,MAAM;AAChC,SAAK,SAAS,aAAa,OAAO,OAAO,KAAK;AAI9C,WAAO,KAAK,KAAK,MAAM;AAIvB,UAAM,IAAIC,MAAAA,UAAU,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;AAChE,WAAO,IAAI,MAAM,eAAe,CAAC,CAAC;AAElC,UAAM,IAAIA,MAAAA,UAAU,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;AAChE,WAAO,IAAI,MAAM,eAAe,CAAC,CAAC;AAElC,UAAM,IAAIA,MAAAA,UAAU,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;AAChE,WAAO,IAAI,MAAM,eAAe,CAAC,CAAC;AAElC,WAAO;AAAA,EACR;AAAA,EAED,cAAc,OAAO;AACnB,OAAG,WAAW,OAAO,KAAK,MAAM;AAChC,SAAK,SAAS,aAAa,OAAO,OAAO,KAAK;AAI9C,WACE,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,KACzC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,KACzC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;AAAA,EAE5C;AAAA,EAED,eAAe,MAAM;AACnB,WAAO,KAAK,cAAc,IAAI,SAAS,IAAI,CAAC;AAAA,EAC7C;AAAA,EAED,iBAAiB,QAAQ;AAGvB,SAAK,WAAW,OAAO,QAAQ,YAAY;AAI3C,WAAO,aAAa,kBAAkB,OAAO,MAAM,KAAK,OAAO,SAAS,OAAO;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,cAAcD,MAAK,UAAU,OAAO,SAAS;AAG3C,MAAE,IAAI,KAAK;AACX,MAAE,EAAE,CAAC,IAAI,KAAK,SAAS;AACvB,MAAE,EAAE,CAAC,IAAI,KAAK,SAAS;AACvB,MAAE,EAAE,CAAC,IAAI,KAAK,SAAS;AACvB,SAAK,SAAS,aAAa,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAEjD,MAAE,IAAIA,KAAI;AACV,MAAE,EAAE,CAAC,IAAIA,KAAI,SAAS;AACtB,MAAE,EAAE,CAAC,IAAIA,KAAI,SAAS;AACtB,MAAE,EAAE,CAAC,IAAIA,KAAI,SAAS;AACtB,IAAAA,KAAI,SAAS,aAAa,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAIhD,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAAA,MAC5B;AAAA,IACF;AAID,OAAG,WAAW,EAAE,GAAG,EAAE,CAAC;AAItB,MAAE,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AACpB,MAAE,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AACpB,MAAE,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AAMpB,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,aAAK,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI;AAAA,MAClC;AAAA,IACF;AAED,QAAI,IAAI;AAIR,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,WAAK,EAAE,EAAE,CAAC;AACV,WAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AACnE,UAAI,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,eAAO;AAAA,IACtC;AAID,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,WAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AACnE,WAAK,EAAE,EAAE,CAAC;AACV,UAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,eAAO;AAAA,IAClF;AAID,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,gBAAgB,OAAO;AACrB,SAAK,SAAS,aAAa,OAAO,OAAO,KAAK;AAI9C,UAAM,IACJ,KAAK,SAAS,IAAI,KAAK,IAAI,MAAM,OAAO,IAAI,KAAK,CAAC,IAClD,KAAK,SAAS,IAAI,KAAK,IAAI,MAAM,OAAO,IAAI,KAAK,CAAC,IAClD,KAAK,SAAS,IAAI,KAAK,IAAI,MAAM,OAAO,IAAI,KAAK,CAAC;AAIpD,UAAM,IAAI,MAAM,OAAO,IAAI,KAAK,MAAM,IAAI,MAAM;AAIhD,WAAO,KAAK,IAAI,CAAC,KAAK;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,aAAa,KAAK,QAAQ;AAIxB,SAAK,QAAQ,IAAI;AACjB,SAAK,qBAAqB,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI;AAI/C,WAAO,eAAe,KAAK,QAAQ;AACnC,WAAO,YAAY,KAAK,MAAM;AAI9B,YAAQ,KAAK,MAAM,EAAE,OAAQ;AAC7B,aAAS,KAAK,GAAG,EAAE,aAAa,OAAO;AAIvC,QAAI,SAAS,aAAa,MAAM,MAAM,GAAG;AAGvC,aAAO,OAAO,aAAa,MAAM;AAAA,IACvC,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,cAAc,KAAK;AACjB,WAAO,KAAK,aAAa,KAAK,EAAE,MAAM;AAAA,EACvC;AAAA,EAED,SAAS,MAAM;AACb,SAAK,UAAU,KAAK,MAAM;AAE1B,SAAK,QAAQ,KAAK,QAAQ,EAAE,eAAe,GAAG;AAE9C,SAAK,SAAS,SAAU;AAExB,WAAO;AAAA,EACR;AAAA,EAED,OAAOA,MAAK;AACV,WAAOA,KAAI,OAAO,OAAO,KAAK,MAAM,KAAKA,KAAI,SAAS,OAAO,KAAK,QAAQ,KAAKA,KAAI,SAAS,OAAO,KAAK,QAAQ;AAAA,EACjH;AAAA,EAED,aAAaE,SAAQ;AACnB,UAAM,IAAIA,QAAO;AAEjB,QAAI,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAQ;AAC1C,UAAM,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAQ;AAC5C,UAAM,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAQ;AAE7C,UAAM,MAAMA,QAAO,YAAa;AAChC,QAAI,MAAM;AAAG,WAAK,CAAC;AAEnB,mBAAe,eAAeA,OAAM;AAEpC,UAAM,QAAQ,IAAI;AAClB,UAAM,QAAQ,IAAI;AAClB,UAAM,QAAQ,IAAI;AAElB,mBAAe,SAAS,CAAC,KAAK;AAC9B,mBAAe,SAAS,CAAC,KAAK;AAC9B,mBAAe,SAAS,CAAC,KAAK;AAE9B,mBAAe,SAAS,CAAC,KAAK;AAC9B,mBAAe,SAAS,CAAC,KAAK;AAC9B,mBAAe,SAAS,CAAC,KAAK;AAE9B,mBAAe,SAAS,CAAC,KAAK;AAC9B,mBAAe,SAAS,CAAC,KAAK;AAC9B,mBAAe,SAAS,CAAC,KAAK;AAE9B,SAAK,SAAS,SAAS,cAAc;AAErC,SAAK,SAAS,KAAK;AACnB,SAAK,SAAS,KAAK;AACnB,SAAK,SAAS,KAAK;AAEnB,OAAG,sBAAsBA,OAAM;AAC/B,SAAK,OAAO,IAAI,EAAE;AAElB,WAAO;AAAA,EACR;AACH;AAEA,MAAM,MAAM,IAAI,IAAG;;"}
|
|
1
|
+
{"version":3,"file":"OBB.cjs","sources":["../../src/math/OBB.js"],"sourcesContent":["import { Box3, MathUtils, Matrix4, Matrix3, Ray, Vector3 } from 'three'\n\n// module scope helper variables\n\nconst a = {\n c: null, // center\n u: [/* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3()], // basis vectors\n e: [], // half width\n}\n\nconst b = {\n c: null, // center\n u: [/* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3()], // basis vectors\n e: [], // half width\n}\n\nconst R = [[], [], []]\nconst AbsR = [[], [], []]\nconst t = []\n\nconst xAxis = /* @__PURE__ */ new Vector3()\nconst yAxis = /* @__PURE__ */ new Vector3()\nconst zAxis = /* @__PURE__ */ new Vector3()\nconst v1 = /* @__PURE__ */ new Vector3()\nconst size = /* @__PURE__ */ new Vector3()\nconst closestPoint = /* @__PURE__ */ new Vector3()\nconst rotationMatrix = /* @__PURE__ */ new Matrix3()\nconst aabb = /* @__PURE__ */ new Box3()\nconst matrix = /* @__PURE__ */ new Matrix4()\nconst inverse = /* @__PURE__ */ new Matrix4()\nconst localRay = /* @__PURE__ */ new Ray()\n\n// OBB\n\nclass OBB {\n constructor(center = new Vector3(), halfSize = new Vector3(), rotation = new Matrix3()) {\n this.center = center\n this.halfSize = halfSize\n this.rotation = rotation\n }\n\n set(center, halfSize, rotation) {\n this.center = center\n this.halfSize = halfSize\n this.rotation = rotation\n\n return this\n }\n\n copy(obb) {\n this.center.copy(obb.center)\n this.halfSize.copy(obb.halfSize)\n this.rotation.copy(obb.rotation)\n\n return this\n }\n\n clone() {\n return new this.constructor().copy(this)\n }\n\n getSize(result) {\n return result.copy(this.halfSize).multiplyScalar(2)\n }\n\n /**\n * Reference: Closest Point on OBB to Point in Real-Time Collision Detection\n * by Christer Ericson (chapter 5.1.4)\n */\n clampPoint(point, result) {\n const halfSize = this.halfSize\n\n v1.subVectors(point, this.center)\n this.rotation.extractBasis(xAxis, yAxis, zAxis)\n\n // start at the center position of the OBB\n\n result.copy(this.center)\n\n // project the target onto the OBB axes and walk towards that point\n\n const x = MathUtils.clamp(v1.dot(xAxis), -halfSize.x, halfSize.x)\n result.add(xAxis.multiplyScalar(x))\n\n const y = MathUtils.clamp(v1.dot(yAxis), -halfSize.y, halfSize.y)\n result.add(yAxis.multiplyScalar(y))\n\n const z = MathUtils.clamp(v1.dot(zAxis), -halfSize.z, halfSize.z)\n result.add(zAxis.multiplyScalar(z))\n\n return result\n }\n\n containsPoint(point) {\n v1.subVectors(point, this.center)\n this.rotation.extractBasis(xAxis, yAxis, zAxis)\n\n // project v1 onto each axis and check if these points lie inside the OBB\n\n return (\n Math.abs(v1.dot(xAxis)) <= this.halfSize.x &&\n Math.abs(v1.dot(yAxis)) <= this.halfSize.y &&\n Math.abs(v1.dot(zAxis)) <= this.halfSize.z\n )\n }\n\n intersectsBox3(box3) {\n return this.intersectsOBB(obb.fromBox3(box3))\n }\n\n intersectsSphere(sphere) {\n // find the point on the OBB closest to the sphere center\n\n this.clampPoint(sphere.center, closestPoint)\n\n // if that point is inside the sphere, the OBB and sphere intersect\n\n return closestPoint.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius\n }\n\n /**\n * Reference: OBB-OBB Intersection in Real-Time Collision Detection\n * by Christer Ericson (chapter 4.4.1)\n *\n */\n intersectsOBB(obb, epsilon = Number.EPSILON) {\n // prepare data structures (the code uses the same nomenclature like the reference)\n\n a.c = this.center\n a.e[0] = this.halfSize.x\n a.e[1] = this.halfSize.y\n a.e[2] = this.halfSize.z\n this.rotation.extractBasis(a.u[0], a.u[1], a.u[2])\n\n b.c = obb.center\n b.e[0] = obb.halfSize.x\n b.e[1] = obb.halfSize.y\n b.e[2] = obb.halfSize.z\n obb.rotation.extractBasis(b.u[0], b.u[1], b.u[2])\n\n // compute rotation matrix expressing b in a's coordinate frame\n\n for (let i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n R[i][j] = a.u[i].dot(b.u[j])\n }\n }\n\n // compute translation vector\n\n v1.subVectors(b.c, a.c)\n\n // bring translation into a's coordinate frame\n\n t[0] = v1.dot(a.u[0])\n t[1] = v1.dot(a.u[1])\n t[2] = v1.dot(a.u[2])\n\n // compute common subexpressions. Add in an epsilon term to\n // counteract arithmetic errors when two edges are parallel and\n // their cross product is (near) null\n\n for (let i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n AbsR[i][j] = Math.abs(R[i][j]) + epsilon\n }\n }\n\n let ra, rb\n\n // test axes L = A0, L = A1, L = A2\n\n for (let i = 0; i < 3; i++) {\n ra = a.e[i]\n rb = b.e[0] * AbsR[i][0] + b.e[1] * AbsR[i][1] + b.e[2] * AbsR[i][2]\n if (Math.abs(t[i]) > ra + rb) return false\n }\n\n // test axes L = B0, L = B1, L = B2\n\n for (let i = 0; i < 3; i++) {\n ra = a.e[0] * AbsR[0][i] + a.e[1] * AbsR[1][i] + a.e[2] * AbsR[2][i]\n rb = b.e[i]\n if (Math.abs(t[0] * R[0][i] + t[1] * R[1][i] + t[2] * R[2][i]) > ra + rb) return false\n }\n\n // test axis L = A0 x B0\n\n ra = a.e[1] * AbsR[2][0] + a.e[2] * AbsR[1][0]\n rb = b.e[1] * AbsR[0][2] + b.e[2] * AbsR[0][1]\n if (Math.abs(t[2] * R[1][0] - t[1] * R[2][0]) > ra + rb) return false\n\n // test axis L = A0 x B1\n\n ra = a.e[1] * AbsR[2][1] + a.e[2] * AbsR[1][1]\n rb = b.e[0] * AbsR[0][2] + b.e[2] * AbsR[0][0]\n if (Math.abs(t[2] * R[1][1] - t[1] * R[2][1]) > ra + rb) return false\n\n // test axis L = A0 x B2\n\n ra = a.e[1] * AbsR[2][2] + a.e[2] * AbsR[1][2]\n rb = b.e[0] * AbsR[0][1] + b.e[1] * AbsR[0][0]\n if (Math.abs(t[2] * R[1][2] - t[1] * R[2][2]) > ra + rb) return false\n\n // test axis L = A1 x B0\n\n ra = a.e[0] * AbsR[2][0] + a.e[2] * AbsR[0][0]\n rb = b.e[1] * AbsR[1][2] + b.e[2] * AbsR[1][1]\n if (Math.abs(t[0] * R[2][0] - t[2] * R[0][0]) > ra + rb) return false\n\n // test axis L = A1 x B1\n\n ra = a.e[0] * AbsR[2][1] + a.e[2] * AbsR[0][1]\n rb = b.e[0] * AbsR[1][2] + b.e[2] * AbsR[1][0]\n if (Math.abs(t[0] * R[2][1] - t[2] * R[0][1]) > ra + rb) return false\n\n // test axis L = A1 x B2\n\n ra = a.e[0] * AbsR[2][2] + a.e[2] * AbsR[0][2]\n rb = b.e[0] * AbsR[1][1] + b.e[1] * AbsR[1][0]\n if (Math.abs(t[0] * R[2][2] - t[2] * R[0][2]) > ra + rb) return false\n\n // test axis L = A2 x B0\n\n ra = a.e[0] * AbsR[1][0] + a.e[1] * AbsR[0][0]\n rb = b.e[1] * AbsR[2][2] + b.e[2] * AbsR[2][1]\n if (Math.abs(t[1] * R[0][0] - t[0] * R[1][0]) > ra + rb) return false\n\n // test axis L = A2 x B1\n\n ra = a.e[0] * AbsR[1][1] + a.e[1] * AbsR[0][1]\n rb = b.e[0] * AbsR[2][2] + b.e[2] * AbsR[2][0]\n if (Math.abs(t[1] * R[0][1] - t[0] * R[1][1]) > ra + rb) return false\n\n // test axis L = A2 x B2\n\n ra = a.e[0] * AbsR[1][2] + a.e[1] * AbsR[0][2]\n rb = b.e[0] * AbsR[2][1] + b.e[1] * AbsR[2][0]\n if (Math.abs(t[1] * R[0][2] - t[0] * R[1][2]) > ra + rb) return false\n\n // since no separating axis is found, the OBBs must be intersecting\n\n return true\n }\n\n /**\n * Reference: Testing Box Against Plane in Real-Time Collision Detection\n * by Christer Ericson (chapter 5.2.3)\n */\n intersectsPlane(plane) {\n this.rotation.extractBasis(xAxis, yAxis, zAxis)\n\n // compute the projection interval radius of this OBB onto L(t) = this->center + t * p.normal;\n\n const r =\n this.halfSize.x * Math.abs(plane.normal.dot(xAxis)) +\n this.halfSize.y * Math.abs(plane.normal.dot(yAxis)) +\n this.halfSize.z * Math.abs(plane.normal.dot(zAxis))\n\n // compute distance of the OBB's center from the plane\n\n const d = plane.normal.dot(this.center) - plane.constant\n\n // Intersection occurs when distance d falls within [-r,+r] interval\n\n return Math.abs(d) <= r\n }\n\n /**\n * Performs a ray/OBB intersection test and stores the intersection point\n * to the given 3D vector. If no intersection is detected, *null* is returned.\n */\n intersectRay(ray, result) {\n // the idea is to perform the intersection test in the local space\n // of the OBB.\n\n this.getSize(size)\n aabb.setFromCenterAndSize(v1.set(0, 0, 0), size)\n\n // create a 4x4 transformation matrix\n\n matrix.setFromMatrix3(this.rotation)\n matrix.setPosition(this.center)\n\n // transform ray to the local space of the OBB\n\n inverse.copy(matrix).invert()\n localRay.copy(ray).applyMatrix4(inverse)\n\n // perform ray <-> AABB intersection test\n\n if (localRay.intersectBox(aabb, result)) {\n // transform the intersection point back to world space\n\n return result.applyMatrix4(matrix)\n } else {\n return null\n }\n }\n\n /**\n * Performs a ray/OBB intersection test. Returns either true or false if\n * there is a intersection or not.\n */\n intersectsRay(ray) {\n return this.intersectRay(ray, v1) !== null\n }\n\n fromBox3(box3) {\n box3.getCenter(this.center)\n\n box3.getSize(this.halfSize).multiplyScalar(0.5)\n\n this.rotation.identity()\n\n return this\n }\n\n equals(obb) {\n return obb.center.equals(this.center) && obb.halfSize.equals(this.halfSize) && obb.rotation.equals(this.rotation)\n }\n\n applyMatrix4(matrix) {\n const e = matrix.elements\n\n let sx = v1.set(e[0], e[1], e[2]).length()\n const sy = v1.set(e[4], e[5], e[6]).length()\n const sz = v1.set(e[8], e[9], e[10]).length()\n\n const det = matrix.determinant()\n if (det < 0) sx = -sx\n\n rotationMatrix.setFromMatrix4(matrix)\n\n const invSX = 1 / sx\n const invSY = 1 / sy\n const invSZ = 1 / sz\n\n rotationMatrix.elements[0] *= invSX\n rotationMatrix.elements[1] *= invSX\n rotationMatrix.elements[2] *= invSX\n\n rotationMatrix.elements[3] *= invSY\n rotationMatrix.elements[4] *= invSY\n rotationMatrix.elements[5] *= invSY\n\n rotationMatrix.elements[6] *= invSZ\n rotationMatrix.elements[7] *= invSZ\n rotationMatrix.elements[8] *= invSZ\n\n this.rotation.multiply(rotationMatrix)\n\n this.halfSize.x *= sx\n this.halfSize.y *= sy\n this.halfSize.z *= sz\n\n v1.setFromMatrixPosition(matrix)\n this.center.add(v1)\n\n return this\n }\n}\n\nconst obb = /* @__PURE__ */ new OBB()\n\nexport { OBB }\n"],"names":["Vector3","Matrix3","Box3","Matrix4","Ray","obb","MathUtils","matrix"],"mappings":";;;AAIA,MAAM,IAAI;AAAA,EACR,GAAG;AAAA;AAAA,EACH,GAAG,CAAiB,oBAAIA,cAAS,GAAkB,oBAAIA,MAAAA,QAAS,GAAkB,oBAAIA,MAAAA,SAAS;AAAA;AAAA,EAC/F,GAAG,CAAE;AAAA;AACP;AAEA,MAAM,IAAI;AAAA,EACR,GAAG;AAAA;AAAA,EACH,GAAG,CAAiB,oBAAIA,cAAS,GAAkB,oBAAIA,MAAAA,QAAS,GAAkB,oBAAIA,MAAAA,SAAS;AAAA;AAAA,EAC/F,GAAG,CAAE;AAAA;AACP;AAEA,MAAM,IAAI,CAAC,CAAA,GAAI,CAAE,GAAE,EAAE;AACrB,MAAM,OAAO,CAAC,CAAA,GAAI,CAAE,GAAE,EAAE;AACxB,MAAM,IAAI,CAAE;AAEZ,MAAM,QAAwB,oBAAIA,MAAAA,QAAS;AAC3C,MAAM,QAAwB,oBAAIA,MAAAA,QAAS;AAC3C,MAAM,QAAwB,oBAAIA,MAAAA,QAAS;AAC3C,MAAM,KAAqB,oBAAIA,MAAAA,QAAS;AACxC,MAAM,OAAuB,oBAAIA,MAAAA,QAAS;AAC1C,MAAM,eAA+B,oBAAIA,MAAAA,QAAS;AAClD,MAAM,iBAAiC,oBAAIC,MAAAA,QAAS;AACpD,MAAM,OAAuB,oBAAIC,MAAAA,KAAM;AACvC,MAAM,SAAyB,oBAAIC,MAAAA,QAAS;AAC5C,MAAM,UAA0B,oBAAIA,MAAAA,QAAS;AAC7C,MAAM,WAA2B,oBAAIC,MAAAA,IAAK;AAI1C,MAAM,IAAI;AAAA,EACR,YAAY,SAAS,IAAIJ,MAAAA,WAAW,WAAW,IAAIA,MAAAA,WAAW,WAAW,IAAIC,MAAAA,WAAW;AACtF,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,SAAK,WAAW;AAAA,EACjB;AAAA,EAED,IAAI,QAAQ,UAAU,UAAU;AAC9B,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,SAAK,WAAW;AAEhB,WAAO;AAAA,EACR;AAAA,EAED,KAAKI,MAAK;AACR,SAAK,OAAO,KAAKA,KAAI,MAAM;AAC3B,SAAK,SAAS,KAAKA,KAAI,QAAQ;AAC/B,SAAK,SAAS,KAAKA,KAAI,QAAQ;AAE/B,WAAO;AAAA,EACR;AAAA,EAED,QAAQ;AACN,WAAO,IAAI,KAAK,cAAc,KAAK,IAAI;AAAA,EACxC;AAAA,EAED,QAAQ,QAAQ;AACd,WAAO,OAAO,KAAK,KAAK,QAAQ,EAAE,eAAe,CAAC;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,WAAW,OAAO,QAAQ;AACxB,UAAM,WAAW,KAAK;AAEtB,OAAG,WAAW,OAAO,KAAK,MAAM;AAChC,SAAK,SAAS,aAAa,OAAO,OAAO,KAAK;AAI9C,WAAO,KAAK,KAAK,MAAM;AAIvB,UAAM,IAAIC,MAAAA,UAAU,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;AAChE,WAAO,IAAI,MAAM,eAAe,CAAC,CAAC;AAElC,UAAM,IAAIA,MAAAA,UAAU,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;AAChE,WAAO,IAAI,MAAM,eAAe,CAAC,CAAC;AAElC,UAAM,IAAIA,MAAAA,UAAU,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;AAChE,WAAO,IAAI,MAAM,eAAe,CAAC,CAAC;AAElC,WAAO;AAAA,EACR;AAAA,EAED,cAAc,OAAO;AACnB,OAAG,WAAW,OAAO,KAAK,MAAM;AAChC,SAAK,SAAS,aAAa,OAAO,OAAO,KAAK;AAI9C,WACE,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,KACzC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,KACzC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;AAAA,EAE5C;AAAA,EAED,eAAe,MAAM;AACnB,WAAO,KAAK,cAAc,IAAI,SAAS,IAAI,CAAC;AAAA,EAC7C;AAAA,EAED,iBAAiB,QAAQ;AAGvB,SAAK,WAAW,OAAO,QAAQ,YAAY;AAI3C,WAAO,aAAa,kBAAkB,OAAO,MAAM,KAAK,OAAO,SAAS,OAAO;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,cAAcD,MAAK,UAAU,OAAO,SAAS;AAG3C,MAAE,IAAI,KAAK;AACX,MAAE,EAAE,CAAC,IAAI,KAAK,SAAS;AACvB,MAAE,EAAE,CAAC,IAAI,KAAK,SAAS;AACvB,MAAE,EAAE,CAAC,IAAI,KAAK,SAAS;AACvB,SAAK,SAAS,aAAa,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAEjD,MAAE,IAAIA,KAAI;AACV,MAAE,EAAE,CAAC,IAAIA,KAAI,SAAS;AACtB,MAAE,EAAE,CAAC,IAAIA,KAAI,SAAS;AACtB,MAAE,EAAE,CAAC,IAAIA,KAAI,SAAS;AACtB,IAAAA,KAAI,SAAS,aAAa,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAIhD,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAAA,MAC5B;AAAA,IACF;AAID,OAAG,WAAW,EAAE,GAAG,EAAE,CAAC;AAItB,MAAE,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AACpB,MAAE,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AACpB,MAAE,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AAMpB,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,aAAK,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI;AAAA,MAClC;AAAA,IACF;AAED,QAAI,IAAI;AAIR,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,WAAK,EAAE,EAAE,CAAC;AACV,WAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AACnE,UAAI,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,eAAO;AAAA,IACtC;AAID,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,WAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AACnE,WAAK,EAAE,EAAE,CAAC;AACV,UAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,eAAO;AAAA,IAClF;AAID,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,SAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC7C,QAAI,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;AAAI,aAAO;AAIhE,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,gBAAgB,OAAO;AACrB,SAAK,SAAS,aAAa,OAAO,OAAO,KAAK;AAI9C,UAAM,IACJ,KAAK,SAAS,IAAI,KAAK,IAAI,MAAM,OAAO,IAAI,KAAK,CAAC,IAClD,KAAK,SAAS,IAAI,KAAK,IAAI,MAAM,OAAO,IAAI,KAAK,CAAC,IAClD,KAAK,SAAS,IAAI,KAAK,IAAI,MAAM,OAAO,IAAI,KAAK,CAAC;AAIpD,UAAM,IAAI,MAAM,OAAO,IAAI,KAAK,MAAM,IAAI,MAAM;AAIhD,WAAO,KAAK,IAAI,CAAC,KAAK;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,aAAa,KAAK,QAAQ;AAIxB,SAAK,QAAQ,IAAI;AACjB,SAAK,qBAAqB,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI;AAI/C,WAAO,eAAe,KAAK,QAAQ;AACnC,WAAO,YAAY,KAAK,MAAM;AAI9B,YAAQ,KAAK,MAAM,EAAE,OAAQ;AAC7B,aAAS,KAAK,GAAG,EAAE,aAAa,OAAO;AAIvC,QAAI,SAAS,aAAa,MAAM,MAAM,GAAG;AAGvC,aAAO,OAAO,aAAa,MAAM;AAAA,IACvC,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,cAAc,KAAK;AACjB,WAAO,KAAK,aAAa,KAAK,EAAE,MAAM;AAAA,EACvC;AAAA,EAED,SAAS,MAAM;AACb,SAAK,UAAU,KAAK,MAAM;AAE1B,SAAK,QAAQ,KAAK,QAAQ,EAAE,eAAe,GAAG;AAE9C,SAAK,SAAS,SAAU;AAExB,WAAO;AAAA,EACR;AAAA,EAED,OAAOA,MAAK;AACV,WAAOA,KAAI,OAAO,OAAO,KAAK,MAAM,KAAKA,KAAI,SAAS,OAAO,KAAK,QAAQ,KAAKA,KAAI,SAAS,OAAO,KAAK,QAAQ;AAAA,EACjH;AAAA,EAED,aAAaE,SAAQ;AACnB,UAAM,IAAIA,QAAO;AAEjB,QAAI,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAQ;AAC1C,UAAM,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAQ;AAC5C,UAAM,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAQ;AAE7C,UAAM,MAAMA,QAAO,YAAa;AAChC,QAAI,MAAM;AAAG,WAAK,CAAC;AAEnB,mBAAe,eAAeA,OAAM;AAEpC,UAAM,QAAQ,IAAI;AAClB,UAAM,QAAQ,IAAI;AAClB,UAAM,QAAQ,IAAI;AAElB,mBAAe,SAAS,CAAC,KAAK;AAC9B,mBAAe,SAAS,CAAC,KAAK;AAC9B,mBAAe,SAAS,CAAC,KAAK;AAE9B,mBAAe,SAAS,CAAC,KAAK;AAC9B,mBAAe,SAAS,CAAC,KAAK;AAC9B,mBAAe,SAAS,CAAC,KAAK;AAE9B,mBAAe,SAAS,CAAC,KAAK;AAC9B,mBAAe,SAAS,CAAC,KAAK;AAC9B,mBAAe,SAAS,CAAC,KAAK;AAE9B,SAAK,SAAS,SAAS,cAAc;AAErC,SAAK,SAAS,KAAK;AACnB,SAAK,SAAS,KAAK;AACnB,SAAK,SAAS,KAAK;AAEnB,OAAG,sBAAsBA,OAAM;AAC/B,SAAK,OAAO,IAAI,EAAE;AAElB,WAAO;AAAA,EACR;AACH;AAEA,MAAM,MAAsB,oBAAI,IAAG;;"}
|
package/math/OBB.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Vector3, Matrix3, Box3, Matrix4, Ray
|
|
1
|
+
import { Vector3, Matrix3, MathUtils, Box3, Matrix4, Ray } from "three";
|
|
2
2
|
const a = {
|
|
3
3
|
c: null,
|
|
4
4
|
// center
|
|
5
|
-
u: [new Vector3(), new Vector3(), new Vector3()],
|
|
5
|
+
u: [/* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3()],
|
|
6
6
|
// basis vectors
|
|
7
7
|
e: []
|
|
8
8
|
// half width
|
|
@@ -10,7 +10,7 @@ const a = {
|
|
|
10
10
|
const b = {
|
|
11
11
|
c: null,
|
|
12
12
|
// center
|
|
13
|
-
u: [new Vector3(), new Vector3(), new Vector3()],
|
|
13
|
+
u: [/* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3()],
|
|
14
14
|
// basis vectors
|
|
15
15
|
e: []
|
|
16
16
|
// half width
|
|
@@ -18,17 +18,17 @@ const b = {
|
|
|
18
18
|
const R = [[], [], []];
|
|
19
19
|
const AbsR = [[], [], []];
|
|
20
20
|
const t = [];
|
|
21
|
-
const xAxis = new Vector3();
|
|
22
|
-
const yAxis = new Vector3();
|
|
23
|
-
const zAxis = new Vector3();
|
|
24
|
-
const v1 = new Vector3();
|
|
25
|
-
const size = new Vector3();
|
|
26
|
-
const closestPoint = new Vector3();
|
|
27
|
-
const rotationMatrix = new Matrix3();
|
|
28
|
-
const aabb = new Box3();
|
|
29
|
-
const matrix = new Matrix4();
|
|
30
|
-
const inverse = new Matrix4();
|
|
31
|
-
const localRay = new Ray();
|
|
21
|
+
const xAxis = /* @__PURE__ */ new Vector3();
|
|
22
|
+
const yAxis = /* @__PURE__ */ new Vector3();
|
|
23
|
+
const zAxis = /* @__PURE__ */ new Vector3();
|
|
24
|
+
const v1 = /* @__PURE__ */ new Vector3();
|
|
25
|
+
const size = /* @__PURE__ */ new Vector3();
|
|
26
|
+
const closestPoint = /* @__PURE__ */ new Vector3();
|
|
27
|
+
const rotationMatrix = /* @__PURE__ */ new Matrix3();
|
|
28
|
+
const aabb = /* @__PURE__ */ new Box3();
|
|
29
|
+
const matrix = /* @__PURE__ */ new Matrix4();
|
|
30
|
+
const inverse = /* @__PURE__ */ new Matrix4();
|
|
31
|
+
const localRay = /* @__PURE__ */ new Ray();
|
|
32
32
|
class OBB {
|
|
33
33
|
constructor(center = new Vector3(), halfSize = new Vector3(), rotation = new Matrix3()) {
|
|
34
34
|
this.center = center;
|
|
@@ -236,7 +236,7 @@ class OBB {
|
|
|
236
236
|
return this;
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
|
-
const obb = new OBB();
|
|
239
|
+
const obb = /* @__PURE__ */ new OBB();
|
|
240
240
|
export {
|
|
241
241
|
OBB
|
|
242
242
|
};
|
package/math/OBB.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OBB.js","sources":["../../src/math/OBB.js"],"sourcesContent":["import { Box3, MathUtils, Matrix4, Matrix3, Ray, Vector3 } from 'three'\n\n// module scope helper variables\n\nconst a = {\n c: null, // center\n u: [new Vector3(), new Vector3(), new Vector3()], // basis vectors\n e: [], // half width\n}\n\nconst b = {\n c: null, // center\n u: [new Vector3(), new Vector3(), new Vector3()], // basis vectors\n e: [], // half width\n}\n\nconst R = [[], [], []]\nconst AbsR = [[], [], []]\nconst t = []\n\nconst xAxis = new Vector3()\nconst yAxis = new Vector3()\nconst zAxis = new Vector3()\nconst v1 = new Vector3()\nconst size = new Vector3()\nconst closestPoint = new Vector3()\nconst rotationMatrix = new Matrix3()\nconst aabb = new Box3()\nconst matrix = new Matrix4()\nconst inverse = new Matrix4()\nconst localRay = new Ray()\n\n// OBB\n\nclass OBB {\n constructor(center = new Vector3(), halfSize = new Vector3(), rotation = new Matrix3()) {\n this.center = center\n this.halfSize = halfSize\n this.rotation = rotation\n }\n\n set(center, halfSize, rotation) {\n this.center = center\n this.halfSize = halfSize\n this.rotation = rotation\n\n return this\n }\n\n copy(obb) {\n this.center.copy(obb.center)\n this.halfSize.copy(obb.halfSize)\n this.rotation.copy(obb.rotation)\n\n return this\n }\n\n clone() {\n return new this.constructor().copy(this)\n }\n\n getSize(result) {\n return result.copy(this.halfSize).multiplyScalar(2)\n }\n\n /**\n * Reference: Closest Point on OBB to Point in Real-Time Collision Detection\n * by Christer Ericson (chapter 5.1.4)\n */\n clampPoint(point, result) {\n const halfSize = this.halfSize\n\n v1.subVectors(point, this.center)\n this.rotation.extractBasis(xAxis, yAxis, zAxis)\n\n // start at the center position of the OBB\n\n result.copy(this.center)\n\n // project the target onto the OBB axes and walk towards that point\n\n const x = MathUtils.clamp(v1.dot(xAxis), -halfSize.x, halfSize.x)\n result.add(xAxis.multiplyScalar(x))\n\n const y = MathUtils.clamp(v1.dot(yAxis), -halfSize.y, halfSize.y)\n result.add(yAxis.multiplyScalar(y))\n\n const z = MathUtils.clamp(v1.dot(zAxis), -halfSize.z, halfSize.z)\n result.add(zAxis.multiplyScalar(z))\n\n return result\n }\n\n containsPoint(point) {\n v1.subVectors(point, this.center)\n this.rotation.extractBasis(xAxis, yAxis, zAxis)\n\n // project v1 onto each axis and check if these points lie inside the OBB\n\n return (\n Math.abs(v1.dot(xAxis)) <= this.halfSize.x &&\n Math.abs(v1.dot(yAxis)) <= this.halfSize.y &&\n Math.abs(v1.dot(zAxis)) <= this.halfSize.z\n )\n }\n\n intersectsBox3(box3) {\n return this.intersectsOBB(obb.fromBox3(box3))\n }\n\n intersectsSphere(sphere) {\n // find the point on the OBB closest to the sphere center\n\n this.clampPoint(sphere.center, closestPoint)\n\n // if that point is inside the sphere, the OBB and sphere intersect\n\n return closestPoint.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius\n }\n\n /**\n * Reference: OBB-OBB Intersection in Real-Time Collision Detection\n * by Christer Ericson (chapter 4.4.1)\n *\n */\n intersectsOBB(obb, epsilon = Number.EPSILON) {\n // prepare data structures (the code uses the same nomenclature like the reference)\n\n a.c = this.center\n a.e[0] = this.halfSize.x\n a.e[1] = this.halfSize.y\n a.e[2] = this.halfSize.z\n this.rotation.extractBasis(a.u[0], a.u[1], a.u[2])\n\n b.c = obb.center\n b.e[0] = obb.halfSize.x\n b.e[1] = obb.halfSize.y\n b.e[2] = obb.halfSize.z\n obb.rotation.extractBasis(b.u[0], b.u[1], b.u[2])\n\n // compute rotation matrix expressing b in a's coordinate frame\n\n for (let i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n R[i][j] = a.u[i].dot(b.u[j])\n }\n }\n\n // compute translation vector\n\n v1.subVectors(b.c, a.c)\n\n // bring translation into a's coordinate frame\n\n t[0] = v1.dot(a.u[0])\n t[1] = v1.dot(a.u[1])\n t[2] = v1.dot(a.u[2])\n\n // compute common subexpressions. Add in an epsilon term to\n // counteract arithmetic errors when two edges are parallel and\n // their cross product is (near) null\n\n for (let i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n AbsR[i][j] = Math.abs(R[i][j]) + epsilon\n }\n }\n\n let ra, rb\n\n // test axes L = A0, L = A1, L = A2\n\n for (let i = 0; i < 3; i++) {\n ra = a.e[i]\n rb = b.e[0] * AbsR[i][0] + b.e[1] * AbsR[i][1] + b.e[2] * AbsR[i][2]\n if (Math.abs(t[i]) > ra + rb) return false\n }\n\n // test axes L = B0, L = B1, L = B2\n\n for (let i = 0; i < 3; i++) {\n ra = a.e[0] * AbsR[0][i] + a.e[1] * AbsR[1][i] + a.e[2] * AbsR[2][i]\n rb = b.e[i]\n if (Math.abs(t[0] * R[0][i] + t[1] * R[1][i] + t[2] * R[2][i]) > ra + rb) return false\n }\n\n // test axis L = A0 x B0\n\n ra = a.e[1] * AbsR[2][0] + a.e[2] * AbsR[1][0]\n rb = b.e[1] * AbsR[0][2] + b.e[2] * AbsR[0][1]\n if (Math.abs(t[2] * R[1][0] - t[1] * R[2][0]) > ra + rb) return false\n\n // test axis L = A0 x B1\n\n ra = a.e[1] * AbsR[2][1] + a.e[2] * AbsR[1][1]\n rb = b.e[0] * AbsR[0][2] + b.e[2] * AbsR[0][0]\n if (Math.abs(t[2] * R[1][1] - t[1] * R[2][1]) > ra + rb) return false\n\n // test axis L = A0 x B2\n\n ra = a.e[1] * AbsR[2][2] + a.e[2] * AbsR[1][2]\n rb = b.e[0] * AbsR[0][1] + b.e[1] * AbsR[0][0]\n if (Math.abs(t[2] * R[1][2] - t[1] * R[2][2]) > ra + rb) return false\n\n // test axis L = A1 x B0\n\n ra = a.e[0] * AbsR[2][0] + a.e[2] * AbsR[0][0]\n rb = b.e[1] * AbsR[1][2] + b.e[2] * AbsR[1][1]\n if (Math.abs(t[0] * R[2][0] - t[2] * R[0][0]) > ra + rb) return false\n\n // test axis L = A1 x B1\n\n ra = a.e[0] * AbsR[2][1] + a.e[2] * AbsR[0][1]\n rb = b.e[0] * AbsR[1][2] + b.e[2] * AbsR[1][0]\n if (Math.abs(t[0] * R[2][1] - t[2] * R[0][1]) > ra + rb) return false\n\n // test axis L = A1 x B2\n\n ra = a.e[0] * AbsR[2][2] + a.e[2] * AbsR[0][2]\n rb = b.e[0] * AbsR[1][1] + b.e[1] * AbsR[1][0]\n if (Math.abs(t[0] * R[2][2] - t[2] * R[0][2]) > ra + rb) return false\n\n // test axis L = A2 x B0\n\n ra = a.e[0] * AbsR[1][0] + a.e[1] * AbsR[0][0]\n rb = b.e[1] * AbsR[2][2] + b.e[2] * AbsR[2][1]\n if (Math.abs(t[1] * R[0][0] - t[0] * R[1][0]) > ra + rb) return false\n\n // test axis L = A2 x B1\n\n ra = a.e[0] * AbsR[1][1] + a.e[1] * AbsR[0][1]\n rb = b.e[0] * AbsR[2][2] + b.e[2] * AbsR[2][0]\n if (Math.abs(t[1] * R[0][1] - t[0] * R[1][1]) > ra + rb) return false\n\n // test axis L = A2 x B2\n\n ra = a.e[0] * AbsR[1][2] + a.e[1] * AbsR[0][2]\n rb = b.e[0] * AbsR[2][1] + b.e[1] * AbsR[2][0]\n if (Math.abs(t[1] * R[0][2] - t[0] * R[1][2]) > ra + rb) return false\n\n // since no separating axis is found, the OBBs must be intersecting\n\n return true\n }\n\n /**\n * Reference: Testing Box Against Plane in Real-Time Collision Detection\n * by Christer Ericson (chapter 5.2.3)\n */\n intersectsPlane(plane) {\n this.rotation.extractBasis(xAxis, yAxis, zAxis)\n\n // compute the projection interval radius of this OBB onto L(t) = this->center + t * p.normal;\n\n const r =\n this.halfSize.x * Math.abs(plane.normal.dot(xAxis)) +\n this.halfSize.y * Math.abs(plane.normal.dot(yAxis)) +\n this.halfSize.z * Math.abs(plane.normal.dot(zAxis))\n\n // compute distance of the OBB's center from the plane\n\n const d = plane.normal.dot(this.center) - plane.constant\n\n // Intersection occurs when distance d falls within [-r,+r] interval\n\n return Math.abs(d) <= r\n }\n\n /**\n * Performs a ray/OBB intersection test and stores the intersection point\n * to the given 3D vector. If no intersection is detected, *null* is returned.\n */\n intersectRay(ray, result) {\n // the idea is to perform the intersection test in the local space\n // of the OBB.\n\n this.getSize(size)\n aabb.setFromCenterAndSize(v1.set(0, 0, 0), size)\n\n // create a 4x4 transformation matrix\n\n matrix.setFromMatrix3(this.rotation)\n matrix.setPosition(this.center)\n\n // transform ray to the local space of the OBB\n\n inverse.copy(matrix).invert()\n localRay.copy(ray).applyMatrix4(inverse)\n\n // perform ray <-> AABB intersection test\n\n if (localRay.intersectBox(aabb, result)) {\n // transform the intersection point back to world space\n\n return result.applyMatrix4(matrix)\n } else {\n return null\n }\n }\n\n /**\n * Performs a ray/OBB intersection test. Returns either true or false if\n * there is a intersection or not.\n */\n intersectsRay(ray) {\n return this.intersectRay(ray, v1) !== null\n }\n\n fromBox3(box3) {\n box3.getCenter(this.center)\n\n box3.getSize(this.halfSize).multiplyScalar(0.5)\n\n this.rotation.identity()\n\n return this\n }\n\n equals(obb) {\n return obb.center.equals(this.center) && obb.halfSize.equals(this.halfSize) && obb.rotation.equals(this.rotation)\n }\n\n applyMatrix4(matrix) {\n const e = matrix.elements\n\n let sx = v1.set(e[0], e[1], e[2]).length()\n const sy = v1.set(e[4], e[5], e[6]).length()\n const sz = v1.set(e[8], e[9], e[10]).length()\n\n const det = matrix.determinant()\n if (det < 0) sx = -sx\n\n rotationMatrix.setFromMatrix4(matrix)\n\n const invSX = 1 / sx\n const invSY = 1 / sy\n const invSZ = 1 / sz\n\n rotationMatrix.elements[0] *= invSX\n rotationMatrix.elements[1] *= invSX\n rotationMatrix.elements[2] *= invSX\n\n rotationMatrix.elements[3] *= invSY\n rotationMatrix.elements[4] *= invSY\n rotationMatrix.elements[5] *= invSY\n\n rotationMatrix.elements[6] *= invSZ\n rotationMatrix.elements[7] *= invSZ\n rotationMatrix.elements[8] *= invSZ\n\n this.rotation.multiply(rotationMatrix)\n\n this.halfSize.x *= sx\n this.halfSize.y *= sy\n this.halfSize.z *= sz\n\n v1.setFromMatrixPosition(matrix)\n this.center.add(v1)\n\n return this\n }\n}\n\nconst obb = new OBB()\n\nexport { OBB }\n"],"names":["obb","matrix"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OBB.js","sources":["../../src/math/OBB.js"],"sourcesContent":["import { Box3, MathUtils, Matrix4, Matrix3, Ray, Vector3 } from 'three'\n\n// module scope helper variables\n\nconst a = {\n c: null, // center\n u: [/* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3()], // basis vectors\n e: [], // half width\n}\n\nconst b = {\n c: null, // center\n u: [/* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3()], // basis vectors\n e: [], // half width\n}\n\nconst R = [[], [], []]\nconst AbsR = [[], [], []]\nconst t = []\n\nconst xAxis = /* @__PURE__ */ new Vector3()\nconst yAxis = /* @__PURE__ */ new Vector3()\nconst zAxis = /* @__PURE__ */ new Vector3()\nconst v1 = /* @__PURE__ */ new Vector3()\nconst size = /* @__PURE__ */ new Vector3()\nconst closestPoint = /* @__PURE__ */ new Vector3()\nconst rotationMatrix = /* @__PURE__ */ new Matrix3()\nconst aabb = /* @__PURE__ */ new Box3()\nconst matrix = /* @__PURE__ */ new Matrix4()\nconst inverse = /* @__PURE__ */ new Matrix4()\nconst localRay = /* @__PURE__ */ new Ray()\n\n// OBB\n\nclass OBB {\n constructor(center = new Vector3(), halfSize = new Vector3(), rotation = new Matrix3()) {\n this.center = center\n this.halfSize = halfSize\n this.rotation = rotation\n }\n\n set(center, halfSize, rotation) {\n this.center = center\n this.halfSize = halfSize\n this.rotation = rotation\n\n return this\n }\n\n copy(obb) {\n this.center.copy(obb.center)\n this.halfSize.copy(obb.halfSize)\n this.rotation.copy(obb.rotation)\n\n return this\n }\n\n clone() {\n return new this.constructor().copy(this)\n }\n\n getSize(result) {\n return result.copy(this.halfSize).multiplyScalar(2)\n }\n\n /**\n * Reference: Closest Point on OBB to Point in Real-Time Collision Detection\n * by Christer Ericson (chapter 5.1.4)\n */\n clampPoint(point, result) {\n const halfSize = this.halfSize\n\n v1.subVectors(point, this.center)\n this.rotation.extractBasis(xAxis, yAxis, zAxis)\n\n // start at the center position of the OBB\n\n result.copy(this.center)\n\n // project the target onto the OBB axes and walk towards that point\n\n const x = MathUtils.clamp(v1.dot(xAxis), -halfSize.x, halfSize.x)\n result.add(xAxis.multiplyScalar(x))\n\n const y = MathUtils.clamp(v1.dot(yAxis), -halfSize.y, halfSize.y)\n result.add(yAxis.multiplyScalar(y))\n\n const z = MathUtils.clamp(v1.dot(zAxis), -halfSize.z, halfSize.z)\n result.add(zAxis.multiplyScalar(z))\n\n return result\n }\n\n containsPoint(point) {\n v1.subVectors(point, this.center)\n this.rotation.extractBasis(xAxis, yAxis, zAxis)\n\n // project v1 onto each axis and check if these points lie inside the OBB\n\n return (\n Math.abs(v1.dot(xAxis)) <= this.halfSize.x &&\n Math.abs(v1.dot(yAxis)) <= this.halfSize.y &&\n Math.abs(v1.dot(zAxis)) <= this.halfSize.z\n )\n }\n\n intersectsBox3(box3) {\n return this.intersectsOBB(obb.fromBox3(box3))\n }\n\n intersectsSphere(sphere) {\n // find the point on the OBB closest to the sphere center\n\n this.clampPoint(sphere.center, closestPoint)\n\n // if that point is inside the sphere, the OBB and sphere intersect\n\n return closestPoint.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius\n }\n\n /**\n * Reference: OBB-OBB Intersection in Real-Time Collision Detection\n * by Christer Ericson (chapter 4.4.1)\n *\n */\n intersectsOBB(obb, epsilon = Number.EPSILON) {\n // prepare data structures (the code uses the same nomenclature like the reference)\n\n a.c = this.center\n a.e[0] = this.halfSize.x\n a.e[1] = this.halfSize.y\n a.e[2] = this.halfSize.z\n this.rotation.extractBasis(a.u[0], a.u[1], a.u[2])\n\n b.c = obb.center\n b.e[0] = obb.halfSize.x\n b.e[1] = obb.halfSize.y\n b.e[2] = obb.halfSize.z\n obb.rotation.extractBasis(b.u[0], b.u[1], b.u[2])\n\n // compute rotation matrix expressing b in a's coordinate frame\n\n for (let i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n R[i][j] = a.u[i].dot(b.u[j])\n }\n }\n\n // compute translation vector\n\n v1.subVectors(b.c, a.c)\n\n // bring translation into a's coordinate frame\n\n t[0] = v1.dot(a.u[0])\n t[1] = v1.dot(a.u[1])\n t[2] = v1.dot(a.u[2])\n\n // compute common subexpressions. Add in an epsilon term to\n // counteract arithmetic errors when two edges are parallel and\n // their cross product is (near) null\n\n for (let i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n AbsR[i][j] = Math.abs(R[i][j]) + epsilon\n }\n }\n\n let ra, rb\n\n // test axes L = A0, L = A1, L = A2\n\n for (let i = 0; i < 3; i++) {\n ra = a.e[i]\n rb = b.e[0] * AbsR[i][0] + b.e[1] * AbsR[i][1] + b.e[2] * AbsR[i][2]\n if (Math.abs(t[i]) > ra + rb) return false\n }\n\n // test axes L = B0, L = B1, L = B2\n\n for (let i = 0; i < 3; i++) {\n ra = a.e[0] * AbsR[0][i] + a.e[1] * AbsR[1][i] + a.e[2] * AbsR[2][i]\n rb = b.e[i]\n if (Math.abs(t[0] * R[0][i] + t[1] * R[1][i] + t[2] * R[2][i]) > ra + rb) return false\n }\n\n // test axis L = A0 x B0\n\n ra = a.e[1] * AbsR[2][0] + a.e[2] * AbsR[1][0]\n rb = b.e[1] * AbsR[0][2] + b.e[2] * AbsR[0][1]\n if (Math.abs(t[2] * R[1][0] - t[1] * R[2][0]) > ra + rb) return false\n\n // test axis L = A0 x B1\n\n ra = a.e[1] * AbsR[2][1] + a.e[2] * AbsR[1][1]\n rb = b.e[0] * AbsR[0][2] + b.e[2] * AbsR[0][0]\n if (Math.abs(t[2] * R[1][1] - t[1] * R[2][1]) > ra + rb) return false\n\n // test axis L = A0 x B2\n\n ra = a.e[1] * AbsR[2][2] + a.e[2] * AbsR[1][2]\n rb = b.e[0] * AbsR[0][1] + b.e[1] * AbsR[0][0]\n if (Math.abs(t[2] * R[1][2] - t[1] * R[2][2]) > ra + rb) return false\n\n // test axis L = A1 x B0\n\n ra = a.e[0] * AbsR[2][0] + a.e[2] * AbsR[0][0]\n rb = b.e[1] * AbsR[1][2] + b.e[2] * AbsR[1][1]\n if (Math.abs(t[0] * R[2][0] - t[2] * R[0][0]) > ra + rb) return false\n\n // test axis L = A1 x B1\n\n ra = a.e[0] * AbsR[2][1] + a.e[2] * AbsR[0][1]\n rb = b.e[0] * AbsR[1][2] + b.e[2] * AbsR[1][0]\n if (Math.abs(t[0] * R[2][1] - t[2] * R[0][1]) > ra + rb) return false\n\n // test axis L = A1 x B2\n\n ra = a.e[0] * AbsR[2][2] + a.e[2] * AbsR[0][2]\n rb = b.e[0] * AbsR[1][1] + b.e[1] * AbsR[1][0]\n if (Math.abs(t[0] * R[2][2] - t[2] * R[0][2]) > ra + rb) return false\n\n // test axis L = A2 x B0\n\n ra = a.e[0] * AbsR[1][0] + a.e[1] * AbsR[0][0]\n rb = b.e[1] * AbsR[2][2] + b.e[2] * AbsR[2][1]\n if (Math.abs(t[1] * R[0][0] - t[0] * R[1][0]) > ra + rb) return false\n\n // test axis L = A2 x B1\n\n ra = a.e[0] * AbsR[1][1] + a.e[1] * AbsR[0][1]\n rb = b.e[0] * AbsR[2][2] + b.e[2] * AbsR[2][0]\n if (Math.abs(t[1] * R[0][1] - t[0] * R[1][1]) > ra + rb) return false\n\n // test axis L = A2 x B2\n\n ra = a.e[0] * AbsR[1][2] + a.e[1] * AbsR[0][2]\n rb = b.e[0] * AbsR[2][1] + b.e[1] * AbsR[2][0]\n if (Math.abs(t[1] * R[0][2] - t[0] * R[1][2]) > ra + rb) return false\n\n // since no separating axis is found, the OBBs must be intersecting\n\n return true\n }\n\n /**\n * Reference: Testing Box Against Plane in Real-Time Collision Detection\n * by Christer Ericson (chapter 5.2.3)\n */\n intersectsPlane(plane) {\n this.rotation.extractBasis(xAxis, yAxis, zAxis)\n\n // compute the projection interval radius of this OBB onto L(t) = this->center + t * p.normal;\n\n const r =\n this.halfSize.x * Math.abs(plane.normal.dot(xAxis)) +\n this.halfSize.y * Math.abs(plane.normal.dot(yAxis)) +\n this.halfSize.z * Math.abs(plane.normal.dot(zAxis))\n\n // compute distance of the OBB's center from the plane\n\n const d = plane.normal.dot(this.center) - plane.constant\n\n // Intersection occurs when distance d falls within [-r,+r] interval\n\n return Math.abs(d) <= r\n }\n\n /**\n * Performs a ray/OBB intersection test and stores the intersection point\n * to the given 3D vector. If no intersection is detected, *null* is returned.\n */\n intersectRay(ray, result) {\n // the idea is to perform the intersection test in the local space\n // of the OBB.\n\n this.getSize(size)\n aabb.setFromCenterAndSize(v1.set(0, 0, 0), size)\n\n // create a 4x4 transformation matrix\n\n matrix.setFromMatrix3(this.rotation)\n matrix.setPosition(this.center)\n\n // transform ray to the local space of the OBB\n\n inverse.copy(matrix).invert()\n localRay.copy(ray).applyMatrix4(inverse)\n\n // perform ray <-> AABB intersection test\n\n if (localRay.intersectBox(aabb, result)) {\n // transform the intersection point back to world space\n\n return result.applyMatrix4(matrix)\n } else {\n return null\n }\n }\n\n /**\n * Performs a ray/OBB intersection test. Returns either true or false if\n * there is a intersection or not.\n */\n intersectsRay(ray) {\n return this.intersectRay(ray, v1) !== null\n }\n\n fromBox3(box3) {\n box3.getCenter(this.center)\n\n box3.getSize(this.halfSize).multiplyScalar(0.5)\n\n this.rotation.identity()\n\n return this\n }\n\n equals(obb) {\n return obb.center.equals(this.center) && obb.halfSize.equals(this.halfSize) && obb.rotation.equals(this.rotation)\n }\n\n applyMatrix4(matrix) {\n const e = matrix.elements\n\n let sx = v1.set(e[0], e[1], e[2]).length()\n const sy = v1.set(e[4], e[5], e[6]).length()\n const sz = v1.set(e[8], e[9], e[10]).length()\n\n const det = matrix.determinant()\n if (det < 0) sx = -sx\n\n rotationMatrix.setFromMatrix4(matrix)\n\n const invSX = 1 / sx\n const invSY = 1 / sy\n const invSZ = 1 / sz\n\n rotationMatrix.elements[0] *= invSX\n rotationMatrix.elements[1] *= invSX\n rotationMatrix.elements[2] *= invSX\n\n rotationMatrix.elements[3] *= invSY\n rotationMatrix.elements[4] *= invSY\n rotationMatrix.elements[5] *= invSY\n\n rotationMatrix.elements[6] *= invSZ\n rotationMatrix.elements[7] *= invSZ\n rotationMatrix.elements[8] *= invSZ\n\n this.rotation.multiply(rotationMatrix)\n\n this.halfSize.x *= sx\n this.halfSize.y *= sy\n this.halfSize.z *= sz\n\n v1.setFromMatrixPosition(matrix)\n this.center.add(v1)\n\n return this\n }\n}\n\nconst obb = /* @__PURE__ */ new OBB()\n\nexport { OBB }\n"],"names":["obb","matrix"],"mappings":"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"}
|
package/math/Octree.cjs
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const THREE = require("three");
|
|
4
4
|
const Capsule = require("./Capsule.cjs");
|
|
5
|
-
const _v1 = new THREE.Vector3();
|
|
6
|
-
const _v2 = new THREE.Vector3();
|
|
7
|
-
const _plane = new THREE.Plane();
|
|
8
|
-
const _line1 = new THREE.Line3();
|
|
9
|
-
const _line2 = new THREE.Line3();
|
|
10
|
-
const _sphere = new THREE.Sphere();
|
|
11
|
-
const _capsule = new Capsule.Capsule();
|
|
5
|
+
const _v1 = /* @__PURE__ */ new THREE.Vector3();
|
|
6
|
+
const _v2 = /* @__PURE__ */ new THREE.Vector3();
|
|
7
|
+
const _plane = /* @__PURE__ */ new THREE.Plane();
|
|
8
|
+
const _line1 = /* @__PURE__ */ new THREE.Line3();
|
|
9
|
+
const _line2 = /* @__PURE__ */ new THREE.Line3();
|
|
10
|
+
const _sphere = /* @__PURE__ */ new THREE.Sphere();
|
|
11
|
+
const _capsule = /* @__PURE__ */ new Capsule.Capsule();
|
|
12
12
|
class Octree {
|
|
13
13
|
constructor(box) {
|
|
14
14
|
this.triangles = [];
|
package/math/Octree.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Octree.cjs","sources":["../../src/math/Octree.js"],"sourcesContent":["import { Box3, Line3, Plane, Sphere, Triangle, Vector3 } from 'three'\nimport { Capsule } from '../math/Capsule'\n\nconst _v1 = new Vector3()\nconst _v2 = new Vector3()\nconst _plane = new Plane()\nconst _line1 = new Line3()\nconst _line2 = new Line3()\nconst _sphere = new Sphere()\nconst _capsule = new Capsule()\n\nclass Octree {\n constructor(box) {\n this.triangles = []\n this.box = box\n this.subTrees = []\n }\n\n addTriangle(triangle) {\n if (!this.bounds) this.bounds = new Box3()\n\n this.bounds.min.x = Math.min(this.bounds.min.x, triangle.a.x, triangle.b.x, triangle.c.x)\n this.bounds.min.y = Math.min(this.bounds.min.y, triangle.a.y, triangle.b.y, triangle.c.y)\n this.bounds.min.z = Math.min(this.bounds.min.z, triangle.a.z, triangle.b.z, triangle.c.z)\n this.bounds.max.x = Math.max(this.bounds.max.x, triangle.a.x, triangle.b.x, triangle.c.x)\n this.bounds.max.y = Math.max(this.bounds.max.y, triangle.a.y, triangle.b.y, triangle.c.y)\n this.bounds.max.z = Math.max(this.bounds.max.z, triangle.a.z, triangle.b.z, triangle.c.z)\n\n this.triangles.push(triangle)\n\n return this\n }\n\n calcBox() {\n this.box = this.bounds.clone()\n\n // offset small amount to account for regular grid\n this.box.min.x -= 0.01\n this.box.min.y -= 0.01\n this.box.min.z -= 0.01\n\n return this\n }\n\n split(level) {\n if (!this.box) return\n\n const subTrees = []\n const halfsize = _v2.copy(this.box.max).sub(this.box.min).multiplyScalar(0.5)\n\n for (let x = 0; x < 2; x++) {\n for (let y = 0; y < 2; y++) {\n for (let z = 0; z < 2; z++) {\n const box = new Box3()\n const v = _v1.set(x, y, z)\n\n box.min.copy(this.box.min).add(v.multiply(halfsize))\n box.max.copy(box.min).add(halfsize)\n\n subTrees.push(new Octree(box))\n }\n }\n }\n\n let triangle\n\n while ((triangle = this.triangles.pop())) {\n for (let i = 0; i < subTrees.length; i++) {\n if (subTrees[i].box.intersectsTriangle(triangle)) {\n subTrees[i].triangles.push(triangle)\n }\n }\n }\n\n for (let i = 0; i < subTrees.length; i++) {\n const len = subTrees[i].triangles.length\n\n if (len > 8 && level < 16) {\n subTrees[i].split(level + 1)\n }\n\n if (len !== 0) {\n this.subTrees.push(subTrees[i])\n }\n }\n\n return this\n }\n\n build() {\n this.calcBox()\n this.split(0)\n\n return this\n }\n\n getRayTriangles(ray, triangles) {\n for (let i = 0; i < this.subTrees.length; i++) {\n const subTree = this.subTrees[i]\n if (!ray.intersectsBox(subTree.box)) continue\n\n if (subTree.triangles.length > 0) {\n for (let j = 0; j < subTree.triangles.length; j++) {\n if (triangles.indexOf(subTree.triangles[j]) === -1) triangles.push(subTree.triangles[j])\n }\n } else {\n subTree.getRayTriangles(ray, triangles)\n }\n }\n\n return triangles\n }\n\n triangleCapsuleIntersect(capsule, triangle) {\n triangle.getPlane(_plane)\n\n const d1 = _plane.distanceToPoint(capsule.start) - capsule.radius\n const d2 = _plane.distanceToPoint(capsule.end) - capsule.radius\n\n if ((d1 > 0 && d2 > 0) || (d1 < -capsule.radius && d2 < -capsule.radius)) {\n return false\n }\n\n const delta = Math.abs(d1 / (Math.abs(d1) + Math.abs(d2)))\n const intersectPoint = _v1.copy(capsule.start).lerp(capsule.end, delta)\n\n if (triangle.containsPoint(intersectPoint)) {\n return { normal: _plane.normal.clone(), point: intersectPoint.clone(), depth: Math.abs(Math.min(d1, d2)) }\n }\n\n const r2 = capsule.radius * capsule.radius\n\n const line1 = _line1.set(capsule.start, capsule.end)\n\n const lines = [\n [triangle.a, triangle.b],\n [triangle.b, triangle.c],\n [triangle.c, triangle.a],\n ]\n\n for (let i = 0; i < lines.length; i++) {\n const line2 = _line2.set(lines[i][0], lines[i][1])\n\n const [point1, point2] = capsule.lineLineMinimumPoints(line1, line2)\n\n if (point1.distanceToSquared(point2) < r2) {\n return {\n normal: point1.clone().sub(point2).normalize(),\n point: point2.clone(),\n depth: capsule.radius - point1.distanceTo(point2),\n }\n }\n }\n\n return false\n }\n\n triangleSphereIntersect(sphere, triangle) {\n triangle.getPlane(_plane)\n\n if (!sphere.intersectsPlane(_plane)) return false\n\n const depth = Math.abs(_plane.distanceToSphere(sphere))\n const r2 = sphere.radius * sphere.radius - depth * depth\n\n const plainPoint = _plane.projectPoint(sphere.center, _v1)\n\n if (triangle.containsPoint(sphere.center)) {\n return {\n normal: _plane.normal.clone(),\n point: plainPoint.clone(),\n depth: Math.abs(_plane.distanceToSphere(sphere)),\n }\n }\n\n const lines = [\n [triangle.a, triangle.b],\n [triangle.b, triangle.c],\n [triangle.c, triangle.a],\n ]\n\n for (let i = 0; i < lines.length; i++) {\n _line1.set(lines[i][0], lines[i][1])\n _line1.closestPointToPoint(plainPoint, true, _v2)\n\n const d = _v2.distanceToSquared(sphere.center)\n\n if (d < r2) {\n return {\n normal: sphere.center.clone().sub(_v2).normalize(),\n point: _v2.clone(),\n depth: sphere.radius - Math.sqrt(d),\n }\n }\n }\n\n return false\n }\n\n getSphereTriangles(sphere, triangles) {\n for (let i = 0; i < this.subTrees.length; i++) {\n const subTree = this.subTrees[i]\n\n if (!sphere.intersectsBox(subTree.box)) continue\n\n if (subTree.triangles.length > 0) {\n for (let j = 0; j < subTree.triangles.length; j++) {\n if (triangles.indexOf(subTree.triangles[j]) === -1) triangles.push(subTree.triangles[j])\n }\n } else {\n subTree.getSphereTriangles(sphere, triangles)\n }\n }\n }\n\n getCapsuleTriangles(capsule, triangles) {\n for (let i = 0; i < this.subTrees.length; i++) {\n const subTree = this.subTrees[i]\n\n if (!capsule.intersectsBox(subTree.box)) continue\n\n if (subTree.triangles.length > 0) {\n for (let j = 0; j < subTree.triangles.length; j++) {\n if (triangles.indexOf(subTree.triangles[j]) === -1) triangles.push(subTree.triangles[j])\n }\n } else {\n subTree.getCapsuleTriangles(capsule, triangles)\n }\n }\n }\n\n sphereIntersect(sphere) {\n _sphere.copy(sphere)\n\n const triangles = []\n let result,\n hit = false\n\n this.getSphereTriangles(sphere, triangles)\n\n for (let i = 0; i < triangles.length; i++) {\n if ((result = this.triangleSphereIntersect(_sphere, triangles[i]))) {\n hit = true\n\n _sphere.center.add(result.normal.multiplyScalar(result.depth))\n }\n }\n\n if (hit) {\n const collisionVector = _sphere.center.clone().sub(sphere.center)\n const depth = collisionVector.length()\n\n return { normal: collisionVector.normalize(), depth: depth }\n }\n\n return false\n }\n\n capsuleIntersect(capsule) {\n _capsule.copy(capsule)\n\n const triangles = []\n let result,\n hit = false\n\n this.getCapsuleTriangles(_capsule, triangles)\n\n for (let i = 0; i < triangles.length; i++) {\n if ((result = this.triangleCapsuleIntersect(_capsule, triangles[i]))) {\n hit = true\n\n _capsule.translate(result.normal.multiplyScalar(result.depth))\n }\n }\n\n if (hit) {\n const collisionVector = _capsule.getCenter(new Vector3()).sub(capsule.getCenter(_v1))\n const depth = collisionVector.length()\n\n return { normal: collisionVector.normalize(), depth: depth }\n }\n\n return false\n }\n\n rayIntersect(ray) {\n if (ray.direction.length() === 0) return\n\n const triangles = []\n let triangle,\n position,\n distance = 1e100\n\n this.getRayTriangles(ray, triangles)\n\n for (let i = 0; i < triangles.length; i++) {\n const result = ray.intersectTriangle(triangles[i].a, triangles[i].b, triangles[i].c, true, _v1)\n\n if (result) {\n const newdistance = result.sub(ray.origin).length()\n\n if (distance > newdistance) {\n position = result.clone().add(ray.origin)\n distance = newdistance\n triangle = triangles[i]\n }\n }\n }\n\n return distance < 1e100 ? { distance: distance, triangle: triangle, position: position } : false\n }\n\n fromGraphNode(group) {\n group.updateWorldMatrix(true, true)\n\n group.traverse((obj) => {\n if (obj.isMesh === true) {\n let geometry,\n isTemp = false\n\n if (obj.geometry.index !== null) {\n isTemp = true\n geometry = obj.geometry.toNonIndexed()\n } else {\n geometry = obj.geometry\n }\n\n const positionAttribute = geometry.getAttribute('position')\n\n for (let i = 0; i < positionAttribute.count; i += 3) {\n const v1 = new Vector3().fromBufferAttribute(positionAttribute, i)\n const v2 = new Vector3().fromBufferAttribute(positionAttribute, i + 1)\n const v3 = new Vector3().fromBufferAttribute(positionAttribute, i + 2)\n\n v1.applyMatrix4(obj.matrixWorld)\n v2.applyMatrix4(obj.matrixWorld)\n v3.applyMatrix4(obj.matrixWorld)\n\n this.addTriangle(new Triangle(v1, v2, v3))\n }\n\n if (isTemp) {\n geometry.dispose()\n }\n }\n })\n\n this.build()\n\n return this\n }\n}\n\nexport { Octree }\n"],"names":["Vector3","Plane","Line3","Sphere","Capsule","Box3","Triangle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Octree.cjs","sources":["../../src/math/Octree.js"],"sourcesContent":["import { Box3, Line3, Plane, Sphere, Triangle, Vector3 } from 'three'\nimport { Capsule } from '../math/Capsule'\n\nconst _v1 = /* @__PURE__ */ new Vector3()\nconst _v2 = /* @__PURE__ */ new Vector3()\nconst _plane = /* @__PURE__ */ new Plane()\nconst _line1 = /* @__PURE__ */ new Line3()\nconst _line2 = /* @__PURE__ */ new Line3()\nconst _sphere = /* @__PURE__ */ new Sphere()\nconst _capsule = /* @__PURE__ */ new Capsule()\n\nclass Octree {\n constructor(box) {\n this.triangles = []\n this.box = box\n this.subTrees = []\n }\n\n addTriangle(triangle) {\n if (!this.bounds) this.bounds = new Box3()\n\n this.bounds.min.x = Math.min(this.bounds.min.x, triangle.a.x, triangle.b.x, triangle.c.x)\n this.bounds.min.y = Math.min(this.bounds.min.y, triangle.a.y, triangle.b.y, triangle.c.y)\n this.bounds.min.z = Math.min(this.bounds.min.z, triangle.a.z, triangle.b.z, triangle.c.z)\n this.bounds.max.x = Math.max(this.bounds.max.x, triangle.a.x, triangle.b.x, triangle.c.x)\n this.bounds.max.y = Math.max(this.bounds.max.y, triangle.a.y, triangle.b.y, triangle.c.y)\n this.bounds.max.z = Math.max(this.bounds.max.z, triangle.a.z, triangle.b.z, triangle.c.z)\n\n this.triangles.push(triangle)\n\n return this\n }\n\n calcBox() {\n this.box = this.bounds.clone()\n\n // offset small amount to account for regular grid\n this.box.min.x -= 0.01\n this.box.min.y -= 0.01\n this.box.min.z -= 0.01\n\n return this\n }\n\n split(level) {\n if (!this.box) return\n\n const subTrees = []\n const halfsize = _v2.copy(this.box.max).sub(this.box.min).multiplyScalar(0.5)\n\n for (let x = 0; x < 2; x++) {\n for (let y = 0; y < 2; y++) {\n for (let z = 0; z < 2; z++) {\n const box = new Box3()\n const v = _v1.set(x, y, z)\n\n box.min.copy(this.box.min).add(v.multiply(halfsize))\n box.max.copy(box.min).add(halfsize)\n\n subTrees.push(new Octree(box))\n }\n }\n }\n\n let triangle\n\n while ((triangle = this.triangles.pop())) {\n for (let i = 0; i < subTrees.length; i++) {\n if (subTrees[i].box.intersectsTriangle(triangle)) {\n subTrees[i].triangles.push(triangle)\n }\n }\n }\n\n for (let i = 0; i < subTrees.length; i++) {\n const len = subTrees[i].triangles.length\n\n if (len > 8 && level < 16) {\n subTrees[i].split(level + 1)\n }\n\n if (len !== 0) {\n this.subTrees.push(subTrees[i])\n }\n }\n\n return this\n }\n\n build() {\n this.calcBox()\n this.split(0)\n\n return this\n }\n\n getRayTriangles(ray, triangles) {\n for (let i = 0; i < this.subTrees.length; i++) {\n const subTree = this.subTrees[i]\n if (!ray.intersectsBox(subTree.box)) continue\n\n if (subTree.triangles.length > 0) {\n for (let j = 0; j < subTree.triangles.length; j++) {\n if (triangles.indexOf(subTree.triangles[j]) === -1) triangles.push(subTree.triangles[j])\n }\n } else {\n subTree.getRayTriangles(ray, triangles)\n }\n }\n\n return triangles\n }\n\n triangleCapsuleIntersect(capsule, triangle) {\n triangle.getPlane(_plane)\n\n const d1 = _plane.distanceToPoint(capsule.start) - capsule.radius\n const d2 = _plane.distanceToPoint(capsule.end) - capsule.radius\n\n if ((d1 > 0 && d2 > 0) || (d1 < -capsule.radius && d2 < -capsule.radius)) {\n return false\n }\n\n const delta = Math.abs(d1 / (Math.abs(d1) + Math.abs(d2)))\n const intersectPoint = _v1.copy(capsule.start).lerp(capsule.end, delta)\n\n if (triangle.containsPoint(intersectPoint)) {\n return { normal: _plane.normal.clone(), point: intersectPoint.clone(), depth: Math.abs(Math.min(d1, d2)) }\n }\n\n const r2 = capsule.radius * capsule.radius\n\n const line1 = _line1.set(capsule.start, capsule.end)\n\n const lines = [\n [triangle.a, triangle.b],\n [triangle.b, triangle.c],\n [triangle.c, triangle.a],\n ]\n\n for (let i = 0; i < lines.length; i++) {\n const line2 = _line2.set(lines[i][0], lines[i][1])\n\n const [point1, point2] = capsule.lineLineMinimumPoints(line1, line2)\n\n if (point1.distanceToSquared(point2) < r2) {\n return {\n normal: point1.clone().sub(point2).normalize(),\n point: point2.clone(),\n depth: capsule.radius - point1.distanceTo(point2),\n }\n }\n }\n\n return false\n }\n\n triangleSphereIntersect(sphere, triangle) {\n triangle.getPlane(_plane)\n\n if (!sphere.intersectsPlane(_plane)) return false\n\n const depth = Math.abs(_plane.distanceToSphere(sphere))\n const r2 = sphere.radius * sphere.radius - depth * depth\n\n const plainPoint = _plane.projectPoint(sphere.center, _v1)\n\n if (triangle.containsPoint(sphere.center)) {\n return {\n normal: _plane.normal.clone(),\n point: plainPoint.clone(),\n depth: Math.abs(_plane.distanceToSphere(sphere)),\n }\n }\n\n const lines = [\n [triangle.a, triangle.b],\n [triangle.b, triangle.c],\n [triangle.c, triangle.a],\n ]\n\n for (let i = 0; i < lines.length; i++) {\n _line1.set(lines[i][0], lines[i][1])\n _line1.closestPointToPoint(plainPoint, true, _v2)\n\n const d = _v2.distanceToSquared(sphere.center)\n\n if (d < r2) {\n return {\n normal: sphere.center.clone().sub(_v2).normalize(),\n point: _v2.clone(),\n depth: sphere.radius - Math.sqrt(d),\n }\n }\n }\n\n return false\n }\n\n getSphereTriangles(sphere, triangles) {\n for (let i = 0; i < this.subTrees.length; i++) {\n const subTree = this.subTrees[i]\n\n if (!sphere.intersectsBox(subTree.box)) continue\n\n if (subTree.triangles.length > 0) {\n for (let j = 0; j < subTree.triangles.length; j++) {\n if (triangles.indexOf(subTree.triangles[j]) === -1) triangles.push(subTree.triangles[j])\n }\n } else {\n subTree.getSphereTriangles(sphere, triangles)\n }\n }\n }\n\n getCapsuleTriangles(capsule, triangles) {\n for (let i = 0; i < this.subTrees.length; i++) {\n const subTree = this.subTrees[i]\n\n if (!capsule.intersectsBox(subTree.box)) continue\n\n if (subTree.triangles.length > 0) {\n for (let j = 0; j < subTree.triangles.length; j++) {\n if (triangles.indexOf(subTree.triangles[j]) === -1) triangles.push(subTree.triangles[j])\n }\n } else {\n subTree.getCapsuleTriangles(capsule, triangles)\n }\n }\n }\n\n sphereIntersect(sphere) {\n _sphere.copy(sphere)\n\n const triangles = []\n let result,\n hit = false\n\n this.getSphereTriangles(sphere, triangles)\n\n for (let i = 0; i < triangles.length; i++) {\n if ((result = this.triangleSphereIntersect(_sphere, triangles[i]))) {\n hit = true\n\n _sphere.center.add(result.normal.multiplyScalar(result.depth))\n }\n }\n\n if (hit) {\n const collisionVector = _sphere.center.clone().sub(sphere.center)\n const depth = collisionVector.length()\n\n return { normal: collisionVector.normalize(), depth: depth }\n }\n\n return false\n }\n\n capsuleIntersect(capsule) {\n _capsule.copy(capsule)\n\n const triangles = []\n let result,\n hit = false\n\n this.getCapsuleTriangles(_capsule, triangles)\n\n for (let i = 0; i < triangles.length; i++) {\n if ((result = this.triangleCapsuleIntersect(_capsule, triangles[i]))) {\n hit = true\n\n _capsule.translate(result.normal.multiplyScalar(result.depth))\n }\n }\n\n if (hit) {\n const collisionVector = _capsule.getCenter(new Vector3()).sub(capsule.getCenter(_v1))\n const depth = collisionVector.length()\n\n return { normal: collisionVector.normalize(), depth: depth }\n }\n\n return false\n }\n\n rayIntersect(ray) {\n if (ray.direction.length() === 0) return\n\n const triangles = []\n let triangle,\n position,\n distance = 1e100\n\n this.getRayTriangles(ray, triangles)\n\n for (let i = 0; i < triangles.length; i++) {\n const result = ray.intersectTriangle(triangles[i].a, triangles[i].b, triangles[i].c, true, _v1)\n\n if (result) {\n const newdistance = result.sub(ray.origin).length()\n\n if (distance > newdistance) {\n position = result.clone().add(ray.origin)\n distance = newdistance\n triangle = triangles[i]\n }\n }\n }\n\n return distance < 1e100 ? { distance: distance, triangle: triangle, position: position } : false\n }\n\n fromGraphNode(group) {\n group.updateWorldMatrix(true, true)\n\n group.traverse((obj) => {\n if (obj.isMesh === true) {\n let geometry,\n isTemp = false\n\n if (obj.geometry.index !== null) {\n isTemp = true\n geometry = obj.geometry.toNonIndexed()\n } else {\n geometry = obj.geometry\n }\n\n const positionAttribute = geometry.getAttribute('position')\n\n for (let i = 0; i < positionAttribute.count; i += 3) {\n const v1 = new Vector3().fromBufferAttribute(positionAttribute, i)\n const v2 = new Vector3().fromBufferAttribute(positionAttribute, i + 1)\n const v3 = new Vector3().fromBufferAttribute(positionAttribute, i + 2)\n\n v1.applyMatrix4(obj.matrixWorld)\n v2.applyMatrix4(obj.matrixWorld)\n v3.applyMatrix4(obj.matrixWorld)\n\n this.addTriangle(new Triangle(v1, v2, v3))\n }\n\n if (isTemp) {\n geometry.dispose()\n }\n }\n })\n\n this.build()\n\n return this\n }\n}\n\nexport { Octree }\n"],"names":["Vector3","Plane","Line3","Sphere","Capsule","Box3","Triangle"],"mappings":"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"}
|