@plastic-software/three 0.174.0 → 0.175.1
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 +10744 -1476
- package/build/three.core.js +9633 -1096
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +918 -189
- 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 +1432 -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 +58 -1
- 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/ShaderChunk/alphamap_fragment.glsl.js +10 -1
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +6 -5
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLProgram.js +25 -5
- package/src/renderers/webgl/WebGLPrograms.js +21 -7
- 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
|
@@ -4,40 +4,113 @@ import { denormalize, normalize } from '../math/MathUtils.js';
|
|
|
4
4
|
|
|
5
5
|
const _vector = /*@__PURE__*/ new Vector3();
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* An alternative version of a buffer attribute with interleaved data. Interleaved
|
|
9
|
+
* attributes share a common interleaved data storage ({@link InterleavedBuffer}) and refer with
|
|
10
|
+
* different offsets into the buffer.
|
|
11
|
+
*/
|
|
7
12
|
class InterleavedBufferAttribute {
|
|
8
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new interleaved buffer attribute.
|
|
16
|
+
*
|
|
17
|
+
* @param {InterleavedBuffer} interleavedBuffer - The buffer holding the interleaved data.
|
|
18
|
+
* @param {number} itemSize - The item size.
|
|
19
|
+
* @param {number} offset - The attribute offset into the buffer.
|
|
20
|
+
* @param {boolean} [normalized=false] - Whether the data are normalized or not.
|
|
21
|
+
*/
|
|
9
22
|
constructor( interleavedBuffer, itemSize, offset, normalized = false ) {
|
|
10
23
|
|
|
24
|
+
/**
|
|
25
|
+
* This flag can be used for type testing.
|
|
26
|
+
*
|
|
27
|
+
* @type {boolean}
|
|
28
|
+
* @readonly
|
|
29
|
+
* @default true
|
|
30
|
+
*/
|
|
11
31
|
this.isInterleavedBufferAttribute = true;
|
|
12
32
|
|
|
33
|
+
/**
|
|
34
|
+
* The name of the buffer attribute.
|
|
35
|
+
*
|
|
36
|
+
* @type {string}
|
|
37
|
+
*/
|
|
13
38
|
this.name = '';
|
|
14
39
|
|
|
40
|
+
/**
|
|
41
|
+
* The buffer holding the interleaved data.
|
|
42
|
+
*
|
|
43
|
+
* @type {InterleavedBuffer}
|
|
44
|
+
*/
|
|
15
45
|
this.data = interleavedBuffer;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The item size, see {@link BufferAttribute#itemSize}.
|
|
49
|
+
*
|
|
50
|
+
* @type {number}
|
|
51
|
+
*/
|
|
16
52
|
this.itemSize = itemSize;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The attribute offset into the buffer.
|
|
56
|
+
*
|
|
57
|
+
* @type {number}
|
|
58
|
+
*/
|
|
17
59
|
this.offset = offset;
|
|
18
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Whether the data are normalized or not, see {@link BufferAttribute#normalized}
|
|
63
|
+
*
|
|
64
|
+
* @type {InterleavedBuffer}
|
|
65
|
+
*/
|
|
19
66
|
this.normalized = normalized;
|
|
20
67
|
|
|
21
68
|
}
|
|
22
69
|
|
|
70
|
+
/**
|
|
71
|
+
* The item count of this buffer attribute.
|
|
72
|
+
*
|
|
73
|
+
* @type {number}
|
|
74
|
+
* @readonly
|
|
75
|
+
*/
|
|
23
76
|
get count() {
|
|
24
77
|
|
|
25
78
|
return this.data.count;
|
|
26
79
|
|
|
27
80
|
}
|
|
28
81
|
|
|
82
|
+
/**
|
|
83
|
+
* The array holding the interleaved buffer attribute data.
|
|
84
|
+
*
|
|
85
|
+
* @type {TypedArray}
|
|
86
|
+
*/
|
|
29
87
|
get array() {
|
|
30
88
|
|
|
31
89
|
return this.data.array;
|
|
32
90
|
|
|
33
91
|
}
|
|
34
92
|
|
|
93
|
+
/**
|
|
94
|
+
* Flag to indicate that this attribute has changed and should be re-sent to
|
|
95
|
+
* the GPU. Set this to `true` when you modify the value of the array.
|
|
96
|
+
*
|
|
97
|
+
* @type {number}
|
|
98
|
+
* @default false
|
|
99
|
+
* @param {boolean} value
|
|
100
|
+
*/
|
|
35
101
|
set needsUpdate( value ) {
|
|
36
102
|
|
|
37
103
|
this.data.needsUpdate = value;
|
|
38
104
|
|
|
39
105
|
}
|
|
40
106
|
|
|
107
|
+
/**
|
|
108
|
+
* Applies the given 4x4 matrix to the given attribute. Only works with
|
|
109
|
+
* item size `3`.
|
|
110
|
+
*
|
|
111
|
+
* @param {Matrix4} m - The matrix to apply.
|
|
112
|
+
* @return {InterleavedBufferAttribute} A reference to this instance.
|
|
113
|
+
*/
|
|
41
114
|
applyMatrix4( m ) {
|
|
42
115
|
|
|
43
116
|
for ( let i = 0, l = this.data.count; i < l; i ++ ) {
|
|
@@ -54,6 +127,13 @@ class InterleavedBufferAttribute {
|
|
|
54
127
|
|
|
55
128
|
}
|
|
56
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Applies the given 3x3 normal matrix to the given attribute. Only works with
|
|
132
|
+
* item size `3`.
|
|
133
|
+
*
|
|
134
|
+
* @param {Matrix3} m - The normal matrix to apply.
|
|
135
|
+
* @return {InterleavedBufferAttribute} A reference to this instance.
|
|
136
|
+
*/
|
|
57
137
|
applyNormalMatrix( m ) {
|
|
58
138
|
|
|
59
139
|
for ( let i = 0, l = this.count; i < l; i ++ ) {
|
|
@@ -70,6 +150,13 @@ class InterleavedBufferAttribute {
|
|
|
70
150
|
|
|
71
151
|
}
|
|
72
152
|
|
|
153
|
+
/**
|
|
154
|
+
* Applies the given 4x4 matrix to the given attribute. Only works with
|
|
155
|
+
* item size `3` and with direction vectors.
|
|
156
|
+
*
|
|
157
|
+
* @param {Matrix4} m - The matrix to apply.
|
|
158
|
+
* @return {InterleavedBufferAttribute} A reference to this instance.
|
|
159
|
+
*/
|
|
73
160
|
transformDirection( m ) {
|
|
74
161
|
|
|
75
162
|
for ( let i = 0, l = this.count; i < l; i ++ ) {
|
|
@@ -86,6 +173,13 @@ class InterleavedBufferAttribute {
|
|
|
86
173
|
|
|
87
174
|
}
|
|
88
175
|
|
|
176
|
+
/**
|
|
177
|
+
* Returns the given component of the vector at the given index.
|
|
178
|
+
*
|
|
179
|
+
* @param {number} index - The index into the buffer attribute.
|
|
180
|
+
* @param {number} component - The component index.
|
|
181
|
+
* @return {number} The returned value.
|
|
182
|
+
*/
|
|
89
183
|
getComponent( index, component ) {
|
|
90
184
|
|
|
91
185
|
let value = this.array[ index * this.data.stride + this.offset + component ];
|
|
@@ -96,6 +190,14 @@ class InterleavedBufferAttribute {
|
|
|
96
190
|
|
|
97
191
|
}
|
|
98
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Sets the given value to the given component of the vector at the given index.
|
|
195
|
+
*
|
|
196
|
+
* @param {number} index - The index into the buffer attribute.
|
|
197
|
+
* @param {number} component - The component index.
|
|
198
|
+
* @param {number} value - The value to set.
|
|
199
|
+
* @return {InterleavedBufferAttribute} A reference to this instance.
|
|
200
|
+
*/
|
|
99
201
|
setComponent( index, component, value ) {
|
|
100
202
|
|
|
101
203
|
if ( this.normalized ) value = normalize( value, this.array );
|
|
@@ -106,6 +208,13 @@ class InterleavedBufferAttribute {
|
|
|
106
208
|
|
|
107
209
|
}
|
|
108
210
|
|
|
211
|
+
/**
|
|
212
|
+
* Sets the x component of the vector at the given index.
|
|
213
|
+
*
|
|
214
|
+
* @param {number} index - The index into the buffer attribute.
|
|
215
|
+
* @param {number} x - The value to set.
|
|
216
|
+
* @return {InterleavedBufferAttribute} A reference to this instance.
|
|
217
|
+
*/
|
|
109
218
|
setX( index, x ) {
|
|
110
219
|
|
|
111
220
|
if ( this.normalized ) x = normalize( x, this.array );
|
|
@@ -116,6 +225,13 @@ class InterleavedBufferAttribute {
|
|
|
116
225
|
|
|
117
226
|
}
|
|
118
227
|
|
|
228
|
+
/**
|
|
229
|
+
* Sets the y component of the vector at the given index.
|
|
230
|
+
*
|
|
231
|
+
* @param {number} index - The index into the buffer attribute.
|
|
232
|
+
* @param {number} y - The value to set.
|
|
233
|
+
* @return {InterleavedBufferAttribute} A reference to this instance.
|
|
234
|
+
*/
|
|
119
235
|
setY( index, y ) {
|
|
120
236
|
|
|
121
237
|
if ( this.normalized ) y = normalize( y, this.array );
|
|
@@ -126,6 +242,13 @@ class InterleavedBufferAttribute {
|
|
|
126
242
|
|
|
127
243
|
}
|
|
128
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Sets the z component of the vector at the given index.
|
|
247
|
+
*
|
|
248
|
+
* @param {number} index - The index into the buffer attribute.
|
|
249
|
+
* @param {number} z - The value to set.
|
|
250
|
+
* @return {InterleavedBufferAttribute} A reference to this instance.
|
|
251
|
+
*/
|
|
129
252
|
setZ( index, z ) {
|
|
130
253
|
|
|
131
254
|
if ( this.normalized ) z = normalize( z, this.array );
|
|
@@ -136,6 +259,13 @@ class InterleavedBufferAttribute {
|
|
|
136
259
|
|
|
137
260
|
}
|
|
138
261
|
|
|
262
|
+
/**
|
|
263
|
+
* Sets the w component of the vector at the given index.
|
|
264
|
+
*
|
|
265
|
+
* @param {number} index - The index into the buffer attribute.
|
|
266
|
+
* @param {number} w - The value to set.
|
|
267
|
+
* @return {InterleavedBufferAttribute} A reference to this instance.
|
|
268
|
+
*/
|
|
139
269
|
setW( index, w ) {
|
|
140
270
|
|
|
141
271
|
if ( this.normalized ) w = normalize( w, this.array );
|
|
@@ -146,6 +276,12 @@ class InterleavedBufferAttribute {
|
|
|
146
276
|
|
|
147
277
|
}
|
|
148
278
|
|
|
279
|
+
/**
|
|
280
|
+
* Returns the x component of the vector at the given index.
|
|
281
|
+
*
|
|
282
|
+
* @param {number} index - The index into the buffer attribute.
|
|
283
|
+
* @return {number} The x component.
|
|
284
|
+
*/
|
|
149
285
|
getX( index ) {
|
|
150
286
|
|
|
151
287
|
let x = this.data.array[ index * this.data.stride + this.offset ];
|
|
@@ -156,6 +292,12 @@ class InterleavedBufferAttribute {
|
|
|
156
292
|
|
|
157
293
|
}
|
|
158
294
|
|
|
295
|
+
/**
|
|
296
|
+
* Returns the y component of the vector at the given index.
|
|
297
|
+
*
|
|
298
|
+
* @param {number} index - The index into the buffer attribute.
|
|
299
|
+
* @return {number} The y component.
|
|
300
|
+
*/
|
|
159
301
|
getY( index ) {
|
|
160
302
|
|
|
161
303
|
let y = this.data.array[ index * this.data.stride + this.offset + 1 ];
|
|
@@ -166,6 +308,12 @@ class InterleavedBufferAttribute {
|
|
|
166
308
|
|
|
167
309
|
}
|
|
168
310
|
|
|
311
|
+
/**
|
|
312
|
+
* Returns the z component of the vector at the given index.
|
|
313
|
+
*
|
|
314
|
+
* @param {number} index - The index into the buffer attribute.
|
|
315
|
+
* @return {number} The z component.
|
|
316
|
+
*/
|
|
169
317
|
getZ( index ) {
|
|
170
318
|
|
|
171
319
|
let z = this.data.array[ index * this.data.stride + this.offset + 2 ];
|
|
@@ -176,6 +324,12 @@ class InterleavedBufferAttribute {
|
|
|
176
324
|
|
|
177
325
|
}
|
|
178
326
|
|
|
327
|
+
/**
|
|
328
|
+
* Returns the w component of the vector at the given index.
|
|
329
|
+
*
|
|
330
|
+
* @param {number} index - The index into the buffer attribute.
|
|
331
|
+
* @return {number} The w component.
|
|
332
|
+
*/
|
|
179
333
|
getW( index ) {
|
|
180
334
|
|
|
181
335
|
let w = this.data.array[ index * this.data.stride + this.offset + 3 ];
|
|
@@ -186,6 +340,14 @@ class InterleavedBufferAttribute {
|
|
|
186
340
|
|
|
187
341
|
}
|
|
188
342
|
|
|
343
|
+
/**
|
|
344
|
+
* Sets the x and y component of the vector at the given index.
|
|
345
|
+
*
|
|
346
|
+
* @param {number} index - The index into the buffer attribute.
|
|
347
|
+
* @param {number} x - The value for the x component to set.
|
|
348
|
+
* @param {number} y - The value for the y component to set.
|
|
349
|
+
* @return {InterleavedBufferAttribute} A reference to this instance.
|
|
350
|
+
*/
|
|
189
351
|
setXY( index, x, y ) {
|
|
190
352
|
|
|
191
353
|
index = index * this.data.stride + this.offset;
|
|
@@ -204,6 +366,15 @@ class InterleavedBufferAttribute {
|
|
|
204
366
|
|
|
205
367
|
}
|
|
206
368
|
|
|
369
|
+
/**
|
|
370
|
+
* Sets the x, y and z component of the vector at the given index.
|
|
371
|
+
*
|
|
372
|
+
* @param {number} index - The index into the buffer attribute.
|
|
373
|
+
* @param {number} x - The value for the x component to set.
|
|
374
|
+
* @param {number} y - The value for the y component to set.
|
|
375
|
+
* @param {number} z - The value for the z component to set.
|
|
376
|
+
* @return {InterleavedBufferAttribute} A reference to this instance.
|
|
377
|
+
*/
|
|
207
378
|
setXYZ( index, x, y, z ) {
|
|
208
379
|
|
|
209
380
|
index = index * this.data.stride + this.offset;
|
|
@@ -224,6 +395,16 @@ class InterleavedBufferAttribute {
|
|
|
224
395
|
|
|
225
396
|
}
|
|
226
397
|
|
|
398
|
+
/**
|
|
399
|
+
* Sets the x, y, z and w component of the vector at the given index.
|
|
400
|
+
*
|
|
401
|
+
* @param {number} index - The index into the buffer attribute.
|
|
402
|
+
* @param {number} x - The value for the x component to set.
|
|
403
|
+
* @param {number} y - The value for the y component to set.
|
|
404
|
+
* @param {number} z - The value for the z component to set.
|
|
405
|
+
* @param {number} w - The value for the w component to set.
|
|
406
|
+
* @return {InterleavedBufferAttribute} A reference to this instance.
|
|
407
|
+
*/
|
|
227
408
|
setXYZW( index, x, y, z, w ) {
|
|
228
409
|
|
|
229
410
|
index = index * this.data.stride + this.offset;
|
|
@@ -246,6 +427,14 @@ class InterleavedBufferAttribute {
|
|
|
246
427
|
|
|
247
428
|
}
|
|
248
429
|
|
|
430
|
+
/**
|
|
431
|
+
* Returns a new buffer attribute with copied values from this instance.
|
|
432
|
+
*
|
|
433
|
+
* If no parameter is provided, cloning an interleaved buffer attribute will de-interleave buffer data.
|
|
434
|
+
*
|
|
435
|
+
* @param {Object} [data] - An object with interleaved buffers that allows to retain the interleaved property.
|
|
436
|
+
* @return {BufferAttribute|InterleavedBufferAttribute} A clone of this instance.
|
|
437
|
+
*/
|
|
249
438
|
clone( data ) {
|
|
250
439
|
|
|
251
440
|
if ( data === undefined ) {
|
|
@@ -288,6 +477,14 @@ class InterleavedBufferAttribute {
|
|
|
288
477
|
|
|
289
478
|
}
|
|
290
479
|
|
|
480
|
+
/**
|
|
481
|
+
* Serializes the buffer attribute into JSON.
|
|
482
|
+
*
|
|
483
|
+
* If no parameter is provided, cloning an interleaved buffer attribute will de-interleave buffer data.
|
|
484
|
+
*
|
|
485
|
+
* @param {Object} [data] - An optional value holding meta information about the serialization.
|
|
486
|
+
* @return {Object} A JSON object representing the serialized buffer attribute.
|
|
487
|
+
*/
|
|
291
488
|
toJSON( data ) {
|
|
292
489
|
|
|
293
490
|
if ( data === undefined ) {
|
package/src/core/Layers.js
CHANGED
|
@@ -1,56 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A layers object assigns an 3D object to 1 or more of 32
|
|
3
|
+
* layers numbered `0` to `31` - internally the layers are stored as a
|
|
4
|
+
* bit mask], and by default all 3D objects are a member of layer `0`.
|
|
5
|
+
*
|
|
6
|
+
* This can be used to control visibility - an object must share a layer with
|
|
7
|
+
* a camera to be visible when that camera's view is
|
|
8
|
+
* rendered.
|
|
9
|
+
*
|
|
10
|
+
* All classes that inherit from {@link Object3D} have an `layers` property which
|
|
11
|
+
* is an instance of this class.
|
|
12
|
+
*/
|
|
1
13
|
class Layers {
|
|
2
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Constructs a new layers instance, with membership
|
|
17
|
+
* initially set to layer `0`.
|
|
18
|
+
*/
|
|
3
19
|
constructor() {
|
|
4
20
|
|
|
21
|
+
/**
|
|
22
|
+
* A bit mask storing which of the 32 layers this layers object is currently
|
|
23
|
+
* a member of.
|
|
24
|
+
*
|
|
25
|
+
* @type {number}
|
|
26
|
+
*/
|
|
5
27
|
this.mask = 1 | 0;
|
|
6
28
|
|
|
7
29
|
}
|
|
8
30
|
|
|
9
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Sets membership to the given layer, and remove membership all other layers.
|
|
33
|
+
*
|
|
34
|
+
* @param {number} layer - The layer to set.
|
|
35
|
+
*/
|
|
36
|
+
set( layer ) {
|
|
10
37
|
|
|
11
|
-
this.mask = ( 1 <<
|
|
38
|
+
this.mask = ( 1 << layer | 0 ) >>> 0;
|
|
12
39
|
|
|
13
40
|
}
|
|
14
41
|
|
|
15
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Adds membership of the given layer.
|
|
44
|
+
*
|
|
45
|
+
* @param {number} layer - The layer to enable.
|
|
46
|
+
*/
|
|
47
|
+
enable( layer ) {
|
|
16
48
|
|
|
17
|
-
this.mask |= 1 <<
|
|
49
|
+
this.mask |= 1 << layer | 0;
|
|
18
50
|
|
|
19
51
|
}
|
|
20
52
|
|
|
53
|
+
/**
|
|
54
|
+
* Adds membership to all layers.
|
|
55
|
+
*/
|
|
21
56
|
enableAll() {
|
|
22
57
|
|
|
23
58
|
this.mask = 0xffffffff | 0;
|
|
24
59
|
|
|
25
60
|
}
|
|
26
61
|
|
|
27
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Toggles the membership of the given layer.
|
|
64
|
+
*
|
|
65
|
+
* @param {number} layer - The layer to toggle.
|
|
66
|
+
*/
|
|
67
|
+
toggle( layer ) {
|
|
28
68
|
|
|
29
|
-
this.mask ^= 1 <<
|
|
69
|
+
this.mask ^= 1 << layer | 0;
|
|
30
70
|
|
|
31
71
|
}
|
|
32
72
|
|
|
33
|
-
|
|
73
|
+
/**
|
|
74
|
+
* Removes membership of the given layer.
|
|
75
|
+
*
|
|
76
|
+
* @param {number} layer - The layer to enable.
|
|
77
|
+
*/
|
|
78
|
+
disable( layer ) {
|
|
34
79
|
|
|
35
|
-
this.mask &= ~ ( 1 <<
|
|
80
|
+
this.mask &= ~ ( 1 << layer | 0 );
|
|
36
81
|
|
|
37
82
|
}
|
|
38
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Removes the membership from all layers.
|
|
86
|
+
*/
|
|
39
87
|
disableAll() {
|
|
40
88
|
|
|
41
89
|
this.mask = 0;
|
|
42
90
|
|
|
43
91
|
}
|
|
44
92
|
|
|
93
|
+
/**
|
|
94
|
+
* Returns `true` if this and the given layers object have at least one
|
|
95
|
+
* layer in common.
|
|
96
|
+
*
|
|
97
|
+
* @param {Layers} layers - The layers to test.
|
|
98
|
+
* @return {boolean } Whether this and the given layers object have at least one layer in common or not.
|
|
99
|
+
*/
|
|
45
100
|
test( layers ) {
|
|
46
101
|
|
|
47
102
|
return ( this.mask & layers.mask ) !== 0;
|
|
48
103
|
|
|
49
104
|
}
|
|
50
105
|
|
|
51
|
-
|
|
106
|
+
/**
|
|
107
|
+
* Returns `true` if the given layer is enabled.
|
|
108
|
+
*
|
|
109
|
+
* @param {number} layer - The layer to test.
|
|
110
|
+
* @return {boolean } Whether the given layer is enabled or not.
|
|
111
|
+
*/
|
|
112
|
+
isEnabled( layer ) {
|
|
52
113
|
|
|
53
|
-
return ( this.mask & ( 1 <<
|
|
114
|
+
return ( this.mask & ( 1 << layer | 0 ) ) !== 0;
|
|
54
115
|
|
|
55
116
|
}
|
|
56
117
|
|
package/src/core/Object3D.js
CHANGED
|
@@ -330,6 +330,29 @@ class Object3D extends EventDispatcher {
|
|
|
330
330
|
*/
|
|
331
331
|
this.animations = [];
|
|
332
332
|
|
|
333
|
+
/**
|
|
334
|
+
* Custom depth material to be used when rendering to the depth map. Can only be used
|
|
335
|
+
* in context of meshes. When shadow-casting with a {@link DirectionalLight} or {@link SpotLight},
|
|
336
|
+
* if you are modifying vertex positions in the vertex shader you must specify a custom depth
|
|
337
|
+
* material for proper shadows.
|
|
338
|
+
*
|
|
339
|
+
* Only relevant in context of {@link WebGLRenderer}.
|
|
340
|
+
*
|
|
341
|
+
* @type {(Material|undefined)}
|
|
342
|
+
* @default undefined
|
|
343
|
+
*/
|
|
344
|
+
this.customDepthMaterial = undefined;
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Same as {@link Object3D#customDepthMaterial}, but used with {@link PointLight}.
|
|
348
|
+
*
|
|
349
|
+
* Only relevant in context of {@link WebGLRenderer}.
|
|
350
|
+
*
|
|
351
|
+
* @type {(Material|undefined)}
|
|
352
|
+
* @default undefined
|
|
353
|
+
*/
|
|
354
|
+
this.customDistanceMaterial = undefined;
|
|
355
|
+
|
|
333
356
|
/**
|
|
334
357
|
* An object that can be used to store custom data about the 3D object. It
|
|
335
358
|
* should not hold references to functions as these will not be cloned.
|
package/src/core/Raycaster.js
CHANGED
|
@@ -4,18 +4,86 @@ import { Layers } from './Layers.js';
|
|
|
4
4
|
|
|
5
5
|
const _matrix = /*@__PURE__*/ new Matrix4();
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* This class is designed to assist with raycasting. Raycasting is used for
|
|
9
|
+
* mouse picking (working out what objects in the 3d space the mouse is over)
|
|
10
|
+
* amongst other things.
|
|
11
|
+
*/
|
|
7
12
|
class Raycaster {
|
|
8
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new raycaster.
|
|
16
|
+
*
|
|
17
|
+
* @param {Vector3} origin - The origin vector where the ray casts from.
|
|
18
|
+
* @param {Vector3} direction - The (normalized) direction vector that gives direction to the ray.
|
|
19
|
+
* @param {number} [near=0] - All results returned are further away than near. Near can't be negative.
|
|
20
|
+
* @param {number} [far=Infinity] - All results returned are closer than far. Far can't be lower than near.
|
|
21
|
+
*/
|
|
9
22
|
constructor( origin, direction, near = 0, far = Infinity ) {
|
|
10
23
|
|
|
24
|
+
/**
|
|
25
|
+
* The ray used for raycasting.
|
|
26
|
+
*
|
|
27
|
+
* @type {Ray}
|
|
28
|
+
*/
|
|
11
29
|
this.ray = new Ray( origin, direction );
|
|
12
|
-
// direction is assumed to be normalized (for accurate distance calculations)
|
|
13
30
|
|
|
31
|
+
/**
|
|
32
|
+
* All results returned are further away than near. Near can't be negative.
|
|
33
|
+
*
|
|
34
|
+
* @type {number}
|
|
35
|
+
* @default 0
|
|
36
|
+
*/
|
|
14
37
|
this.near = near;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* All results returned are further away than near. Near can't be negative.
|
|
41
|
+
*
|
|
42
|
+
* @type {number}
|
|
43
|
+
* @default Infinity
|
|
44
|
+
*/
|
|
15
45
|
this.far = far;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The camera to use when raycasting against view-dependent objects such as
|
|
49
|
+
* billboarded objects like sprites. This field can be set manually or
|
|
50
|
+
* is set when calling `setFromCamera()`.
|
|
51
|
+
*
|
|
52
|
+
* @type {?Camera}
|
|
53
|
+
* @default null
|
|
54
|
+
*/
|
|
16
55
|
this.camera = null;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Allows to selectively ignore 3D objects when performing intersection tests.
|
|
59
|
+
* The following code example ensures that only 3D objects on layer `1` will be
|
|
60
|
+
* honored by raycaster.
|
|
61
|
+
* ```js
|
|
62
|
+
* raycaster.layers.set( 1 );
|
|
63
|
+
* object.layers.enable( 1 );
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* @type {Layers}
|
|
67
|
+
*/
|
|
17
68
|
this.layers = new Layers();
|
|
18
69
|
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* A parameter object that configures the raycasting. It has the structure:
|
|
73
|
+
*
|
|
74
|
+
* ```
|
|
75
|
+
* {
|
|
76
|
+
* Mesh: {},
|
|
77
|
+
* Line: { threshold: 1 },
|
|
78
|
+
* LOD: {},
|
|
79
|
+
* Points: { threshold: 1 },
|
|
80
|
+
* Sprite: {}
|
|
81
|
+
* }
|
|
82
|
+
* ```
|
|
83
|
+
* Where `threshold` is the precision of the raycaster when intersecting objects, in world units.
|
|
84
|
+
*
|
|
85
|
+
* @type {Object}
|
|
86
|
+
*/
|
|
19
87
|
this.params = {
|
|
20
88
|
Mesh: {},
|
|
21
89
|
Line: { threshold: 1 },
|
|
@@ -26,6 +94,12 @@ class Raycaster {
|
|
|
26
94
|
|
|
27
95
|
}
|
|
28
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Updates the ray with a new origin and direction by copying the values from the arguments.
|
|
99
|
+
*
|
|
100
|
+
* @param {Vector3} origin - The origin vector where the ray casts from.
|
|
101
|
+
* @param {Vector3} direction - The (normalized) direction vector that gives direction to the ray.
|
|
102
|
+
*/
|
|
29
103
|
set( origin, direction ) {
|
|
30
104
|
|
|
31
105
|
// direction is assumed to be normalized (for accurate distance calculations)
|
|
@@ -34,6 +108,13 @@ class Raycaster {
|
|
|
34
108
|
|
|
35
109
|
}
|
|
36
110
|
|
|
111
|
+
/**
|
|
112
|
+
* Uses the given coordinates and camera to compute a new origin and direction for the internal ray.
|
|
113
|
+
*
|
|
114
|
+
* @param {Vector2} coords - 2D coordinates of the mouse, in normalized device coordinates (NDC).
|
|
115
|
+
* X and Y components should be between `-1` and `1`.
|
|
116
|
+
* @param {Camera} camera - The camera from which the ray should originate.
|
|
117
|
+
*/
|
|
37
118
|
setFromCamera( coords, camera ) {
|
|
38
119
|
|
|
39
120
|
if ( camera.isPerspectiveCamera ) {
|
|
@@ -56,6 +137,12 @@ class Raycaster {
|
|
|
56
137
|
|
|
57
138
|
}
|
|
58
139
|
|
|
140
|
+
/**
|
|
141
|
+
* Uses the given WebXR controller to compute a new origin and direction for the internal ray.
|
|
142
|
+
*
|
|
143
|
+
* @param {WebXRController} controller - The controller to copy the position and direction from.
|
|
144
|
+
* @return {Raycaster} A reference to this raycaster.
|
|
145
|
+
*/
|
|
59
146
|
setFromXRController( controller ) {
|
|
60
147
|
|
|
61
148
|
_matrix.identity().extractRotation( controller.matrixWorld );
|
|
@@ -67,6 +154,42 @@ class Raycaster {
|
|
|
67
154
|
|
|
68
155
|
}
|
|
69
156
|
|
|
157
|
+
/**
|
|
158
|
+
* The intersection point of a raycaster intersection test.
|
|
159
|
+
* @typedef {Object} Raycaster~Intersection
|
|
160
|
+
* @property {number} distance - The distance from the ray's origin to the intersection point.
|
|
161
|
+
* @property {number} distanceToRay - Some 3D objects e.g. {@link Points} provide the distance of the
|
|
162
|
+
* intersection to the nearest point on the ray. For other objects it will be `undefined`.
|
|
163
|
+
* @property {Vector3} point - The intersection point, in world coordinates.
|
|
164
|
+
* @property {Object} face - The face that has been intersected.
|
|
165
|
+
* @property {number} faceIndex - The face index.
|
|
166
|
+
* @property {Object3D} object - The 3D object that has been intersected.
|
|
167
|
+
* @property {Vector2} uv - U,V coordinates at point of intersection.
|
|
168
|
+
* @property {Vector2} uv1 - Second set of U,V coordinates at point of intersection.
|
|
169
|
+
* @property {Vector3} uv1 - Interpolated normal vector at point of intersection.
|
|
170
|
+
* @property {number} instanceId - The index number of the instance where the ray
|
|
171
|
+
* intersects the {@link InstancedMesh}.
|
|
172
|
+
*/
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Checks all intersection between the ray and the object with or without the
|
|
176
|
+
* descendants. Intersections are returned sorted by distance, closest first.
|
|
177
|
+
*
|
|
178
|
+
* `Raycaster` delegates to the `raycast()` method of the passed 3D object, when
|
|
179
|
+
* evaluating whether the ray intersects the object or not. This allows meshes to respond
|
|
180
|
+
* differently to ray casting than lines or points.
|
|
181
|
+
*
|
|
182
|
+
* Note that for meshes, faces must be pointed towards the origin of the ray in order
|
|
183
|
+
* to be detected; intersections of the ray passing through the back of a face will not
|
|
184
|
+
* be detected. To raycast against both faces of an object, you'll want to set {@link Material#side}
|
|
185
|
+
* to `THREE.DoubleSide`.
|
|
186
|
+
*
|
|
187
|
+
* @param {Object3D} object - The 3D object to check for intersection with the ray.
|
|
188
|
+
* @param {boolean} [recursive=true] - If set to `true`, it also checks all descendants.
|
|
189
|
+
* Otherwise it only checks intersection with the object.
|
|
190
|
+
* @param {Array<Raycaster~Intersection>} [intersects=[]] The target array that holds the result of the method.
|
|
191
|
+
* @return {Array<Raycaster~Intersection>} An array holding the intersection points.
|
|
192
|
+
*/
|
|
70
193
|
intersectObject( object, recursive = true, intersects = [] ) {
|
|
71
194
|
|
|
72
195
|
intersect( object, this, intersects, recursive );
|
|
@@ -77,6 +200,16 @@ class Raycaster {
|
|
|
77
200
|
|
|
78
201
|
}
|
|
79
202
|
|
|
203
|
+
/**
|
|
204
|
+
* Checks all intersection between the ray and the objects with or without
|
|
205
|
+
* the descendants. Intersections are returned sorted by distance, closest first.
|
|
206
|
+
*
|
|
207
|
+
* @param {Array<Object3D>} objects - The 3D objects to check for intersection with the ray.
|
|
208
|
+
* @param {boolean} [recursive=true] - If set to `true`, it also checks all descendants.
|
|
209
|
+
* Otherwise it only checks intersection with the object.
|
|
210
|
+
* @param {Array<Raycaster~Intersection>} [intersects=[]] The target array that holds the result of the method.
|
|
211
|
+
* @return {Array<Raycaster~Intersection>} An array holding the intersection points.
|
|
212
|
+
*/
|
|
80
213
|
intersectObjects( objects, recursive = true, intersects = [] ) {
|
|
81
214
|
|
|
82
215
|
for ( let i = 0, l = objects.length; i < l; i ++ ) {
|