@plastic-software/three 0.167.3 → 0.174.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/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +36277 -24023
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46743
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50670
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
package/src/math/Vector4.js
CHANGED
|
@@ -1,16 +1,85 @@
|
|
|
1
|
+
import { clamp } from './MathUtils.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Class representing a 4D vector. A 4D vector is an ordered quadruplet of numbers
|
|
5
|
+
* (labeled x, y, z and w), which can be used to represent a number of things, such as:
|
|
6
|
+
*
|
|
7
|
+
* - A point in 4D space.
|
|
8
|
+
* - A direction and length in 4D space. In three.js the length will
|
|
9
|
+
* always be the Euclidean distance(straight-line distance) from `(0, 0, 0, 0)` to `(x, y, z, w)`
|
|
10
|
+
* and the direction is also measured from `(0, 0, 0, 0)` towards `(x, y, z, w)`.
|
|
11
|
+
* - Any arbitrary ordered quadruplet of numbers.
|
|
12
|
+
*
|
|
13
|
+
* There are other things a 4D vector can be used to represent, however these
|
|
14
|
+
* are the most common uses in *three.js*.
|
|
15
|
+
*
|
|
16
|
+
* Iterating through a vector instance will yield its components `(x, y, z, w)` in
|
|
17
|
+
* the corresponding order.
|
|
18
|
+
* ```js
|
|
19
|
+
* const a = new THREE.Vector4( 0, 1, 0, 0 );
|
|
20
|
+
*
|
|
21
|
+
* //no arguments; will be initialised to (0, 0, 0, 1)
|
|
22
|
+
* const b = new THREE.Vector4( );
|
|
23
|
+
*
|
|
24
|
+
* const d = a.dot( b );
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
1
27
|
class Vector4 {
|
|
2
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Constructs a new 4D vector.
|
|
31
|
+
*
|
|
32
|
+
* @param {number} [x=0] - The x value of this vector.
|
|
33
|
+
* @param {number} [y=0] - The y value of this vector.
|
|
34
|
+
* @param {number} [z=0] - The z value of this vector.
|
|
35
|
+
* @param {number} [w=1] - The w value of this vector.
|
|
36
|
+
*/
|
|
3
37
|
constructor( x = 0, y = 0, z = 0, w = 1 ) {
|
|
4
38
|
|
|
39
|
+
/**
|
|
40
|
+
* This flag can be used for type testing.
|
|
41
|
+
*
|
|
42
|
+
* @type {boolean}
|
|
43
|
+
* @readonly
|
|
44
|
+
* @default true
|
|
45
|
+
*/
|
|
5
46
|
Vector4.prototype.isVector4 = true;
|
|
6
47
|
|
|
48
|
+
/**
|
|
49
|
+
* The x value of this vector.
|
|
50
|
+
*
|
|
51
|
+
* @type {number}
|
|
52
|
+
*/
|
|
7
53
|
this.x = x;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The y value of this vector.
|
|
57
|
+
*
|
|
58
|
+
* @type {number}
|
|
59
|
+
*/
|
|
8
60
|
this.y = y;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The z value of this vector.
|
|
64
|
+
*
|
|
65
|
+
* @type {number}
|
|
66
|
+
*/
|
|
9
67
|
this.z = z;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* The w value of this vector.
|
|
71
|
+
*
|
|
72
|
+
* @type {number}
|
|
73
|
+
*/
|
|
10
74
|
this.w = w;
|
|
11
75
|
|
|
12
76
|
}
|
|
13
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Alias for {@link Vector4#z}.
|
|
80
|
+
*
|
|
81
|
+
* @type {number}
|
|
82
|
+
*/
|
|
14
83
|
get width() {
|
|
15
84
|
|
|
16
85
|
return this.z;
|
|
@@ -23,6 +92,11 @@ class Vector4 {
|
|
|
23
92
|
|
|
24
93
|
}
|
|
25
94
|
|
|
95
|
+
/**
|
|
96
|
+
* Alias for {@link Vector4#w}.
|
|
97
|
+
*
|
|
98
|
+
* @type {number}
|
|
99
|
+
*/
|
|
26
100
|
get height() {
|
|
27
101
|
|
|
28
102
|
return this.w;
|
|
@@ -35,6 +109,15 @@ class Vector4 {
|
|
|
35
109
|
|
|
36
110
|
}
|
|
37
111
|
|
|
112
|
+
/**
|
|
113
|
+
* Sets the vector components.
|
|
114
|
+
*
|
|
115
|
+
* @param {number} x - The value of the x component.
|
|
116
|
+
* @param {number} y - The value of the y component.
|
|
117
|
+
* @param {number} z - The value of the z component.
|
|
118
|
+
* @param {number} w - The value of the w component.
|
|
119
|
+
* @return {Vector4} A reference to this vector.
|
|
120
|
+
*/
|
|
38
121
|
set( x, y, z, w ) {
|
|
39
122
|
|
|
40
123
|
this.x = x;
|
|
@@ -46,6 +129,12 @@ class Vector4 {
|
|
|
46
129
|
|
|
47
130
|
}
|
|
48
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Sets the vector components to the same value.
|
|
134
|
+
*
|
|
135
|
+
* @param {number} scalar - The value to set for all vector components.
|
|
136
|
+
* @return {Vector4} A reference to this vector.
|
|
137
|
+
*/
|
|
49
138
|
setScalar( scalar ) {
|
|
50
139
|
|
|
51
140
|
this.x = scalar;
|
|
@@ -57,6 +146,12 @@ class Vector4 {
|
|
|
57
146
|
|
|
58
147
|
}
|
|
59
148
|
|
|
149
|
+
/**
|
|
150
|
+
* Sets the vector's x component to the given value
|
|
151
|
+
*
|
|
152
|
+
* @param {number} x - The value to set.
|
|
153
|
+
* @return {Vector4} A reference to this vector.
|
|
154
|
+
*/
|
|
60
155
|
setX( x ) {
|
|
61
156
|
|
|
62
157
|
this.x = x;
|
|
@@ -65,6 +160,12 @@ class Vector4 {
|
|
|
65
160
|
|
|
66
161
|
}
|
|
67
162
|
|
|
163
|
+
/**
|
|
164
|
+
* Sets the vector's y component to the given value
|
|
165
|
+
*
|
|
166
|
+
* @param {number} y - The value to set.
|
|
167
|
+
* @return {Vector4} A reference to this vector.
|
|
168
|
+
*/
|
|
68
169
|
setY( y ) {
|
|
69
170
|
|
|
70
171
|
this.y = y;
|
|
@@ -73,6 +174,12 @@ class Vector4 {
|
|
|
73
174
|
|
|
74
175
|
}
|
|
75
176
|
|
|
177
|
+
/**
|
|
178
|
+
* Sets the vector's z component to the given value
|
|
179
|
+
*
|
|
180
|
+
* @param {number} z - The value to set.
|
|
181
|
+
* @return {Vector4} A reference to this vector.
|
|
182
|
+
*/
|
|
76
183
|
setZ( z ) {
|
|
77
184
|
|
|
78
185
|
this.z = z;
|
|
@@ -81,6 +188,12 @@ class Vector4 {
|
|
|
81
188
|
|
|
82
189
|
}
|
|
83
190
|
|
|
191
|
+
/**
|
|
192
|
+
* Sets the vector's w component to the given value
|
|
193
|
+
*
|
|
194
|
+
* @param {number} w - The value to set.
|
|
195
|
+
* @return {Vector4} A reference to this vector.
|
|
196
|
+
*/
|
|
84
197
|
setW( w ) {
|
|
85
198
|
|
|
86
199
|
this.w = w;
|
|
@@ -89,6 +202,14 @@ class Vector4 {
|
|
|
89
202
|
|
|
90
203
|
}
|
|
91
204
|
|
|
205
|
+
/**
|
|
206
|
+
* Allows to set a vector component with an index.
|
|
207
|
+
*
|
|
208
|
+
* @param {number} index - The component index. `0` equals to x, `1` equals to y,
|
|
209
|
+
* `2` equals to z, `3` equals to w.
|
|
210
|
+
* @param {number} value - The value to set.
|
|
211
|
+
* @return {Vector4} A reference to this vector.
|
|
212
|
+
*/
|
|
92
213
|
setComponent( index, value ) {
|
|
93
214
|
|
|
94
215
|
switch ( index ) {
|
|
@@ -105,6 +226,13 @@ class Vector4 {
|
|
|
105
226
|
|
|
106
227
|
}
|
|
107
228
|
|
|
229
|
+
/**
|
|
230
|
+
* Returns the value of the vector component which matches the given index.
|
|
231
|
+
*
|
|
232
|
+
* @param {number} index - The component index. `0` equals to x, `1` equals to y,
|
|
233
|
+
* `2` equals to z, `3` equals to w.
|
|
234
|
+
* @return {number} A vector component value.
|
|
235
|
+
*/
|
|
108
236
|
getComponent( index ) {
|
|
109
237
|
|
|
110
238
|
switch ( index ) {
|
|
@@ -119,12 +247,23 @@ class Vector4 {
|
|
|
119
247
|
|
|
120
248
|
}
|
|
121
249
|
|
|
250
|
+
/**
|
|
251
|
+
* Returns a new vector with copied values from this instance.
|
|
252
|
+
*
|
|
253
|
+
* @return {Vector4} A clone of this instance.
|
|
254
|
+
*/
|
|
122
255
|
clone() {
|
|
123
256
|
|
|
124
257
|
return new this.constructor( this.x, this.y, this.z, this.w );
|
|
125
258
|
|
|
126
259
|
}
|
|
127
260
|
|
|
261
|
+
/**
|
|
262
|
+
* Copies the values of the given vector to this instance.
|
|
263
|
+
*
|
|
264
|
+
* @param {Vector3|Vector4} v - The vector to copy.
|
|
265
|
+
* @return {Vector4} A reference to this vector.
|
|
266
|
+
*/
|
|
128
267
|
copy( v ) {
|
|
129
268
|
|
|
130
269
|
this.x = v.x;
|
|
@@ -136,6 +275,12 @@ class Vector4 {
|
|
|
136
275
|
|
|
137
276
|
}
|
|
138
277
|
|
|
278
|
+
/**
|
|
279
|
+
* Adds the given vector to this instance.
|
|
280
|
+
*
|
|
281
|
+
* @param {Vector4} v - The vector to add.
|
|
282
|
+
* @return {Vector4} A reference to this vector.
|
|
283
|
+
*/
|
|
139
284
|
add( v ) {
|
|
140
285
|
|
|
141
286
|
this.x += v.x;
|
|
@@ -147,6 +292,12 @@ class Vector4 {
|
|
|
147
292
|
|
|
148
293
|
}
|
|
149
294
|
|
|
295
|
+
/**
|
|
296
|
+
* Adds the given scalar value to all components of this instance.
|
|
297
|
+
*
|
|
298
|
+
* @param {number} s - The scalar to add.
|
|
299
|
+
* @return {Vector4} A reference to this vector.
|
|
300
|
+
*/
|
|
150
301
|
addScalar( s ) {
|
|
151
302
|
|
|
152
303
|
this.x += s;
|
|
@@ -158,6 +309,13 @@ class Vector4 {
|
|
|
158
309
|
|
|
159
310
|
}
|
|
160
311
|
|
|
312
|
+
/**
|
|
313
|
+
* Adds the given vectors and stores the result in this instance.
|
|
314
|
+
*
|
|
315
|
+
* @param {Vector4} a - The first vector.
|
|
316
|
+
* @param {Vector4} b - The second vector.
|
|
317
|
+
* @return {Vector4} A reference to this vector.
|
|
318
|
+
*/
|
|
161
319
|
addVectors( a, b ) {
|
|
162
320
|
|
|
163
321
|
this.x = a.x + b.x;
|
|
@@ -169,6 +327,13 @@ class Vector4 {
|
|
|
169
327
|
|
|
170
328
|
}
|
|
171
329
|
|
|
330
|
+
/**
|
|
331
|
+
* Adds the given vector scaled by the given factor to this instance.
|
|
332
|
+
*
|
|
333
|
+
* @param {Vector4} v - The vector.
|
|
334
|
+
* @param {number} s - The factor that scales `v`.
|
|
335
|
+
* @return {Vector4} A reference to this vector.
|
|
336
|
+
*/
|
|
172
337
|
addScaledVector( v, s ) {
|
|
173
338
|
|
|
174
339
|
this.x += v.x * s;
|
|
@@ -180,6 +345,12 @@ class Vector4 {
|
|
|
180
345
|
|
|
181
346
|
}
|
|
182
347
|
|
|
348
|
+
/**
|
|
349
|
+
* Subtracts the given vector from this instance.
|
|
350
|
+
*
|
|
351
|
+
* @param {Vector4} v - The vector to subtract.
|
|
352
|
+
* @return {Vector4} A reference to this vector.
|
|
353
|
+
*/
|
|
183
354
|
sub( v ) {
|
|
184
355
|
|
|
185
356
|
this.x -= v.x;
|
|
@@ -191,6 +362,12 @@ class Vector4 {
|
|
|
191
362
|
|
|
192
363
|
}
|
|
193
364
|
|
|
365
|
+
/**
|
|
366
|
+
* Subtracts the given scalar value from all components of this instance.
|
|
367
|
+
*
|
|
368
|
+
* @param {number} s - The scalar to subtract.
|
|
369
|
+
* @return {Vector4} A reference to this vector.
|
|
370
|
+
*/
|
|
194
371
|
subScalar( s ) {
|
|
195
372
|
|
|
196
373
|
this.x -= s;
|
|
@@ -202,6 +379,13 @@ class Vector4 {
|
|
|
202
379
|
|
|
203
380
|
}
|
|
204
381
|
|
|
382
|
+
/**
|
|
383
|
+
* Subtracts the given vectors and stores the result in this instance.
|
|
384
|
+
*
|
|
385
|
+
* @param {Vector4} a - The first vector.
|
|
386
|
+
* @param {Vector4} b - The second vector.
|
|
387
|
+
* @return {Vector4} A reference to this vector.
|
|
388
|
+
*/
|
|
205
389
|
subVectors( a, b ) {
|
|
206
390
|
|
|
207
391
|
this.x = a.x - b.x;
|
|
@@ -213,6 +397,12 @@ class Vector4 {
|
|
|
213
397
|
|
|
214
398
|
}
|
|
215
399
|
|
|
400
|
+
/**
|
|
401
|
+
* Multiplies the given vector with this instance.
|
|
402
|
+
*
|
|
403
|
+
* @param {Vector4} v - The vector to multiply.
|
|
404
|
+
* @return {Vector4} A reference to this vector.
|
|
405
|
+
*/
|
|
216
406
|
multiply( v ) {
|
|
217
407
|
|
|
218
408
|
this.x *= v.x;
|
|
@@ -224,6 +414,12 @@ class Vector4 {
|
|
|
224
414
|
|
|
225
415
|
}
|
|
226
416
|
|
|
417
|
+
/**
|
|
418
|
+
* Multiplies the given scalar value with all components of this instance.
|
|
419
|
+
*
|
|
420
|
+
* @param {number} scalar - The scalar to multiply.
|
|
421
|
+
* @return {Vector4} A reference to this vector.
|
|
422
|
+
*/
|
|
227
423
|
multiplyScalar( scalar ) {
|
|
228
424
|
|
|
229
425
|
this.x *= scalar;
|
|
@@ -235,6 +431,12 @@ class Vector4 {
|
|
|
235
431
|
|
|
236
432
|
}
|
|
237
433
|
|
|
434
|
+
/**
|
|
435
|
+
* Multiplies this vector with the given 4x4 matrix.
|
|
436
|
+
*
|
|
437
|
+
* @param {Matrix4} m - The 4x4 matrix.
|
|
438
|
+
* @return {Vector4} A reference to this vector.
|
|
439
|
+
*/
|
|
238
440
|
applyMatrix4( m ) {
|
|
239
441
|
|
|
240
442
|
const x = this.x, y = this.y, z = this.z, w = this.w;
|
|
@@ -249,12 +451,42 @@ class Vector4 {
|
|
|
249
451
|
|
|
250
452
|
}
|
|
251
453
|
|
|
454
|
+
/**
|
|
455
|
+
* Divides this instance by the given vector.
|
|
456
|
+
*
|
|
457
|
+
* @param {Vector4} v - The vector to divide.
|
|
458
|
+
* @return {Vector4} A reference to this vector.
|
|
459
|
+
*/
|
|
460
|
+
divide( v ) {
|
|
461
|
+
|
|
462
|
+
this.x /= v.x;
|
|
463
|
+
this.y /= v.y;
|
|
464
|
+
this.z /= v.z;
|
|
465
|
+
this.w /= v.w;
|
|
466
|
+
|
|
467
|
+
return this;
|
|
468
|
+
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
/**
|
|
472
|
+
* Divides this vector by the given scalar.
|
|
473
|
+
*
|
|
474
|
+
* @param {number} scalar - The scalar to divide.
|
|
475
|
+
* @return {Vector4} A reference to this vector.
|
|
476
|
+
*/
|
|
252
477
|
divideScalar( scalar ) {
|
|
253
478
|
|
|
254
479
|
return this.multiplyScalar( 1 / scalar );
|
|
255
480
|
|
|
256
481
|
}
|
|
257
482
|
|
|
483
|
+
/**
|
|
484
|
+
* Sets the x, y and z components of this
|
|
485
|
+
* vector to the quaternion's axis and w to the angle.
|
|
486
|
+
*
|
|
487
|
+
* @param {Quaternion} q - The Quaternion to set.
|
|
488
|
+
* @return {Vector4} A reference to this vector.
|
|
489
|
+
*/
|
|
258
490
|
setAxisAngleFromQuaternion( q ) {
|
|
259
491
|
|
|
260
492
|
// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm
|
|
@@ -283,6 +515,13 @@ class Vector4 {
|
|
|
283
515
|
|
|
284
516
|
}
|
|
285
517
|
|
|
518
|
+
/**
|
|
519
|
+
* Sets the x, y and z components of this
|
|
520
|
+
* vector to the axis of rotation and w to the angle.
|
|
521
|
+
*
|
|
522
|
+
* @param {Matrix4} m - A 4x4 matrix of which the upper left 3x3 matrix is a pure rotation matrix.
|
|
523
|
+
* @return {Vector4} A reference to this vector.
|
|
524
|
+
*/
|
|
286
525
|
setAxisAngleFromRotationMatrix( m ) {
|
|
287
526
|
|
|
288
527
|
// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm
|
|
@@ -413,6 +652,13 @@ class Vector4 {
|
|
|
413
652
|
|
|
414
653
|
}
|
|
415
654
|
|
|
655
|
+
/**
|
|
656
|
+
* Sets the vector components to the position elements of the
|
|
657
|
+
* given transformation matrix.
|
|
658
|
+
*
|
|
659
|
+
* @param {Matrix4} m - The 4x4 matrix.
|
|
660
|
+
* @return {Vector4} A reference to this vector.
|
|
661
|
+
*/
|
|
416
662
|
setFromMatrixPosition( m ) {
|
|
417
663
|
|
|
418
664
|
const e = m.elements;
|
|
@@ -426,6 +672,13 @@ class Vector4 {
|
|
|
426
672
|
|
|
427
673
|
}
|
|
428
674
|
|
|
675
|
+
/**
|
|
676
|
+
* If this vector's x, y, z or w value is greater than the given vector's x, y, z or w
|
|
677
|
+
* value, replace that value with the corresponding min value.
|
|
678
|
+
*
|
|
679
|
+
* @param {Vector4} v - The vector.
|
|
680
|
+
* @return {Vector4} A reference to this vector.
|
|
681
|
+
*/
|
|
429
682
|
min( v ) {
|
|
430
683
|
|
|
431
684
|
this.x = Math.min( this.x, v.x );
|
|
@@ -437,6 +690,13 @@ class Vector4 {
|
|
|
437
690
|
|
|
438
691
|
}
|
|
439
692
|
|
|
693
|
+
/**
|
|
694
|
+
* If this vector's x, y, z or w value is less than the given vector's x, y, z or w
|
|
695
|
+
* value, replace that value with the corresponding max value.
|
|
696
|
+
*
|
|
697
|
+
* @param {Vector4} v - The vector.
|
|
698
|
+
* @return {Vector4} A reference to this vector.
|
|
699
|
+
*/
|
|
440
700
|
max( v ) {
|
|
441
701
|
|
|
442
702
|
this.x = Math.max( this.x, v.x );
|
|
@@ -448,38 +708,73 @@ class Vector4 {
|
|
|
448
708
|
|
|
449
709
|
}
|
|
450
710
|
|
|
711
|
+
/**
|
|
712
|
+
* If this vector's x, y, z or w value is greater than the max vector's x, y, z or w
|
|
713
|
+
* value, it is replaced by the corresponding value.
|
|
714
|
+
* If this vector's x, y, z or w value is less than the min vector's x, y, z or w value,
|
|
715
|
+
* it is replaced by the corresponding value.
|
|
716
|
+
*
|
|
717
|
+
* @param {Vector4} min - The minimum x, y and z values.
|
|
718
|
+
* @param {Vector4} max - The maximum x, y and z values in the desired range.
|
|
719
|
+
* @return {Vector4} A reference to this vector.
|
|
720
|
+
*/
|
|
451
721
|
clamp( min, max ) {
|
|
452
722
|
|
|
453
723
|
// assumes min < max, componentwise
|
|
454
724
|
|
|
455
|
-
this.x =
|
|
456
|
-
this.y =
|
|
457
|
-
this.z =
|
|
458
|
-
this.w =
|
|
725
|
+
this.x = clamp( this.x, min.x, max.x );
|
|
726
|
+
this.y = clamp( this.y, min.y, max.y );
|
|
727
|
+
this.z = clamp( this.z, min.z, max.z );
|
|
728
|
+
this.w = clamp( this.w, min.w, max.w );
|
|
459
729
|
|
|
460
730
|
return this;
|
|
461
731
|
|
|
462
732
|
}
|
|
463
733
|
|
|
734
|
+
/**
|
|
735
|
+
* If this vector's x, y, z or w values are greater than the max value, they are
|
|
736
|
+
* replaced by the max value.
|
|
737
|
+
* If this vector's x, y, z or w values are less than the min value, they are
|
|
738
|
+
* replaced by the min value.
|
|
739
|
+
*
|
|
740
|
+
* @param {number} minVal - The minimum value the components will be clamped to.
|
|
741
|
+
* @param {number} maxVal - The maximum value the components will be clamped to.
|
|
742
|
+
* @return {Vector4} A reference to this vector.
|
|
743
|
+
*/
|
|
464
744
|
clampScalar( minVal, maxVal ) {
|
|
465
745
|
|
|
466
|
-
this.x =
|
|
467
|
-
this.y =
|
|
468
|
-
this.z =
|
|
469
|
-
this.w =
|
|
746
|
+
this.x = clamp( this.x, minVal, maxVal );
|
|
747
|
+
this.y = clamp( this.y, minVal, maxVal );
|
|
748
|
+
this.z = clamp( this.z, minVal, maxVal );
|
|
749
|
+
this.w = clamp( this.w, minVal, maxVal );
|
|
470
750
|
|
|
471
751
|
return this;
|
|
472
752
|
|
|
473
753
|
}
|
|
474
754
|
|
|
755
|
+
/**
|
|
756
|
+
* If this vector's length is greater than the max value, it is replaced by
|
|
757
|
+
* the max value.
|
|
758
|
+
* If this vector's length is less than the min value, it is replaced by the
|
|
759
|
+
* min value.
|
|
760
|
+
*
|
|
761
|
+
* @param {number} min - The minimum value the vector length will be clamped to.
|
|
762
|
+
* @param {number} max - The maximum value the vector length will be clamped to.
|
|
763
|
+
* @return {Vector4} A reference to this vector.
|
|
764
|
+
*/
|
|
475
765
|
clampLength( min, max ) {
|
|
476
766
|
|
|
477
767
|
const length = this.length();
|
|
478
768
|
|
|
479
|
-
return this.divideScalar( length || 1 ).multiplyScalar(
|
|
769
|
+
return this.divideScalar( length || 1 ).multiplyScalar( clamp( length, min, max ) );
|
|
480
770
|
|
|
481
771
|
}
|
|
482
772
|
|
|
773
|
+
/**
|
|
774
|
+
* The components of this vector are rounded down to the nearest integer value.
|
|
775
|
+
*
|
|
776
|
+
* @return {Vector4} A reference to this vector.
|
|
777
|
+
*/
|
|
483
778
|
floor() {
|
|
484
779
|
|
|
485
780
|
this.x = Math.floor( this.x );
|
|
@@ -491,6 +786,11 @@ class Vector4 {
|
|
|
491
786
|
|
|
492
787
|
}
|
|
493
788
|
|
|
789
|
+
/**
|
|
790
|
+
* The components of this vector are rounded up to the nearest integer value.
|
|
791
|
+
*
|
|
792
|
+
* @return {Vector4} A reference to this vector.
|
|
793
|
+
*/
|
|
494
794
|
ceil() {
|
|
495
795
|
|
|
496
796
|
this.x = Math.ceil( this.x );
|
|
@@ -502,6 +802,11 @@ class Vector4 {
|
|
|
502
802
|
|
|
503
803
|
}
|
|
504
804
|
|
|
805
|
+
/**
|
|
806
|
+
* The components of this vector are rounded to the nearest integer value
|
|
807
|
+
*
|
|
808
|
+
* @return {Vector4} A reference to this vector.
|
|
809
|
+
*/
|
|
505
810
|
round() {
|
|
506
811
|
|
|
507
812
|
this.x = Math.round( this.x );
|
|
@@ -513,6 +818,12 @@ class Vector4 {
|
|
|
513
818
|
|
|
514
819
|
}
|
|
515
820
|
|
|
821
|
+
/**
|
|
822
|
+
* The components of this vector are rounded towards zero (up if negative,
|
|
823
|
+
* down if positive) to an integer value.
|
|
824
|
+
*
|
|
825
|
+
* @return {Vector4} A reference to this vector.
|
|
826
|
+
*/
|
|
516
827
|
roundToZero() {
|
|
517
828
|
|
|
518
829
|
this.x = Math.trunc( this.x );
|
|
@@ -524,6 +835,11 @@ class Vector4 {
|
|
|
524
835
|
|
|
525
836
|
}
|
|
526
837
|
|
|
838
|
+
/**
|
|
839
|
+
* Inverts this vector - i.e. sets x = -x, y = -y, z = -z, w = -w.
|
|
840
|
+
*
|
|
841
|
+
* @return {Vector4} A reference to this vector.
|
|
842
|
+
*/
|
|
527
843
|
negate() {
|
|
528
844
|
|
|
529
845
|
this.x = - this.x;
|
|
@@ -535,42 +851,87 @@ class Vector4 {
|
|
|
535
851
|
|
|
536
852
|
}
|
|
537
853
|
|
|
854
|
+
/**
|
|
855
|
+
* Calculates the dot product of the given vector with this instance.
|
|
856
|
+
*
|
|
857
|
+
* @param {Vector4} v - The vector to compute the dot product with.
|
|
858
|
+
* @return {number} The result of the dot product.
|
|
859
|
+
*/
|
|
538
860
|
dot( v ) {
|
|
539
861
|
|
|
540
862
|
return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;
|
|
541
863
|
|
|
542
864
|
}
|
|
543
865
|
|
|
866
|
+
/**
|
|
867
|
+
* Computes the square of the Euclidean length (straight-line length) from
|
|
868
|
+
* (0, 0, 0, 0) to (x, y, z, w). If you are comparing the lengths of vectors, you should
|
|
869
|
+
* compare the length squared instead as it is slightly more efficient to calculate.
|
|
870
|
+
*
|
|
871
|
+
* @return {number} The square length of this vector.
|
|
872
|
+
*/
|
|
544
873
|
lengthSq() {
|
|
545
874
|
|
|
546
875
|
return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;
|
|
547
876
|
|
|
548
877
|
}
|
|
549
878
|
|
|
879
|
+
/**
|
|
880
|
+
* Computes the Euclidean length (straight-line length) from (0, 0, 0, 0) to (x, y, z, w).
|
|
881
|
+
*
|
|
882
|
+
* @return {number} The length of this vector.
|
|
883
|
+
*/
|
|
550
884
|
length() {
|
|
551
885
|
|
|
552
886
|
return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );
|
|
553
887
|
|
|
554
888
|
}
|
|
555
889
|
|
|
890
|
+
/**
|
|
891
|
+
* Computes the Manhattan length of this vector.
|
|
892
|
+
*
|
|
893
|
+
* @return {number} The length of this vector.
|
|
894
|
+
*/
|
|
556
895
|
manhattanLength() {
|
|
557
896
|
|
|
558
897
|
return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );
|
|
559
898
|
|
|
560
899
|
}
|
|
561
900
|
|
|
901
|
+
/**
|
|
902
|
+
* Converts this vector to a unit vector - that is, sets it equal to a vector
|
|
903
|
+
* with the same direction as this one, but with a vector length of `1`.
|
|
904
|
+
*
|
|
905
|
+
* @return {Vector4} A reference to this vector.
|
|
906
|
+
*/
|
|
562
907
|
normalize() {
|
|
563
908
|
|
|
564
909
|
return this.divideScalar( this.length() || 1 );
|
|
565
910
|
|
|
566
911
|
}
|
|
567
912
|
|
|
913
|
+
/**
|
|
914
|
+
* Sets this vector to a vector with the same direction as this one, but
|
|
915
|
+
* with the specified length.
|
|
916
|
+
*
|
|
917
|
+
* @param {number} length - The new length of this vector.
|
|
918
|
+
* @return {Vector4} A reference to this vector.
|
|
919
|
+
*/
|
|
568
920
|
setLength( length ) {
|
|
569
921
|
|
|
570
922
|
return this.normalize().multiplyScalar( length );
|
|
571
923
|
|
|
572
924
|
}
|
|
573
925
|
|
|
926
|
+
/**
|
|
927
|
+
* Linearly interpolates between the given vector and this instance, where
|
|
928
|
+
* alpha is the percent distance along the line - alpha = 0 will be this
|
|
929
|
+
* vector, and alpha = 1 will be the given one.
|
|
930
|
+
*
|
|
931
|
+
* @param {Vector4} v - The vector to interpolate towards.
|
|
932
|
+
* @param {number} alpha - The interpolation factor, typically in the closed interval `[0, 1]`.
|
|
933
|
+
* @return {Vector4} A reference to this vector.
|
|
934
|
+
*/
|
|
574
935
|
lerp( v, alpha ) {
|
|
575
936
|
|
|
576
937
|
this.x += ( v.x - this.x ) * alpha;
|
|
@@ -582,6 +943,16 @@ class Vector4 {
|
|
|
582
943
|
|
|
583
944
|
}
|
|
584
945
|
|
|
946
|
+
/**
|
|
947
|
+
* Linearly interpolates between the given vectors, where alpha is the percent
|
|
948
|
+
* distance along the line - alpha = 0 will be first vector, and alpha = 1 will
|
|
949
|
+
* be the second one. The result is stored in this instance.
|
|
950
|
+
*
|
|
951
|
+
* @param {Vector4} v1 - The first vector.
|
|
952
|
+
* @param {Vector4} v2 - The second vector.
|
|
953
|
+
* @param {number} alpha - The interpolation factor, typically in the closed interval `[0, 1]`.
|
|
954
|
+
* @return {Vector4} A reference to this vector.
|
|
955
|
+
*/
|
|
585
956
|
lerpVectors( v1, v2, alpha ) {
|
|
586
957
|
|
|
587
958
|
this.x = v1.x + ( v2.x - v1.x ) * alpha;
|
|
@@ -593,12 +964,26 @@ class Vector4 {
|
|
|
593
964
|
|
|
594
965
|
}
|
|
595
966
|
|
|
967
|
+
/**
|
|
968
|
+
* Returns `true` if this vector is equal with the given one.
|
|
969
|
+
*
|
|
970
|
+
* @param {Vector4} v - The vector to test for equality.
|
|
971
|
+
* @return {boolean} Whether this vector is equal with the given one.
|
|
972
|
+
*/
|
|
596
973
|
equals( v ) {
|
|
597
974
|
|
|
598
975
|
return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );
|
|
599
976
|
|
|
600
977
|
}
|
|
601
978
|
|
|
979
|
+
/**
|
|
980
|
+
* Sets this vector's x value to be `array[ offset ]`, y value to be `array[ offset + 1 ]`,
|
|
981
|
+
* z value to be `array[ offset + 2 ]`, w value to be `array[ offset + 3 ]`.
|
|
982
|
+
*
|
|
983
|
+
* @param {Array<number>} array - An array holding the vector component values.
|
|
984
|
+
* @param {number} [offset=0] - The offset into the array.
|
|
985
|
+
* @return {Vector4} A reference to this vector.
|
|
986
|
+
*/
|
|
602
987
|
fromArray( array, offset = 0 ) {
|
|
603
988
|
|
|
604
989
|
this.x = array[ offset ];
|
|
@@ -610,6 +995,14 @@ class Vector4 {
|
|
|
610
995
|
|
|
611
996
|
}
|
|
612
997
|
|
|
998
|
+
/**
|
|
999
|
+
* Writes the components of this vector to the given array. If no array is provided,
|
|
1000
|
+
* the method returns a new instance.
|
|
1001
|
+
*
|
|
1002
|
+
* @param {Array<number>} [array=[]] - The target array holding the vector components.
|
|
1003
|
+
* @param {number} [offset=0] - Index of the first element in the array.
|
|
1004
|
+
* @return {Array<number>} The vector components.
|
|
1005
|
+
*/
|
|
613
1006
|
toArray( array = [], offset = 0 ) {
|
|
614
1007
|
|
|
615
1008
|
array[ offset ] = this.x;
|
|
@@ -621,6 +1014,13 @@ class Vector4 {
|
|
|
621
1014
|
|
|
622
1015
|
}
|
|
623
1016
|
|
|
1017
|
+
/**
|
|
1018
|
+
* Sets the components of this vector from the given buffer attribute.
|
|
1019
|
+
*
|
|
1020
|
+
* @param {BufferAttribute} attribute - The buffer attribute holding vector data.
|
|
1021
|
+
* @param {number} index - The index into the attribute.
|
|
1022
|
+
* @return {Vector4} A reference to this vector.
|
|
1023
|
+
*/
|
|
624
1024
|
fromBufferAttribute( attribute, index ) {
|
|
625
1025
|
|
|
626
1026
|
this.x = attribute.getX( index );
|
|
@@ -632,6 +1032,12 @@ class Vector4 {
|
|
|
632
1032
|
|
|
633
1033
|
}
|
|
634
1034
|
|
|
1035
|
+
/**
|
|
1036
|
+
* Sets each component of this vector to a pseudo-random value between `0` and
|
|
1037
|
+
* `1`, excluding `1`.
|
|
1038
|
+
*
|
|
1039
|
+
* @return {Vector4} A reference to this vector.
|
|
1040
|
+
*/
|
|
635
1041
|
random() {
|
|
636
1042
|
|
|
637
1043
|
this.x = Math.random();
|