@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
|
@@ -9,26 +9,67 @@ import {
|
|
|
9
9
|
zipSync,
|
|
10
10
|
} from '../libs/fflate.module.js';
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* An exporter for USDZ.
|
|
14
|
+
*
|
|
15
|
+
* ```js
|
|
16
|
+
* const exporter = new USDZExporter();
|
|
17
|
+
* const arraybuffer = await exporter.parseAsync( scene );
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
12
20
|
class USDZExporter {
|
|
13
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new USDZ exporter.
|
|
24
|
+
*/
|
|
14
25
|
constructor() {
|
|
15
26
|
|
|
27
|
+
/**
|
|
28
|
+
* A reference to a texture utils module.
|
|
29
|
+
*
|
|
30
|
+
* @type {?(WebGLTextureUtils|WebGPUTextureUtils)}
|
|
31
|
+
* @default null
|
|
32
|
+
*/
|
|
16
33
|
this.textureUtils = null;
|
|
17
34
|
|
|
18
35
|
}
|
|
19
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Sets the texture utils for this exporter. Only relevant when compressed textures have to be exported.
|
|
39
|
+
*
|
|
40
|
+
* Depending on whether you use {@link WebGLRenderer} or {@link WebGPURenderer}, you must inject the
|
|
41
|
+
* corresponding texture utils {@link WebGLTextureUtils} or {@link WebGPUTextureUtils}.
|
|
42
|
+
*
|
|
43
|
+
* @param {WebGLTextureUtils|WebGPUTextureUtils} utils - The texture utils.
|
|
44
|
+
*/
|
|
20
45
|
setTextureUtils( utils ) {
|
|
21
46
|
|
|
22
47
|
this.textureUtils = utils;
|
|
23
48
|
|
|
24
49
|
}
|
|
25
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Parse the given 3D object and generates the USDZ output.
|
|
53
|
+
*
|
|
54
|
+
* @param {Object3D} scene - The 3D object to export.
|
|
55
|
+
* @param {USDZExporter~OnDone} onDone - A callback function that is executed when the export has finished.
|
|
56
|
+
* @param {USDZExporter~OnError} onError - A callback function that is executed when an error happens.
|
|
57
|
+
* @param {USDZExporter~Options} options - The export options.
|
|
58
|
+
*/
|
|
26
59
|
parse( scene, onDone, onError, options ) {
|
|
27
60
|
|
|
28
61
|
this.parseAsync( scene, options ).then( onDone ).catch( onError );
|
|
29
62
|
|
|
30
63
|
}
|
|
31
64
|
|
|
65
|
+
/**
|
|
66
|
+
* Async version of {@link USDZExporter#parse}.
|
|
67
|
+
*
|
|
68
|
+
* @async
|
|
69
|
+
* @param {Object3D} scene - The 3D object to export.
|
|
70
|
+
* @param {USDZExporter~Options} options - The export options.
|
|
71
|
+
* @return {Promise<ArrayBuffer>} A Promise that resolved with the exported USDZ data.
|
|
72
|
+
*/
|
|
32
73
|
async parseAsync( scene, options = {} ) {
|
|
33
74
|
|
|
34
75
|
options = Object.assign( {
|
|
@@ -78,7 +119,7 @@ class USDZExporter {
|
|
|
78
119
|
|
|
79
120
|
}
|
|
80
121
|
|
|
81
|
-
output += buildXform( object, geometry, material );
|
|
122
|
+
output += buildXform( object, geometry, materials[ material.uuid ] );
|
|
82
123
|
|
|
83
124
|
} else {
|
|
84
125
|
|
|
@@ -755,7 +796,7 @@ function buildCamera( camera ) {
|
|
|
755
796
|
float verticalAperture = ${ ( ( Math.abs( camera.top ) + Math.abs( camera.bottom ) ) * 10 ).toPrecision( PRECISION ) }
|
|
756
797
|
token projection = "orthographic"
|
|
757
798
|
}
|
|
758
|
-
|
|
799
|
+
|
|
759
800
|
`;
|
|
760
801
|
|
|
761
802
|
} else {
|
|
@@ -772,11 +813,37 @@ function buildCamera( camera ) {
|
|
|
772
813
|
token projection = "perspective"
|
|
773
814
|
float verticalAperture = ${ camera.getFilmHeight().toPrecision( PRECISION ) }
|
|
774
815
|
}
|
|
775
|
-
|
|
816
|
+
|
|
776
817
|
`;
|
|
777
818
|
|
|
778
819
|
}
|
|
779
820
|
|
|
780
821
|
}
|
|
781
822
|
|
|
823
|
+
/**
|
|
824
|
+
* Export options of `USDZExporter`.
|
|
825
|
+
*
|
|
826
|
+
* @typedef {Object} USDZExporter~Options
|
|
827
|
+
* @property {number} [maxTextureSize=1024] - The maximum texture size that is going to be exported.
|
|
828
|
+
* @property {boolean} [includeAnchoringProperties=false] - Whether to include anchoring properties or not.
|
|
829
|
+
* @property {Object} [ar] - If `includeAnchoringProperties` is set to `true`, the anchoring type and alignment
|
|
830
|
+
* can be configured via `ar.anchoring.type` and `ar.planeAnchoring.alignment`.
|
|
831
|
+
* @property {boolean} [quickLookCompatible=false] - Whether to make the exported USDZ compatible to QuickLook
|
|
832
|
+
* which means the asset is modified to accommodate the bugs FB10036297 and FB11442287 (Apple Feedback).
|
|
833
|
+
**/
|
|
834
|
+
|
|
835
|
+
/**
|
|
836
|
+
* onDone callback of `USDZExporter`.
|
|
837
|
+
*
|
|
838
|
+
* @callback USDZExporter~OnDone
|
|
839
|
+
* @param {ArrayBuffer} result - The generated USDZ.
|
|
840
|
+
*/
|
|
841
|
+
|
|
842
|
+
/**
|
|
843
|
+
* onError callback of `USDZExporter`.
|
|
844
|
+
*
|
|
845
|
+
* @callback USDZExporter~OnError
|
|
846
|
+
* @param {Error} error - The error object.
|
|
847
|
+
*/
|
|
848
|
+
|
|
782
849
|
export { USDZExporter };
|
|
@@ -3,8 +3,30 @@ import {
|
|
|
3
3
|
Float32BufferAttribute
|
|
4
4
|
} from 'three';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* A special type of box geometry intended for {@link LineSegments}.
|
|
8
|
+
*
|
|
9
|
+
* ```js
|
|
10
|
+
* const geometry = new THREE.BoxLineGeometry();
|
|
11
|
+
* const material = new THREE.LineBasicMaterial( { color: 0x00ff00 } );
|
|
12
|
+
* const lines = new THREE.LineSegments( geometry, material );
|
|
13
|
+
* scene.add( lines );
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @augments BufferGeometry
|
|
17
|
+
*/
|
|
6
18
|
class BoxLineGeometry extends BufferGeometry {
|
|
7
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new box line geometry.
|
|
22
|
+
*
|
|
23
|
+
* @param {number} [width=1] - The width. That is, the length of the edges parallel to the X axis.
|
|
24
|
+
* @param {number} [height=1] - The height. That is, the length of the edges parallel to the Y axis.
|
|
25
|
+
* @param {number} [depth=1] - The depth. That is, the length of the edges parallel to the Z axis.
|
|
26
|
+
* @param {number} [widthSegments=1] - Number of segmented rectangular sections along the width of the sides.
|
|
27
|
+
* @param {number} [heightSegments=1] - Number of segmented rectangular sections along the height of the sides.
|
|
28
|
+
* @param {number} [depthSegments=1] - Number of segmented rectangular sections along the depth of the sides.
|
|
29
|
+
*/
|
|
8
30
|
constructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {
|
|
9
31
|
|
|
10
32
|
super();
|
|
@@ -4,8 +4,26 @@ import {
|
|
|
4
4
|
} from 'three';
|
|
5
5
|
import { ConvexHull } from '../math/ConvexHull.js';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* This class can be used to generate a convex hull for a given array of 3D points.
|
|
9
|
+
* The average time complexity for this task is considered to be O(nlog(n)).
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* const geometry = new ConvexGeometry( points );
|
|
13
|
+
* const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
|
|
14
|
+
* const mesh = new THREE.Mesh( geometry, material );
|
|
15
|
+
* scene.add( mesh );
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @augments BufferGeometry
|
|
19
|
+
*/
|
|
7
20
|
class ConvexGeometry extends BufferGeometry {
|
|
8
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new convex geometry.
|
|
24
|
+
*
|
|
25
|
+
* @param {Array<Vector3>} points - An array of points in 3D space which should be enclosed by the convex hull.
|
|
26
|
+
*/
|
|
9
27
|
constructor( points = [] ) {
|
|
10
28
|
|
|
11
29
|
super();
|
|
@@ -9,22 +9,33 @@ import {
|
|
|
9
9
|
} from 'three';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* This class can be used to create a decal mesh that serves different kinds of purposes e.g.
|
|
13
|
+
* adding unique details to models, performing dynamic visual environmental changes or covering seams.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
15
|
+
* Please not that decal projections can be distorted when used around corners. More information at
|
|
16
|
+
* this GitHub issue: [Decal projections without distortions]{@link https://github.com/mrdoob/three.js/issues/21187}.
|
|
16
17
|
*
|
|
17
|
-
*
|
|
18
|
-
* position — Position of the decal projector
|
|
19
|
-
* orientation — Orientation of the decal projector
|
|
20
|
-
* size — Size of the decal projector
|
|
18
|
+
* Reference: [How to project decals]{@link http://blog.wolfire.com/2009/06/how-to-project-decals/}
|
|
21
19
|
*
|
|
22
|
-
*
|
|
20
|
+
* ```js
|
|
21
|
+
* const geometry = new DecalGeometry( mesh, position, orientation, size );
|
|
22
|
+
* const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
|
|
23
|
+
* const mesh = new THREE.Mesh( geometry, material );
|
|
24
|
+
* scene.add( mesh );
|
|
25
|
+
* ```
|
|
23
26
|
*
|
|
27
|
+
* @augments BufferGeometry
|
|
24
28
|
*/
|
|
25
|
-
|
|
26
29
|
class DecalGeometry extends BufferGeometry {
|
|
27
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Constructs a new decal geometry.
|
|
33
|
+
*
|
|
34
|
+
* @param {Mesh} [mesh] - The base mesh the decal should be projected on.
|
|
35
|
+
* @param {Vector3} [position] - The position of the decal projector.
|
|
36
|
+
* @param {Euler} [orientation] - The orientation of the decal projector.
|
|
37
|
+
* @param {Vector3} [size] - Tje scale of the decal projector.
|
|
38
|
+
*/
|
|
28
39
|
constructor( mesh = new Mesh(), position = new Vector3(), orientation = new Euler(), size = new Vector3( 1, 1, 1 ) ) {
|
|
29
40
|
|
|
30
41
|
super();
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
|
|
2
|
+
/** @module ParametricFunctions */
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A parametric function representing the Klein bottle.
|
|
6
|
+
*
|
|
7
|
+
* @param {number} v - The `v` coordinate on the surface in the range `[0,1]`.
|
|
8
|
+
* @param {number} u - The `u` coordinate on the surface in the range `[0,1]`.
|
|
9
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
10
|
+
*/
|
|
11
|
+
function klein( v, u, target ) {
|
|
12
|
+
|
|
13
|
+
u *= Math.PI;
|
|
14
|
+
v *= 2 * Math.PI;
|
|
15
|
+
|
|
16
|
+
u = u * 2;
|
|
17
|
+
let x, z;
|
|
18
|
+
if ( u < Math.PI ) {
|
|
19
|
+
|
|
20
|
+
x = 3 * Math.cos( u ) * ( 1 + Math.sin( u ) ) + ( 2 * ( 1 - Math.cos( u ) / 2 ) ) * Math.cos( u ) * Math.cos( v );
|
|
21
|
+
z = - 8 * Math.sin( u ) - 2 * ( 1 - Math.cos( u ) / 2 ) * Math.sin( u ) * Math.cos( v );
|
|
22
|
+
|
|
23
|
+
} else {
|
|
24
|
+
|
|
25
|
+
x = 3 * Math.cos( u ) * ( 1 + Math.sin( u ) ) + ( 2 * ( 1 - Math.cos( u ) / 2 ) ) * Math.cos( v + Math.PI );
|
|
26
|
+
z = - 8 * Math.sin( u );
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const y = - 2 * ( 1 - Math.cos( u ) / 2 ) * Math.sin( v );
|
|
31
|
+
|
|
32
|
+
target.set( x, y, z );
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* A parametric function representing a flat plane.
|
|
38
|
+
*
|
|
39
|
+
* @param {number} u - The `u` coordinate on the surface in the range `[0,1]`.
|
|
40
|
+
* @param {number} v - The `v` coordinate on the surface in the range `[0,1]`.
|
|
41
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
42
|
+
*/
|
|
43
|
+
function plane( u, v, target ) {
|
|
44
|
+
|
|
45
|
+
target.set( u, 0, v );
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* A parametric function representing a flat mobius strip.
|
|
51
|
+
*
|
|
52
|
+
* @param {number} u - The `u` coordinate on the surface in the range `[0,1]`.
|
|
53
|
+
* @param {number} t - The `v` coordinate on the surface in the range `[0,1]`.
|
|
54
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
55
|
+
*/
|
|
56
|
+
function mobius( u, t, target ) {
|
|
57
|
+
|
|
58
|
+
// http://www.wolframalpha.com/input/?i=M%C3%B6bius+strip+parametric+equations&lk=1&a=ClashPrefs_*Surface.MoebiusStrip.SurfaceProperty.ParametricEquations-
|
|
59
|
+
u = u - 0.5;
|
|
60
|
+
const v = 2 * Math.PI * t;
|
|
61
|
+
|
|
62
|
+
const a = 2;
|
|
63
|
+
|
|
64
|
+
const x = Math.cos( v ) * ( a + u * Math.cos( v / 2 ) );
|
|
65
|
+
const y = Math.sin( v ) * ( a + u * Math.cos( v / 2 ) );
|
|
66
|
+
const z = u * Math.sin( v / 2 );
|
|
67
|
+
|
|
68
|
+
target.set( x, y, z );
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* A parametric function representing a volumetric mobius strip.
|
|
74
|
+
*
|
|
75
|
+
* @param {number} u - The `u` coordinate on the surface in the range `[0,1]`.
|
|
76
|
+
* @param {number} t - The `v` coordinate on the surface in the range `[0,1]`.
|
|
77
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
78
|
+
*/
|
|
79
|
+
function mobius3d( u, t, target ) {
|
|
80
|
+
|
|
81
|
+
u *= Math.PI;
|
|
82
|
+
t *= 2 * Math.PI;
|
|
83
|
+
|
|
84
|
+
u = u * 2;
|
|
85
|
+
const phi = u / 2;
|
|
86
|
+
const major = 2.25, a = 0.125, b = 0.65;
|
|
87
|
+
|
|
88
|
+
let x = a * Math.cos( t ) * Math.cos( phi ) - b * Math.sin( t ) * Math.sin( phi );
|
|
89
|
+
const z = a * Math.cos( t ) * Math.sin( phi ) + b * Math.sin( t ) * Math.cos( phi );
|
|
90
|
+
const y = ( major + x ) * Math.sin( u );
|
|
91
|
+
x = ( major + x ) * Math.cos( u );
|
|
92
|
+
|
|
93
|
+
target.set( x, y, z );
|
|
94
|
+
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export { klein, plane, mobius, mobius3d };
|
|
@@ -1,22 +1,45 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parametric Surfaces Geometry
|
|
3
|
-
* based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
1
|
import {
|
|
7
2
|
BufferGeometry,
|
|
8
3
|
Float32BufferAttribute,
|
|
9
4
|
Vector3
|
|
10
5
|
} from 'three';
|
|
11
6
|
|
|
7
|
+
/**
|
|
8
|
+
* This class can be used to generate a geometry based on a parametric surface.
|
|
9
|
+
*
|
|
10
|
+
* Reference: [Mesh Generation with Python]{@link https://prideout.net/blog/old/blog/index.html@p=44.html}
|
|
11
|
+
*
|
|
12
|
+
* ```js
|
|
13
|
+
* const geometry = new THREE.ParametricGeometry( klein, 25, 25 );
|
|
14
|
+
* const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
|
|
15
|
+
* const klein = new THREE.Mesh( geometry, material );
|
|
16
|
+
* scene.add( klein );
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @augments BufferGeometry
|
|
20
|
+
*/
|
|
12
21
|
class ParametricGeometry extends BufferGeometry {
|
|
13
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Constructs a new parametric geometry.
|
|
25
|
+
*
|
|
26
|
+
* @param {ParametricGeometry~Func} func - The parametric function. Default is a function that generates a curved plane surface.
|
|
27
|
+
* @param {number} [slices=8] - The number of slices to use for the parametric function.
|
|
28
|
+
* @param {number} [stacks=8] - The stacks of slices to use for the parametric function.
|
|
29
|
+
*/
|
|
14
30
|
constructor( func = ( u, v, target ) => target.set( u, v, Math.cos( u ) * Math.sin( v ) ), slices = 8, stacks = 8 ) {
|
|
15
31
|
|
|
16
32
|
super();
|
|
17
33
|
|
|
18
34
|
this.type = 'ParametricGeometry';
|
|
19
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Holds the constructor parameters that have been
|
|
38
|
+
* used to generate the geometry. Any modification
|
|
39
|
+
* after instantiation does not change the geometry.
|
|
40
|
+
*
|
|
41
|
+
* @type {Object}
|
|
42
|
+
*/
|
|
20
43
|
this.parameters = {
|
|
21
44
|
func: func,
|
|
22
45
|
slices: slices,
|
|
@@ -136,4 +159,13 @@ class ParametricGeometry extends BufferGeometry {
|
|
|
136
159
|
|
|
137
160
|
}
|
|
138
161
|
|
|
162
|
+
/**
|
|
163
|
+
* Parametric function definition of `ParametricGeometry`.
|
|
164
|
+
*
|
|
165
|
+
* @callback ParametricGeometry~Func
|
|
166
|
+
* @param {number} u - The `u` coordinate on the surface in the range `[0,1]`.
|
|
167
|
+
* @param {number} v - The `v` coordinate on the surface in the range `[0,1]`.
|
|
168
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
169
|
+
*/
|
|
170
|
+
|
|
139
171
|
export { ParametricGeometry };
|
|
@@ -38,8 +38,29 @@ function getUv( faceDirVector, normal, uvAxis, projectionAxis, radius, sideLengt
|
|
|
38
38
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
/**
|
|
42
|
+
* A special type of box geometry with rounded corners and edges.
|
|
43
|
+
*
|
|
44
|
+
* ```js
|
|
45
|
+
* const geometry = new THREE.RoundedBoxGeometry();
|
|
46
|
+
* const material = new THREE.MeshStandardMaterial( { color: 0x00ff00 } );
|
|
47
|
+
* const cube = new THREE.Mesh( geometry, material );
|
|
48
|
+
* scene.add( cube );
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* @augments BoxGeometry
|
|
52
|
+
*/
|
|
41
53
|
class RoundedBoxGeometry extends BoxGeometry {
|
|
42
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Constructs a new rounded box geometry.
|
|
57
|
+
*
|
|
58
|
+
* @param {number} [width=1] - The width. That is, the length of the edges parallel to the X axis.
|
|
59
|
+
* @param {number} [height=1] - The height. That is, the length of the edges parallel to the Y axis.
|
|
60
|
+
* @param {number} [depth=1] - The depth. That is, the length of the edges parallel to the Z axis.
|
|
61
|
+
* @param {number} [segments=2] - Number of segmented that form the rounded corners.
|
|
62
|
+
* @param {number} [radius=0.1] - The radius of the rounded corners.
|
|
63
|
+
*/
|
|
43
64
|
constructor( width = 1, height = 1, depth = 1, segments = 2, radius = 0.1 ) {
|
|
44
65
|
|
|
45
66
|
// ensure segments is odd so we have a plane connecting the rounded corners
|
|
@@ -9,53 +9,37 @@ import {
|
|
|
9
9
|
/**
|
|
10
10
|
* Tessellates the famous Utah teapot database by Martin Newell into triangles.
|
|
11
11
|
*
|
|
12
|
-
* Parameters: size = 50, segments = 10, bottom = true, lid = true, body = true,
|
|
13
|
-
* fitLid = true, blinn = true
|
|
14
|
-
*
|
|
15
|
-
* size is a relative scale: I've scaled the teapot to fit vertically between -1 and 1.
|
|
16
|
-
* Think of it as a "radius".
|
|
17
|
-
* segments - number of line segments to subdivide each patch edge;
|
|
18
|
-
* 1 is possible but gives degenerates, so two is the real minimum.
|
|
19
|
-
* bottom - boolean, if true (default) then the bottom patches are added. Some consider
|
|
20
|
-
* adding the bottom heresy, so set this to "false" to adhere to the One True Way.
|
|
21
|
-
* lid - to remove the lid and look inside, set to true.
|
|
22
|
-
* body - to remove the body and leave the lid, set this and "bottom" to false.
|
|
23
|
-
* fitLid - the lid is a tad small in the original. This stretches it a bit so you can't
|
|
24
|
-
* see the teapot's insides through the gap.
|
|
25
|
-
* blinn - Jim Blinn scaled the original data vertically by dividing by about 1.3 to look
|
|
26
|
-
* nicer. If you want to see the original teapot, similar to the real-world model, set
|
|
27
|
-
* this to false. True by default.
|
|
28
|
-
* See http://en.wikipedia.org/wiki/File:Original_Utah_Teapot.jpg for the original
|
|
29
|
-
* real-world teapot (from http://en.wikipedia.org/wiki/Utah_teapot).
|
|
30
|
-
*
|
|
31
|
-
* Note that the bottom (the last four patches) is not flat - blame Frank Crow, not me.
|
|
32
|
-
*
|
|
33
12
|
* The teapot should normally be rendered as a double sided object, since for some
|
|
34
13
|
* patches both sides can be seen, e.g., the gap around the lid and inside the spout.
|
|
35
14
|
*
|
|
36
|
-
* Segments 'n' determines the number of triangles output.
|
|
37
|
-
*
|
|
15
|
+
* Segments 'n' determines the number of triangles output. Total triangles = 32*2*n*n - 8*n
|
|
16
|
+
* (degenerates at the top and bottom cusps are deleted).
|
|
38
17
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* 2 240
|
|
42
|
-
* 3 552
|
|
43
|
-
* 4 992
|
|
18
|
+
* Code based on [SPD software]{@link http://tog.acm.org/resources/SPD/}
|
|
19
|
+
* Created for the Udacity course [Interactive Rendering]{@link http://bit.ly/ericity}
|
|
44
20
|
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* YouTube video on teapot history: https://www.youtube.com/watch?v=DxMfblPzFNc
|
|
52
|
-
*
|
|
53
|
-
* See https://en.wikipedia.org/wiki/Utah_teapot for the history of the teapot
|
|
21
|
+
* ```js
|
|
22
|
+
* const geometry = new TeapotGeometry( 50, 18 );
|
|
23
|
+
* const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
|
|
24
|
+
* const teapot = new THREE.Mesh( geometry, material );
|
|
25
|
+
* scene.add( teapot );
|
|
26
|
+
* ```
|
|
54
27
|
*
|
|
28
|
+
* @augments BufferGeometry
|
|
55
29
|
*/
|
|
56
|
-
|
|
57
30
|
class TeapotGeometry extends BufferGeometry {
|
|
58
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Constructs a new teapot geometry.
|
|
34
|
+
*
|
|
35
|
+
* @param {number} [size=50] - Relative scale of the teapot.
|
|
36
|
+
* @param {number} [segments=10] - Number of line segments to subdivide each patch edge.
|
|
37
|
+
* @param {boolean} [bottom=true] - Whether the bottom of the teapot is generated or not.
|
|
38
|
+
* @param {boolean} [lid=true] - Whether the lid is generated or not.
|
|
39
|
+
* @param {boolean} [body=true] - Whether the body is generated or not.
|
|
40
|
+
* @param {boolean} [fitLid=true] - Whether the lid is slightly stretched to prevent gaps between the body and lid or not.
|
|
41
|
+
* @param {boolean} [blinn=true] - Whether the teapot is scaled vertically for better aesthetics or not.
|
|
42
|
+
*/
|
|
59
43
|
constructor( size = 50, segments = 10, bottom = true, lid = true, body = true, fitLid = true, blinn = true ) {
|
|
60
44
|
|
|
61
45
|
// 32 * 4 * 4 Bezier spline patches
|
|
@@ -1,26 +1,37 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ExtrudeGeometry
|
|
3
|
+
} from 'three';
|
|
4
|
+
|
|
1
5
|
/**
|
|
2
|
-
*
|
|
6
|
+
* A class for generating text as a single geometry. It is constructed by providing a string of text, and a set of
|
|
7
|
+
* parameters consisting of a loaded font and extrude settings.
|
|
8
|
+
*
|
|
9
|
+
* See the {@link FontLoader} page for additional details.
|
|
3
10
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
11
|
+
* `TextGeometry` uses [typeface.json]{@link http://gero3.github.io/facetype.js/} generated fonts.
|
|
12
|
+
* Some existing fonts can be found located in `/examples/fonts`.
|
|
6
13
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
14
|
+
* ```js
|
|
15
|
+
* const loader = new FontLoader();
|
|
16
|
+
* const font = await loader.loadAsync( 'fonts/helvetiker_regular.typeface.json' );
|
|
17
|
+
* const geometry = new TextGeometry( 'Hello three.js!', {
|
|
18
|
+
* font: font,
|
|
19
|
+
* size: 80,
|
|
20
|
+
* depth: 5,
|
|
21
|
+
* curveSegments: 12
|
|
22
|
+
* } );
|
|
23
|
+
* ```
|
|
10
24
|
*
|
|
11
|
-
*
|
|
12
|
-
* bevelThickness: <float>, // how deep into text bevel goes
|
|
13
|
-
* bevelSize: <float>, // how far from text outline (including bevelOffset) is bevel
|
|
14
|
-
* bevelOffset: <float> // how far from text outline does bevel start
|
|
15
|
-
* }
|
|
25
|
+
* @augments ExtrudeGeometry
|
|
16
26
|
*/
|
|
17
|
-
|
|
18
|
-
import {
|
|
19
|
-
ExtrudeGeometry
|
|
20
|
-
} from 'three';
|
|
21
|
-
|
|
22
27
|
class TextGeometry extends ExtrudeGeometry {
|
|
23
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Constructs a new text geometry.
|
|
31
|
+
*
|
|
32
|
+
* @param {string} text - The text that should be transformed into a geometry.
|
|
33
|
+
* @param {TextGeometry~Options} [parameters] - The text settings.
|
|
34
|
+
*/
|
|
24
35
|
constructor( text, parameters = {} ) {
|
|
25
36
|
|
|
26
37
|
const font = parameters.font;
|
|
@@ -50,5 +61,22 @@ class TextGeometry extends ExtrudeGeometry {
|
|
|
50
61
|
|
|
51
62
|
}
|
|
52
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Represents the `options` type of the geometry's constructor.
|
|
66
|
+
*
|
|
67
|
+
* @typedef {Object} TextGeometry~Options
|
|
68
|
+
* @property {Font} [font] - The font.
|
|
69
|
+
* @property {number} [size=100] - The text size.
|
|
70
|
+
* @property {number} [depth=50] - Depth to extrude the shape.
|
|
71
|
+
* @property {number} [curveSegments=12] - Number of points on the curves.
|
|
72
|
+
* @property {number} [steps=1] - Number of points used for subdividing segments along the depth of the extruded spline.
|
|
73
|
+
* @property {boolean} [bevelEnabled=false] - Whether to beveling to the shape or not.
|
|
74
|
+
* @property {number} [bevelThickness=10] - How deep into the original shape the bevel goes.
|
|
75
|
+
* @property {number} [bevelSize=8] - Distance from the shape outline that the bevel extends.
|
|
76
|
+
* @property {number} [bevelOffset=0] - Distance from the shape outline that the bevel starts.
|
|
77
|
+
* @property {number} [bevelSegments=3] - Number of bevel layers.
|
|
78
|
+
* @property {?Curve} [extrudePath=null] - A 3D spline path along which the shape should be extruded. Bevels not supported for path extrusion.
|
|
79
|
+
* @property {Object} [UVGenerator] - An object that provides UV generator functions for custom UV generation.
|
|
80
|
+
**/
|
|
53
81
|
|
|
54
82
|
export { TextGeometry };
|
|
@@ -4,8 +4,27 @@ import {
|
|
|
4
4
|
SphereGeometry
|
|
5
5
|
} from 'three';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Renders a sphere to visualize a light probe in the scene.
|
|
9
|
+
*
|
|
10
|
+
* This helper can only be used with {@link WebGLRenderer}.
|
|
11
|
+
* When using {@link WebGPURenderer}, import from `LightProbeHelperGPU.js`.
|
|
12
|
+
*
|
|
13
|
+
* ```js
|
|
14
|
+
* const helper = new LightProbeHelper( lightProbe );
|
|
15
|
+
* scene.add( helper );
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @augments Mesh
|
|
19
|
+
*/
|
|
7
20
|
class LightProbeHelper extends Mesh {
|
|
8
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new light probe helper.
|
|
24
|
+
*
|
|
25
|
+
* @param {LightProbe} lightProbe - The light probe to visualize.
|
|
26
|
+
* @param {number} [size=1] - The size of the helper.
|
|
27
|
+
*/
|
|
9
28
|
constructor( lightProbe, size = 1 ) {
|
|
10
29
|
|
|
11
30
|
const material = new ShaderMaterial( {
|
|
@@ -99,7 +118,19 @@ class LightProbeHelper extends Mesh {
|
|
|
99
118
|
|
|
100
119
|
super( geometry, material );
|
|
101
120
|
|
|
121
|
+
/**
|
|
122
|
+
* The light probe to visualize.
|
|
123
|
+
*
|
|
124
|
+
* @type {LightProbe}
|
|
125
|
+
*/
|
|
102
126
|
this.lightProbe = lightProbe;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* The size of the helper.
|
|
130
|
+
*
|
|
131
|
+
* @type {number}
|
|
132
|
+
* @default 1
|
|
133
|
+
*/
|
|
103
134
|
this.size = size;
|
|
104
135
|
this.type = 'LightProbeHelper';
|
|
105
136
|
|
|
@@ -107,6 +138,10 @@ class LightProbeHelper extends Mesh {
|
|
|
107
138
|
|
|
108
139
|
}
|
|
109
140
|
|
|
141
|
+
/**
|
|
142
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
143
|
+
* method whenever this instance is no longer used in your app.
|
|
144
|
+
*/
|
|
110
145
|
dispose() {
|
|
111
146
|
|
|
112
147
|
this.geometry.dispose();
|
|
@@ -5,8 +5,28 @@ import {
|
|
|
5
5
|
} from 'three';
|
|
6
6
|
import { float, Fn, getShIrradianceAt, normalWorld, uniformArray, uniform, vec4 } from 'three/tsl';
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Renders a sphere to visualize a light probe in the scene.
|
|
10
|
+
*
|
|
11
|
+
* This helper can only be used with {@link WebGPURenderer}.
|
|
12
|
+
* When using {@link WebGLRenderer}, import from `LightProbeHelper.js`.
|
|
13
|
+
*
|
|
14
|
+
* ```js
|
|
15
|
+
* const helper = new LightProbeHelper( lightProbe );
|
|
16
|
+
* scene.add( helper );
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @private
|
|
20
|
+
* @augments Mesh
|
|
21
|
+
*/
|
|
8
22
|
class LightProbeHelper extends Mesh {
|
|
9
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new light probe helper.
|
|
26
|
+
*
|
|
27
|
+
* @param {LightProbe} lightProbe - The light probe to visualize.
|
|
28
|
+
* @param {number} [size=1] - The size of the helper.
|
|
29
|
+
*/
|
|
10
30
|
constructor( lightProbe, size = 1 ) {
|
|
11
31
|
|
|
12
32
|
const sh = uniformArray( lightProbe.sh.coefficients );
|
|
@@ -31,7 +51,19 @@ class LightProbeHelper extends Mesh {
|
|
|
31
51
|
|
|
32
52
|
super( geometry, material );
|
|
33
53
|
|
|
54
|
+
/**
|
|
55
|
+
* The light probe to visualize.
|
|
56
|
+
*
|
|
57
|
+
* @type {LightProbe}
|
|
58
|
+
*/
|
|
34
59
|
this.lightProbe = lightProbe;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The size of the helper.
|
|
63
|
+
*
|
|
64
|
+
* @type {number}
|
|
65
|
+
* @default 1
|
|
66
|
+
*/
|
|
35
67
|
this.size = size;
|
|
36
68
|
this.type = 'LightProbeHelper';
|
|
37
69
|
|
|
@@ -42,6 +74,10 @@ class LightProbeHelper extends Mesh {
|
|
|
42
74
|
|
|
43
75
|
}
|
|
44
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
79
|
+
* method whenever this instance is no longer used in your app.
|
|
80
|
+
*/
|
|
45
81
|
dispose() {
|
|
46
82
|
|
|
47
83
|
this.geometry.dispose();
|