@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/extras/core/Path.js
CHANGED
|
@@ -6,14 +6,46 @@ import { CubicBezierCurve } from '../curves/CubicBezierCurve.js';
|
|
|
6
6
|
import { QuadraticBezierCurve } from '../curves/QuadraticBezierCurve.js';
|
|
7
7
|
import { LineCurve } from '../curves/LineCurve.js';
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* A 2D path representation. The class provides methods for creating paths
|
|
11
|
+
* and contours of 2D shapes similar to the 2D Canvas API.
|
|
12
|
+
*
|
|
13
|
+
* ```js
|
|
14
|
+
* const path = new THREE.Path();
|
|
15
|
+
*
|
|
16
|
+
* path.lineTo( 0, 0.8 );
|
|
17
|
+
* path.quadraticCurveTo( 0, 1, 0.2, 1 );
|
|
18
|
+
* path.lineTo( 1, 1 );
|
|
19
|
+
*
|
|
20
|
+
* const points = path.getPoints();
|
|
21
|
+
*
|
|
22
|
+
* const geometry = new THREE.BufferGeometry().setFromPoints( points );
|
|
23
|
+
* const material = new THREE.LineBasicMaterial( { color: 0xffffff } );
|
|
24
|
+
*
|
|
25
|
+
* const line = new THREE.Line( geometry, material );
|
|
26
|
+
* scene.add( line );
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @augments CurvePath
|
|
30
|
+
*/
|
|
9
31
|
class Path extends CurvePath {
|
|
10
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Constructs a new path.
|
|
35
|
+
*
|
|
36
|
+
* @param {Array<Vector2>} [points] - An array of 2D points defining the path.
|
|
37
|
+
*/
|
|
11
38
|
constructor( points ) {
|
|
12
39
|
|
|
13
40
|
super();
|
|
14
41
|
|
|
15
42
|
this.type = 'Path';
|
|
16
43
|
|
|
44
|
+
/**
|
|
45
|
+
* The current offset of the path. Any new curve added will start here.
|
|
46
|
+
*
|
|
47
|
+
* @type {Vector2}
|
|
48
|
+
*/
|
|
17
49
|
this.currentPoint = new Vector2();
|
|
18
50
|
|
|
19
51
|
if ( points ) {
|
|
@@ -24,6 +56,13 @@ class Path extends CurvePath {
|
|
|
24
56
|
|
|
25
57
|
}
|
|
26
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Creates a path from the given list of points. The points are added
|
|
61
|
+
* to the path as instances of {@link LineCurve}.
|
|
62
|
+
*
|
|
63
|
+
* @param {Array<Vector2>} points - An array of 2D points.
|
|
64
|
+
* @return {Path} A reference to this path.
|
|
65
|
+
*/
|
|
27
66
|
setFromPoints( points ) {
|
|
28
67
|
|
|
29
68
|
this.moveTo( points[ 0 ].x, points[ 0 ].y );
|
|
@@ -38,6 +77,13 @@ class Path extends CurvePath {
|
|
|
38
77
|
|
|
39
78
|
}
|
|
40
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Moves {@link Path#currentPoint} to the given point.
|
|
82
|
+
*
|
|
83
|
+
* @param {number} x - The x coordinate.
|
|
84
|
+
* @param {number} y - The y coordinate.
|
|
85
|
+
* @return {Path} A reference to this path.
|
|
86
|
+
*/
|
|
41
87
|
moveTo( x, y ) {
|
|
42
88
|
|
|
43
89
|
this.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?
|
|
@@ -46,6 +92,14 @@ class Path extends CurvePath {
|
|
|
46
92
|
|
|
47
93
|
}
|
|
48
94
|
|
|
95
|
+
/**
|
|
96
|
+
* Adds an instance of {@link LineCurve} to the path by connecting
|
|
97
|
+
* the current point with the given one.
|
|
98
|
+
*
|
|
99
|
+
* @param {number} x - The x coordinate of the end point.
|
|
100
|
+
* @param {number} y - The y coordinate of the end point.
|
|
101
|
+
* @return {Path} A reference to this path.
|
|
102
|
+
*/
|
|
49
103
|
lineTo( x, y ) {
|
|
50
104
|
|
|
51
105
|
const curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );
|
|
@@ -57,6 +111,16 @@ class Path extends CurvePath {
|
|
|
57
111
|
|
|
58
112
|
}
|
|
59
113
|
|
|
114
|
+
/**
|
|
115
|
+
* Adds an instance of {@link QuadraticBezierCurve} to the path by connecting
|
|
116
|
+
* the current point with the given one.
|
|
117
|
+
*
|
|
118
|
+
* @param {number} aCPx - The x coordinate of the control point.
|
|
119
|
+
* @param {number} aCPy - The y coordinate of the control point.
|
|
120
|
+
* @param {number} aX - The x coordinate of the end point.
|
|
121
|
+
* @param {number} aY - The y coordinate of the end point.
|
|
122
|
+
* @return {Path} A reference to this path.
|
|
123
|
+
*/
|
|
60
124
|
quadraticCurveTo( aCPx, aCPy, aX, aY ) {
|
|
61
125
|
|
|
62
126
|
const curve = new QuadraticBezierCurve(
|
|
@@ -73,6 +137,18 @@ class Path extends CurvePath {
|
|
|
73
137
|
|
|
74
138
|
}
|
|
75
139
|
|
|
140
|
+
/**
|
|
141
|
+
* Adds an instance of {@link CubicBezierCurve} to the path by connecting
|
|
142
|
+
* the current point with the given one.
|
|
143
|
+
*
|
|
144
|
+
* @param {number} aCP1x - The x coordinate of the first control point.
|
|
145
|
+
* @param {number} aCP1y - The y coordinate of the first control point.
|
|
146
|
+
* @param {number} aCP2x - The x coordinate of the second control point.
|
|
147
|
+
* @param {number} aCP2y - The y coordinate of the second control point.
|
|
148
|
+
* @param {number} aX - The x coordinate of the end point.
|
|
149
|
+
* @param {number} aY - The y coordinate of the end point.
|
|
150
|
+
* @return {Path} A reference to this path.
|
|
151
|
+
*/
|
|
76
152
|
bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {
|
|
77
153
|
|
|
78
154
|
const curve = new CubicBezierCurve(
|
|
@@ -90,7 +166,14 @@ class Path extends CurvePath {
|
|
|
90
166
|
|
|
91
167
|
}
|
|
92
168
|
|
|
93
|
-
|
|
169
|
+
/**
|
|
170
|
+
* Adds an instance of {@link SplineCurve} to the path by connecting
|
|
171
|
+
* the current point with the given list of points.
|
|
172
|
+
*
|
|
173
|
+
* @param {Array<Vector2>} pts - An array of points in 2D space.
|
|
174
|
+
* @return {Path} A reference to this path.
|
|
175
|
+
*/
|
|
176
|
+
splineThru( pts ) {
|
|
94
177
|
|
|
95
178
|
const npts = [ this.currentPoint.clone() ].concat( pts );
|
|
96
179
|
|
|
@@ -103,6 +186,18 @@ class Path extends CurvePath {
|
|
|
103
186
|
|
|
104
187
|
}
|
|
105
188
|
|
|
189
|
+
/**
|
|
190
|
+
* Adds an arc as an instance of {@link EllipseCurve} to the path, positioned relative
|
|
191
|
+
* to the current point.
|
|
192
|
+
*
|
|
193
|
+
* @param {number} aX - The x coordinate of the center of the arc offsetted from the previous curve.
|
|
194
|
+
* @param {number} aY - The y coordinate of the center of the arc offsetted from the previous curve.
|
|
195
|
+
* @param {number} aRadius - The radius of the arc.
|
|
196
|
+
* @param {number} aStartAngle - The start angle in radians.
|
|
197
|
+
* @param {number} aEndAngle - The end angle in radians.
|
|
198
|
+
* @param {boolean} [aClockwise=false] - Whether to sweep the arc clockwise or not.
|
|
199
|
+
* @return {Path} A reference to this path.
|
|
200
|
+
*/
|
|
106
201
|
arc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {
|
|
107
202
|
|
|
108
203
|
const x0 = this.currentPoint.x;
|
|
@@ -115,6 +210,17 @@ class Path extends CurvePath {
|
|
|
115
210
|
|
|
116
211
|
}
|
|
117
212
|
|
|
213
|
+
/**
|
|
214
|
+
* Adds an absolutely positioned arc as an instance of {@link EllipseCurve} to the path.
|
|
215
|
+
*
|
|
216
|
+
* @param {number} aX - The x coordinate of the center of the arc.
|
|
217
|
+
* @param {number} aY - The y coordinate of the center of the arc.
|
|
218
|
+
* @param {number} aRadius - The radius of the arc.
|
|
219
|
+
* @param {number} aStartAngle - The start angle in radians.
|
|
220
|
+
* @param {number} aEndAngle - The end angle in radians.
|
|
221
|
+
* @param {boolean} [aClockwise=false] - Whether to sweep the arc clockwise or not.
|
|
222
|
+
* @return {Path} A reference to this path.
|
|
223
|
+
*/
|
|
118
224
|
absarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {
|
|
119
225
|
|
|
120
226
|
this.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );
|
|
@@ -123,6 +229,20 @@ class Path extends CurvePath {
|
|
|
123
229
|
|
|
124
230
|
}
|
|
125
231
|
|
|
232
|
+
/**
|
|
233
|
+
* Adds an ellipse as an instance of {@link EllipseCurve} to the path, positioned relative
|
|
234
|
+
* to the current point
|
|
235
|
+
*
|
|
236
|
+
* @param {number} aX - The x coordinate of the center of the ellipse offsetted from the previous curve.
|
|
237
|
+
* @param {number} aY - The y coordinate of the center of the ellipse offsetted from the previous curve.
|
|
238
|
+
* @param {number} xRadius - The radius of the ellipse in the x axis.
|
|
239
|
+
* @param {number} yRadius - The radius of the ellipse in the y axis.
|
|
240
|
+
* @param {number} aStartAngle - The start angle in radians.
|
|
241
|
+
* @param {number} aEndAngle - The end angle in radians.
|
|
242
|
+
* @param {boolean} [aClockwise=false] - Whether to sweep the ellipse clockwise or not.
|
|
243
|
+
* @param {boolean} [aRotation=0] - The rotation angle of the ellipse in radians, counterclockwise from the positive X axis.
|
|
244
|
+
* @return {Path} A reference to this path.
|
|
245
|
+
*/
|
|
126
246
|
ellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {
|
|
127
247
|
|
|
128
248
|
const x0 = this.currentPoint.x;
|
|
@@ -134,6 +254,19 @@ class Path extends CurvePath {
|
|
|
134
254
|
|
|
135
255
|
}
|
|
136
256
|
|
|
257
|
+
/**
|
|
258
|
+
* Adds an absolutely positioned ellipse as an instance of {@link EllipseCurve} to the path.
|
|
259
|
+
*
|
|
260
|
+
* @param {number} aX - The x coordinate of the absolute center of the ellipse.
|
|
261
|
+
* @param {number} aY - The y coordinate of the absolute center of the ellipse.
|
|
262
|
+
* @param {number} xRadius - The radius of the ellipse in the x axis.
|
|
263
|
+
* @param {number} yRadius - The radius of the ellipse in the y axis.
|
|
264
|
+
* @param {number} aStartAngle - The start angle in radians.
|
|
265
|
+
* @param {number} aEndAngle - The end angle in radians.
|
|
266
|
+
* @param {boolean} [aClockwise=false] - Whether to sweep the ellipse clockwise or not.
|
|
267
|
+
* @param {number} [aRotation=0] - The rotation angle of the ellipse in radians, counterclockwise from the positive X axis.
|
|
268
|
+
* @return {Path} A reference to this path.
|
|
269
|
+
*/
|
|
137
270
|
absellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {
|
|
138
271
|
|
|
139
272
|
const curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );
|
package/src/extras/core/Shape.js
CHANGED
|
@@ -1,20 +1,76 @@
|
|
|
1
1
|
import { Path } from './Path.js';
|
|
2
|
-
import
|
|
3
|
-
|
|
2
|
+
import { generateUUID } from '../../math/MathUtils.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Defines an arbitrary 2d shape plane using paths with optional holes. It
|
|
6
|
+
* can be used with {@link ExtrudeGeometry}, {@link ShapeGeometry}, to get
|
|
7
|
+
* points, or to get triangulated faces.
|
|
8
|
+
*
|
|
9
|
+
* ```js
|
|
10
|
+
* const heartShape = new THREE.Shape();
|
|
11
|
+
*
|
|
12
|
+
* heartShape.moveTo( 25, 25 );
|
|
13
|
+
* heartShape.bezierCurveTo( 25, 25, 20, 0, 0, 0 );
|
|
14
|
+
* heartShape.bezierCurveTo( - 30, 0, - 30, 35, - 30, 35 );
|
|
15
|
+
* heartShape.bezierCurveTo( - 30, 55, - 10, 77, 25, 95 );
|
|
16
|
+
* heartShape.bezierCurveTo( 60, 77, 80, 55, 80, 35 );
|
|
17
|
+
* heartShape.bezierCurveTo( 80, 35, 80, 0, 50, 0 );
|
|
18
|
+
* heartShape.bezierCurveTo( 35, 0, 25, 25, 25, 25 );
|
|
19
|
+
*
|
|
20
|
+
* const extrudeSettings = {
|
|
21
|
+
* depth: 8,
|
|
22
|
+
* bevelEnabled: true,
|
|
23
|
+
* bevelSegments: 2,
|
|
24
|
+
* steps: 2,
|
|
25
|
+
* bevelSize: 1,
|
|
26
|
+
* bevelThickness: 1
|
|
27
|
+
* };
|
|
28
|
+
*
|
|
29
|
+
* const geometry = new THREE.ExtrudeGeometry( heartShape, extrudeSettings );
|
|
30
|
+
* const mesh = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial() );
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @augments Path
|
|
34
|
+
*/
|
|
4
35
|
class Shape extends Path {
|
|
5
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Constructs a new shape.
|
|
39
|
+
*
|
|
40
|
+
* @param {Array<Vector2>} [points] - An array of 2D points defining the shape.
|
|
41
|
+
*/
|
|
6
42
|
constructor( points ) {
|
|
7
43
|
|
|
8
44
|
super( points );
|
|
9
45
|
|
|
10
|
-
|
|
46
|
+
/**
|
|
47
|
+
* The UUID of the shape.
|
|
48
|
+
*
|
|
49
|
+
* @type {string}
|
|
50
|
+
* @readonly
|
|
51
|
+
*/
|
|
52
|
+
this.uuid = generateUUID();
|
|
11
53
|
|
|
12
54
|
this.type = 'Shape';
|
|
13
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Defines the holes in the shape. Hole definitions must use the
|
|
58
|
+
* opposite winding order (CW/CCW) than the outer shape.
|
|
59
|
+
*
|
|
60
|
+
* @type {Array<Path>}
|
|
61
|
+
* @readonly
|
|
62
|
+
*/
|
|
14
63
|
this.holes = [];
|
|
15
64
|
|
|
16
65
|
}
|
|
17
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Returns an array representing each contour of the holes
|
|
69
|
+
* as a list of 2D points.
|
|
70
|
+
*
|
|
71
|
+
* @param {number} divisions - The fineness of the result.
|
|
72
|
+
* @return {Array<Array<Vector2>>} The holes as a series of 2D points.
|
|
73
|
+
*/
|
|
18
74
|
getPointsHoles( divisions ) {
|
|
19
75
|
|
|
20
76
|
const holesPts = [];
|
|
@@ -31,6 +87,13 @@ class Shape extends Path {
|
|
|
31
87
|
|
|
32
88
|
// get points of shape and holes (keypoints based on segments parameter)
|
|
33
89
|
|
|
90
|
+
/**
|
|
91
|
+
* Returns an object that holds contour data for the shape and its holes as
|
|
92
|
+
* arrays of 2D points.
|
|
93
|
+
*
|
|
94
|
+
* @param {number} divisions - The fineness of the result.
|
|
95
|
+
* @return {{shape:Array<Vector2>,holes:Array<Array<Vector2>>}} An object with contour data.
|
|
96
|
+
*/
|
|
34
97
|
extractPoints( divisions ) {
|
|
35
98
|
|
|
36
99
|
return {
|
|
@@ -3,19 +3,51 @@ import { Path } from './Path.js';
|
|
|
3
3
|
import { Shape } from './Shape.js';
|
|
4
4
|
import { ShapeUtils } from '../ShapeUtils.js';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* This class is used to convert a series of paths to an array of
|
|
8
|
+
* shapes. It is specifically used in context of fonts and SVG.
|
|
9
|
+
*/
|
|
6
10
|
class ShapePath {
|
|
7
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new shape path.
|
|
14
|
+
*/
|
|
8
15
|
constructor() {
|
|
9
16
|
|
|
10
17
|
this.type = 'ShapePath';
|
|
11
18
|
|
|
19
|
+
/**
|
|
20
|
+
* The color of the shape.
|
|
21
|
+
*
|
|
22
|
+
* @type {Color}
|
|
23
|
+
*/
|
|
12
24
|
this.color = new Color();
|
|
13
25
|
|
|
26
|
+
/**
|
|
27
|
+
* The paths that have been generated for this shape.
|
|
28
|
+
*
|
|
29
|
+
* @type {Array<Path>}
|
|
30
|
+
* @default null
|
|
31
|
+
*/
|
|
14
32
|
this.subPaths = [];
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The current path that is being generated.
|
|
36
|
+
*
|
|
37
|
+
* @type {?Path}
|
|
38
|
+
* @default null
|
|
39
|
+
*/
|
|
15
40
|
this.currentPath = null;
|
|
16
41
|
|
|
17
42
|
}
|
|
18
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Creates a new path and moves it current point to the given one.
|
|
46
|
+
*
|
|
47
|
+
* @param {number} x - The x coordinate.
|
|
48
|
+
* @param {number} y - The y coordinate.
|
|
49
|
+
* @return {ShapePath} A reference to this shape path.
|
|
50
|
+
*/
|
|
19
51
|
moveTo( x, y ) {
|
|
20
52
|
|
|
21
53
|
this.currentPath = new Path();
|
|
@@ -26,6 +58,14 @@ class ShapePath {
|
|
|
26
58
|
|
|
27
59
|
}
|
|
28
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Adds an instance of {@link LineCurve} to the path by connecting
|
|
63
|
+
* the current point with the given one.
|
|
64
|
+
*
|
|
65
|
+
* @param {number} x - The x coordinate of the end point.
|
|
66
|
+
* @param {number} y - The y coordinate of the end point.
|
|
67
|
+
* @return {ShapePath} A reference to this shape path.
|
|
68
|
+
*/
|
|
29
69
|
lineTo( x, y ) {
|
|
30
70
|
|
|
31
71
|
this.currentPath.lineTo( x, y );
|
|
@@ -34,6 +74,16 @@ class ShapePath {
|
|
|
34
74
|
|
|
35
75
|
}
|
|
36
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Adds an instance of {@link QuadraticBezierCurve} to the path by connecting
|
|
79
|
+
* the current point with the given one.
|
|
80
|
+
*
|
|
81
|
+
* @param {number} aCPx - The x coordinate of the control point.
|
|
82
|
+
* @param {number} aCPy - The y coordinate of the control point.
|
|
83
|
+
* @param {number} aX - The x coordinate of the end point.
|
|
84
|
+
* @param {number} aY - The y coordinate of the end point.
|
|
85
|
+
* @return {ShapePath} A reference to this shape path.
|
|
86
|
+
*/
|
|
37
87
|
quadraticCurveTo( aCPx, aCPy, aX, aY ) {
|
|
38
88
|
|
|
39
89
|
this.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );
|
|
@@ -42,6 +92,18 @@ class ShapePath {
|
|
|
42
92
|
|
|
43
93
|
}
|
|
44
94
|
|
|
95
|
+
/**
|
|
96
|
+
* Adds an instance of {@link CubicBezierCurve} to the path by connecting
|
|
97
|
+
* the current point with the given one.
|
|
98
|
+
*
|
|
99
|
+
* @param {number} aCP1x - The x coordinate of the first control point.
|
|
100
|
+
* @param {number} aCP1y - The y coordinate of the first control point.
|
|
101
|
+
* @param {number} aCP2x - The x coordinate of the second control point.
|
|
102
|
+
* @param {number} aCP2y - The y coordinate of the second control point.
|
|
103
|
+
* @param {number} aX - The x coordinate of the end point.
|
|
104
|
+
* @param {number} aY - The y coordinate of the end point.
|
|
105
|
+
* @return {ShapePath} A reference to this shape path.
|
|
106
|
+
*/
|
|
45
107
|
bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {
|
|
46
108
|
|
|
47
109
|
this.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );
|
|
@@ -50,6 +112,13 @@ class ShapePath {
|
|
|
50
112
|
|
|
51
113
|
}
|
|
52
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Adds an instance of {@link SplineCurve} to the path by connecting
|
|
117
|
+
* the current point with the given list of points.
|
|
118
|
+
*
|
|
119
|
+
* @param {Array<Vector2>} pts - An array of points in 2D space.
|
|
120
|
+
* @return {ShapePath} A reference to this shape path.
|
|
121
|
+
*/
|
|
53
122
|
splineThru( pts ) {
|
|
54
123
|
|
|
55
124
|
this.currentPath.splineThru( pts );
|
|
@@ -58,6 +127,13 @@ class ShapePath {
|
|
|
58
127
|
|
|
59
128
|
}
|
|
60
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Converts the paths into an array of shapes.
|
|
132
|
+
*
|
|
133
|
+
* @param {boolean} isCCW - By default solid shapes are defined clockwise (CW) and holes are defined counterclockwise (CCW).
|
|
134
|
+
* If this flag is set to `true`, then those are flipped.
|
|
135
|
+
* @return {Array<Shape>} An array of shapes.
|
|
136
|
+
*/
|
|
61
137
|
toShapes( isCCW ) {
|
|
62
138
|
|
|
63
139
|
function toShapesNoHoles( inSubpaths ) {
|
|
@@ -1,11 +1,33 @@
|
|
|
1
1
|
import { EllipseCurve } from './EllipseCurve.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* A curve representing an arc.
|
|
5
|
+
*
|
|
6
|
+
* @augments EllipseCurve
|
|
7
|
+
*/
|
|
3
8
|
class ArcCurve extends EllipseCurve {
|
|
4
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Constructs a new arc curve.
|
|
12
|
+
*
|
|
13
|
+
* @param {number} [aX=0] - The X center of the ellipse.
|
|
14
|
+
* @param {number} [aY=0] - The Y center of the ellipse.
|
|
15
|
+
* @param {number} [aRadius=1] - The radius of the ellipse in the x direction.
|
|
16
|
+
* @param {number} [aStartAngle=0] - The start angle of the curve in radians starting from the positive X axis.
|
|
17
|
+
* @param {number} [aEndAngle=Math.PI*2] - The end angle of the curve in radians starting from the positive X axis.
|
|
18
|
+
* @param {boolean} [aClockwise=false] - Whether the ellipse is drawn clockwise or not.
|
|
19
|
+
*/
|
|
5
20
|
constructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {
|
|
6
21
|
|
|
7
22
|
super( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );
|
|
8
23
|
|
|
24
|
+
/**
|
|
25
|
+
* This flag can be used for type testing.
|
|
26
|
+
*
|
|
27
|
+
* @type {boolean}
|
|
28
|
+
* @readonly
|
|
29
|
+
* @default true
|
|
30
|
+
*/
|
|
9
31
|
this.isArcCurve = true;
|
|
10
32
|
|
|
11
33
|
this.type = 'ArcCurve';
|
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
import { Vector3 } from '../../math/Vector3.js';
|
|
2
2
|
import { Curve } from '../core/Curve.js';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
* Centripetal CatmullRom Curve - which is useful for avoiding
|
|
6
|
-
* cusps and self-intersections in non-uniform catmull rom curves.
|
|
7
|
-
* http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf
|
|
8
|
-
*
|
|
9
|
-
* curve.type accepts centripetal(default), chordal and catmullrom
|
|
10
|
-
* curve.tension is used for catmullrom which defaults to 0.5
|
|
11
|
-
*/
|
|
12
|
-
|
|
4
|
+
function CubicPoly() {
|
|
13
5
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Centripetal CatmullRom Curve - which is useful for avoiding
|
|
8
|
+
* cusps and self-intersections in non-uniform catmull rom curves.
|
|
9
|
+
* http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf
|
|
10
|
+
*
|
|
11
|
+
* curve.type accepts centripetal(default), chordal and catmullrom
|
|
12
|
+
* curve.tension is used for catmullrom which defaults to 0.5
|
|
13
|
+
*/
|
|
18
14
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
/*
|
|
16
|
+
Based on an optimized c++ solution in
|
|
17
|
+
- http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/
|
|
18
|
+
- http://ideone.com/NoEbVM
|
|
23
19
|
|
|
24
|
-
|
|
20
|
+
This CubicPoly class could be used for reusing some variables and calculations,
|
|
21
|
+
but for three.js curve use, it could be possible inlined and flatten into a single function call
|
|
22
|
+
which can be placed in CurveUtils.
|
|
23
|
+
*/
|
|
25
24
|
|
|
26
25
|
let c0 = 0, c1 = 0, c2 = 0, c3 = 0;
|
|
27
26
|
|
|
@@ -83,23 +82,95 @@ const px = /*@__PURE__*/ new CubicPoly();
|
|
|
83
82
|
const py = /*@__PURE__*/ new CubicPoly();
|
|
84
83
|
const pz = /*@__PURE__*/ new CubicPoly();
|
|
85
84
|
|
|
85
|
+
/**
|
|
86
|
+
* A curve representing a Catmull-Rom spline.
|
|
87
|
+
*
|
|
88
|
+
* ```js
|
|
89
|
+
* //Create a closed wavey loop
|
|
90
|
+
* const curve = new THREE.CatmullRomCurve3( [
|
|
91
|
+
* new THREE.Vector3( -10, 0, 10 ),
|
|
92
|
+
* new THREE.Vector3( -5, 5, 5 ),
|
|
93
|
+
* new THREE.Vector3( 0, 0, 0 ),
|
|
94
|
+
* new THREE.Vector3( 5, -5, 5 ),
|
|
95
|
+
* new THREE.Vector3( 10, 0, 10 )
|
|
96
|
+
* ] );
|
|
97
|
+
*
|
|
98
|
+
* const points = curve.getPoints( 50 );
|
|
99
|
+
* const geometry = new THREE.BufferGeometry().setFromPoints( points );
|
|
100
|
+
*
|
|
101
|
+
* const material = new THREE.LineBasicMaterial( { color: 0xff0000 } );
|
|
102
|
+
*
|
|
103
|
+
* // Create the final object to add to the scene
|
|
104
|
+
* const curveObject = new THREE.Line( geometry, material );
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* @augments Curve
|
|
108
|
+
*/
|
|
86
109
|
class CatmullRomCurve3 extends Curve {
|
|
87
110
|
|
|
111
|
+
/**
|
|
112
|
+
* Constructs a new Catmull-Rom curve.
|
|
113
|
+
*
|
|
114
|
+
* @param {Array<Vector3>} [points] - An array of 3D points defining the curve.
|
|
115
|
+
* @param {boolean} [closed=false] - Whether the curve is closed or not.
|
|
116
|
+
* @param {('centripetal'|'chordal'|'catmullrom')} [curveType='centripetal'] - The curve type.
|
|
117
|
+
* @param {number} [tension=0.5] - Tension of the curve.
|
|
118
|
+
*/
|
|
88
119
|
constructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {
|
|
89
120
|
|
|
90
121
|
super();
|
|
91
122
|
|
|
123
|
+
/**
|
|
124
|
+
* This flag can be used for type testing.
|
|
125
|
+
*
|
|
126
|
+
* @type {boolean}
|
|
127
|
+
* @readonly
|
|
128
|
+
* @default true
|
|
129
|
+
*/
|
|
92
130
|
this.isCatmullRomCurve3 = true;
|
|
93
131
|
|
|
94
132
|
this.type = 'CatmullRomCurve3';
|
|
95
133
|
|
|
134
|
+
/**
|
|
135
|
+
* An array of 3D points defining the curve.
|
|
136
|
+
*
|
|
137
|
+
* @type {Array<Vector3>}
|
|
138
|
+
*/
|
|
96
139
|
this.points = points;
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Whether the curve is closed or not.
|
|
143
|
+
*
|
|
144
|
+
* @type {boolean}
|
|
145
|
+
* @default false
|
|
146
|
+
*/
|
|
97
147
|
this.closed = closed;
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* The curve type.
|
|
151
|
+
*
|
|
152
|
+
* @type {('centripetal'|'chordal'|'catmullrom')}
|
|
153
|
+
* @default 'centripetal'
|
|
154
|
+
*/
|
|
98
155
|
this.curveType = curveType;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Tension of the curve.
|
|
159
|
+
*
|
|
160
|
+
* @type {number}
|
|
161
|
+
* @default 0.5
|
|
162
|
+
*/
|
|
99
163
|
this.tension = tension;
|
|
100
164
|
|
|
101
165
|
}
|
|
102
166
|
|
|
167
|
+
/**
|
|
168
|
+
* Returns a point on the curve.
|
|
169
|
+
*
|
|
170
|
+
* @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
|
|
171
|
+
* @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
|
|
172
|
+
* @return {Vector3} The position on the curve.
|
|
173
|
+
*/
|
|
103
174
|
getPoint( t, optionalTarget = new Vector3() ) {
|
|
104
175
|
|
|
105
176
|
const point = optionalTarget;
|
|
@@ -2,23 +2,90 @@ import { Curve } from '../core/Curve.js';
|
|
|
2
2
|
import { CubicBezier } from '../core/Interpolations.js';
|
|
3
3
|
import { Vector2 } from '../../math/Vector2.js';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* A curve representing a 2D Cubic Bezier curve.
|
|
7
|
+
*
|
|
8
|
+
* ```js
|
|
9
|
+
* const curve = new THREE.CubicBezierCurve(
|
|
10
|
+
* new THREE.Vector2( - 0, 0 ),
|
|
11
|
+
* new THREE.Vector2( - 5, 15 ),
|
|
12
|
+
* new THREE.Vector2( 20, 15 ),
|
|
13
|
+
* new THREE.Vector2( 10, 0 )
|
|
14
|
+
* );
|
|
15
|
+
*
|
|
16
|
+
* const points = curve.getPoints( 50 );
|
|
17
|
+
* const geometry = new THREE.BufferGeometry().setFromPoints( points );
|
|
18
|
+
*
|
|
19
|
+
* const material = new THREE.LineBasicMaterial( { color: 0xff0000 } );
|
|
20
|
+
*
|
|
21
|
+
* // Create the final object to add to the scene
|
|
22
|
+
* const curveObject = new THREE.Line( geometry, material );
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @augments Curve
|
|
26
|
+
*/
|
|
5
27
|
class CubicBezierCurve extends Curve {
|
|
6
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Constructs a new Cubic Bezier curve.
|
|
31
|
+
*
|
|
32
|
+
* @param {Vector2} [v0] - The start point.
|
|
33
|
+
* @param {Vector2} [v1] - The first control point.
|
|
34
|
+
* @param {Vector2} [v2] - The second control point.
|
|
35
|
+
* @param {Vector2} [v3] - The end point.
|
|
36
|
+
*/
|
|
7
37
|
constructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {
|
|
8
38
|
|
|
9
39
|
super();
|
|
10
40
|
|
|
41
|
+
/**
|
|
42
|
+
* This flag can be used for type testing.
|
|
43
|
+
*
|
|
44
|
+
* @type {boolean}
|
|
45
|
+
* @readonly
|
|
46
|
+
* @default true
|
|
47
|
+
*/
|
|
11
48
|
this.isCubicBezierCurve = true;
|
|
12
49
|
|
|
13
50
|
this.type = 'CubicBezierCurve';
|
|
14
51
|
|
|
52
|
+
/**
|
|
53
|
+
* The start point.
|
|
54
|
+
*
|
|
55
|
+
* @type {Vector2}
|
|
56
|
+
*/
|
|
15
57
|
this.v0 = v0;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The first control point.
|
|
61
|
+
*
|
|
62
|
+
* @type {Vector2}
|
|
63
|
+
*/
|
|
16
64
|
this.v1 = v1;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The second control point.
|
|
68
|
+
*
|
|
69
|
+
* @type {Vector2}
|
|
70
|
+
*/
|
|
17
71
|
this.v2 = v2;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* The end point.
|
|
75
|
+
*
|
|
76
|
+
* @type {Vector2}
|
|
77
|
+
*/
|
|
18
78
|
this.v3 = v3;
|
|
19
79
|
|
|
20
80
|
}
|
|
21
81
|
|
|
82
|
+
/**
|
|
83
|
+
* Returns a point on the curve.
|
|
84
|
+
*
|
|
85
|
+
* @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
|
|
86
|
+
* @param {Vector2} [optionalTarget] - The optional target vector the result is written to.
|
|
87
|
+
* @return {Vector2} The position on the curve.
|
|
88
|
+
*/
|
|
22
89
|
getPoint( t, optionalTarget = new Vector2() ) {
|
|
23
90
|
|
|
24
91
|
const point = optionalTarget;
|