@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
|
@@ -7,11 +7,7 @@ import {
|
|
|
7
7
|
const _pointer = new Vector2();
|
|
8
8
|
const _event = { type: '', data: _pointer };
|
|
9
9
|
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* The XR events that are mapped to "standard" pointer events
|
|
14
|
-
*/
|
|
10
|
+
// The XR events that are mapped to "standard" pointer events.
|
|
15
11
|
const _events = {
|
|
16
12
|
'move': 'mousemove',
|
|
17
13
|
'select': 'click',
|
|
@@ -21,17 +17,58 @@ const _events = {
|
|
|
21
17
|
|
|
22
18
|
const _raycaster = new Raycaster();
|
|
23
19
|
|
|
20
|
+
/**
|
|
21
|
+
* This class can be used to group 3D objects in an interactive group.
|
|
22
|
+
* The group itself can listen to Pointer, Mouse or XR controller events to
|
|
23
|
+
* detect selections of descendant 3D objects. If a 3D object is selected,
|
|
24
|
+
* the respective event is going to dispatched to it.
|
|
25
|
+
*
|
|
26
|
+
* ```js
|
|
27
|
+
* const group = new InteractiveGroup();
|
|
28
|
+
* group.listenToPointerEvents( renderer, camera );
|
|
29
|
+
* group.listenToXRControllerEvents( controller1 );
|
|
30
|
+
* group.listenToXRControllerEvents( controller2 );
|
|
31
|
+
* scene.add( group );
|
|
32
|
+
*
|
|
33
|
+
* // now add objects that should be interactive
|
|
34
|
+
* group.add( mesh1, mesh2, mesh3 );
|
|
35
|
+
* ```
|
|
36
|
+
* @augments Group
|
|
37
|
+
*/
|
|
24
38
|
class InteractiveGroup extends Group {
|
|
25
39
|
|
|
26
40
|
constructor() {
|
|
27
41
|
|
|
28
42
|
super();
|
|
29
43
|
|
|
44
|
+
/**
|
|
45
|
+
* The internal raycaster.
|
|
46
|
+
*
|
|
47
|
+
* @type {Raycaster}
|
|
48
|
+
*/
|
|
30
49
|
this.raycaster = new Raycaster();
|
|
31
50
|
|
|
51
|
+
/**
|
|
52
|
+
* The internal raycaster.
|
|
53
|
+
*
|
|
54
|
+
* @type {?HTMLDOMElement}
|
|
55
|
+
* @default null
|
|
56
|
+
*/
|
|
32
57
|
this.element = null;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The camera used for raycasting.
|
|
61
|
+
*
|
|
62
|
+
* @type {?Camera}
|
|
63
|
+
* @default null
|
|
64
|
+
*/
|
|
33
65
|
this.camera = null;
|
|
34
66
|
|
|
67
|
+
/**
|
|
68
|
+
* An array of XR controllers.
|
|
69
|
+
*
|
|
70
|
+
* @type {Array<Group>}
|
|
71
|
+
*/
|
|
35
72
|
this.controllers = [];
|
|
36
73
|
|
|
37
74
|
this._onPointerEvent = this.onPointerEvent.bind( this );
|
|
@@ -92,6 +129,14 @@ class InteractiveGroup extends Group {
|
|
|
92
129
|
|
|
93
130
|
}
|
|
94
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Calling this method makes sure the interactive group listens to Pointer and Mouse events.
|
|
134
|
+
* The target is the `domElement` of the given renderer. The camera is required for the internal
|
|
135
|
+
* raycasting so 3D objects can be detected based on the events.
|
|
136
|
+
*
|
|
137
|
+
* @param {(WebGPURenderer|WebGLRenderer)} renderer - The renderer.
|
|
138
|
+
* @param {Camera} camera - The camera.
|
|
139
|
+
*/
|
|
95
140
|
listenToPointerEvents( renderer, camera ) {
|
|
96
141
|
|
|
97
142
|
this.camera = camera;
|
|
@@ -107,6 +152,9 @@ class InteractiveGroup extends Group {
|
|
|
107
152
|
|
|
108
153
|
}
|
|
109
154
|
|
|
155
|
+
/**
|
|
156
|
+
* Disconnects this interactive group from all Pointer and Mouse Events.
|
|
157
|
+
*/
|
|
110
158
|
disconnectionPointerEvents() {
|
|
111
159
|
|
|
112
160
|
if ( this.element !== null ) {
|
|
@@ -123,6 +171,12 @@ class InteractiveGroup extends Group {
|
|
|
123
171
|
|
|
124
172
|
}
|
|
125
173
|
|
|
174
|
+
/**
|
|
175
|
+
* Calling this method makes sure the interactive group listens to events of
|
|
176
|
+
* the given XR controller.
|
|
177
|
+
*
|
|
178
|
+
* @param {Group} controller - The XR controller.
|
|
179
|
+
*/
|
|
126
180
|
listenToXRControllerEvents( controller ) {
|
|
127
181
|
|
|
128
182
|
this.controllers.push( controller );
|
|
@@ -133,6 +187,9 @@ class InteractiveGroup extends Group {
|
|
|
133
187
|
|
|
134
188
|
}
|
|
135
189
|
|
|
190
|
+
/**
|
|
191
|
+
* Disconnects this interactive group from all XR controllers.
|
|
192
|
+
*/
|
|
136
193
|
disconnectXrControllerEvents() {
|
|
137
194
|
|
|
138
195
|
for ( const controller of this.controllers ) {
|
|
@@ -146,6 +203,9 @@ class InteractiveGroup extends Group {
|
|
|
146
203
|
|
|
147
204
|
}
|
|
148
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Disconnects this interactive group from the DOM and all XR controllers.
|
|
208
|
+
*/
|
|
149
209
|
disconnect() {
|
|
150
210
|
|
|
151
211
|
this.disconnectionPointerEvents();
|
|
@@ -5,10 +5,6 @@ import {
|
|
|
5
5
|
Quaternion,
|
|
6
6
|
} from 'three';
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
* This is a class to check whether objects are in a selection area in 3D space
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
8
|
const _frustum = new Frustum();
|
|
13
9
|
const _center = new Vector3();
|
|
14
10
|
|
|
@@ -33,34 +29,103 @@ const _matrix = new Matrix4();
|
|
|
33
29
|
const _quaternion = new Quaternion();
|
|
34
30
|
const _scale = new Vector3();
|
|
35
31
|
|
|
32
|
+
/**
|
|
33
|
+
* This class can be used to select 3D objects in a scene with a selection box.
|
|
34
|
+
* It is recommended to visualize the selected area with the help of {@link SelectionHelper}.
|
|
35
|
+
*
|
|
36
|
+
* ```js
|
|
37
|
+
* const selectionBox = new SelectionBox( camera, scene );
|
|
38
|
+
* const selectedObjects = selectionBox.select( startPoint, endPoint );
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
36
41
|
class SelectionBox {
|
|
37
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Constructs a new selection box.
|
|
45
|
+
*
|
|
46
|
+
* @param {Camera} camera - The camera the scene is rendered with.
|
|
47
|
+
* @param {Scene} scene - The scene.
|
|
48
|
+
* @param {number} [deep=Number.MAX_VALUE] - How deep the selection frustum of perspective cameras should extend.
|
|
49
|
+
*/
|
|
38
50
|
constructor( camera, scene, deep = Number.MAX_VALUE ) {
|
|
39
51
|
|
|
52
|
+
/**
|
|
53
|
+
* The camera the scene is rendered with.
|
|
54
|
+
*
|
|
55
|
+
* @type {Camera}
|
|
56
|
+
*/
|
|
40
57
|
this.camera = camera;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The camera the scene is rendered with.
|
|
61
|
+
*
|
|
62
|
+
* @type {Scene}
|
|
63
|
+
*/
|
|
41
64
|
this.scene = scene;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The start point of the selection.
|
|
68
|
+
*
|
|
69
|
+
* @type {Vector3}
|
|
70
|
+
*/
|
|
42
71
|
this.startPoint = new Vector3();
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* The end point of the selection.
|
|
75
|
+
*
|
|
76
|
+
* @type {Vector3}
|
|
77
|
+
*/
|
|
43
78
|
this.endPoint = new Vector3();
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The selected 3D objects.
|
|
82
|
+
*
|
|
83
|
+
* @type {Array<Object3D>}
|
|
84
|
+
*/
|
|
44
85
|
this.collection = [];
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* The selected instance IDs of instanced meshes.
|
|
89
|
+
*
|
|
90
|
+
* @type {Object}
|
|
91
|
+
*/
|
|
45
92
|
this.instances = {};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* How deep the selection frustum of perspective cameras should extend.
|
|
96
|
+
*
|
|
97
|
+
* @type {number}
|
|
98
|
+
* @default Number.MAX_VALUE
|
|
99
|
+
*/
|
|
46
100
|
this.deep = deep;
|
|
47
101
|
|
|
48
102
|
}
|
|
49
103
|
|
|
104
|
+
/**
|
|
105
|
+
* This method selects 3D objects in the scene based on the given start
|
|
106
|
+
* and end point. If no parameters are provided, the method uses the start
|
|
107
|
+
* and end values of the respective members.
|
|
108
|
+
*
|
|
109
|
+
* @param {Vector3} [startPoint] - The start point.
|
|
110
|
+
* @param {Vector3} [endPoint] - The end point.
|
|
111
|
+
* @return {Array<Object3D>} The selected 3D objects.
|
|
112
|
+
*/
|
|
50
113
|
select( startPoint, endPoint ) {
|
|
51
114
|
|
|
52
115
|
this.startPoint = startPoint || this.startPoint;
|
|
53
116
|
this.endPoint = endPoint || this.endPoint;
|
|
54
117
|
this.collection = [];
|
|
55
118
|
|
|
56
|
-
this.
|
|
57
|
-
this.
|
|
119
|
+
this._updateFrustum( this.startPoint, this.endPoint );
|
|
120
|
+
this._searchChildInFrustum( _frustum, this.scene );
|
|
58
121
|
|
|
59
122
|
return this.collection;
|
|
60
123
|
|
|
61
124
|
}
|
|
62
125
|
|
|
63
|
-
|
|
126
|
+
// private
|
|
127
|
+
|
|
128
|
+
_updateFrustum( startPoint, endPoint ) {
|
|
64
129
|
|
|
65
130
|
startPoint = startPoint || this.startPoint;
|
|
66
131
|
endPoint = endPoint || this.endPoint;
|
|
@@ -170,7 +235,7 @@ class SelectionBox {
|
|
|
170
235
|
|
|
171
236
|
}
|
|
172
237
|
|
|
173
|
-
|
|
238
|
+
_searchChildInFrustum( frustum, object ) {
|
|
174
239
|
|
|
175
240
|
if ( object.isMesh || object.isLine || object.isPoints ) {
|
|
176
241
|
|
|
@@ -214,7 +279,7 @@ class SelectionBox {
|
|
|
214
279
|
|
|
215
280
|
for ( let x = 0; x < object.children.length; x ++ ) {
|
|
216
281
|
|
|
217
|
-
this.
|
|
282
|
+
this._searchChildInFrustum( frustum, object.children[ x ] );
|
|
218
283
|
|
|
219
284
|
}
|
|
220
285
|
|
|
@@ -1,69 +1,111 @@
|
|
|
1
1
|
import { Vector2 } from 'three';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* A helper for {@link SelectionBox}.
|
|
5
|
+
*
|
|
6
|
+
* It visualizes the current selection box with a `div` container element.
|
|
7
|
+
*/
|
|
3
8
|
class SelectionHelper {
|
|
4
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Constructs a new selection helper.
|
|
12
|
+
*
|
|
13
|
+
* @param {(WebGPURenderer|WebGLRenderer)} renderer - The renderer.
|
|
14
|
+
* @param {string} cssClassName - The CSS class name of the `div`.
|
|
15
|
+
*/
|
|
5
16
|
constructor( renderer, cssClassName ) {
|
|
6
17
|
|
|
18
|
+
/**
|
|
19
|
+
* The visualization of the selection box.
|
|
20
|
+
*
|
|
21
|
+
* @type {HTMLDivElement}
|
|
22
|
+
*/
|
|
7
23
|
this.element = document.createElement( 'div' );
|
|
8
24
|
this.element.classList.add( cssClassName );
|
|
9
25
|
this.element.style.pointerEvents = 'none';
|
|
10
26
|
|
|
27
|
+
/**
|
|
28
|
+
* A reference to the renderer.
|
|
29
|
+
*
|
|
30
|
+
* @type {(WebGPURenderer|WebGLRenderer)}
|
|
31
|
+
*/
|
|
11
32
|
this.renderer = renderer;
|
|
12
33
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Whether the mouse or pointer is pressed down.
|
|
36
|
+
*
|
|
37
|
+
* @type {boolean}
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
17
40
|
this.isDown = false;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Whether helper is enabled or not.
|
|
44
|
+
*
|
|
45
|
+
* @type {boolean}
|
|
46
|
+
* @default true
|
|
47
|
+
*/
|
|
18
48
|
this.enabled = true;
|
|
19
49
|
|
|
20
|
-
|
|
50
|
+
// private
|
|
51
|
+
|
|
52
|
+
this._startPoint = new Vector2();
|
|
53
|
+
this._pointTopLeft = new Vector2();
|
|
54
|
+
this._pointBottomRight = new Vector2();
|
|
55
|
+
|
|
56
|
+
this._onPointerDown = function ( event ) {
|
|
21
57
|
|
|
22
58
|
if ( this.enabled === false ) return;
|
|
23
59
|
|
|
24
60
|
this.isDown = true;
|
|
25
|
-
this.
|
|
61
|
+
this._onSelectStart( event );
|
|
26
62
|
|
|
27
63
|
}.bind( this );
|
|
28
64
|
|
|
29
|
-
this.
|
|
65
|
+
this._onPointerMove = function ( event ) {
|
|
30
66
|
|
|
31
67
|
if ( this.enabled === false ) return;
|
|
32
68
|
|
|
33
69
|
if ( this.isDown ) {
|
|
34
70
|
|
|
35
|
-
this.
|
|
71
|
+
this._onSelectMove( event );
|
|
36
72
|
|
|
37
73
|
}
|
|
38
74
|
|
|
39
75
|
}.bind( this );
|
|
40
76
|
|
|
41
|
-
this.
|
|
77
|
+
this._onPointerUp = function ( ) {
|
|
42
78
|
|
|
43
79
|
if ( this.enabled === false ) return;
|
|
44
80
|
|
|
45
81
|
this.isDown = false;
|
|
46
|
-
this.
|
|
82
|
+
this._onSelectOver();
|
|
47
83
|
|
|
48
84
|
}.bind( this );
|
|
49
85
|
|
|
50
|
-
this.renderer.domElement.addEventListener( 'pointerdown', this.
|
|
51
|
-
this.renderer.domElement.addEventListener( 'pointermove', this.
|
|
52
|
-
this.renderer.domElement.addEventListener( 'pointerup', this.
|
|
86
|
+
this.renderer.domElement.addEventListener( 'pointerdown', this._onPointerDown );
|
|
87
|
+
this.renderer.domElement.addEventListener( 'pointermove', this._onPointerMove );
|
|
88
|
+
this.renderer.domElement.addEventListener( 'pointerup', this._onPointerUp );
|
|
53
89
|
|
|
54
90
|
}
|
|
55
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Call this method if you no longer want use to the controls. It frees all internal
|
|
94
|
+
* resources and removes all event listeners.
|
|
95
|
+
*/
|
|
56
96
|
dispose() {
|
|
57
97
|
|
|
58
|
-
this.renderer.domElement.removeEventListener( 'pointerdown', this.
|
|
59
|
-
this.renderer.domElement.removeEventListener( 'pointermove', this.
|
|
60
|
-
this.renderer.domElement.removeEventListener( 'pointerup', this.
|
|
98
|
+
this.renderer.domElement.removeEventListener( 'pointerdown', this._onPointerDown );
|
|
99
|
+
this.renderer.domElement.removeEventListener( 'pointermove', this._onPointerMove );
|
|
100
|
+
this.renderer.domElement.removeEventListener( 'pointerup', this._onPointerUp );
|
|
61
101
|
|
|
62
102
|
this.element.remove(); // in case disposal happens while dragging
|
|
63
103
|
|
|
64
104
|
}
|
|
65
105
|
|
|
66
|
-
|
|
106
|
+
// private
|
|
107
|
+
|
|
108
|
+
_onSelectStart( event ) {
|
|
67
109
|
|
|
68
110
|
this.element.style.display = 'none';
|
|
69
111
|
|
|
@@ -74,28 +116,28 @@ class SelectionHelper {
|
|
|
74
116
|
this.element.style.width = '0px';
|
|
75
117
|
this.element.style.height = '0px';
|
|
76
118
|
|
|
77
|
-
this.
|
|
78
|
-
this.
|
|
119
|
+
this._startPoint.x = event.clientX;
|
|
120
|
+
this._startPoint.y = event.clientY;
|
|
79
121
|
|
|
80
122
|
}
|
|
81
123
|
|
|
82
|
-
|
|
124
|
+
_onSelectMove( event ) {
|
|
83
125
|
|
|
84
126
|
this.element.style.display = 'block';
|
|
85
127
|
|
|
86
|
-
this.
|
|
87
|
-
this.
|
|
88
|
-
this.
|
|
89
|
-
this.
|
|
128
|
+
this._pointBottomRight.x = Math.max( this._startPoint.x, event.clientX );
|
|
129
|
+
this._pointBottomRight.y = Math.max( this._startPoint.y, event.clientY );
|
|
130
|
+
this._pointTopLeft.x = Math.min( this._startPoint.x, event.clientX );
|
|
131
|
+
this._pointTopLeft.y = Math.min( this._startPoint.y, event.clientY );
|
|
90
132
|
|
|
91
|
-
this.element.style.left = this.
|
|
92
|
-
this.element.style.top = this.
|
|
93
|
-
this.element.style.width = ( this.
|
|
94
|
-
this.element.style.height = ( this.
|
|
133
|
+
this.element.style.left = this._pointTopLeft.x + 'px';
|
|
134
|
+
this.element.style.top = this._pointTopLeft.y + 'px';
|
|
135
|
+
this.element.style.width = ( this._pointBottomRight.x - this._pointTopLeft.x ) + 'px';
|
|
136
|
+
this.element.style.height = ( this._pointBottomRight.y - this._pointTopLeft.y ) + 'px';
|
|
95
137
|
|
|
96
138
|
}
|
|
97
139
|
|
|
98
|
-
|
|
140
|
+
_onSelectOver() {
|
|
99
141
|
|
|
100
142
|
this.element.remove();
|
|
101
143
|
|
|
@@ -338,7 +338,7 @@ class MotionController {
|
|
|
338
338
|
/**
|
|
339
339
|
* @param {Object} xrInputSource - The XRInputSource to build the MotionController around
|
|
340
340
|
* @param {Object} profile - The best matched profile description for the supplied xrInputSource
|
|
341
|
-
* @param {
|
|
341
|
+
* @param {string} assetUrl
|
|
342
342
|
*/
|
|
343
343
|
constructor(xrInputSource, profile, assetUrl) {
|
|
344
344
|
if (!xrInputSource) {
|
|
@@ -1,14 +1,37 @@
|
|
|
1
1
|
import { Lighting } from 'three/webgpu';
|
|
2
2
|
import { tiledLights } from '../tsl/lighting/TiledLightsNode.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* A custom lighting implementation based on Tiled-Lighting that overwrites the default
|
|
6
|
+
* implementation in {@link WebGPURenderer}.
|
|
7
|
+
*
|
|
8
|
+
* ```js
|
|
9
|
+
* const lighting = new TiledLighting();
|
|
10
|
+
* renderer.lighting = lighting; // set lighting system
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @augments Lighting
|
|
14
|
+
*/
|
|
4
15
|
export class TiledLighting extends Lighting {
|
|
5
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Constructs a new lighting system.
|
|
19
|
+
*/
|
|
6
20
|
constructor() {
|
|
7
21
|
|
|
8
22
|
super();
|
|
9
23
|
|
|
10
24
|
}
|
|
11
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Creates a new tiled lights node for the given array of lights.
|
|
28
|
+
*
|
|
29
|
+
* This method is called internally by the renderer and must be overwritten by
|
|
30
|
+
* all custom lighting implementations.
|
|
31
|
+
*
|
|
32
|
+
* @param {Array<Light>} lights - The render object.
|
|
33
|
+
* @return {TiledLightsNode} The tiled lights node.
|
|
34
|
+
*/
|
|
12
35
|
createNode( lights = [] ) {
|
|
13
36
|
|
|
14
37
|
return tiledLights().setLights( lights );
|
|
@@ -11,11 +11,24 @@ import {
|
|
|
11
11
|
WebGLCoordinateSystem
|
|
12
12
|
} from 'three';
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Utility class for creating instances of {@link LightProbe}.
|
|
16
|
+
*
|
|
17
|
+
* @hideconstructor
|
|
18
|
+
*/
|
|
14
19
|
class LightProbeGenerator {
|
|
15
20
|
|
|
16
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Creates a light probe from the given (radiance) environment map.
|
|
23
|
+
* The method expects that the environment map is represented as a cube texture.
|
|
24
|
+
*
|
|
25
|
+
* @param {CubeTexture} cubeTexture - The environment map.
|
|
26
|
+
* @return {LightProbe} The created light probe.
|
|
27
|
+
*/
|
|
17
28
|
static fromCubeTexture( cubeTexture ) {
|
|
18
29
|
|
|
30
|
+
// https://www.ppsloan.org/publications/StupidSH36.pdf
|
|
31
|
+
|
|
19
32
|
let totalWeight = 0;
|
|
20
33
|
|
|
21
34
|
const coord = new Vector3();
|
|
@@ -127,6 +140,18 @@ class LightProbeGenerator {
|
|
|
127
140
|
|
|
128
141
|
}
|
|
129
142
|
|
|
143
|
+
/**
|
|
144
|
+
* Creates a light probe from the given (radiance) environment map.
|
|
145
|
+
* The method expects that the environment map is represented as a cube render target.
|
|
146
|
+
*
|
|
147
|
+
* The cube render target must be in RGBA so `cubeRenderTarget.texture.format` must be
|
|
148
|
+
* set to {@link RGBAFormat}.
|
|
149
|
+
*
|
|
150
|
+
* @async
|
|
151
|
+
* @param {WebGPURenderer|WebGLRenderer} renderer - The renderer.
|
|
152
|
+
* @param {CubeRenderTarget|WebGLCubeRenderTarget} cubeRenderTarget - The environment map.
|
|
153
|
+
* @return {Promise<LightProbe>} A Promise that resolves with the created light probe.
|
|
154
|
+
*/
|
|
130
155
|
static async fromCubeRenderTarget( renderer, cubeRenderTarget ) {
|
|
131
156
|
|
|
132
157
|
const flip = renderer.coordinateSystem === WebGLCoordinateSystem ? - 1 : 1;
|