three-stdlib 2.35.3 → 2.35.4
Sign up to get free protection for your applications and to get access to all the features.
- 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":"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
|
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":"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"}
|
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":"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"}
|
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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"}
|