@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/Vector2.js
CHANGED
|
@@ -1,16 +1,70 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { clamp } from './MathUtils.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Class representing a 2D vector. A 2D vector is an ordered pair of numbers
|
|
5
|
+
* (labeled x and y), which can be used to represent a number of things, such as:
|
|
6
|
+
*
|
|
7
|
+
* - A point in 2D space (i.e. a position on a plane).
|
|
8
|
+
* - A direction and length across a plane. In three.js the length will
|
|
9
|
+
* always be the Euclidean distance(straight-line distance) from `(0, 0)` to `(x, y)`
|
|
10
|
+
* and the direction is also measured from `(0, 0)` towards `(x, y)`.
|
|
11
|
+
* - Any arbitrary ordered pair of numbers.
|
|
12
|
+
*
|
|
13
|
+
* There are other things a 2D vector can be used to represent, such as
|
|
14
|
+
* momentum vectors, complex numbers and so on, however these are the most
|
|
15
|
+
* common uses in three.js.
|
|
16
|
+
*
|
|
17
|
+
* Iterating through a vector instance will yield its components `(x, y)` in
|
|
18
|
+
* the corresponding order.
|
|
19
|
+
* ```js
|
|
20
|
+
* const a = new THREE.Vector2( 0, 1 );
|
|
21
|
+
*
|
|
22
|
+
* //no arguments; will be initialised to (0, 0)
|
|
23
|
+
* const b = new THREE.Vector2( );
|
|
24
|
+
*
|
|
25
|
+
* const d = a.distanceTo( b );
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
3
28
|
class Vector2 {
|
|
4
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Constructs a new 2D vector.
|
|
32
|
+
*
|
|
33
|
+
* @param {number} [x=0] - The x value of this vector.
|
|
34
|
+
* @param {number} [y=0] - The y value of this vector.
|
|
35
|
+
*/
|
|
5
36
|
constructor( x = 0, y = 0 ) {
|
|
6
37
|
|
|
38
|
+
/**
|
|
39
|
+
* This flag can be used for type testing.
|
|
40
|
+
*
|
|
41
|
+
* @type {boolean}
|
|
42
|
+
* @readonly
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
7
45
|
Vector2.prototype.isVector2 = true;
|
|
8
46
|
|
|
47
|
+
/**
|
|
48
|
+
* The x value of this vector.
|
|
49
|
+
*
|
|
50
|
+
* @type {number}
|
|
51
|
+
*/
|
|
9
52
|
this.x = x;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The y value of this vector.
|
|
56
|
+
*
|
|
57
|
+
* @type {number}
|
|
58
|
+
*/
|
|
10
59
|
this.y = y;
|
|
11
60
|
|
|
12
61
|
}
|
|
13
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Alias for {@link Vector2#x}.
|
|
65
|
+
*
|
|
66
|
+
* @type {number}
|
|
67
|
+
*/
|
|
14
68
|
get width() {
|
|
15
69
|
|
|
16
70
|
return this.x;
|
|
@@ -23,6 +77,11 @@ class Vector2 {
|
|
|
23
77
|
|
|
24
78
|
}
|
|
25
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Alias for {@link Vector2#y}.
|
|
82
|
+
*
|
|
83
|
+
* @type {number}
|
|
84
|
+
*/
|
|
26
85
|
get height() {
|
|
27
86
|
|
|
28
87
|
return this.y;
|
|
@@ -35,6 +94,13 @@ class Vector2 {
|
|
|
35
94
|
|
|
36
95
|
}
|
|
37
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Sets the vector components.
|
|
99
|
+
*
|
|
100
|
+
* @param {number} x - The value of the x component.
|
|
101
|
+
* @param {number} y - The value of the y component.
|
|
102
|
+
* @return {Vector2} A reference to this vector.
|
|
103
|
+
*/
|
|
38
104
|
set( x, y ) {
|
|
39
105
|
|
|
40
106
|
this.x = x;
|
|
@@ -44,6 +110,12 @@ class Vector2 {
|
|
|
44
110
|
|
|
45
111
|
}
|
|
46
112
|
|
|
113
|
+
/**
|
|
114
|
+
* Sets the vector components to the same value.
|
|
115
|
+
*
|
|
116
|
+
* @param {number} scalar - The value to set for all vector components.
|
|
117
|
+
* @return {Vector2} A reference to this vector.
|
|
118
|
+
*/
|
|
47
119
|
setScalar( scalar ) {
|
|
48
120
|
|
|
49
121
|
this.x = scalar;
|
|
@@ -53,6 +125,12 @@ class Vector2 {
|
|
|
53
125
|
|
|
54
126
|
}
|
|
55
127
|
|
|
128
|
+
/**
|
|
129
|
+
* Sets the vector's x component to the given value
|
|
130
|
+
*
|
|
131
|
+
* @param {number} x - The value to set.
|
|
132
|
+
* @return {Vector2} A reference to this vector.
|
|
133
|
+
*/
|
|
56
134
|
setX( x ) {
|
|
57
135
|
|
|
58
136
|
this.x = x;
|
|
@@ -61,6 +139,12 @@ class Vector2 {
|
|
|
61
139
|
|
|
62
140
|
}
|
|
63
141
|
|
|
142
|
+
/**
|
|
143
|
+
* Sets the vector's y component to the given value
|
|
144
|
+
*
|
|
145
|
+
* @param {number} y - The value to set.
|
|
146
|
+
* @return {Vector2} A reference to this vector.
|
|
147
|
+
*/
|
|
64
148
|
setY( y ) {
|
|
65
149
|
|
|
66
150
|
this.y = y;
|
|
@@ -69,6 +153,13 @@ class Vector2 {
|
|
|
69
153
|
|
|
70
154
|
}
|
|
71
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Allows to set a vector component with an index.
|
|
158
|
+
*
|
|
159
|
+
* @param {number} index - The component index. `0` equals to x, `1` equals to y.
|
|
160
|
+
* @param {number} value - The value to set.
|
|
161
|
+
* @return {Vector2} A reference to this vector.
|
|
162
|
+
*/
|
|
72
163
|
setComponent( index, value ) {
|
|
73
164
|
|
|
74
165
|
switch ( index ) {
|
|
@@ -83,6 +174,12 @@ class Vector2 {
|
|
|
83
174
|
|
|
84
175
|
}
|
|
85
176
|
|
|
177
|
+
/**
|
|
178
|
+
* Returns the value of the vector component which matches the given index.
|
|
179
|
+
*
|
|
180
|
+
* @param {number} index - The component index. `0` equals to x, `1` equals to y.
|
|
181
|
+
* @return {number} A vector component value.
|
|
182
|
+
*/
|
|
86
183
|
getComponent( index ) {
|
|
87
184
|
|
|
88
185
|
switch ( index ) {
|
|
@@ -95,12 +192,23 @@ class Vector2 {
|
|
|
95
192
|
|
|
96
193
|
}
|
|
97
194
|
|
|
195
|
+
/**
|
|
196
|
+
* Returns a new vector with copied values from this instance.
|
|
197
|
+
*
|
|
198
|
+
* @return {Vector2} A clone of this instance.
|
|
199
|
+
*/
|
|
98
200
|
clone() {
|
|
99
201
|
|
|
100
202
|
return new this.constructor( this.x, this.y );
|
|
101
203
|
|
|
102
204
|
}
|
|
103
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Copies the values of the given vector to this instance.
|
|
208
|
+
*
|
|
209
|
+
* @param {Vector2} v - The vector to copy.
|
|
210
|
+
* @return {Vector2} A reference to this vector.
|
|
211
|
+
*/
|
|
104
212
|
copy( v ) {
|
|
105
213
|
|
|
106
214
|
this.x = v.x;
|
|
@@ -110,6 +218,12 @@ class Vector2 {
|
|
|
110
218
|
|
|
111
219
|
}
|
|
112
220
|
|
|
221
|
+
/**
|
|
222
|
+
* Adds the given vector to this instance.
|
|
223
|
+
*
|
|
224
|
+
* @param {Vector2} v - The vector to add.
|
|
225
|
+
* @return {Vector2} A reference to this vector.
|
|
226
|
+
*/
|
|
113
227
|
add( v ) {
|
|
114
228
|
|
|
115
229
|
this.x += v.x;
|
|
@@ -119,6 +233,12 @@ class Vector2 {
|
|
|
119
233
|
|
|
120
234
|
}
|
|
121
235
|
|
|
236
|
+
/**
|
|
237
|
+
* Adds the given scalar value to all components of this instance.
|
|
238
|
+
*
|
|
239
|
+
* @param {number} s - The scalar to add.
|
|
240
|
+
* @return {Vector2} A reference to this vector.
|
|
241
|
+
*/
|
|
122
242
|
addScalar( s ) {
|
|
123
243
|
|
|
124
244
|
this.x += s;
|
|
@@ -128,6 +248,13 @@ class Vector2 {
|
|
|
128
248
|
|
|
129
249
|
}
|
|
130
250
|
|
|
251
|
+
/**
|
|
252
|
+
* Adds the given vectors and stores the result in this instance.
|
|
253
|
+
*
|
|
254
|
+
* @param {Vector2} a - The first vector.
|
|
255
|
+
* @param {Vector2} b - The second vector.
|
|
256
|
+
* @return {Vector2} A reference to this vector.
|
|
257
|
+
*/
|
|
131
258
|
addVectors( a, b ) {
|
|
132
259
|
|
|
133
260
|
this.x = a.x + b.x;
|
|
@@ -137,6 +264,13 @@ class Vector2 {
|
|
|
137
264
|
|
|
138
265
|
}
|
|
139
266
|
|
|
267
|
+
/**
|
|
268
|
+
* Adds the given vector scaled by the given factor to this instance.
|
|
269
|
+
*
|
|
270
|
+
* @param {Vector2} v - The vector.
|
|
271
|
+
* @param {number} s - The factor that scales `v`.
|
|
272
|
+
* @return {Vector2} A reference to this vector.
|
|
273
|
+
*/
|
|
140
274
|
addScaledVector( v, s ) {
|
|
141
275
|
|
|
142
276
|
this.x += v.x * s;
|
|
@@ -146,6 +280,12 @@ class Vector2 {
|
|
|
146
280
|
|
|
147
281
|
}
|
|
148
282
|
|
|
283
|
+
/**
|
|
284
|
+
* Subtracts the given vector from this instance.
|
|
285
|
+
*
|
|
286
|
+
* @param {Vector2} v - The vector to subtract.
|
|
287
|
+
* @return {Vector2} A reference to this vector.
|
|
288
|
+
*/
|
|
149
289
|
sub( v ) {
|
|
150
290
|
|
|
151
291
|
this.x -= v.x;
|
|
@@ -155,6 +295,12 @@ class Vector2 {
|
|
|
155
295
|
|
|
156
296
|
}
|
|
157
297
|
|
|
298
|
+
/**
|
|
299
|
+
* Subtracts the given scalar value from all components of this instance.
|
|
300
|
+
*
|
|
301
|
+
* @param {number} s - The scalar to subtract.
|
|
302
|
+
* @return {Vector2} A reference to this vector.
|
|
303
|
+
*/
|
|
158
304
|
subScalar( s ) {
|
|
159
305
|
|
|
160
306
|
this.x -= s;
|
|
@@ -164,6 +310,13 @@ class Vector2 {
|
|
|
164
310
|
|
|
165
311
|
}
|
|
166
312
|
|
|
313
|
+
/**
|
|
314
|
+
* Subtracts the given vectors and stores the result in this instance.
|
|
315
|
+
*
|
|
316
|
+
* @param {Vector2} a - The first vector.
|
|
317
|
+
* @param {Vector2} b - The second vector.
|
|
318
|
+
* @return {Vector2} A reference to this vector.
|
|
319
|
+
*/
|
|
167
320
|
subVectors( a, b ) {
|
|
168
321
|
|
|
169
322
|
this.x = a.x - b.x;
|
|
@@ -173,6 +326,12 @@ class Vector2 {
|
|
|
173
326
|
|
|
174
327
|
}
|
|
175
328
|
|
|
329
|
+
/**
|
|
330
|
+
* Multiplies the given vector with this instance.
|
|
331
|
+
*
|
|
332
|
+
* @param {Vector2} v - The vector to multiply.
|
|
333
|
+
* @return {Vector2} A reference to this vector.
|
|
334
|
+
*/
|
|
176
335
|
multiply( v ) {
|
|
177
336
|
|
|
178
337
|
this.x *= v.x;
|
|
@@ -182,6 +341,12 @@ class Vector2 {
|
|
|
182
341
|
|
|
183
342
|
}
|
|
184
343
|
|
|
344
|
+
/**
|
|
345
|
+
* Multiplies the given scalar value with all components of this instance.
|
|
346
|
+
*
|
|
347
|
+
* @param {number} scalar - The scalar to multiply.
|
|
348
|
+
* @return {Vector2} A reference to this vector.
|
|
349
|
+
*/
|
|
185
350
|
multiplyScalar( scalar ) {
|
|
186
351
|
|
|
187
352
|
this.x *= scalar;
|
|
@@ -191,6 +356,12 @@ class Vector2 {
|
|
|
191
356
|
|
|
192
357
|
}
|
|
193
358
|
|
|
359
|
+
/**
|
|
360
|
+
* Divides this instance by the given vector.
|
|
361
|
+
*
|
|
362
|
+
* @param {Vector2} v - The vector to divide.
|
|
363
|
+
* @return {Vector2} A reference to this vector.
|
|
364
|
+
*/
|
|
194
365
|
divide( v ) {
|
|
195
366
|
|
|
196
367
|
this.x /= v.x;
|
|
@@ -200,12 +371,25 @@ class Vector2 {
|
|
|
200
371
|
|
|
201
372
|
}
|
|
202
373
|
|
|
374
|
+
/**
|
|
375
|
+
* Divides this vector by the given scalar.
|
|
376
|
+
*
|
|
377
|
+
* @param {number} scalar - The scalar to divide.
|
|
378
|
+
* @return {Vector2} A reference to this vector.
|
|
379
|
+
*/
|
|
203
380
|
divideScalar( scalar ) {
|
|
204
381
|
|
|
205
382
|
return this.multiplyScalar( 1 / scalar );
|
|
206
383
|
|
|
207
384
|
}
|
|
208
385
|
|
|
386
|
+
/**
|
|
387
|
+
* Multiplies this vector (with an implicit 1 as the 3rd component) by
|
|
388
|
+
* the given 3x3 matrix.
|
|
389
|
+
*
|
|
390
|
+
* @param {Matrix3} m - The matrix to apply.
|
|
391
|
+
* @return {Vector2} A reference to this vector.
|
|
392
|
+
*/
|
|
209
393
|
applyMatrix3( m ) {
|
|
210
394
|
|
|
211
395
|
const x = this.x, y = this.y;
|
|
@@ -218,6 +402,13 @@ class Vector2 {
|
|
|
218
402
|
|
|
219
403
|
}
|
|
220
404
|
|
|
405
|
+
/**
|
|
406
|
+
* If this vector's x or y value is greater than the given vector's x or y
|
|
407
|
+
* value, replace that value with the corresponding min value.
|
|
408
|
+
*
|
|
409
|
+
* @param {Vector2} v - The vector.
|
|
410
|
+
* @return {Vector2} A reference to this vector.
|
|
411
|
+
*/
|
|
221
412
|
min( v ) {
|
|
222
413
|
|
|
223
414
|
this.x = Math.min( this.x, v.x );
|
|
@@ -227,6 +418,13 @@ class Vector2 {
|
|
|
227
418
|
|
|
228
419
|
}
|
|
229
420
|
|
|
421
|
+
/**
|
|
422
|
+
* If this vector's x or y value is less than the given vector's x or y
|
|
423
|
+
* value, replace that value with the corresponding max value.
|
|
424
|
+
*
|
|
425
|
+
* @param {Vector2} v - The vector.
|
|
426
|
+
* @return {Vector2} A reference to this vector.
|
|
427
|
+
*/
|
|
230
428
|
max( v ) {
|
|
231
429
|
|
|
232
430
|
this.x = Math.max( this.x, v.x );
|
|
@@ -236,34 +434,69 @@ class Vector2 {
|
|
|
236
434
|
|
|
237
435
|
}
|
|
238
436
|
|
|
437
|
+
/**
|
|
438
|
+
* If this vector's x or y value is greater than the max vector's x or y
|
|
439
|
+
* value, it is replaced by the corresponding value.
|
|
440
|
+
* If this vector's x or y value is less than the min vector's x or y value,
|
|
441
|
+
* it is replaced by the corresponding value.
|
|
442
|
+
*
|
|
443
|
+
* @param {Vector2} min - The minimum x and y values.
|
|
444
|
+
* @param {Vector2} max - The maximum x and y values in the desired range.
|
|
445
|
+
* @return {Vector2} A reference to this vector.
|
|
446
|
+
*/
|
|
239
447
|
clamp( min, max ) {
|
|
240
448
|
|
|
241
449
|
// assumes min < max, componentwise
|
|
242
450
|
|
|
243
|
-
this.x =
|
|
244
|
-
this.y =
|
|
451
|
+
this.x = clamp( this.x, min.x, max.x );
|
|
452
|
+
this.y = clamp( this.y, min.y, max.y );
|
|
245
453
|
|
|
246
454
|
return this;
|
|
247
455
|
|
|
248
456
|
}
|
|
249
457
|
|
|
458
|
+
/**
|
|
459
|
+
* If this vector's x or y values are greater than the max value, they are
|
|
460
|
+
* replaced by the max value.
|
|
461
|
+
* If this vector's x or y values are less than the min value, they are
|
|
462
|
+
* replaced by the min value.
|
|
463
|
+
*
|
|
464
|
+
* @param {number} minVal - The minimum value the components will be clamped to.
|
|
465
|
+
* @param {number} maxVal - The maximum value the components will be clamped to.
|
|
466
|
+
* @return {Vector2} A reference to this vector.
|
|
467
|
+
*/
|
|
250
468
|
clampScalar( minVal, maxVal ) {
|
|
251
469
|
|
|
252
|
-
this.x =
|
|
253
|
-
this.y =
|
|
470
|
+
this.x = clamp( this.x, minVal, maxVal );
|
|
471
|
+
this.y = clamp( this.y, minVal, maxVal );
|
|
254
472
|
|
|
255
473
|
return this;
|
|
256
474
|
|
|
257
475
|
}
|
|
258
476
|
|
|
477
|
+
/**
|
|
478
|
+
* If this vector's length is greater than the max value, it is replaced by
|
|
479
|
+
* the max value.
|
|
480
|
+
* If this vector's length is less than the min value, it is replaced by the
|
|
481
|
+
* min value.
|
|
482
|
+
*
|
|
483
|
+
* @param {number} min - The minimum value the vector length will be clamped to.
|
|
484
|
+
* @param {number} max - The maximum value the vector length will be clamped to.
|
|
485
|
+
* @return {Vector2} A reference to this vector.
|
|
486
|
+
*/
|
|
259
487
|
clampLength( min, max ) {
|
|
260
488
|
|
|
261
489
|
const length = this.length();
|
|
262
490
|
|
|
263
|
-
return this.divideScalar( length || 1 ).multiplyScalar(
|
|
491
|
+
return this.divideScalar( length || 1 ).multiplyScalar( clamp( length, min, max ) );
|
|
264
492
|
|
|
265
493
|
}
|
|
266
494
|
|
|
495
|
+
/**
|
|
496
|
+
* The components of this vector are rounded down to the nearest integer value.
|
|
497
|
+
*
|
|
498
|
+
* @return {Vector2} A reference to this vector.
|
|
499
|
+
*/
|
|
267
500
|
floor() {
|
|
268
501
|
|
|
269
502
|
this.x = Math.floor( this.x );
|
|
@@ -273,6 +506,11 @@ class Vector2 {
|
|
|
273
506
|
|
|
274
507
|
}
|
|
275
508
|
|
|
509
|
+
/**
|
|
510
|
+
* The components of this vector are rounded up to the nearest integer value.
|
|
511
|
+
*
|
|
512
|
+
* @return {Vector2} A reference to this vector.
|
|
513
|
+
*/
|
|
276
514
|
ceil() {
|
|
277
515
|
|
|
278
516
|
this.x = Math.ceil( this.x );
|
|
@@ -282,6 +520,11 @@ class Vector2 {
|
|
|
282
520
|
|
|
283
521
|
}
|
|
284
522
|
|
|
523
|
+
/**
|
|
524
|
+
* The components of this vector are rounded to the nearest integer value
|
|
525
|
+
*
|
|
526
|
+
* @return {Vector2} A reference to this vector.
|
|
527
|
+
*/
|
|
285
528
|
round() {
|
|
286
529
|
|
|
287
530
|
this.x = Math.round( this.x );
|
|
@@ -291,6 +534,12 @@ class Vector2 {
|
|
|
291
534
|
|
|
292
535
|
}
|
|
293
536
|
|
|
537
|
+
/**
|
|
538
|
+
* The components of this vector are rounded towards zero (up if negative,
|
|
539
|
+
* down if positive) to an integer value.
|
|
540
|
+
*
|
|
541
|
+
* @return {Vector2} A reference to this vector.
|
|
542
|
+
*/
|
|
294
543
|
roundToZero() {
|
|
295
544
|
|
|
296
545
|
this.x = Math.trunc( this.x );
|
|
@@ -300,6 +549,11 @@ class Vector2 {
|
|
|
300
549
|
|
|
301
550
|
}
|
|
302
551
|
|
|
552
|
+
/**
|
|
553
|
+
* Inverts this vector - i.e. sets x = -x and y = -y.
|
|
554
|
+
*
|
|
555
|
+
* @return {Vector2} A reference to this vector.
|
|
556
|
+
*/
|
|
303
557
|
negate() {
|
|
304
558
|
|
|
305
559
|
this.x = - this.x;
|
|
@@ -309,52 +563,96 @@ class Vector2 {
|
|
|
309
563
|
|
|
310
564
|
}
|
|
311
565
|
|
|
566
|
+
/**
|
|
567
|
+
* Calculates the dot product of the given vector with this instance.
|
|
568
|
+
*
|
|
569
|
+
* @param {Vector2} v - The vector to compute the dot product with.
|
|
570
|
+
* @return {number} The result of the dot product.
|
|
571
|
+
*/
|
|
312
572
|
dot( v ) {
|
|
313
573
|
|
|
314
574
|
return this.x * v.x + this.y * v.y;
|
|
315
575
|
|
|
316
576
|
}
|
|
317
577
|
|
|
578
|
+
/**
|
|
579
|
+
* Calculates the cross product of the given vector with this instance.
|
|
580
|
+
*
|
|
581
|
+
* @param {Vector2} v - The vector to compute the cross product with.
|
|
582
|
+
* @return {number} The result of the cross product.
|
|
583
|
+
*/
|
|
318
584
|
cross( v ) {
|
|
319
585
|
|
|
320
586
|
return this.x * v.y - this.y * v.x;
|
|
321
587
|
|
|
322
588
|
}
|
|
323
589
|
|
|
590
|
+
/**
|
|
591
|
+
* Computes the square of the Euclidean length (straight-line length) from
|
|
592
|
+
* (0, 0) to (x, y). If you are comparing the lengths of vectors, you should
|
|
593
|
+
* compare the length squared instead as it is slightly more efficient to calculate.
|
|
594
|
+
*
|
|
595
|
+
* @return {number} The square length of this vector.
|
|
596
|
+
*/
|
|
324
597
|
lengthSq() {
|
|
325
598
|
|
|
326
599
|
return this.x * this.x + this.y * this.y;
|
|
327
600
|
|
|
328
601
|
}
|
|
329
602
|
|
|
603
|
+
/**
|
|
604
|
+
* Computes the Euclidean length (straight-line length) from (0, 0) to (x, y).
|
|
605
|
+
*
|
|
606
|
+
* @return {number} The length of this vector.
|
|
607
|
+
*/
|
|
330
608
|
length() {
|
|
331
609
|
|
|
332
610
|
return Math.sqrt( this.x * this.x + this.y * this.y );
|
|
333
611
|
|
|
334
612
|
}
|
|
335
613
|
|
|
614
|
+
/**
|
|
615
|
+
* Computes the Manhattan length of this vector.
|
|
616
|
+
*
|
|
617
|
+
* @return {number} The length of this vector.
|
|
618
|
+
*/
|
|
336
619
|
manhattanLength() {
|
|
337
620
|
|
|
338
621
|
return Math.abs( this.x ) + Math.abs( this.y );
|
|
339
622
|
|
|
340
623
|
}
|
|
341
624
|
|
|
625
|
+
/**
|
|
626
|
+
* Converts this vector to a unit vector - that is, sets it equal to a vector
|
|
627
|
+
* with the same direction as this one, but with a vector length of `1`.
|
|
628
|
+
*
|
|
629
|
+
* @return {Vector2} A reference to this vector.
|
|
630
|
+
*/
|
|
342
631
|
normalize() {
|
|
343
632
|
|
|
344
633
|
return this.divideScalar( this.length() || 1 );
|
|
345
634
|
|
|
346
635
|
}
|
|
347
636
|
|
|
637
|
+
/**
|
|
638
|
+
* Computes the angle in radians of this vector with respect to the positive x-axis.
|
|
639
|
+
*
|
|
640
|
+
* @return {number} The angle in radians.
|
|
641
|
+
*/
|
|
348
642
|
angle() {
|
|
349
643
|
|
|
350
|
-
// computes the angle in radians with respect to the positive x-axis
|
|
351
|
-
|
|
352
644
|
const angle = Math.atan2( - this.y, - this.x ) + Math.PI;
|
|
353
645
|
|
|
354
646
|
return angle;
|
|
355
647
|
|
|
356
648
|
}
|
|
357
649
|
|
|
650
|
+
/**
|
|
651
|
+
* Returns the angle between the given vector and this instance in radians.
|
|
652
|
+
*
|
|
653
|
+
* @param {Vector2} v - The vector to compute the angle with.
|
|
654
|
+
* @return {number} The angle in radians.
|
|
655
|
+
*/
|
|
358
656
|
angleTo( v ) {
|
|
359
657
|
|
|
360
658
|
const denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );
|
|
@@ -365,16 +663,30 @@ class Vector2 {
|
|
|
365
663
|
|
|
366
664
|
// clamp, to handle numerical problems
|
|
367
665
|
|
|
368
|
-
return Math.acos(
|
|
666
|
+
return Math.acos( clamp( theta, - 1, 1 ) );
|
|
369
667
|
|
|
370
668
|
}
|
|
371
669
|
|
|
670
|
+
/**
|
|
671
|
+
* Computes the distance from the given vector to this instance.
|
|
672
|
+
*
|
|
673
|
+
* @param {Vector2} v - The vector to compute the distance to.
|
|
674
|
+
* @return {number} The distance.
|
|
675
|
+
*/
|
|
372
676
|
distanceTo( v ) {
|
|
373
677
|
|
|
374
678
|
return Math.sqrt( this.distanceToSquared( v ) );
|
|
375
679
|
|
|
376
680
|
}
|
|
377
681
|
|
|
682
|
+
/**
|
|
683
|
+
* Computes the squared distance from the given vector to this instance.
|
|
684
|
+
* If you are just comparing the distance with another distance, you should compare
|
|
685
|
+
* the distance squared instead as it is slightly more efficient to calculate.
|
|
686
|
+
*
|
|
687
|
+
* @param {Vector2} v - The vector to compute the squared distance to.
|
|
688
|
+
* @return {number} The squared distance.
|
|
689
|
+
*/
|
|
378
690
|
distanceToSquared( v ) {
|
|
379
691
|
|
|
380
692
|
const dx = this.x - v.x, dy = this.y - v.y;
|
|
@@ -382,18 +694,40 @@ class Vector2 {
|
|
|
382
694
|
|
|
383
695
|
}
|
|
384
696
|
|
|
697
|
+
/**
|
|
698
|
+
* Computes the Manhattan distance from the given vector to this instance.
|
|
699
|
+
*
|
|
700
|
+
* @param {Vector2} v - The vector to compute the Manhattan distance to.
|
|
701
|
+
* @return {number} The Manhattan distance.
|
|
702
|
+
*/
|
|
385
703
|
manhattanDistanceTo( v ) {
|
|
386
704
|
|
|
387
705
|
return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );
|
|
388
706
|
|
|
389
707
|
}
|
|
390
708
|
|
|
709
|
+
/**
|
|
710
|
+
* Sets this vector to a vector with the same direction as this one, but
|
|
711
|
+
* with the specified length.
|
|
712
|
+
*
|
|
713
|
+
* @param {number} length - The new length of this vector.
|
|
714
|
+
* @return {Vector2} A reference to this vector.
|
|
715
|
+
*/
|
|
391
716
|
setLength( length ) {
|
|
392
717
|
|
|
393
718
|
return this.normalize().multiplyScalar( length );
|
|
394
719
|
|
|
395
720
|
}
|
|
396
721
|
|
|
722
|
+
/**
|
|
723
|
+
* Linearly interpolates between the given vector and this instance, where
|
|
724
|
+
* alpha is the percent distance along the line - alpha = 0 will be this
|
|
725
|
+
* vector, and alpha = 1 will be the given one.
|
|
726
|
+
*
|
|
727
|
+
* @param {Vector2} v - The vector to interpolate towards.
|
|
728
|
+
* @param {number} alpha - The interpolation factor, typically in the closed interval `[0, 1]`.
|
|
729
|
+
* @return {Vector2} A reference to this vector.
|
|
730
|
+
*/
|
|
397
731
|
lerp( v, alpha ) {
|
|
398
732
|
|
|
399
733
|
this.x += ( v.x - this.x ) * alpha;
|
|
@@ -403,6 +737,16 @@ class Vector2 {
|
|
|
403
737
|
|
|
404
738
|
}
|
|
405
739
|
|
|
740
|
+
/**
|
|
741
|
+
* Linearly interpolates between the given vectors, where alpha is the percent
|
|
742
|
+
* distance along the line - alpha = 0 will be first vector, and alpha = 1 will
|
|
743
|
+
* be the second one. The result is stored in this instance.
|
|
744
|
+
*
|
|
745
|
+
* @param {Vector2} v1 - The first vector.
|
|
746
|
+
* @param {Vector2} v2 - The second vector.
|
|
747
|
+
* @param {number} alpha - The interpolation factor, typically in the closed interval `[0, 1]`.
|
|
748
|
+
* @return {Vector2} A reference to this vector.
|
|
749
|
+
*/
|
|
406
750
|
lerpVectors( v1, v2, alpha ) {
|
|
407
751
|
|
|
408
752
|
this.x = v1.x + ( v2.x - v1.x ) * alpha;
|
|
@@ -412,12 +756,26 @@ class Vector2 {
|
|
|
412
756
|
|
|
413
757
|
}
|
|
414
758
|
|
|
759
|
+
/**
|
|
760
|
+
* Returns `true` if this vector is equal with the given one.
|
|
761
|
+
*
|
|
762
|
+
* @param {Vector2} v - The vector to test for equality.
|
|
763
|
+
* @return {boolean} Whether this vector is equal with the given one.
|
|
764
|
+
*/
|
|
415
765
|
equals( v ) {
|
|
416
766
|
|
|
417
767
|
return ( ( v.x === this.x ) && ( v.y === this.y ) );
|
|
418
768
|
|
|
419
769
|
}
|
|
420
770
|
|
|
771
|
+
/**
|
|
772
|
+
* Sets this vector's x value to be `array[ offset ]` and y
|
|
773
|
+
* value to be `array[ offset + 1 ]`.
|
|
774
|
+
*
|
|
775
|
+
* @param {Array<number>} array - An array holding the vector component values.
|
|
776
|
+
* @param {number} [offset=0] - The offset into the array.
|
|
777
|
+
* @return {Vector2} A reference to this vector.
|
|
778
|
+
*/
|
|
421
779
|
fromArray( array, offset = 0 ) {
|
|
422
780
|
|
|
423
781
|
this.x = array[ offset ];
|
|
@@ -427,6 +785,14 @@ class Vector2 {
|
|
|
427
785
|
|
|
428
786
|
}
|
|
429
787
|
|
|
788
|
+
/**
|
|
789
|
+
* Writes the components of this vector to the given array. If no array is provided,
|
|
790
|
+
* the method returns a new instance.
|
|
791
|
+
*
|
|
792
|
+
* @param {Array<number>} [array=[]] - The target array holding the vector components.
|
|
793
|
+
* @param {number} [offset=0] - Index of the first element in the array.
|
|
794
|
+
* @return {Array<number>} The vector components.
|
|
795
|
+
*/
|
|
430
796
|
toArray( array = [], offset = 0 ) {
|
|
431
797
|
|
|
432
798
|
array[ offset ] = this.x;
|
|
@@ -436,6 +802,13 @@ class Vector2 {
|
|
|
436
802
|
|
|
437
803
|
}
|
|
438
804
|
|
|
805
|
+
/**
|
|
806
|
+
* Sets the components of this vector from the given buffer attribute.
|
|
807
|
+
*
|
|
808
|
+
* @param {BufferAttribute} attribute - The buffer attribute holding vector data.
|
|
809
|
+
* @param {number} index - The index into the attribute.
|
|
810
|
+
* @return {Vector2} A reference to this vector.
|
|
811
|
+
*/
|
|
439
812
|
fromBufferAttribute( attribute, index ) {
|
|
440
813
|
|
|
441
814
|
this.x = attribute.getX( index );
|
|
@@ -445,6 +818,13 @@ class Vector2 {
|
|
|
445
818
|
|
|
446
819
|
}
|
|
447
820
|
|
|
821
|
+
/**
|
|
822
|
+
* Rotates this vector around the given center by the given angle.
|
|
823
|
+
*
|
|
824
|
+
* @param {Vector2} center - The point around which to rotate.
|
|
825
|
+
* @param {number} angle - The angle to rotate, in radians.
|
|
826
|
+
* @return {Vector2} A reference to this vector.
|
|
827
|
+
*/
|
|
448
828
|
rotateAround( center, angle ) {
|
|
449
829
|
|
|
450
830
|
const c = Math.cos( angle ), s = Math.sin( angle );
|
|
@@ -459,6 +839,12 @@ class Vector2 {
|
|
|
459
839
|
|
|
460
840
|
}
|
|
461
841
|
|
|
842
|
+
/**
|
|
843
|
+
* Sets each component of this vector to a pseudo-random value between `0` and
|
|
844
|
+
* `1`, excluding `1`.
|
|
845
|
+
*
|
|
846
|
+
* @return {Vector2} A reference to this vector.
|
|
847
|
+
*/
|
|
462
848
|
random() {
|
|
463
849
|
|
|
464
850
|
this.x = Math.random();
|