@plastic-software/three 0.174.0 → 0.175.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +10655 -1446
- package/build/three.core.js +9626 -1094
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +834 -157
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1429 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +53 -0
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/UniformsLib.js +1 -4
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -19,45 +19,191 @@ const _box = /*@__PURE__*/ new Box3();
|
|
|
19
19
|
const _boxMorphTargets = /*@__PURE__*/ new Box3();
|
|
20
20
|
const _vector = /*@__PURE__*/ new Vector3();
|
|
21
21
|
|
|
22
|
+
/**
|
|
23
|
+
* A representation of mesh, line, or point geometry. Includes vertex
|
|
24
|
+
* positions, face indices, normals, colors, UVs, and custom attributes
|
|
25
|
+
* within buffers, reducing the cost of passing all this data to the GPU.
|
|
26
|
+
*
|
|
27
|
+
* ```js
|
|
28
|
+
* const geometry = new THREE.BufferGeometry();
|
|
29
|
+
* // create a simple square shape. We duplicate the top left and bottom right
|
|
30
|
+
* // vertices because each vertex needs to appear once per triangle.
|
|
31
|
+
* const vertices = new Float32Array( [
|
|
32
|
+
* -1.0, -1.0, 1.0, // v0
|
|
33
|
+
* 1.0, -1.0, 1.0, // v1
|
|
34
|
+
* 1.0, 1.0, 1.0, // v2
|
|
35
|
+
*
|
|
36
|
+
* 1.0, 1.0, 1.0, // v3
|
|
37
|
+
* -1.0, 1.0, 1.0, // v4
|
|
38
|
+
* -1.0, -1.0, 1.0 // v5
|
|
39
|
+
* ] );
|
|
40
|
+
* // itemSize = 3 because there are 3 values (components) per vertex
|
|
41
|
+
* geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
|
|
42
|
+
* const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
|
|
43
|
+
* const mesh = new THREE.Mesh( geometry, material );
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @augments EventDispatcher
|
|
47
|
+
*/
|
|
22
48
|
class BufferGeometry extends EventDispatcher {
|
|
23
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Constructs a new geometry.
|
|
52
|
+
*/
|
|
24
53
|
constructor() {
|
|
25
54
|
|
|
26
55
|
super();
|
|
27
56
|
|
|
57
|
+
/**
|
|
58
|
+
* This flag can be used for type testing.
|
|
59
|
+
*
|
|
60
|
+
* @type {boolean}
|
|
61
|
+
* @readonly
|
|
62
|
+
* @default true
|
|
63
|
+
*/
|
|
28
64
|
this.isBufferGeometry = true;
|
|
29
65
|
|
|
66
|
+
/**
|
|
67
|
+
* The ID of the geometry.
|
|
68
|
+
*
|
|
69
|
+
* @name BufferGeometry#id
|
|
70
|
+
* @type {number}
|
|
71
|
+
* @readonly
|
|
72
|
+
*/
|
|
30
73
|
Object.defineProperty( this, 'id', { value: _id ++ } );
|
|
31
74
|
|
|
75
|
+
/**
|
|
76
|
+
* The UUID of the geometry.
|
|
77
|
+
*
|
|
78
|
+
* @type {string}
|
|
79
|
+
* @readonly
|
|
80
|
+
*/
|
|
32
81
|
this.uuid = generateUUID();
|
|
33
82
|
|
|
83
|
+
/**
|
|
84
|
+
* The name of the geometry.
|
|
85
|
+
*
|
|
86
|
+
* @type {string}
|
|
87
|
+
*/
|
|
34
88
|
this.name = '';
|
|
35
89
|
this.type = 'BufferGeometry';
|
|
36
90
|
|
|
91
|
+
/**
|
|
92
|
+
* Allows for vertices to be re-used across multiple triangles; this is
|
|
93
|
+
* called using "indexed triangles". Each triangle is associated with the
|
|
94
|
+
* indices of three vertices. This attribute therefore stores the index of
|
|
95
|
+
* each vertex for each triangular face. If this attribute is not set, the
|
|
96
|
+
* renderer assumes that each three contiguous positions represent a single triangle.
|
|
97
|
+
*
|
|
98
|
+
* @type {?BufferAttribute}
|
|
99
|
+
* @default null
|
|
100
|
+
*/
|
|
37
101
|
this.index = null;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* A (storage) buffer attribute which was generated with a compute shader and
|
|
105
|
+
* now defines indirect draw calls.
|
|
106
|
+
*
|
|
107
|
+
* Can only be used with {@link WebGPURenderer} and a WebGPU backend.
|
|
108
|
+
*
|
|
109
|
+
* @type {?BufferAttribute}
|
|
110
|
+
* @default null
|
|
111
|
+
*/
|
|
38
112
|
this.indirect = null;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* This dictionary has as id the name of the attribute to be set and as value
|
|
116
|
+
* the buffer attribute to set it to. Rather than accessing this property directly,
|
|
117
|
+
* use `setAttribute()` and `getAttribute()` to access attributes of this geometry.
|
|
118
|
+
*
|
|
119
|
+
* @type {Object<string,(BufferAttribute|InterleavedBufferAttribute)>}
|
|
120
|
+
*/
|
|
39
121
|
this.attributes = {};
|
|
40
122
|
|
|
123
|
+
/**
|
|
124
|
+
* This dictionary holds the morph targets of the geometry.
|
|
125
|
+
*
|
|
126
|
+
* Note: Once the geometry has been rendered, the morph attribute data cannot
|
|
127
|
+
* be changed. You will have to call `dispose()?, and create a new geometry instance.
|
|
128
|
+
*
|
|
129
|
+
* @type {Object}
|
|
130
|
+
*/
|
|
41
131
|
this.morphAttributes = {};
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Used to control the morph target behavior; when set to `true`, the morph
|
|
135
|
+
* target data is treated as relative offsets, rather than as absolute
|
|
136
|
+
* positions/normals.
|
|
137
|
+
*
|
|
138
|
+
* @type {boolean}
|
|
139
|
+
* @default false
|
|
140
|
+
*/
|
|
42
141
|
this.morphTargetsRelative = false;
|
|
43
142
|
|
|
143
|
+
/**
|
|
144
|
+
* Split the geometry into groups, each of which will be rendered in a
|
|
145
|
+
* separate draw call. This allows an array of materials to be used with the geometry.
|
|
146
|
+
*
|
|
147
|
+
* Use `addGroup()` and `clearGroups()` to edit groups, rather than modifying this array directly.
|
|
148
|
+
*
|
|
149
|
+
* Every vertex and index must belong to exactly one group — groups must not share vertices or
|
|
150
|
+
* indices, and must not leave vertices or indices unused.
|
|
151
|
+
*
|
|
152
|
+
* @type {Array<Object>}
|
|
153
|
+
*/
|
|
44
154
|
this.groups = [];
|
|
45
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Bounding box for the geometry which can be calculated with `computeBoundingBox()`.
|
|
158
|
+
*
|
|
159
|
+
* @type {Box3}
|
|
160
|
+
* @default null
|
|
161
|
+
*/
|
|
46
162
|
this.boundingBox = null;
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Bounding sphere for the geometry which can be calculated with `computeBoundingSphere()`.
|
|
166
|
+
*
|
|
167
|
+
* @type {Sphere}
|
|
168
|
+
* @default null
|
|
169
|
+
*/
|
|
47
170
|
this.boundingSphere = null;
|
|
48
171
|
|
|
172
|
+
/**
|
|
173
|
+
* Determines the part of the geometry to render. This should not be set directly,
|
|
174
|
+
* instead use `setDrawRange()`.
|
|
175
|
+
*
|
|
176
|
+
* @type {{start:number,count:number}}
|
|
177
|
+
*/
|
|
49
178
|
this.drawRange = { start: 0, count: Infinity };
|
|
50
179
|
|
|
180
|
+
/**
|
|
181
|
+
* An object that can be used to store custom data about the geometry.
|
|
182
|
+
* It should not hold references to functions as these will not be cloned.
|
|
183
|
+
*
|
|
184
|
+
* @type {Object}
|
|
185
|
+
*/
|
|
51
186
|
this.userData = {};
|
|
52
187
|
|
|
53
188
|
}
|
|
54
189
|
|
|
190
|
+
/**
|
|
191
|
+
* Returns the index of this geometry.
|
|
192
|
+
*
|
|
193
|
+
* @return {?BufferAttribute} The index. Returns `null` if no index is defined.
|
|
194
|
+
*/
|
|
55
195
|
getIndex() {
|
|
56
196
|
|
|
57
197
|
return this.index;
|
|
58
198
|
|
|
59
199
|
}
|
|
60
200
|
|
|
201
|
+
/**
|
|
202
|
+
* Sets the given index to this geometry.
|
|
203
|
+
*
|
|
204
|
+
* @param {Array<number>|BufferAttribute} index - The index to set.
|
|
205
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
206
|
+
*/
|
|
61
207
|
setIndex( index ) {
|
|
62
208
|
|
|
63
209
|
if ( Array.isArray( index ) ) {
|
|
@@ -74,6 +220,12 @@ class BufferGeometry extends EventDispatcher {
|
|
|
74
220
|
|
|
75
221
|
}
|
|
76
222
|
|
|
223
|
+
/**
|
|
224
|
+
* Sets the given indirect attribute to this geometry.
|
|
225
|
+
*
|
|
226
|
+
* @param {BufferAttribute} indirect - The attribute holding indirect draw calls.
|
|
227
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
228
|
+
*/
|
|
77
229
|
setIndirect( indirect ) {
|
|
78
230
|
|
|
79
231
|
this.indirect = indirect;
|
|
@@ -82,18 +234,37 @@ class BufferGeometry extends EventDispatcher {
|
|
|
82
234
|
|
|
83
235
|
}
|
|
84
236
|
|
|
237
|
+
/**
|
|
238
|
+
* Returns the indirect attribute of this geometry.
|
|
239
|
+
*
|
|
240
|
+
* @return {?BufferAttribute} The indirect attribute. Returns `null` if no indirect attribute is defined.
|
|
241
|
+
*/
|
|
85
242
|
getIndirect() {
|
|
86
243
|
|
|
87
244
|
return this.indirect;
|
|
88
245
|
|
|
89
246
|
}
|
|
90
247
|
|
|
248
|
+
/**
|
|
249
|
+
* Returns the buffer attribute for the given name.
|
|
250
|
+
*
|
|
251
|
+
* @param {string} name - The attribute name.
|
|
252
|
+
* @return {BufferAttribute|InterleavedBufferAttribute|undefined} The buffer attribute.
|
|
253
|
+
* Returns `undefined` if not attribute has been found.
|
|
254
|
+
*/
|
|
91
255
|
getAttribute( name ) {
|
|
92
256
|
|
|
93
257
|
return this.attributes[ name ];
|
|
94
258
|
|
|
95
259
|
}
|
|
96
260
|
|
|
261
|
+
/**
|
|
262
|
+
* Sets the given attribute for the given name.
|
|
263
|
+
*
|
|
264
|
+
* @param {string} name - The attribute name.
|
|
265
|
+
* @param {BufferAttribute|InterleavedBufferAttribute} attribute - The attribute to set.
|
|
266
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
267
|
+
*/
|
|
97
268
|
setAttribute( name, attribute ) {
|
|
98
269
|
|
|
99
270
|
this.attributes[ name ] = attribute;
|
|
@@ -102,6 +273,12 @@ class BufferGeometry extends EventDispatcher {
|
|
|
102
273
|
|
|
103
274
|
}
|
|
104
275
|
|
|
276
|
+
/**
|
|
277
|
+
* Deletes the attribute for the given name.
|
|
278
|
+
*
|
|
279
|
+
* @param {string} name - The attribute name to delete.
|
|
280
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
281
|
+
*/
|
|
105
282
|
deleteAttribute( name ) {
|
|
106
283
|
|
|
107
284
|
delete this.attributes[ name ];
|
|
@@ -110,12 +287,26 @@ class BufferGeometry extends EventDispatcher {
|
|
|
110
287
|
|
|
111
288
|
}
|
|
112
289
|
|
|
290
|
+
/**
|
|
291
|
+
* Returns `true` if this geometry has an attribute for the given name.
|
|
292
|
+
*
|
|
293
|
+
* @param {string} name - The attribute name.
|
|
294
|
+
* @return {boolean} Whether this geometry has an attribute for the given name or not.
|
|
295
|
+
*/
|
|
113
296
|
hasAttribute( name ) {
|
|
114
297
|
|
|
115
298
|
return this.attributes[ name ] !== undefined;
|
|
116
299
|
|
|
117
300
|
}
|
|
118
301
|
|
|
302
|
+
/**
|
|
303
|
+
* Adds a group to this geometry.
|
|
304
|
+
*
|
|
305
|
+
* @param {number} start - The first element in this draw call. That is the first
|
|
306
|
+
* vertex for non-indexed geometry, otherwise the first triangle index.
|
|
307
|
+
* @param {number} count - Specifies how many vertices (or indices) are part of this group.
|
|
308
|
+
* @param {number} [materialIndex=0] - The material array index to use.
|
|
309
|
+
*/
|
|
119
310
|
addGroup( start, count, materialIndex = 0 ) {
|
|
120
311
|
|
|
121
312
|
this.groups.push( {
|
|
@@ -128,12 +319,22 @@ class BufferGeometry extends EventDispatcher {
|
|
|
128
319
|
|
|
129
320
|
}
|
|
130
321
|
|
|
322
|
+
/**
|
|
323
|
+
* Clears all groups.
|
|
324
|
+
*/
|
|
131
325
|
clearGroups() {
|
|
132
326
|
|
|
133
327
|
this.groups = [];
|
|
134
328
|
|
|
135
329
|
}
|
|
136
330
|
|
|
331
|
+
/**
|
|
332
|
+
* Sets the draw range for this geometry.
|
|
333
|
+
*
|
|
334
|
+
* @param {number} start - The first vertex for non-indexed geometry, otherwise the first triangle index.
|
|
335
|
+
* @param {number} count - For non-indexed BufferGeometry, `count` is the number of vertices to render.
|
|
336
|
+
* For indexed BufferGeometry, `count` is the number of indices to render.
|
|
337
|
+
*/
|
|
137
338
|
setDrawRange( start, count ) {
|
|
138
339
|
|
|
139
340
|
this.drawRange.start = start;
|
|
@@ -141,6 +342,12 @@ class BufferGeometry extends EventDispatcher {
|
|
|
141
342
|
|
|
142
343
|
}
|
|
143
344
|
|
|
345
|
+
/**
|
|
346
|
+
* Applies the given 4x4 transformation matrix to the geometry.
|
|
347
|
+
*
|
|
348
|
+
* @param {Matrix4} matrix - The matrix to apply.
|
|
349
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
350
|
+
*/
|
|
144
351
|
applyMatrix4( matrix ) {
|
|
145
352
|
|
|
146
353
|
const position = this.attributes.position;
|
|
@@ -191,6 +398,12 @@ class BufferGeometry extends EventDispatcher {
|
|
|
191
398
|
|
|
192
399
|
}
|
|
193
400
|
|
|
401
|
+
/**
|
|
402
|
+
* Applies the rotation represented by the Quaternion to the geometry.
|
|
403
|
+
*
|
|
404
|
+
* @param {Quaternion} q - The Quaternion to apply.
|
|
405
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
406
|
+
*/
|
|
194
407
|
applyQuaternion( q ) {
|
|
195
408
|
|
|
196
409
|
_m1.makeRotationFromQuaternion( q );
|
|
@@ -201,6 +414,14 @@ class BufferGeometry extends EventDispatcher {
|
|
|
201
414
|
|
|
202
415
|
}
|
|
203
416
|
|
|
417
|
+
/**
|
|
418
|
+
* Rotates the geometry about the X axis. This is typically done as a one time
|
|
419
|
+
* operation, and not during a loop. Use {@link Object3D#rotation} for typical
|
|
420
|
+
* real-time mesh rotation.
|
|
421
|
+
*
|
|
422
|
+
* @param {number} angle - The angle in radians.
|
|
423
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
424
|
+
*/
|
|
204
425
|
rotateX( angle ) {
|
|
205
426
|
|
|
206
427
|
// rotate geometry around world x-axis
|
|
@@ -213,6 +434,14 @@ class BufferGeometry extends EventDispatcher {
|
|
|
213
434
|
|
|
214
435
|
}
|
|
215
436
|
|
|
437
|
+
/**
|
|
438
|
+
* Rotates the geometry about the Y axis. This is typically done as a one time
|
|
439
|
+
* operation, and not during a loop. Use {@link Object3D#rotation} for typical
|
|
440
|
+
* real-time mesh rotation.
|
|
441
|
+
*
|
|
442
|
+
* @param {number} angle - The angle in radians.
|
|
443
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
444
|
+
*/
|
|
216
445
|
rotateY( angle ) {
|
|
217
446
|
|
|
218
447
|
// rotate geometry around world y-axis
|
|
@@ -225,6 +454,14 @@ class BufferGeometry extends EventDispatcher {
|
|
|
225
454
|
|
|
226
455
|
}
|
|
227
456
|
|
|
457
|
+
/**
|
|
458
|
+
* Rotates the geometry about the Z axis. This is typically done as a one time
|
|
459
|
+
* operation, and not during a loop. Use {@link Object3D#rotation} for typical
|
|
460
|
+
* real-time mesh rotation.
|
|
461
|
+
*
|
|
462
|
+
* @param {number} angle - The angle in radians.
|
|
463
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
464
|
+
*/
|
|
228
465
|
rotateZ( angle ) {
|
|
229
466
|
|
|
230
467
|
// rotate geometry around world z-axis
|
|
@@ -237,6 +474,16 @@ class BufferGeometry extends EventDispatcher {
|
|
|
237
474
|
|
|
238
475
|
}
|
|
239
476
|
|
|
477
|
+
/**
|
|
478
|
+
* Translates the geometry. This is typically done as a one time
|
|
479
|
+
* operation, and not during a loop. Use {@link Object3D#position} for typical
|
|
480
|
+
* real-time mesh rotation.
|
|
481
|
+
*
|
|
482
|
+
* @param {number} x - The x offset.
|
|
483
|
+
* @param {number} y - The y offset.
|
|
484
|
+
* @param {number} z - The z offset.
|
|
485
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
486
|
+
*/
|
|
240
487
|
translate( x, y, z ) {
|
|
241
488
|
|
|
242
489
|
// translate geometry
|
|
@@ -249,6 +496,16 @@ class BufferGeometry extends EventDispatcher {
|
|
|
249
496
|
|
|
250
497
|
}
|
|
251
498
|
|
|
499
|
+
/**
|
|
500
|
+
* Scales the geometry. This is typically done as a one time
|
|
501
|
+
* operation, and not during a loop. Use {@link Object3D#scale} for typical
|
|
502
|
+
* real-time mesh rotation.
|
|
503
|
+
*
|
|
504
|
+
* @param {number} x - The x scale.
|
|
505
|
+
* @param {number} y - The y scale.
|
|
506
|
+
* @param {number} z - The z scale.
|
|
507
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
508
|
+
*/
|
|
252
509
|
scale( x, y, z ) {
|
|
253
510
|
|
|
254
511
|
// scale geometry
|
|
@@ -261,6 +518,14 @@ class BufferGeometry extends EventDispatcher {
|
|
|
261
518
|
|
|
262
519
|
}
|
|
263
520
|
|
|
521
|
+
/**
|
|
522
|
+
* Rotates the geometry to face a point in 3D space. This is typically done as a one time
|
|
523
|
+
* operation, and not during a loop. Use {@link Object3D#lookAt} for typical
|
|
524
|
+
* real-time mesh rotation.
|
|
525
|
+
*
|
|
526
|
+
* @param {Vector3} vector - The target point.
|
|
527
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
528
|
+
*/
|
|
264
529
|
lookAt( vector ) {
|
|
265
530
|
|
|
266
531
|
_obj.lookAt( vector );
|
|
@@ -273,6 +538,11 @@ class BufferGeometry extends EventDispatcher {
|
|
|
273
538
|
|
|
274
539
|
}
|
|
275
540
|
|
|
541
|
+
/**
|
|
542
|
+
* Center the geometry based on its bounding box.
|
|
543
|
+
*
|
|
544
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
545
|
+
*/
|
|
276
546
|
center() {
|
|
277
547
|
|
|
278
548
|
this.computeBoundingBox();
|
|
@@ -285,6 +555,17 @@ class BufferGeometry extends EventDispatcher {
|
|
|
285
555
|
|
|
286
556
|
}
|
|
287
557
|
|
|
558
|
+
/**
|
|
559
|
+
* Defines a geometry by creating a `position` attribute based on the given array of points. The array
|
|
560
|
+
* can hold 2D or 3D vectors. When using two-dimensional data, the `z` coordinate for all vertices is
|
|
561
|
+
* set to `0`.
|
|
562
|
+
*
|
|
563
|
+
* If the method is used with an existing `position` attribute, the vertex data are overwritten with the
|
|
564
|
+
* data from the array. The length of the array must match the vertex count.
|
|
565
|
+
*
|
|
566
|
+
* @param {Array<Vector2>|Array<Vector3>} points - The points.
|
|
567
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
568
|
+
*/
|
|
288
569
|
setFromPoints( points ) {
|
|
289
570
|
|
|
290
571
|
const positionAttribute = this.getAttribute( 'position' );
|
|
@@ -327,6 +608,11 @@ class BufferGeometry extends EventDispatcher {
|
|
|
327
608
|
|
|
328
609
|
}
|
|
329
610
|
|
|
611
|
+
/**
|
|
612
|
+
* Computes the bounding box of the geometry, and updates the `boundingBox` member.
|
|
613
|
+
* The bounding box is not computed by the engine; it must be computed by your app.
|
|
614
|
+
* You may need to recompute the bounding box if the geometry vertices are modified.
|
|
615
|
+
*/
|
|
330
616
|
computeBoundingBox() {
|
|
331
617
|
|
|
332
618
|
if ( this.boundingBox === null ) {
|
|
@@ -397,6 +683,11 @@ class BufferGeometry extends EventDispatcher {
|
|
|
397
683
|
|
|
398
684
|
}
|
|
399
685
|
|
|
686
|
+
/**
|
|
687
|
+
* Computes the bounding sphere of the geometry, and updates the `boundingSphere` member.
|
|
688
|
+
* The engine automatically computes the bounding sphere when it is needed, e.g., for ray casting or view frustum culling.
|
|
689
|
+
* You may need to recompute the bounding sphere if the geometry vertices are modified.
|
|
690
|
+
*/
|
|
400
691
|
computeBoundingSphere() {
|
|
401
692
|
|
|
402
693
|
if ( this.boundingSphere === null ) {
|
|
@@ -509,6 +800,13 @@ class BufferGeometry extends EventDispatcher {
|
|
|
509
800
|
|
|
510
801
|
}
|
|
511
802
|
|
|
803
|
+
/**
|
|
804
|
+
* Calculates and adds a tangent attribute to this geometry.
|
|
805
|
+
*
|
|
806
|
+
* The computation is only supported for indexed geometries and if position, normal, and uv attributes
|
|
807
|
+
* are defined. When using a tangent space normal map, prefer the MikkTSpace algorithm provided by
|
|
808
|
+
* {@link BufferGeometryUtils#computeMikkTSpaceTangents} instead.
|
|
809
|
+
*/
|
|
512
810
|
computeTangents() {
|
|
513
811
|
|
|
514
812
|
const index = this.index;
|
|
@@ -668,6 +966,12 @@ class BufferGeometry extends EventDispatcher {
|
|
|
668
966
|
|
|
669
967
|
}
|
|
670
968
|
|
|
969
|
+
/**
|
|
970
|
+
* Computes vertex normals for the given vertex data. For indexed geometries, the method sets
|
|
971
|
+
* each vertex normal to be the average of the face normals of the faces that share that vertex.
|
|
972
|
+
* For non-indexed geometries, vertices are not shared, and the method sets each vertex normal
|
|
973
|
+
* to be the same as the face normal.
|
|
974
|
+
*/
|
|
671
975
|
computeVertexNormals() {
|
|
672
976
|
|
|
673
977
|
const index = this.index;
|
|
@@ -760,6 +1064,10 @@ class BufferGeometry extends EventDispatcher {
|
|
|
760
1064
|
|
|
761
1065
|
}
|
|
762
1066
|
|
|
1067
|
+
/**
|
|
1068
|
+
* Ensures every normal vector in a geometry will have a magnitude of `1`. This will
|
|
1069
|
+
* correct lighting on the geometry surfaces.
|
|
1070
|
+
*/
|
|
763
1071
|
normalizeNormals() {
|
|
764
1072
|
|
|
765
1073
|
const normals = this.attributes.normal;
|
|
@@ -776,6 +1084,12 @@ class BufferGeometry extends EventDispatcher {
|
|
|
776
1084
|
|
|
777
1085
|
}
|
|
778
1086
|
|
|
1087
|
+
/**
|
|
1088
|
+
* Return a new non-index version of this indexed geometry. If the geometry
|
|
1089
|
+
* is already non-indexed, the method is a NOOP.
|
|
1090
|
+
*
|
|
1091
|
+
* @return {BufferGeometry} The non-indexed version of this indexed geometry.
|
|
1092
|
+
*/
|
|
779
1093
|
toNonIndexed() {
|
|
780
1094
|
|
|
781
1095
|
function convertBufferAttribute( attribute, indices ) {
|
|
@@ -878,6 +1192,11 @@ class BufferGeometry extends EventDispatcher {
|
|
|
878
1192
|
|
|
879
1193
|
}
|
|
880
1194
|
|
|
1195
|
+
/**
|
|
1196
|
+
* Serializes the geometry into JSON.
|
|
1197
|
+
*
|
|
1198
|
+
* @return {Object} A JSON object representing the serialized geometry.
|
|
1199
|
+
*/
|
|
881
1200
|
toJSON() {
|
|
882
1201
|
|
|
883
1202
|
const data = {
|
|
@@ -991,12 +1310,23 @@ class BufferGeometry extends EventDispatcher {
|
|
|
991
1310
|
|
|
992
1311
|
}
|
|
993
1312
|
|
|
1313
|
+
/**
|
|
1314
|
+
* Returns a new geometry with copied values from this instance.
|
|
1315
|
+
*
|
|
1316
|
+
* @return {BufferGeometry} A clone of this instance.
|
|
1317
|
+
*/
|
|
994
1318
|
clone() {
|
|
995
1319
|
|
|
996
1320
|
return new this.constructor().copy( this );
|
|
997
1321
|
|
|
998
1322
|
}
|
|
999
1323
|
|
|
1324
|
+
/**
|
|
1325
|
+
* Copies the values of the given geometry to this instance.
|
|
1326
|
+
*
|
|
1327
|
+
* @param {BufferGeometry} source - The geometry to copy.
|
|
1328
|
+
* @return {BufferGeometry} A reference to this instance.
|
|
1329
|
+
*/
|
|
1000
1330
|
copy( source ) {
|
|
1001
1331
|
|
|
1002
1332
|
// reset
|
|
@@ -1022,7 +1352,7 @@ class BufferGeometry extends EventDispatcher {
|
|
|
1022
1352
|
|
|
1023
1353
|
if ( index !== null ) {
|
|
1024
1354
|
|
|
1025
|
-
this.setIndex( index.clone(
|
|
1355
|
+
this.setIndex( index.clone() );
|
|
1026
1356
|
|
|
1027
1357
|
}
|
|
1028
1358
|
|
|
@@ -1102,6 +1432,12 @@ class BufferGeometry extends EventDispatcher {
|
|
|
1102
1432
|
|
|
1103
1433
|
}
|
|
1104
1434
|
|
|
1435
|
+
/**
|
|
1436
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
1437
|
+
* method whenever this instance is no longer used in your app.
|
|
1438
|
+
*
|
|
1439
|
+
* @fires BufferGeometry#dispose
|
|
1440
|
+
*/
|
|
1105
1441
|
dispose() {
|
|
1106
1442
|
|
|
1107
1443
|
this.dispatchEvent( { type: 'dispose' } );
|
package/src/core/Clock.js
CHANGED
|
@@ -1,17 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Class for keeping track of time.
|
|
3
|
+
*/
|
|
1
4
|
class Clock {
|
|
2
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Constructs a new clock.
|
|
8
|
+
*
|
|
9
|
+
* @param {boolean} [autoStart=true] - Whether to automatically start the clock when
|
|
10
|
+
* `getDelta()` is called for the first time.
|
|
11
|
+
*/
|
|
3
12
|
constructor( autoStart = true ) {
|
|
4
13
|
|
|
14
|
+
/**
|
|
15
|
+
* If set to `true`, the clock starts automatically when `getDelta()` is called
|
|
16
|
+
* for the first time.
|
|
17
|
+
*
|
|
18
|
+
* @type {boolean}
|
|
19
|
+
* @default true
|
|
20
|
+
*/
|
|
5
21
|
this.autoStart = autoStart;
|
|
6
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Holds the time at which the clock's `start()` method was last called.
|
|
25
|
+
*
|
|
26
|
+
* @type {number}
|
|
27
|
+
* @default 0
|
|
28
|
+
*/
|
|
7
29
|
this.startTime = 0;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Holds the time at which the clock's `start()`, `getElapsedTime()` or
|
|
33
|
+
* `getDelta()` methods were last called.
|
|
34
|
+
*
|
|
35
|
+
* @type {number}
|
|
36
|
+
* @default 0
|
|
37
|
+
*/
|
|
8
38
|
this.oldTime = 0;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Keeps track of the total time that the clock has been running.
|
|
42
|
+
*
|
|
43
|
+
* @type {number}
|
|
44
|
+
* @default 0
|
|
45
|
+
*/
|
|
9
46
|
this.elapsedTime = 0;
|
|
10
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Whether the clock is running or not.
|
|
50
|
+
*
|
|
51
|
+
* @type {boolean}
|
|
52
|
+
* @default true
|
|
53
|
+
*/
|
|
11
54
|
this.running = false;
|
|
12
55
|
|
|
13
56
|
}
|
|
14
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Starts the clock. When `autoStart` is set to `true`, the method is automatically
|
|
60
|
+
* called by the class.
|
|
61
|
+
*/
|
|
15
62
|
start() {
|
|
16
63
|
|
|
17
64
|
this.startTime = now();
|
|
@@ -22,6 +69,9 @@ class Clock {
|
|
|
22
69
|
|
|
23
70
|
}
|
|
24
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Stops the clock.
|
|
74
|
+
*/
|
|
25
75
|
stop() {
|
|
26
76
|
|
|
27
77
|
this.getElapsedTime();
|
|
@@ -30,6 +80,11 @@ class Clock {
|
|
|
30
80
|
|
|
31
81
|
}
|
|
32
82
|
|
|
83
|
+
/**
|
|
84
|
+
* Returns the elapsed time in seconds.
|
|
85
|
+
*
|
|
86
|
+
* @return {number} The elapsed time.
|
|
87
|
+
*/
|
|
33
88
|
getElapsedTime() {
|
|
34
89
|
|
|
35
90
|
this.getDelta();
|
|
@@ -37,6 +92,11 @@ class Clock {
|
|
|
37
92
|
|
|
38
93
|
}
|
|
39
94
|
|
|
95
|
+
/**
|
|
96
|
+
* Returns the delta time in seconds.
|
|
97
|
+
*
|
|
98
|
+
* @return {number} The delta time.
|
|
99
|
+
*/
|
|
40
100
|
getDelta() {
|
|
41
101
|
|
|
42
102
|
let diff = 0;
|