@plastic-software/three 0.167.4 → 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 +36217 -23964
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46744
- package/build/three.module.min.js +2 -3
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50671
- package/build/three.webgpu.min.js +2 -3
- 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/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/Ray.js
CHANGED
|
@@ -9,15 +9,45 @@ const _edge1 = /*@__PURE__*/ new Vector3();
|
|
|
9
9
|
const _edge2 = /*@__PURE__*/ new Vector3();
|
|
10
10
|
const _normal = /*@__PURE__*/ new Vector3();
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* A ray that emits from an origin in a certain direction. The class is used by
|
|
14
|
+
* {@link Raycaster} to assist with raycasting. Raycasting is used for
|
|
15
|
+
* mouse picking (working out what objects in the 3D space the mouse is over)
|
|
16
|
+
* amongst other things.
|
|
17
|
+
*/
|
|
12
18
|
class Ray {
|
|
13
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new ray.
|
|
22
|
+
*
|
|
23
|
+
* @param {Vector3} [origin=(0,0,0)] - The origin of the ray.
|
|
24
|
+
* @param {Vector3} [direction=(0,0,-1)] - The (normalized) direction of the ray.
|
|
25
|
+
*/
|
|
14
26
|
constructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {
|
|
15
27
|
|
|
28
|
+
/**
|
|
29
|
+
* The origin of the ray.
|
|
30
|
+
*
|
|
31
|
+
* @type {Vector3}
|
|
32
|
+
*/
|
|
16
33
|
this.origin = origin;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The (normalized) direction of the ray.
|
|
37
|
+
*
|
|
38
|
+
* @type {Vector3}
|
|
39
|
+
*/
|
|
17
40
|
this.direction = direction;
|
|
18
41
|
|
|
19
42
|
}
|
|
20
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Sets the ray's components by copying the given values.
|
|
46
|
+
*
|
|
47
|
+
* @param {Vector3} origin - The origin.
|
|
48
|
+
* @param {Vector3} direction - The direction.
|
|
49
|
+
* @return {Ray} A reference to this ray.
|
|
50
|
+
*/
|
|
21
51
|
set( origin, direction ) {
|
|
22
52
|
|
|
23
53
|
this.origin.copy( origin );
|
|
@@ -27,6 +57,12 @@ class Ray {
|
|
|
27
57
|
|
|
28
58
|
}
|
|
29
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Copies the values of the given ray to this instance.
|
|
62
|
+
*
|
|
63
|
+
* @param {Ray} ray - The ray to copy.
|
|
64
|
+
* @return {Ray} A reference to this ray.
|
|
65
|
+
*/
|
|
30
66
|
copy( ray ) {
|
|
31
67
|
|
|
32
68
|
this.origin.copy( ray.origin );
|
|
@@ -36,12 +72,25 @@ class Ray {
|
|
|
36
72
|
|
|
37
73
|
}
|
|
38
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Returns a vector that is located at a given distance along this ray.
|
|
77
|
+
*
|
|
78
|
+
* @param {number} t - The distance along the ray to retrieve a position for.
|
|
79
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
80
|
+
* @return {Vector3} A position on the ray.
|
|
81
|
+
*/
|
|
39
82
|
at( t, target ) {
|
|
40
83
|
|
|
41
84
|
return target.copy( this.origin ).addScaledVector( this.direction, t );
|
|
42
85
|
|
|
43
86
|
}
|
|
44
87
|
|
|
88
|
+
/**
|
|
89
|
+
* Adjusts the direction of the ray to point at the given vector in world space.
|
|
90
|
+
*
|
|
91
|
+
* @param {Vector3} v - The target position.
|
|
92
|
+
* @return {Ray} A reference to this ray.
|
|
93
|
+
*/
|
|
45
94
|
lookAt( v ) {
|
|
46
95
|
|
|
47
96
|
this.direction.copy( v ).sub( this.origin ).normalize();
|
|
@@ -50,6 +99,12 @@ class Ray {
|
|
|
50
99
|
|
|
51
100
|
}
|
|
52
101
|
|
|
102
|
+
/**
|
|
103
|
+
* Shift the origin of this ray along its direction by the given distance.
|
|
104
|
+
*
|
|
105
|
+
* @param {number} t - The distance along the ray to interpolate.
|
|
106
|
+
* @return {Ray} A reference to this ray.
|
|
107
|
+
*/
|
|
53
108
|
recast( t ) {
|
|
54
109
|
|
|
55
110
|
this.origin.copy( this.at( t, _vector ) );
|
|
@@ -58,6 +113,13 @@ class Ray {
|
|
|
58
113
|
|
|
59
114
|
}
|
|
60
115
|
|
|
116
|
+
/**
|
|
117
|
+
* Returns the point along this ray that is closest to the given point.
|
|
118
|
+
*
|
|
119
|
+
* @param {Vector3} point - A point in 3D space to get the closet location on the ray for.
|
|
120
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
121
|
+
* @return {Vector3} The closest point on this ray.
|
|
122
|
+
*/
|
|
61
123
|
closestPointToPoint( point, target ) {
|
|
62
124
|
|
|
63
125
|
target.subVectors( point, this.origin );
|
|
@@ -74,12 +136,24 @@ class Ray {
|
|
|
74
136
|
|
|
75
137
|
}
|
|
76
138
|
|
|
139
|
+
/**
|
|
140
|
+
* Returns the distance of the closest approach between this ray and the given point.
|
|
141
|
+
*
|
|
142
|
+
* @param {Vector3} point - A point in 3D space to compute the distance to.
|
|
143
|
+
* @return {number} The distance.
|
|
144
|
+
*/
|
|
77
145
|
distanceToPoint( point ) {
|
|
78
146
|
|
|
79
147
|
return Math.sqrt( this.distanceSqToPoint( point ) );
|
|
80
148
|
|
|
81
149
|
}
|
|
82
150
|
|
|
151
|
+
/**
|
|
152
|
+
* Returns the squared distance of the closest approach between this ray and the given point.
|
|
153
|
+
*
|
|
154
|
+
* @param {Vector3} point - A point in 3D space to compute the distance to.
|
|
155
|
+
* @return {number} The squared distance.
|
|
156
|
+
*/
|
|
83
157
|
distanceSqToPoint( point ) {
|
|
84
158
|
|
|
85
159
|
const directionDistance = _vector.subVectors( point, this.origin ).dot( this.direction );
|
|
@@ -98,6 +172,15 @@ class Ray {
|
|
|
98
172
|
|
|
99
173
|
}
|
|
100
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Returns the squared distance between this ray and the given line segment.
|
|
177
|
+
*
|
|
178
|
+
* @param {Vector3} v0 - The start point of the line segment.
|
|
179
|
+
* @param {Vector3} v1 - The end point of the line segment.
|
|
180
|
+
* @param {Vector3} [optionalPointOnRay] - When provided, it receives the point on this ray that is closest to the segment.
|
|
181
|
+
* @param {Vector3} [optionalPointOnSegment] - When provided, it receives the point on the line segment that is closest to this ray.
|
|
182
|
+
* @return {number} The squared distance.
|
|
183
|
+
*/
|
|
101
184
|
distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {
|
|
102
185
|
|
|
103
186
|
// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h
|
|
@@ -217,6 +300,14 @@ class Ray {
|
|
|
217
300
|
|
|
218
301
|
}
|
|
219
302
|
|
|
303
|
+
/**
|
|
304
|
+
* Intersects this ray with the given sphere, returning the intersection
|
|
305
|
+
* point or `null` if there is no intersection.
|
|
306
|
+
*
|
|
307
|
+
* @param {Sphere} sphere - The sphere to intersect.
|
|
308
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
309
|
+
* @return {?Vector3} The intersection point.
|
|
310
|
+
*/
|
|
220
311
|
intersectSphere( sphere, target ) {
|
|
221
312
|
|
|
222
313
|
_vector.subVectors( sphere.center, this.origin );
|
|
@@ -247,12 +338,25 @@ class Ray {
|
|
|
247
338
|
|
|
248
339
|
}
|
|
249
340
|
|
|
341
|
+
/**
|
|
342
|
+
* Returns `true` if this ray intersects with the given sphere.
|
|
343
|
+
*
|
|
344
|
+
* @param {Sphere} sphere - The sphere to intersect.
|
|
345
|
+
* @return {boolean} Whether this ray intersects with the given sphere or not.
|
|
346
|
+
*/
|
|
250
347
|
intersectsSphere( sphere ) {
|
|
251
348
|
|
|
252
349
|
return this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );
|
|
253
350
|
|
|
254
351
|
}
|
|
255
352
|
|
|
353
|
+
/**
|
|
354
|
+
* Computes the distance from the ray's origin to the given plane. Returns `null` if the ray
|
|
355
|
+
* does not intersect with the plane.
|
|
356
|
+
*
|
|
357
|
+
* @param {Plane} plane - The plane to compute the distance to.
|
|
358
|
+
* @return {?number} Whether this ray intersects with the given sphere or not.
|
|
359
|
+
*/
|
|
256
360
|
distanceToPlane( plane ) {
|
|
257
361
|
|
|
258
362
|
const denominator = plane.normal.dot( this.direction );
|
|
@@ -280,6 +384,14 @@ class Ray {
|
|
|
280
384
|
|
|
281
385
|
}
|
|
282
386
|
|
|
387
|
+
/**
|
|
388
|
+
* Intersects this ray with the given plane, returning the intersection
|
|
389
|
+
* point or `null` if there is no intersection.
|
|
390
|
+
*
|
|
391
|
+
* @param {Plane} plane - The plane to intersect.
|
|
392
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
393
|
+
* @return {?Vector3} The intersection point.
|
|
394
|
+
*/
|
|
283
395
|
intersectPlane( plane, target ) {
|
|
284
396
|
|
|
285
397
|
const t = this.distanceToPlane( plane );
|
|
@@ -294,6 +406,12 @@ class Ray {
|
|
|
294
406
|
|
|
295
407
|
}
|
|
296
408
|
|
|
409
|
+
/**
|
|
410
|
+
* Returns `true` if this ray intersects with the given plane.
|
|
411
|
+
*
|
|
412
|
+
* @param {Plane} plane - The plane to intersect.
|
|
413
|
+
* @return {boolean} Whether this ray intersects with the given plane or not.
|
|
414
|
+
*/
|
|
297
415
|
intersectsPlane( plane ) {
|
|
298
416
|
|
|
299
417
|
// check if the ray lies on the plane first
|
|
@@ -320,6 +438,14 @@ class Ray {
|
|
|
320
438
|
|
|
321
439
|
}
|
|
322
440
|
|
|
441
|
+
/**
|
|
442
|
+
* Intersects this ray with the given bounding box, returning the intersection
|
|
443
|
+
* point or `null` if there is no intersection.
|
|
444
|
+
*
|
|
445
|
+
* @param {Box3} box - The box to intersect.
|
|
446
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
447
|
+
* @return {?Vector3} The intersection point.
|
|
448
|
+
*/
|
|
323
449
|
intersectBox( box, target ) {
|
|
324
450
|
|
|
325
451
|
let tmin, tmax, tymin, tymax, tzmin, tzmax;
|
|
@@ -386,12 +512,29 @@ class Ray {
|
|
|
386
512
|
|
|
387
513
|
}
|
|
388
514
|
|
|
515
|
+
/**
|
|
516
|
+
* Returns `true` if this ray intersects with the given box.
|
|
517
|
+
*
|
|
518
|
+
* @param {Box3} box - The box to intersect.
|
|
519
|
+
* @return {boolean} Whether this ray intersects with the given box or not.
|
|
520
|
+
*/
|
|
389
521
|
intersectsBox( box ) {
|
|
390
522
|
|
|
391
523
|
return this.intersectBox( box, _vector ) !== null;
|
|
392
524
|
|
|
393
525
|
}
|
|
394
526
|
|
|
527
|
+
/**
|
|
528
|
+
* Intersects this ray with the given triangle, returning the intersection
|
|
529
|
+
* point or `null` if there is no intersection.
|
|
530
|
+
*
|
|
531
|
+
* @param {Vector3} a - The first vertex of the triangle.
|
|
532
|
+
* @param {Vector3} b - The second vertex of the triangle.
|
|
533
|
+
* @param {Vector3} c - The third vertex of the triangle.
|
|
534
|
+
* @param {boolean} backfaceCulling - Whether to use backface culling or not.
|
|
535
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
536
|
+
* @return {?Vector3} The intersection point.
|
|
537
|
+
*/
|
|
395
538
|
intersectTriangle( a, b, c, backfaceCulling, target ) {
|
|
396
539
|
|
|
397
540
|
// Compute the offset origin, edges, and normal.
|
|
@@ -467,6 +610,12 @@ class Ray {
|
|
|
467
610
|
|
|
468
611
|
}
|
|
469
612
|
|
|
613
|
+
/**
|
|
614
|
+
* Transforms this ray with the given 4x4 transformation matrix.
|
|
615
|
+
*
|
|
616
|
+
* @param {Matrix4} matrix4 - The transformation matrix.
|
|
617
|
+
* @return {Ray} A reference to this ray.
|
|
618
|
+
*/
|
|
470
619
|
applyMatrix4( matrix4 ) {
|
|
471
620
|
|
|
472
621
|
this.origin.applyMatrix4( matrix4 );
|
|
@@ -476,12 +625,23 @@ class Ray {
|
|
|
476
625
|
|
|
477
626
|
}
|
|
478
627
|
|
|
628
|
+
/**
|
|
629
|
+
* Returns `true` if this ray is equal with the given one.
|
|
630
|
+
*
|
|
631
|
+
* @param {Ray} ray - The ray to test for equality.
|
|
632
|
+
* @return {boolean} Whether this ray is equal with the given one.
|
|
633
|
+
*/
|
|
479
634
|
equals( ray ) {
|
|
480
635
|
|
|
481
636
|
return ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );
|
|
482
637
|
|
|
483
638
|
}
|
|
484
639
|
|
|
640
|
+
/**
|
|
641
|
+
* Returns a new ray with copied values from this instance.
|
|
642
|
+
*
|
|
643
|
+
* @return {Ray} A clone of this instance.
|
|
644
|
+
*/
|
|
485
645
|
clone() {
|
|
486
646
|
|
|
487
647
|
return new this.constructor().copy( this );
|
package/src/math/Sphere.js
CHANGED
|
@@ -5,17 +5,52 @@ const _box = /*@__PURE__*/ new Box3();
|
|
|
5
5
|
const _v1 = /*@__PURE__*/ new Vector3();
|
|
6
6
|
const _v2 = /*@__PURE__*/ new Vector3();
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* An analytical 3D sphere defined by a center and radius. This class is mainly
|
|
10
|
+
* used as a Bounding Sphere for 3D objects.
|
|
11
|
+
*/
|
|
8
12
|
class Sphere {
|
|
9
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new sphere.
|
|
16
|
+
*
|
|
17
|
+
* @param {Vector3} [center=(0,0,0)] - The center of the sphere
|
|
18
|
+
* @param {number} [radius=-1] - The radius of the sphere.
|
|
19
|
+
*/
|
|
10
20
|
constructor( center = new Vector3(), radius = - 1 ) {
|
|
11
21
|
|
|
22
|
+
/**
|
|
23
|
+
* This flag can be used for type testing.
|
|
24
|
+
*
|
|
25
|
+
* @type {boolean}
|
|
26
|
+
* @readonly
|
|
27
|
+
* @default true
|
|
28
|
+
*/
|
|
12
29
|
this.isSphere = true;
|
|
13
30
|
|
|
31
|
+
/**
|
|
32
|
+
* The center of the sphere
|
|
33
|
+
*
|
|
34
|
+
* @type {Vector3}
|
|
35
|
+
*/
|
|
14
36
|
this.center = center;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The radius of the sphere.
|
|
40
|
+
*
|
|
41
|
+
* @type {number}
|
|
42
|
+
*/
|
|
15
43
|
this.radius = radius;
|
|
16
44
|
|
|
17
45
|
}
|
|
18
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Sets the sphere's components by copying the given values.
|
|
49
|
+
*
|
|
50
|
+
* @param {Vector3} center - The center.
|
|
51
|
+
* @param {number} radius - The radius.
|
|
52
|
+
* @return {Sphere} A reference to this sphere.
|
|
53
|
+
*/
|
|
19
54
|
set( center, radius ) {
|
|
20
55
|
|
|
21
56
|
this.center.copy( center );
|
|
@@ -25,6 +60,16 @@ class Sphere {
|
|
|
25
60
|
|
|
26
61
|
}
|
|
27
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Computes the minimum bounding sphere for list of points.
|
|
65
|
+
* If the optional center point is given, it is used as the sphere's
|
|
66
|
+
* center. Otherwise, the center of the axis-aligned bounding box
|
|
67
|
+
* encompassing the points is calculated.
|
|
68
|
+
*
|
|
69
|
+
* @param {Array<Vector3>} points - A list of points in 3D space.
|
|
70
|
+
* @param {Vector3} [optionalCenter] - The center of the sphere.
|
|
71
|
+
* @return {Sphere} A reference to this sphere.
|
|
72
|
+
*/
|
|
28
73
|
setFromPoints( points, optionalCenter ) {
|
|
29
74
|
|
|
30
75
|
const center = this.center;
|
|
@@ -53,6 +98,12 @@ class Sphere {
|
|
|
53
98
|
|
|
54
99
|
}
|
|
55
100
|
|
|
101
|
+
/**
|
|
102
|
+
* Copies the values of the given sphere to this instance.
|
|
103
|
+
*
|
|
104
|
+
* @param {Sphere} sphere - The sphere to copy.
|
|
105
|
+
* @return {Sphere} A reference to this sphere.
|
|
106
|
+
*/
|
|
56
107
|
copy( sphere ) {
|
|
57
108
|
|
|
58
109
|
this.center.copy( sphere.center );
|
|
@@ -62,12 +113,25 @@ class Sphere {
|
|
|
62
113
|
|
|
63
114
|
}
|
|
64
115
|
|
|
116
|
+
/**
|
|
117
|
+
* Returns `true` if the sphere is empty (the radius set to a negative number).
|
|
118
|
+
*
|
|
119
|
+
* Spheres with a radius of `0` contain only their center point and are not
|
|
120
|
+
* considered to be empty.
|
|
121
|
+
*
|
|
122
|
+
* @return {boolean} Whether this sphere is empty or not.
|
|
123
|
+
*/
|
|
65
124
|
isEmpty() {
|
|
66
125
|
|
|
67
126
|
return ( this.radius < 0 );
|
|
68
127
|
|
|
69
128
|
}
|
|
70
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Makes this sphere empty which means in encloses a zero space in 3D.
|
|
132
|
+
*
|
|
133
|
+
* @return {Sphere} A reference to this sphere.
|
|
134
|
+
*/
|
|
71
135
|
makeEmpty() {
|
|
72
136
|
|
|
73
137
|
this.center.set( 0, 0, 0 );
|
|
@@ -77,18 +141,39 @@ class Sphere {
|
|
|
77
141
|
|
|
78
142
|
}
|
|
79
143
|
|
|
144
|
+
/**
|
|
145
|
+
* Returns `true` if this sphere contains the given point inclusive of
|
|
146
|
+
* the surface of the sphere.
|
|
147
|
+
*
|
|
148
|
+
* @param {Vector3} point - The point to check.
|
|
149
|
+
* @return {boolean} Whether this sphere contains the given point or not.
|
|
150
|
+
*/
|
|
80
151
|
containsPoint( point ) {
|
|
81
152
|
|
|
82
153
|
return ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );
|
|
83
154
|
|
|
84
155
|
}
|
|
85
156
|
|
|
157
|
+
/**
|
|
158
|
+
* Returns the closest distance from the boundary of the sphere to the
|
|
159
|
+
* given point. If the sphere contains the point, the distance will
|
|
160
|
+
* be negative.
|
|
161
|
+
*
|
|
162
|
+
* @param {Vector3} point - The point to compute the distance to.
|
|
163
|
+
* @return {number} The distance to the point.
|
|
164
|
+
*/
|
|
86
165
|
distanceToPoint( point ) {
|
|
87
166
|
|
|
88
167
|
return ( point.distanceTo( this.center ) - this.radius );
|
|
89
168
|
|
|
90
169
|
}
|
|
91
170
|
|
|
171
|
+
/**
|
|
172
|
+
* Returns `true` if this sphere intersects with the given one.
|
|
173
|
+
*
|
|
174
|
+
* @param {Sphere} sphere - The sphere to test.
|
|
175
|
+
* @return {boolean} Whether this sphere intersects with the given one or not.
|
|
176
|
+
*/
|
|
92
177
|
intersectsSphere( sphere ) {
|
|
93
178
|
|
|
94
179
|
const radiusSum = this.radius + sphere.radius;
|
|
@@ -97,18 +182,39 @@ class Sphere {
|
|
|
97
182
|
|
|
98
183
|
}
|
|
99
184
|
|
|
185
|
+
/**
|
|
186
|
+
* Returns `true` if this sphere intersects with the given box.
|
|
187
|
+
*
|
|
188
|
+
* @param {Box3} box - The box to test.
|
|
189
|
+
* @return {boolean} Whether this sphere intersects with the given box or not.
|
|
190
|
+
*/
|
|
100
191
|
intersectsBox( box ) {
|
|
101
192
|
|
|
102
193
|
return box.intersectsSphere( this );
|
|
103
194
|
|
|
104
195
|
}
|
|
105
196
|
|
|
197
|
+
/**
|
|
198
|
+
* Returns `true` if this sphere intersects with the given plane.
|
|
199
|
+
*
|
|
200
|
+
* @param {Plane} plane - The plane to test.
|
|
201
|
+
* @return {boolean} Whether this sphere intersects with the given plane or not.
|
|
202
|
+
*/
|
|
106
203
|
intersectsPlane( plane ) {
|
|
107
204
|
|
|
108
205
|
return Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;
|
|
109
206
|
|
|
110
207
|
}
|
|
111
208
|
|
|
209
|
+
/**
|
|
210
|
+
* Clamps a point within the sphere. If the point is outside the sphere, it
|
|
211
|
+
* will clamp it to the closest point on the edge of the sphere. Points
|
|
212
|
+
* already inside the sphere will not be affected.
|
|
213
|
+
*
|
|
214
|
+
* @param {Vector3} point - The plane to clamp.
|
|
215
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
216
|
+
* @return {Vector3} The clamped point.
|
|
217
|
+
*/
|
|
112
218
|
clampPoint( point, target ) {
|
|
113
219
|
|
|
114
220
|
const deltaLengthSq = this.center.distanceToSquared( point );
|
|
@@ -126,6 +232,12 @@ class Sphere {
|
|
|
126
232
|
|
|
127
233
|
}
|
|
128
234
|
|
|
235
|
+
/**
|
|
236
|
+
* Returns a bounding box that encloses this sphere.
|
|
237
|
+
*
|
|
238
|
+
* @param {Box3} target - The target box that is used to store the method's result.
|
|
239
|
+
* @return {Box3} The bounding box that encloses this sphere.
|
|
240
|
+
*/
|
|
129
241
|
getBoundingBox( target ) {
|
|
130
242
|
|
|
131
243
|
if ( this.isEmpty() ) {
|
|
@@ -143,6 +255,12 @@ class Sphere {
|
|
|
143
255
|
|
|
144
256
|
}
|
|
145
257
|
|
|
258
|
+
/**
|
|
259
|
+
* Transforms this sphere with the given 4x4 transformation matrix.
|
|
260
|
+
*
|
|
261
|
+
* @param {Matrix4} matrix - The transformation matrix.
|
|
262
|
+
* @return {Sphere} A reference to this sphere.
|
|
263
|
+
*/
|
|
146
264
|
applyMatrix4( matrix ) {
|
|
147
265
|
|
|
148
266
|
this.center.applyMatrix4( matrix );
|
|
@@ -152,6 +270,12 @@ class Sphere {
|
|
|
152
270
|
|
|
153
271
|
}
|
|
154
272
|
|
|
273
|
+
/**
|
|
274
|
+
* Translates the sphere's center by the given offset.
|
|
275
|
+
*
|
|
276
|
+
* @param {Vector3} offset - The offset.
|
|
277
|
+
* @return {Sphere} A reference to this sphere.
|
|
278
|
+
*/
|
|
155
279
|
translate( offset ) {
|
|
156
280
|
|
|
157
281
|
this.center.add( offset );
|
|
@@ -160,6 +284,12 @@ class Sphere {
|
|
|
160
284
|
|
|
161
285
|
}
|
|
162
286
|
|
|
287
|
+
/**
|
|
288
|
+
* Expands the boundaries of this sphere to include the given point.
|
|
289
|
+
*
|
|
290
|
+
* @param {Vector3} point - The point to include.
|
|
291
|
+
* @return {Sphere} A reference to this sphere.
|
|
292
|
+
*/
|
|
163
293
|
expandByPoint( point ) {
|
|
164
294
|
|
|
165
295
|
if ( this.isEmpty() ) {
|
|
@@ -194,6 +324,12 @@ class Sphere {
|
|
|
194
324
|
|
|
195
325
|
}
|
|
196
326
|
|
|
327
|
+
/**
|
|
328
|
+
* Expands this sphere to enclose both the original sphere and the given sphere.
|
|
329
|
+
*
|
|
330
|
+
* @param {Sphere} sphere - The sphere to include.
|
|
331
|
+
* @return {Sphere} A reference to this sphere.
|
|
332
|
+
*/
|
|
197
333
|
union( sphere ) {
|
|
198
334
|
|
|
199
335
|
if ( sphere.isEmpty() ) {
|
|
@@ -228,12 +364,23 @@ class Sphere {
|
|
|
228
364
|
|
|
229
365
|
}
|
|
230
366
|
|
|
367
|
+
/**
|
|
368
|
+
* Returns `true` if this sphere is equal with the given one.
|
|
369
|
+
*
|
|
370
|
+
* @param {Sphere} sphere - The sphere to test for equality.
|
|
371
|
+
* @return {boolean} Whether this bounding sphere is equal with the given one.
|
|
372
|
+
*/
|
|
231
373
|
equals( sphere ) {
|
|
232
374
|
|
|
233
375
|
return sphere.center.equals( this.center ) && ( sphere.radius === this.radius );
|
|
234
376
|
|
|
235
377
|
}
|
|
236
378
|
|
|
379
|
+
/**
|
|
380
|
+
* Returns a new sphere with copied values from this instance.
|
|
381
|
+
*
|
|
382
|
+
* @return {Sphere} A clone of this instance.
|
|
383
|
+
*/
|
|
237
384
|
clone() {
|
|
238
385
|
|
|
239
386
|
return new this.constructor().copy( this );
|
package/src/math/Spherical.js
CHANGED
|
@@ -1,23 +1,54 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { clamp } from './MathUtils.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* phi (the polar angle) is measured from the positive y-axis. The positive y-axis is up.
|
|
7
|
-
* theta (the azimuthal angle) is measured from the positive z-axis.
|
|
4
|
+
* This class can be used to represent points in 3D space as
|
|
5
|
+
* [Spherical coordinates]{@link https://en.wikipedia.org/wiki/Spherical_coordinate_system}.
|
|
8
6
|
*/
|
|
9
7
|
class Spherical {
|
|
10
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Constructs a new spherical.
|
|
11
|
+
*
|
|
12
|
+
* @param {number} [radius=1] - The radius, or the Euclidean distance (straight-line distance) from the point to the origin.
|
|
13
|
+
* @param {number} [phi=0] - The polar angle in radians from the y (up) axis.
|
|
14
|
+
* @param {number} [theta=0] - The equator/azimuthal angle in radians around the y (up) axis.
|
|
15
|
+
*/
|
|
11
16
|
constructor( radius = 1, phi = 0, theta = 0 ) {
|
|
12
17
|
|
|
18
|
+
/**
|
|
19
|
+
* The radius, or the Euclidean distance (straight-line distance) from the point to the origin.
|
|
20
|
+
*
|
|
21
|
+
* @type {number}
|
|
22
|
+
* @default 1
|
|
23
|
+
*/
|
|
13
24
|
this.radius = radius;
|
|
14
|
-
this.phi = phi; // polar angle
|
|
15
|
-
this.theta = theta; // azimuthal angle
|
|
16
25
|
|
|
17
|
-
|
|
26
|
+
/**
|
|
27
|
+
* The polar angle in radians from the y (up) axis.
|
|
28
|
+
*
|
|
29
|
+
* @type {number}
|
|
30
|
+
* @default 0
|
|
31
|
+
*/
|
|
32
|
+
this.phi = phi;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The equator/azimuthal angle in radians around the y (up) axis.
|
|
36
|
+
*
|
|
37
|
+
* @type {number}
|
|
38
|
+
* @default 0
|
|
39
|
+
*/
|
|
40
|
+
this.theta = theta;
|
|
18
41
|
|
|
19
42
|
}
|
|
20
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Sets the spherical components by copying the given values.
|
|
46
|
+
*
|
|
47
|
+
* @param {number} radius - The radius.
|
|
48
|
+
* @param {number} phi - The polar angle.
|
|
49
|
+
* @param {number} theta - The azimuthal angle.
|
|
50
|
+
* @return {Spherical} A reference to this spherical.
|
|
51
|
+
*/
|
|
21
52
|
set( radius, phi, theta ) {
|
|
22
53
|
|
|
23
54
|
this.radius = radius;
|
|
@@ -28,6 +59,12 @@ class Spherical {
|
|
|
28
59
|
|
|
29
60
|
}
|
|
30
61
|
|
|
62
|
+
/**
|
|
63
|
+
* Copies the values of the given spherical to this instance.
|
|
64
|
+
*
|
|
65
|
+
* @param {Spherical} other - The spherical to copy.
|
|
66
|
+
* @return {Spherical} A reference to this spherical.
|
|
67
|
+
*/
|
|
31
68
|
copy( other ) {
|
|
32
69
|
|
|
33
70
|
this.radius = other.radius;
|
|
@@ -38,22 +75,42 @@ class Spherical {
|
|
|
38
75
|
|
|
39
76
|
}
|
|
40
77
|
|
|
41
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Restricts the polar angle [page:.phi phi] to be between `0.000001` and pi -
|
|
80
|
+
* `0.000001`.
|
|
81
|
+
*
|
|
82
|
+
* @return {Spherical} A reference to this spherical.
|
|
83
|
+
*/
|
|
42
84
|
makeSafe() {
|
|
43
85
|
|
|
44
86
|
const EPS = 0.000001;
|
|
45
|
-
this.phi =
|
|
87
|
+
this.phi = clamp( this.phi, EPS, Math.PI - EPS );
|
|
46
88
|
|
|
47
89
|
return this;
|
|
48
90
|
|
|
49
91
|
}
|
|
50
92
|
|
|
93
|
+
/**
|
|
94
|
+
* Sets the spherical components from the given vector which is assumed to hold
|
|
95
|
+
* Cartesian coordinates.
|
|
96
|
+
*
|
|
97
|
+
* @param {Vector3} v - The vector to set.
|
|
98
|
+
* @return {Spherical} A reference to this spherical.
|
|
99
|
+
*/
|
|
51
100
|
setFromVector3( v ) {
|
|
52
101
|
|
|
53
102
|
return this.setFromCartesianCoords( v.x, v.y, v.z );
|
|
54
103
|
|
|
55
104
|
}
|
|
56
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Sets the spherical components from the given Cartesian coordinates.
|
|
108
|
+
*
|
|
109
|
+
* @param {number} x - The x value.
|
|
110
|
+
* @param {number} y - The x value.
|
|
111
|
+
* @param {number} z - The x value.
|
|
112
|
+
* @return {Spherical} A reference to this spherical.
|
|
113
|
+
*/
|
|
57
114
|
setFromCartesianCoords( x, y, z ) {
|
|
58
115
|
|
|
59
116
|
this.radius = Math.sqrt( x * x + y * y + z * z );
|
|
@@ -66,7 +123,7 @@ class Spherical {
|
|
|
66
123
|
} else {
|
|
67
124
|
|
|
68
125
|
this.theta = Math.atan2( x, z );
|
|
69
|
-
this.phi = Math.acos(
|
|
126
|
+
this.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) );
|
|
70
127
|
|
|
71
128
|
}
|
|
72
129
|
|
|
@@ -74,6 +131,11 @@ class Spherical {
|
|
|
74
131
|
|
|
75
132
|
}
|
|
76
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Returns a new spherical with copied values from this instance.
|
|
136
|
+
*
|
|
137
|
+
* @return {Spherical} A clone of this instance.
|
|
138
|
+
*/
|
|
77
139
|
clone() {
|
|
78
140
|
|
|
79
141
|
return new this.constructor().copy( this );
|