@plastic-software/three 0.174.0 → 0.175.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +10655 -1446
- package/build/three.core.js +9626 -1094
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +834 -157
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1429 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +53 -0
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/UniformsLib.js +1 -4
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// https://cs.nyu.edu/~perlin/noise/
|
|
2
|
-
|
|
3
1
|
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,
|
|
4
2
|
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,
|
|
5
3
|
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,
|
|
@@ -37,8 +35,22 @@ function grad( hash, x, y, z ) {
|
|
|
37
35
|
|
|
38
36
|
}
|
|
39
37
|
|
|
38
|
+
/**
|
|
39
|
+
* A utility class providing a 3D noise function.
|
|
40
|
+
*
|
|
41
|
+
* The code is based on [IMPROVED NOISE]{@link https://cs.nyu.edu/~perlin/noise/}
|
|
42
|
+
* by Ken Perlin, 2002.
|
|
43
|
+
*/
|
|
40
44
|
class ImprovedNoise {
|
|
41
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Returns a noise value for the given parameters.
|
|
48
|
+
*
|
|
49
|
+
* @param {number} x - The x coordinate.
|
|
50
|
+
* @param {number} y - The y coordinate.
|
|
51
|
+
* @param {number} z - The z coordinate.
|
|
52
|
+
* @return {number} The noise value.
|
|
53
|
+
*/
|
|
42
54
|
noise( x, y, z ) {
|
|
43
55
|
|
|
44
56
|
const floorX = Math.floor( x ), floorY = Math.floor( y ), floorZ = Math.floor( z );
|
package/examples/jsm/math/Lut.js
CHANGED
|
@@ -4,22 +4,83 @@ import {
|
|
|
4
4
|
MathUtils
|
|
5
5
|
} from 'three';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Represents a lookup table for colormaps. It is used to determine the color
|
|
9
|
+
* values from a range of data values.
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* const lut = new Lut( 'rainbow', 512 );
|
|
13
|
+
* const color = lut.getColor( 0.5 );
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
7
16
|
class Lut {
|
|
8
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new Lut.
|
|
20
|
+
*
|
|
21
|
+
* @param {('rainbow'|'cooltowarm'|'blackbody'|'grayscale')} [colormap='rainbow'] - Sets a colormap from predefined list of colormaps.
|
|
22
|
+
* @param {number} [count=32] - Sets the number of colors used to represent the data array.
|
|
23
|
+
*/
|
|
9
24
|
constructor( colormap, count = 32 ) {
|
|
10
25
|
|
|
26
|
+
/**
|
|
27
|
+
* This flag can be used for type testing.
|
|
28
|
+
*
|
|
29
|
+
* @type {boolean}
|
|
30
|
+
* @readonly
|
|
31
|
+
* @default true
|
|
32
|
+
*/
|
|
11
33
|
this.isLut = true;
|
|
12
34
|
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The lookup table for the selected color map
|
|
38
|
+
*
|
|
39
|
+
* @type {Array<Color>}
|
|
40
|
+
*/
|
|
13
41
|
this.lut = [];
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The currently selected color map.
|
|
45
|
+
*
|
|
46
|
+
* @type {Array}
|
|
47
|
+
*/
|
|
14
48
|
this.map = [];
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The number of colors of the current selected color map.
|
|
52
|
+
*
|
|
53
|
+
* @type {number}
|
|
54
|
+
* @default 32
|
|
55
|
+
*/
|
|
15
56
|
this.n = 0;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The minimum value to be represented with the lookup table.
|
|
60
|
+
*
|
|
61
|
+
* @type {number}
|
|
62
|
+
* @default 0
|
|
63
|
+
*/
|
|
16
64
|
this.minV = 0;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The maximum value to be represented with the lookup table.
|
|
68
|
+
*
|
|
69
|
+
* @type {number}
|
|
70
|
+
* @default 1
|
|
71
|
+
*/
|
|
17
72
|
this.maxV = 1;
|
|
18
73
|
|
|
19
74
|
this.setColorMap( colormap, count );
|
|
20
75
|
|
|
21
76
|
}
|
|
22
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Sets the given LUT.
|
|
80
|
+
*
|
|
81
|
+
* @param {Lut} value - The LUT to set.
|
|
82
|
+
* @return {Lut} A reference to this LUT.
|
|
83
|
+
*/
|
|
23
84
|
set( value ) {
|
|
24
85
|
|
|
25
86
|
if ( value.isLut === true ) {
|
|
@@ -32,6 +93,12 @@ class Lut {
|
|
|
32
93
|
|
|
33
94
|
}
|
|
34
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Sets the minimum value to be represented with this LUT.
|
|
98
|
+
*
|
|
99
|
+
* @param {number} min - The minimum value to be represented with the lookup table.
|
|
100
|
+
* @return {Lut} A reference to this LUT.
|
|
101
|
+
*/
|
|
35
102
|
setMin( min ) {
|
|
36
103
|
|
|
37
104
|
this.minV = min;
|
|
@@ -40,6 +107,12 @@ class Lut {
|
|
|
40
107
|
|
|
41
108
|
}
|
|
42
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Sets the maximum value to be represented with this LUT.
|
|
112
|
+
*
|
|
113
|
+
* @param {number} max - The maximum value to be represented with the lookup table.
|
|
114
|
+
* @return {Lut} A reference to this LUT.
|
|
115
|
+
*/
|
|
43
116
|
setMax( max ) {
|
|
44
117
|
|
|
45
118
|
this.maxV = max;
|
|
@@ -48,6 +121,13 @@ class Lut {
|
|
|
48
121
|
|
|
49
122
|
}
|
|
50
123
|
|
|
124
|
+
/**
|
|
125
|
+
* Configure the lookup table for the given color map and number of colors.
|
|
126
|
+
*
|
|
127
|
+
* @param {string} colormap - The name of the color map.
|
|
128
|
+
* @param {number} [count=32] - The number of colors.
|
|
129
|
+
* @return {Lut} A reference to this LUT.
|
|
130
|
+
*/
|
|
51
131
|
setColorMap( colormap, count = 32 ) {
|
|
52
132
|
|
|
53
133
|
this.map = ColorMapKeywords[ colormap ] || ColorMapKeywords.rainbow;
|
|
@@ -97,6 +177,12 @@ class Lut {
|
|
|
97
177
|
|
|
98
178
|
}
|
|
99
179
|
|
|
180
|
+
/**
|
|
181
|
+
* Copies the given lut.
|
|
182
|
+
*
|
|
183
|
+
* @param {Lut} lut - The LUT to copy.
|
|
184
|
+
* @return {Lut} A reference to this LUT.
|
|
185
|
+
*/
|
|
100
186
|
copy( lut ) {
|
|
101
187
|
|
|
102
188
|
this.lut = lut.lut;
|
|
@@ -109,6 +195,12 @@ class Lut {
|
|
|
109
195
|
|
|
110
196
|
}
|
|
111
197
|
|
|
198
|
+
/**
|
|
199
|
+
* Returns an instance of Color for the given data value.
|
|
200
|
+
*
|
|
201
|
+
* @param {number} alpha - The value to lookup.
|
|
202
|
+
* @return {Color} The color from the LUT.
|
|
203
|
+
*/
|
|
112
204
|
getColor( alpha ) {
|
|
113
205
|
|
|
114
206
|
alpha = MathUtils.clamp( alpha, this.minV, this.maxV );
|
|
@@ -121,6 +213,14 @@ class Lut {
|
|
|
121
213
|
|
|
122
214
|
}
|
|
123
215
|
|
|
216
|
+
/**
|
|
217
|
+
* Adds a color map to this Lut instance.
|
|
218
|
+
*
|
|
219
|
+
* @param {string} name - The name of the color map.
|
|
220
|
+
* @param {Array} arrayOfColors - An array of color values. Each value is an array
|
|
221
|
+
* holding a threshold and the actual color value as a hexadecimal number.
|
|
222
|
+
* @return {Lut} A reference to this LUT.
|
|
223
|
+
*/
|
|
124
224
|
addColorMap( name, arrayOfColors ) {
|
|
125
225
|
|
|
126
226
|
ColorMapKeywords[ name ] = arrayOfColors;
|
|
@@ -129,6 +229,11 @@ class Lut {
|
|
|
129
229
|
|
|
130
230
|
}
|
|
131
231
|
|
|
232
|
+
/**
|
|
233
|
+
* Creates a canvas in order to visualize the lookup table as a texture.
|
|
234
|
+
*
|
|
235
|
+
* @return {HTMLCanvasElement} The created canvas.
|
|
236
|
+
*/
|
|
132
237
|
createCanvas() {
|
|
133
238
|
|
|
134
239
|
const canvas = document.createElement( 'canvas' );
|
|
@@ -141,6 +246,12 @@ class Lut {
|
|
|
141
246
|
|
|
142
247
|
}
|
|
143
248
|
|
|
249
|
+
/**
|
|
250
|
+
* Updates the given canvas with the Lut's data.
|
|
251
|
+
*
|
|
252
|
+
* @param {HTMLCanvasElement} canvas - The canvas to update.
|
|
253
|
+
* @return {HTMLCanvasElement} The updated canvas.
|
|
254
|
+
*/
|
|
144
255
|
updateCanvas( canvas ) {
|
|
145
256
|
|
|
146
257
|
const ctx = canvas.getContext( '2d', { alpha: false } );
|
|
@@ -4,6 +4,10 @@ import {
|
|
|
4
4
|
Vector3
|
|
5
5
|
} from 'three';
|
|
6
6
|
|
|
7
|
+
const _face = new Triangle();
|
|
8
|
+
const _color = new Vector3();
|
|
9
|
+
const _uva = new Vector2(), _uvb = new Vector2(), _uvc = new Vector2();
|
|
10
|
+
|
|
7
11
|
/**
|
|
8
12
|
* Utility class for sampling weighted random points on the surface of a mesh.
|
|
9
13
|
*
|
|
@@ -11,16 +15,39 @@ import {
|
|
|
11
15
|
* random samples may be selected in O(logn) time. Memory usage is O(n).
|
|
12
16
|
*
|
|
13
17
|
* References:
|
|
14
|
-
* - http://www.joesfer.com/?p=84
|
|
15
|
-
* - https://stackoverflow.com/a/4322940/1314762
|
|
18
|
+
* - {@link http://www.joesfer.com/?p=84}
|
|
19
|
+
* - {@link https://stackoverflow.com/a/4322940/1314762}
|
|
20
|
+
*
|
|
21
|
+
* ```js
|
|
22
|
+
* const sampler = new MeshSurfaceSampler( surfaceMesh )
|
|
23
|
+
* .setWeightAttribute( 'color' )
|
|
24
|
+
* .build();
|
|
25
|
+
*
|
|
26
|
+
* const mesh = new THREE.InstancedMesh( sampleGeometry, sampleMaterial, 100 );
|
|
27
|
+
*
|
|
28
|
+
* const position = new THREE.Vector3();
|
|
29
|
+
* const matrix = new THREE.Matrix4();
|
|
30
|
+
*
|
|
31
|
+
* // Sample randomly from the surface, creating an instance of the sample geometry at each sample point.
|
|
32
|
+
*
|
|
33
|
+
* for ( let i = 0; i < 100; i ++ ) {
|
|
34
|
+
*
|
|
35
|
+
* sampler.sample( position );
|
|
36
|
+
* matrix.makeTranslation( position.x, position.y, position.z );
|
|
37
|
+
* mesh.setMatrixAt( i, matrix );
|
|
38
|
+
*
|
|
39
|
+
* }
|
|
40
|
+
*
|
|
41
|
+
* scene.add( mesh );
|
|
42
|
+
* ```
|
|
16
43
|
*/
|
|
17
|
-
|
|
18
|
-
const _face = new Triangle();
|
|
19
|
-
const _color = new Vector3();
|
|
20
|
-
const _uva = new Vector2(), _uvb = new Vector2(), _uvc = new Vector2();
|
|
21
|
-
|
|
22
44
|
class MeshSurfaceSampler {
|
|
23
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Constructs a mesh surface sampler.
|
|
48
|
+
*
|
|
49
|
+
* @param {Mesh} mesh - Surface mesh from which to sample.
|
|
50
|
+
*/
|
|
24
51
|
constructor( mesh ) {
|
|
25
52
|
|
|
26
53
|
this.geometry = mesh.geometry;
|
|
@@ -37,6 +64,16 @@ class MeshSurfaceSampler {
|
|
|
37
64
|
|
|
38
65
|
}
|
|
39
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Specifies a vertex attribute to be used as a weight when sampling from the surface.
|
|
69
|
+
* Faces with higher weights are more likely to be sampled, and those with weights of
|
|
70
|
+
* zero will not be sampled at all. For vector attributes, only .x is used in sampling.
|
|
71
|
+
*
|
|
72
|
+
* If no weight attribute is selected, sampling is randomly distributed by area.
|
|
73
|
+
*
|
|
74
|
+
* @param {string} name - The attribute name.
|
|
75
|
+
* @return {MeshSurfaceSampler} A reference to this sampler.
|
|
76
|
+
*/
|
|
40
77
|
setWeightAttribute( name ) {
|
|
41
78
|
|
|
42
79
|
this.weightAttribute = name ? this.geometry.getAttribute( name ) : null;
|
|
@@ -45,6 +82,13 @@ class MeshSurfaceSampler {
|
|
|
45
82
|
|
|
46
83
|
}
|
|
47
84
|
|
|
85
|
+
/**
|
|
86
|
+
* Processes the input geometry and prepares to return samples. Any configuration of the
|
|
87
|
+
* geometry or sampler must occur before this method is called. Time complexity is O(n)
|
|
88
|
+
* for a surface with n faces.
|
|
89
|
+
*
|
|
90
|
+
* @return {MeshSurfaceSampler} A reference to this sampler.
|
|
91
|
+
*/
|
|
48
92
|
build() {
|
|
49
93
|
|
|
50
94
|
const indexAttribute = this.indexAttribute;
|
|
@@ -107,6 +151,12 @@ class MeshSurfaceSampler {
|
|
|
107
151
|
|
|
108
152
|
}
|
|
109
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Allows to set a custom random number generator. Default is `Math.random()`.
|
|
156
|
+
*
|
|
157
|
+
* @param {Function} randomFunction - A random number generator.
|
|
158
|
+
* @return {MeshSurfaceSampler} A reference to this sampler.
|
|
159
|
+
*/
|
|
110
160
|
setRandomGenerator( randomFunction ) {
|
|
111
161
|
|
|
112
162
|
this.randomFunction = randomFunction;
|
|
@@ -114,21 +164,34 @@ class MeshSurfaceSampler {
|
|
|
114
164
|
|
|
115
165
|
}
|
|
116
166
|
|
|
167
|
+
/**
|
|
168
|
+
* Selects a random point on the surface of the input geometry, returning the
|
|
169
|
+
* position and optionally the normal vector, color and UV Coordinate at that point.
|
|
170
|
+
* Time complexity is O(log n) for a surface with n faces.
|
|
171
|
+
*
|
|
172
|
+
* @param {Vector3} targetPosition - The target object holding the sampled position.
|
|
173
|
+
* @param {Vector3} targetNormal - The target object holding the sampled normal.
|
|
174
|
+
* @param {Color} targetColor - The target object holding the sampled color.
|
|
175
|
+
* @param {Vector2} targetUV - The target object holding the sampled uv coordinates.
|
|
176
|
+
* @return {MeshSurfaceSampler} A reference to this sampler.
|
|
177
|
+
*/
|
|
117
178
|
sample( targetPosition, targetNormal, targetColor, targetUV ) {
|
|
118
179
|
|
|
119
|
-
const faceIndex = this.
|
|
120
|
-
return this.
|
|
180
|
+
const faceIndex = this._sampleFaceIndex();
|
|
181
|
+
return this._sampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV );
|
|
121
182
|
|
|
122
183
|
}
|
|
123
184
|
|
|
124
|
-
|
|
185
|
+
// private
|
|
186
|
+
|
|
187
|
+
_sampleFaceIndex() {
|
|
125
188
|
|
|
126
189
|
const cumulativeTotal = this.distribution[ this.distribution.length - 1 ];
|
|
127
|
-
return this.
|
|
190
|
+
return this._binarySearch( this.randomFunction() * cumulativeTotal );
|
|
128
191
|
|
|
129
192
|
}
|
|
130
193
|
|
|
131
|
-
|
|
194
|
+
_binarySearch( x ) {
|
|
132
195
|
|
|
133
196
|
const dist = this.distribution;
|
|
134
197
|
let start = 0;
|
|
@@ -162,7 +225,7 @@ class MeshSurfaceSampler {
|
|
|
162
225
|
|
|
163
226
|
}
|
|
164
227
|
|
|
165
|
-
|
|
228
|
+
_sampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV ) {
|
|
166
229
|
|
|
167
230
|
let u = this.randomFunction();
|
|
168
231
|
let v = this.randomFunction();
|
package/examples/jsm/math/OBB.js
CHANGED
|
@@ -37,18 +37,51 @@ const matrix = new Matrix4();
|
|
|
37
37
|
const inverse = new Matrix4();
|
|
38
38
|
const localRay = new Ray();
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Represents an oriented bounding box (OBB) in 3D space.
|
|
42
|
+
*/
|
|
42
43
|
class OBB {
|
|
43
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Constructs a new OBB.
|
|
47
|
+
*
|
|
48
|
+
* @param {Vector3} [center] - The center of the OBB.
|
|
49
|
+
* @param {Vector3} [halfSize] - Positive halfwidth extents of the OBB along each axis.
|
|
50
|
+
* @param {Matrix3} [rotation] - The rotation of the OBB.
|
|
51
|
+
*/
|
|
44
52
|
constructor( center = new Vector3(), halfSize = new Vector3(), rotation = new Matrix3() ) {
|
|
45
53
|
|
|
54
|
+
/**
|
|
55
|
+
* The center of the OBB.
|
|
56
|
+
*
|
|
57
|
+
* @type {Vector3}
|
|
58
|
+
*/
|
|
46
59
|
this.center = center;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Positive halfwidth extents of the OBB along each axis.
|
|
63
|
+
*
|
|
64
|
+
* @type {Vector3}
|
|
65
|
+
*/
|
|
47
66
|
this.halfSize = halfSize;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The rotation of the OBB.
|
|
70
|
+
*
|
|
71
|
+
* @type {Matrix3}
|
|
72
|
+
*/
|
|
48
73
|
this.rotation = rotation;
|
|
49
74
|
|
|
50
75
|
}
|
|
51
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Sets the OBBs components to the given values.
|
|
79
|
+
*
|
|
80
|
+
* @param {Vector3} [center] - The center of the OBB.
|
|
81
|
+
* @param {Vector3} [halfSize] - Positive halfwidth extents of the OBB along each axis.
|
|
82
|
+
* @param {Matrix3} [rotation] - The rotation of the OBB.
|
|
83
|
+
* @return {OBB} A reference to this OBB.
|
|
84
|
+
*/
|
|
52
85
|
set( center, halfSize, rotation ) {
|
|
53
86
|
|
|
54
87
|
this.center = center;
|
|
@@ -59,6 +92,12 @@ class OBB {
|
|
|
59
92
|
|
|
60
93
|
}
|
|
61
94
|
|
|
95
|
+
/**
|
|
96
|
+
* Copies the values of the given OBB to this instance.
|
|
97
|
+
*
|
|
98
|
+
* @param {OBB} obb - The OBB to copy.
|
|
99
|
+
* @return {OBB} A reference to this OBB.
|
|
100
|
+
*/
|
|
62
101
|
copy( obb ) {
|
|
63
102
|
|
|
64
103
|
this.center.copy( obb.center );
|
|
@@ -69,27 +108,40 @@ class OBB {
|
|
|
69
108
|
|
|
70
109
|
}
|
|
71
110
|
|
|
111
|
+
/**
|
|
112
|
+
* Returns a new OBB with copied values from this instance.
|
|
113
|
+
*
|
|
114
|
+
* @return {OBB} A clone of this instance.
|
|
115
|
+
*/
|
|
72
116
|
clone() {
|
|
73
117
|
|
|
74
118
|
return new this.constructor().copy( this );
|
|
75
119
|
|
|
76
120
|
}
|
|
77
121
|
|
|
78
|
-
|
|
122
|
+
/**
|
|
123
|
+
* Returns the size of this OBB.
|
|
124
|
+
*
|
|
125
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
126
|
+
* @return {Vector3} The size.
|
|
127
|
+
*/
|
|
128
|
+
getSize( target ) {
|
|
79
129
|
|
|
80
|
-
return
|
|
130
|
+
return target.copy( this.halfSize ).multiplyScalar( 2 );
|
|
81
131
|
|
|
82
132
|
}
|
|
83
133
|
|
|
84
134
|
/**
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
135
|
+
* Clamps the given point within the bounds of this OBB.
|
|
136
|
+
*
|
|
137
|
+
* @param {Vector3} point - The point that should be clamped within the bounds of this OBB.
|
|
138
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
139
|
+
* @returns {Vector3} - The clamped point.
|
|
140
|
+
*/
|
|
141
|
+
clampPoint( point, target ) {
|
|
142
|
+
|
|
143
|
+
// Reference: Closest Point on OBB to Point in Real-Time Collision Detection
|
|
144
|
+
// by Christer Ericson (chapter 5.1.4)
|
|
93
145
|
|
|
94
146
|
const halfSize = this.halfSize;
|
|
95
147
|
|
|
@@ -98,23 +150,29 @@ class OBB {
|
|
|
98
150
|
|
|
99
151
|
// start at the center position of the OBB
|
|
100
152
|
|
|
101
|
-
|
|
153
|
+
target.copy( this.center );
|
|
102
154
|
|
|
103
155
|
// project the target onto the OBB axes and walk towards that point
|
|
104
156
|
|
|
105
157
|
const x = MathUtils.clamp( v1.dot( xAxis ), - halfSize.x, halfSize.x );
|
|
106
|
-
|
|
158
|
+
target.add( xAxis.multiplyScalar( x ) );
|
|
107
159
|
|
|
108
160
|
const y = MathUtils.clamp( v1.dot( yAxis ), - halfSize.y, halfSize.y );
|
|
109
|
-
|
|
161
|
+
target.add( yAxis.multiplyScalar( y ) );
|
|
110
162
|
|
|
111
163
|
const z = MathUtils.clamp( v1.dot( zAxis ), - halfSize.z, halfSize.z );
|
|
112
|
-
|
|
164
|
+
target.add( zAxis.multiplyScalar( z ) );
|
|
113
165
|
|
|
114
|
-
return
|
|
166
|
+
return target;
|
|
115
167
|
|
|
116
168
|
}
|
|
117
169
|
|
|
170
|
+
/**
|
|
171
|
+
* Returns `true` if the given point lies within this OBB.
|
|
172
|
+
*
|
|
173
|
+
* @param {Vector3} point - The point to test.
|
|
174
|
+
* @returns {boolean} - Whether the given point lies within this OBB or not.
|
|
175
|
+
*/
|
|
118
176
|
containsPoint( point ) {
|
|
119
177
|
|
|
120
178
|
v1.subVectors( point, this.center );
|
|
@@ -128,12 +186,24 @@ class OBB {
|
|
|
128
186
|
|
|
129
187
|
}
|
|
130
188
|
|
|
189
|
+
/**
|
|
190
|
+
* Returns `true` if the given AABB intersects this OBB.
|
|
191
|
+
*
|
|
192
|
+
* @param {Box3} box3 - The AABB to test.
|
|
193
|
+
* @returns {boolean} - Whether the given AABB intersects this OBB or not.
|
|
194
|
+
*/
|
|
131
195
|
intersectsBox3( box3 ) {
|
|
132
196
|
|
|
133
197
|
return this.intersectsOBB( obb.fromBox3( box3 ) );
|
|
134
198
|
|
|
135
199
|
}
|
|
136
200
|
|
|
201
|
+
/**
|
|
202
|
+
* Returns `true` if the given bounding sphere intersects this OBB.
|
|
203
|
+
*
|
|
204
|
+
* @param {Sphere} sphere - The bounding sphere to test.
|
|
205
|
+
* @returns {boolean} - Whether the given bounding sphere intersects this OBB or not.
|
|
206
|
+
*/
|
|
137
207
|
intersectsSphere( sphere ) {
|
|
138
208
|
|
|
139
209
|
// find the point on the OBB closest to the sphere center
|
|
@@ -147,15 +217,17 @@ class OBB {
|
|
|
147
217
|
}
|
|
148
218
|
|
|
149
219
|
/**
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
*/
|
|
220
|
+
* Returns `true` if the given OBB intersects this OBB.
|
|
221
|
+
*
|
|
222
|
+
* @param {OBB} obb - The OBB to test.
|
|
223
|
+
* @param {number} [epsilon=Number.EPSILON] - A small value to prevent arithmetic errors.
|
|
224
|
+
* @returns {boolean} - Whether the given OBB intersects this OBB or not.
|
|
225
|
+
*/
|
|
157
226
|
intersectsOBB( obb, epsilon = Number.EPSILON ) {
|
|
158
227
|
|
|
228
|
+
// Reference: OBB-OBB Intersection in Real-Time Collision Detection
|
|
229
|
+
// by Christer Ericson (chapter 4.4.1)
|
|
230
|
+
|
|
159
231
|
// prepare data structures (the code uses the same nomenclature like the reference)
|
|
160
232
|
|
|
161
233
|
a.c = this.center;
|
|
@@ -290,14 +362,16 @@ class OBB {
|
|
|
290
362
|
}
|
|
291
363
|
|
|
292
364
|
/**
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
*/
|
|
365
|
+
* Returns `true` if the given plane intersects this OBB.
|
|
366
|
+
*
|
|
367
|
+
* @param {Plane} plane - The plane to test.
|
|
368
|
+
* @returns {boolean} Whether the given plane intersects this OBB or not.
|
|
369
|
+
*/
|
|
299
370
|
intersectsPlane( plane ) {
|
|
300
371
|
|
|
372
|
+
// Reference: Testing Box Against Plane in Real-Time Collision Detection
|
|
373
|
+
// by Christer Ericson (chapter 5.2.3)
|
|
374
|
+
|
|
301
375
|
this.rotation.extractBasis( xAxis, yAxis, zAxis );
|
|
302
376
|
|
|
303
377
|
// compute the projection interval radius of this OBB onto L(t) = this->center + t * p.normal;
|
|
@@ -317,14 +391,14 @@ class OBB {
|
|
|
317
391
|
}
|
|
318
392
|
|
|
319
393
|
/**
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
intersectRay( ray,
|
|
394
|
+
* Performs a ray/OBB intersection test and stores the intersection point
|
|
395
|
+
* in the given 3D vector.
|
|
396
|
+
*
|
|
397
|
+
* @param {Ray} ray - The ray to test.
|
|
398
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
399
|
+
* @return {?Vector3} The intersection point. If no intersection is detected, `null` is returned.
|
|
400
|
+
*/
|
|
401
|
+
intersectRay( ray, target ) {
|
|
328
402
|
|
|
329
403
|
// the idea is to perform the intersection test in the local space
|
|
330
404
|
// of the OBB.
|
|
@@ -344,11 +418,11 @@ class OBB {
|
|
|
344
418
|
|
|
345
419
|
// perform ray <-> AABB intersection test
|
|
346
420
|
|
|
347
|
-
if ( localRay.intersectBox( aabb,
|
|
421
|
+
if ( localRay.intersectBox( aabb, target ) ) {
|
|
348
422
|
|
|
349
423
|
// transform the intersection point back to world space
|
|
350
424
|
|
|
351
|
-
return
|
|
425
|
+
return target.applyMatrix4( matrix );
|
|
352
426
|
|
|
353
427
|
} else {
|
|
354
428
|
|
|
@@ -359,18 +433,23 @@ class OBB {
|
|
|
359
433
|
}
|
|
360
434
|
|
|
361
435
|
/**
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
*/
|
|
436
|
+
* Returns `true` if the given ray intersects this OBB.
|
|
437
|
+
*
|
|
438
|
+
* @param {Ray} ray - The ray to test.
|
|
439
|
+
* @returns {boolean} Whether the given ray intersects this OBB or not.
|
|
440
|
+
*/
|
|
368
441
|
intersectsRay( ray ) {
|
|
369
442
|
|
|
370
443
|
return this.intersectRay( ray, v1 ) !== null;
|
|
371
444
|
|
|
372
445
|
}
|
|
373
446
|
|
|
447
|
+
/**
|
|
448
|
+
* Defines an OBB based on the given AABB.
|
|
449
|
+
*
|
|
450
|
+
* @param {Box3} box3 - The AABB to setup the OBB from.
|
|
451
|
+
* @return {OBB} A reference of this OBB.
|
|
452
|
+
*/
|
|
374
453
|
fromBox3( box3 ) {
|
|
375
454
|
|
|
376
455
|
box3.getCenter( this.center );
|
|
@@ -383,6 +462,12 @@ class OBB {
|
|
|
383
462
|
|
|
384
463
|
}
|
|
385
464
|
|
|
465
|
+
/**
|
|
466
|
+
* Returns `true` if the given OBB is equal to this OBB.
|
|
467
|
+
*
|
|
468
|
+
* @param {OBB} obb - The OBB to test.
|
|
469
|
+
* @returns {boolean} Whether the given OBB is equal to this OBB or not.
|
|
470
|
+
*/
|
|
386
471
|
equals( obb ) {
|
|
387
472
|
|
|
388
473
|
return obb.center.equals( this.center ) &&
|
|
@@ -391,6 +476,14 @@ class OBB {
|
|
|
391
476
|
|
|
392
477
|
}
|
|
393
478
|
|
|
479
|
+
/**
|
|
480
|
+
* Applies the given transformation matrix to this OBB. This method can be
|
|
481
|
+
* used to transform the bounding volume with the world matrix of a 3D object
|
|
482
|
+
* in order to keep both entities in sync.
|
|
483
|
+
*
|
|
484
|
+
* @param {Matrix4} matrix - The matrix to apply.
|
|
485
|
+
* @return {OBB} A reference of this OBB.
|
|
486
|
+
*/
|
|
394
487
|
applyMatrix4( matrix ) {
|
|
395
488
|
|
|
396
489
|
const e = matrix.elements;
|