@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
|
@@ -1,21 +1,33 @@
|
|
|
1
1
|
import { Vector3 } from './Vector3.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Represents a third-order spherical harmonics (SH). Light probes use this class
|
|
5
|
+
* to encode lighting information.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* - Primary reference: {@link https://graphics.stanford.edu/papers/envmap/envmap.pdf}
|
|
8
|
+
* - Secondary reference: {@link https://www.ppsloan.org/publications/StupidSH36.pdf}
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
|
-
// 3-band SH defined by 9 coefficients
|
|
12
|
-
|
|
13
10
|
class SphericalHarmonics3 {
|
|
14
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new spherical harmonics.
|
|
14
|
+
*/
|
|
15
15
|
constructor() {
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* This flag can be used for type testing.
|
|
19
|
+
*
|
|
20
|
+
* @type {boolean}
|
|
21
|
+
* @readonly
|
|
22
|
+
* @default true
|
|
23
|
+
*/
|
|
17
24
|
this.isSphericalHarmonics3 = true;
|
|
18
25
|
|
|
26
|
+
/**
|
|
27
|
+
* An array holding the (9) SH coefficients.
|
|
28
|
+
*
|
|
29
|
+
* @type {Array<Vector3>}
|
|
30
|
+
*/
|
|
19
31
|
this.coefficients = [];
|
|
20
32
|
|
|
21
33
|
for ( let i = 0; i < 9; i ++ ) {
|
|
@@ -26,6 +38,13 @@ class SphericalHarmonics3 {
|
|
|
26
38
|
|
|
27
39
|
}
|
|
28
40
|
|
|
41
|
+
/**
|
|
42
|
+
* Sets the given SH coefficients to this instance by copying
|
|
43
|
+
* the values.
|
|
44
|
+
*
|
|
45
|
+
* @param {Array<Vector3>} coefficients - The SH coefficients.
|
|
46
|
+
* @return {SphericalHarmonics3} A reference to this spherical harmonics.
|
|
47
|
+
*/
|
|
29
48
|
set( coefficients ) {
|
|
30
49
|
|
|
31
50
|
for ( let i = 0; i < 9; i ++ ) {
|
|
@@ -38,6 +57,11 @@ class SphericalHarmonics3 {
|
|
|
38
57
|
|
|
39
58
|
}
|
|
40
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Sets all SH coefficients to `0`.
|
|
62
|
+
*
|
|
63
|
+
* @return {SphericalHarmonics3} A reference to this spherical harmonics.
|
|
64
|
+
*/
|
|
41
65
|
zero() {
|
|
42
66
|
|
|
43
67
|
for ( let i = 0; i < 9; i ++ ) {
|
|
@@ -50,8 +74,13 @@ class SphericalHarmonics3 {
|
|
|
50
74
|
|
|
51
75
|
}
|
|
52
76
|
|
|
53
|
-
|
|
54
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Returns the radiance in the direction of the given normal.
|
|
79
|
+
*
|
|
80
|
+
* @param {Vector3} normal - The normal vector (assumed to be unit length)
|
|
81
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
82
|
+
* @return {Vector3} The radiance.
|
|
83
|
+
*/
|
|
55
84
|
getAt( normal, target ) {
|
|
56
85
|
|
|
57
86
|
// normal is assumed to be unit length
|
|
@@ -79,9 +108,14 @@ class SphericalHarmonics3 {
|
|
|
79
108
|
|
|
80
109
|
}
|
|
81
110
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
111
|
+
/**
|
|
112
|
+
* Returns the irradiance (radiance convolved with cosine lobe) in the
|
|
113
|
+
* direction of the given normal.
|
|
114
|
+
*
|
|
115
|
+
* @param {Vector3} normal - The normal vector (assumed to be unit length)
|
|
116
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
117
|
+
* @return {Vector3} The irradiance.
|
|
118
|
+
*/
|
|
85
119
|
getIrradianceAt( normal, target ) {
|
|
86
120
|
|
|
87
121
|
// normal is assumed to be unit length
|
|
@@ -109,6 +143,12 @@ class SphericalHarmonics3 {
|
|
|
109
143
|
|
|
110
144
|
}
|
|
111
145
|
|
|
146
|
+
/**
|
|
147
|
+
* Adds the given SH to this instance.
|
|
148
|
+
*
|
|
149
|
+
* @param {SphericalHarmonics3} sh - The SH to add.
|
|
150
|
+
* @return {SphericalHarmonics3} A reference to this spherical harmonics.
|
|
151
|
+
*/
|
|
112
152
|
add( sh ) {
|
|
113
153
|
|
|
114
154
|
for ( let i = 0; i < 9; i ++ ) {
|
|
@@ -121,6 +161,14 @@ class SphericalHarmonics3 {
|
|
|
121
161
|
|
|
122
162
|
}
|
|
123
163
|
|
|
164
|
+
/**
|
|
165
|
+
* A convenience method for performing {@link SphericalHarmonics3#add} and
|
|
166
|
+
* {@link SphericalHarmonics3#scale} at once.
|
|
167
|
+
*
|
|
168
|
+
* @param {SphericalHarmonics3} sh - The SH to add.
|
|
169
|
+
* @param {number} s - The scale factor.
|
|
170
|
+
* @return {SphericalHarmonics3} A reference to this spherical harmonics.
|
|
171
|
+
*/
|
|
124
172
|
addScaledSH( sh, s ) {
|
|
125
173
|
|
|
126
174
|
for ( let i = 0; i < 9; i ++ ) {
|
|
@@ -133,6 +181,12 @@ class SphericalHarmonics3 {
|
|
|
133
181
|
|
|
134
182
|
}
|
|
135
183
|
|
|
184
|
+
/**
|
|
185
|
+
* Scales this SH by the given scale factor.
|
|
186
|
+
*
|
|
187
|
+
* @param {number} s - The scale factor.
|
|
188
|
+
* @return {SphericalHarmonics3} A reference to this spherical harmonics.
|
|
189
|
+
*/
|
|
136
190
|
scale( s ) {
|
|
137
191
|
|
|
138
192
|
for ( let i = 0; i < 9; i ++ ) {
|
|
@@ -145,6 +199,14 @@ class SphericalHarmonics3 {
|
|
|
145
199
|
|
|
146
200
|
}
|
|
147
201
|
|
|
202
|
+
/**
|
|
203
|
+
* Linear interpolates between the given SH and this instance by the given
|
|
204
|
+
* alpha factor.
|
|
205
|
+
*
|
|
206
|
+
* @param {SphericalHarmonics3} sh - The SH to interpolate with.
|
|
207
|
+
* @param {number} alpha - The alpha factor.
|
|
208
|
+
* @return {SphericalHarmonics3} A reference to this spherical harmonics.
|
|
209
|
+
*/
|
|
148
210
|
lerp( sh, alpha ) {
|
|
149
211
|
|
|
150
212
|
for ( let i = 0; i < 9; i ++ ) {
|
|
@@ -157,6 +219,12 @@ class SphericalHarmonics3 {
|
|
|
157
219
|
|
|
158
220
|
}
|
|
159
221
|
|
|
222
|
+
/**
|
|
223
|
+
* Returns `true` if this spherical harmonics is equal with the given one.
|
|
224
|
+
*
|
|
225
|
+
* @param {SphericalHarmonics3} sh - The spherical harmonics to test for equality.
|
|
226
|
+
* @return {boolean} Whether this spherical harmonics is equal with the given one.
|
|
227
|
+
*/
|
|
160
228
|
equals( sh ) {
|
|
161
229
|
|
|
162
230
|
for ( let i = 0; i < 9; i ++ ) {
|
|
@@ -173,18 +241,36 @@ class SphericalHarmonics3 {
|
|
|
173
241
|
|
|
174
242
|
}
|
|
175
243
|
|
|
244
|
+
/**
|
|
245
|
+
* Copies the values of the given spherical harmonics to this instance.
|
|
246
|
+
*
|
|
247
|
+
* @param {SphericalHarmonics3} sh - The spherical harmonics to copy.
|
|
248
|
+
* @return {SphericalHarmonics3} A reference to this spherical harmonics.
|
|
249
|
+
*/
|
|
176
250
|
copy( sh ) {
|
|
177
251
|
|
|
178
252
|
return this.set( sh.coefficients );
|
|
179
253
|
|
|
180
254
|
}
|
|
181
255
|
|
|
256
|
+
/**
|
|
257
|
+
* Returns a new spherical harmonics with copied values from this instance.
|
|
258
|
+
*
|
|
259
|
+
* @return {SphericalHarmonics3} A clone of this instance.
|
|
260
|
+
*/
|
|
182
261
|
clone() {
|
|
183
262
|
|
|
184
263
|
return new this.constructor().copy( this );
|
|
185
264
|
|
|
186
265
|
}
|
|
187
266
|
|
|
267
|
+
/**
|
|
268
|
+
* Sets the SH coefficients of this instance from the given array.
|
|
269
|
+
*
|
|
270
|
+
* @param {Array<number>} array - An array holding the SH coefficients.
|
|
271
|
+
* @param {number} [offset=0] - The array offset where to start copying.
|
|
272
|
+
* @return {SphericalHarmonics3} A clone of this instance.
|
|
273
|
+
*/
|
|
188
274
|
fromArray( array, offset = 0 ) {
|
|
189
275
|
|
|
190
276
|
const coefficients = this.coefficients;
|
|
@@ -199,6 +285,14 @@ class SphericalHarmonics3 {
|
|
|
199
285
|
|
|
200
286
|
}
|
|
201
287
|
|
|
288
|
+
/**
|
|
289
|
+
* Returns an array with the SH coefficients, or copies them into the provided
|
|
290
|
+
* array. The coefficients are represented as numbers.
|
|
291
|
+
*
|
|
292
|
+
* @param {Array<number>} [array=[]] - The target array.
|
|
293
|
+
* @param {number} [offset=0] - The array offset where to start copying.
|
|
294
|
+
* @return {Array<number>} An array with flat SH coefficients.
|
|
295
|
+
*/
|
|
202
296
|
toArray( array = [], offset = 0 ) {
|
|
203
297
|
|
|
204
298
|
const coefficients = this.coefficients;
|
|
@@ -213,8 +307,12 @@ class SphericalHarmonics3 {
|
|
|
213
307
|
|
|
214
308
|
}
|
|
215
309
|
|
|
216
|
-
|
|
217
|
-
|
|
310
|
+
/**
|
|
311
|
+
* Computes the SH basis for the given normal vector.
|
|
312
|
+
*
|
|
313
|
+
* @param {Vector3} normal - The normal.
|
|
314
|
+
* @param {Array<number>} shBasis - The target array holding the SH basis.
|
|
315
|
+
*/
|
|
218
316
|
static getBasisAt( normal, shBasis ) {
|
|
219
317
|
|
|
220
318
|
// normal is assumed to be unit length
|
package/src/math/Triangle.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Vector3 } from './Vector3.js';
|
|
2
|
+
import { Vector4 } from './Vector4.js';
|
|
2
3
|
|
|
3
4
|
const _v0 = /*@__PURE__*/ new Vector3();
|
|
4
5
|
const _v1 = /*@__PURE__*/ new Vector3();
|
|
@@ -12,16 +13,56 @@ const _vap = /*@__PURE__*/ new Vector3();
|
|
|
12
13
|
const _vbp = /*@__PURE__*/ new Vector3();
|
|
13
14
|
const _vcp = /*@__PURE__*/ new Vector3();
|
|
14
15
|
|
|
16
|
+
const _v40 = /*@__PURE__*/ new Vector4();
|
|
17
|
+
const _v41 = /*@__PURE__*/ new Vector4();
|
|
18
|
+
const _v42 = /*@__PURE__*/ new Vector4();
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* A geometric triangle as defined by three vectors representing its three corners.
|
|
22
|
+
*/
|
|
15
23
|
class Triangle {
|
|
16
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new triangle.
|
|
27
|
+
*
|
|
28
|
+
* @param {Vector3} [a=(0,0,0)] - The first corner of the triangle.
|
|
29
|
+
* @param {Vector3} [b=(0,0,0)] - The second corner of the triangle.
|
|
30
|
+
* @param {Vector3} [c=(0,0,0)] - The third corner of the triangle.
|
|
31
|
+
*/
|
|
17
32
|
constructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {
|
|
18
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The first corner of the triangle.
|
|
36
|
+
*
|
|
37
|
+
* @type {Vector3}
|
|
38
|
+
*/
|
|
19
39
|
this.a = a;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The second corner of the triangle.
|
|
43
|
+
*
|
|
44
|
+
* @type {Vector3}
|
|
45
|
+
*/
|
|
20
46
|
this.b = b;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The third corner of the triangle.
|
|
50
|
+
*
|
|
51
|
+
* @type {Vector3}
|
|
52
|
+
*/
|
|
21
53
|
this.c = c;
|
|
22
54
|
|
|
23
55
|
}
|
|
24
56
|
|
|
57
|
+
/**
|
|
58
|
+
* Computes the normal vector of a triangle.
|
|
59
|
+
*
|
|
60
|
+
* @param {Vector3} a - The first corner of the triangle.
|
|
61
|
+
* @param {Vector3} b - The second corner of the triangle.
|
|
62
|
+
* @param {Vector3} c - The third corner of the triangle.
|
|
63
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
64
|
+
* @return {Vector3} The triangle's normal.
|
|
65
|
+
*/
|
|
25
66
|
static getNormal( a, b, c, target ) {
|
|
26
67
|
|
|
27
68
|
target.subVectors( c, b );
|
|
@@ -39,10 +80,21 @@ class Triangle {
|
|
|
39
80
|
|
|
40
81
|
}
|
|
41
82
|
|
|
42
|
-
|
|
43
|
-
|
|
83
|
+
/**
|
|
84
|
+
* Computes a barycentric coordinates from the given vector.
|
|
85
|
+
* Returns `null` if the triangle is degenerate.
|
|
86
|
+
*
|
|
87
|
+
* @param {Vector3} point - A point in 3D space.
|
|
88
|
+
* @param {Vector3} a - The first corner of the triangle.
|
|
89
|
+
* @param {Vector3} b - The second corner of the triangle.
|
|
90
|
+
* @param {Vector3} c - The third corner of the triangle.
|
|
91
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
92
|
+
* @return {?Vector3} The barycentric coordinates for the given point
|
|
93
|
+
*/
|
|
44
94
|
static getBarycoord( point, a, b, c, target ) {
|
|
45
95
|
|
|
96
|
+
// based on: http://www.blackpawn.com/texts/pointinpoly/default.html
|
|
97
|
+
|
|
46
98
|
_v0.subVectors( c, a );
|
|
47
99
|
_v1.subVectors( b, a );
|
|
48
100
|
_v2.subVectors( point, a );
|
|
@@ -72,6 +124,17 @@ class Triangle {
|
|
|
72
124
|
|
|
73
125
|
}
|
|
74
126
|
|
|
127
|
+
/**
|
|
128
|
+
* Returns `true` if the given point, when projected onto the plane of the
|
|
129
|
+
* triangle, lies within the triangle.
|
|
130
|
+
*
|
|
131
|
+
* @param {Vector3} point - The point in 3D space to test.
|
|
132
|
+
* @param {Vector3} a - The first corner of the triangle.
|
|
133
|
+
* @param {Vector3} b - The second corner of the triangle.
|
|
134
|
+
* @param {Vector3} c - The third corner of the triangle.
|
|
135
|
+
* @return {boolean} Whether the given point, when projected onto the plane of the
|
|
136
|
+
* triangle, lies within the triangle or not.
|
|
137
|
+
*/
|
|
75
138
|
static containsPoint( point, a, b, c ) {
|
|
76
139
|
|
|
77
140
|
// if the triangle is degenerate then we can't contain a point
|
|
@@ -85,6 +148,20 @@ class Triangle {
|
|
|
85
148
|
|
|
86
149
|
}
|
|
87
150
|
|
|
151
|
+
/**
|
|
152
|
+
* Computes the value barycentrically interpolated for the given point on the
|
|
153
|
+
* triangle. Returns `null` if the triangle is degenerate.
|
|
154
|
+
*
|
|
155
|
+
* @param {Vector3} point - Position of interpolated point.
|
|
156
|
+
* @param {Vector3} p1 - The first corner of the triangle.
|
|
157
|
+
* @param {Vector3} p2 - The second corner of the triangle.
|
|
158
|
+
* @param {Vector3} p3 - The third corner of the triangle.
|
|
159
|
+
* @param {Vector3} v1 - Value to interpolate of first vertex.
|
|
160
|
+
* @param {Vector3} v2 - Value to interpolate of second vertex.
|
|
161
|
+
* @param {Vector3} v3 - Value to interpolate of third vertex.
|
|
162
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
163
|
+
* @return {?Vector3} The interpolated value.
|
|
164
|
+
*/
|
|
88
165
|
static getInterpolation( point, p1, p2, p3, v1, v2, v3, target ) {
|
|
89
166
|
|
|
90
167
|
if ( this.getBarycoord( point, p1, p2, p3, _v3 ) === null ) {
|
|
@@ -106,6 +183,45 @@ class Triangle {
|
|
|
106
183
|
|
|
107
184
|
}
|
|
108
185
|
|
|
186
|
+
/**
|
|
187
|
+
* Computes the value barycentrically interpolated for the given attribute and indices.
|
|
188
|
+
*
|
|
189
|
+
* @param {BufferAttribute} attr - The attribute to interpolate.
|
|
190
|
+
* @param {number} i1 - Index of first vertex.
|
|
191
|
+
* @param {number} i2 - Index of second vertex.
|
|
192
|
+
* @param {number} i3 - Index of third vertex.
|
|
193
|
+
* @param {Vector3} barycoord - The barycoordinate value to use to interpolate.
|
|
194
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
195
|
+
* @return {Vector3} The interpolated attribute value.
|
|
196
|
+
*/
|
|
197
|
+
static getInterpolatedAttribute( attr, i1, i2, i3, barycoord, target ) {
|
|
198
|
+
|
|
199
|
+
_v40.setScalar( 0 );
|
|
200
|
+
_v41.setScalar( 0 );
|
|
201
|
+
_v42.setScalar( 0 );
|
|
202
|
+
|
|
203
|
+
_v40.fromBufferAttribute( attr, i1 );
|
|
204
|
+
_v41.fromBufferAttribute( attr, i2 );
|
|
205
|
+
_v42.fromBufferAttribute( attr, i3 );
|
|
206
|
+
|
|
207
|
+
target.setScalar( 0 );
|
|
208
|
+
target.addScaledVector( _v40, barycoord.x );
|
|
209
|
+
target.addScaledVector( _v41, barycoord.y );
|
|
210
|
+
target.addScaledVector( _v42, barycoord.z );
|
|
211
|
+
|
|
212
|
+
return target;
|
|
213
|
+
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Returns `true` if the triangle is oriented towards the given direction.
|
|
218
|
+
*
|
|
219
|
+
* @param {Vector3} a - The first corner of the triangle.
|
|
220
|
+
* @param {Vector3} b - The second corner of the triangle.
|
|
221
|
+
* @param {Vector3} c - The third corner of the triangle.
|
|
222
|
+
* @param {Vector3} direction - The (normalized) direction vector.
|
|
223
|
+
* @return {boolean} Whether the triangle is oriented towards the given direction or not.
|
|
224
|
+
*/
|
|
109
225
|
static isFrontFacing( a, b, c, direction ) {
|
|
110
226
|
|
|
111
227
|
_v0.subVectors( c, b );
|
|
@@ -116,6 +232,14 @@ class Triangle {
|
|
|
116
232
|
|
|
117
233
|
}
|
|
118
234
|
|
|
235
|
+
/**
|
|
236
|
+
* Sets the triangle's vertices by copying the given values.
|
|
237
|
+
*
|
|
238
|
+
* @param {Vector3} a - The first corner of the triangle.
|
|
239
|
+
* @param {Vector3} b - The second corner of the triangle.
|
|
240
|
+
* @param {Vector3} c - The third corner of the triangle.
|
|
241
|
+
* @return {Triangle} A reference to this triangle.
|
|
242
|
+
*/
|
|
119
243
|
set( a, b, c ) {
|
|
120
244
|
|
|
121
245
|
this.a.copy( a );
|
|
@@ -126,6 +250,15 @@ class Triangle {
|
|
|
126
250
|
|
|
127
251
|
}
|
|
128
252
|
|
|
253
|
+
/**
|
|
254
|
+
* Sets the triangle's vertices by copying the given array values.
|
|
255
|
+
*
|
|
256
|
+
* @param {Array<Vector3>} points - An array with 3D points.
|
|
257
|
+
* @param {number} i0 - The array index representing the first corner of the triangle.
|
|
258
|
+
* @param {number} i1 - The array index representing the second corner of the triangle.
|
|
259
|
+
* @param {number} i2 - The array index representing the third corner of the triangle.
|
|
260
|
+
* @return {Triangle} A reference to this triangle.
|
|
261
|
+
*/
|
|
129
262
|
setFromPointsAndIndices( points, i0, i1, i2 ) {
|
|
130
263
|
|
|
131
264
|
this.a.copy( points[ i0 ] );
|
|
@@ -136,6 +269,15 @@ class Triangle {
|
|
|
136
269
|
|
|
137
270
|
}
|
|
138
271
|
|
|
272
|
+
/**
|
|
273
|
+
* Sets the triangle's vertices by copying the given attribute values.
|
|
274
|
+
*
|
|
275
|
+
* @param {BufferAttribute} attribute - A buffer attribute with 3D points data.
|
|
276
|
+
* @param {number} i0 - The attribute index representing the first corner of the triangle.
|
|
277
|
+
* @param {number} i1 - The attribute index representing the second corner of the triangle.
|
|
278
|
+
* @param {number} i2 - The attribute index representing the third corner of the triangle.
|
|
279
|
+
* @return {Triangle} A reference to this triangle.
|
|
280
|
+
*/
|
|
139
281
|
setFromAttributeAndIndices( attribute, i0, i1, i2 ) {
|
|
140
282
|
|
|
141
283
|
this.a.fromBufferAttribute( attribute, i0 );
|
|
@@ -146,12 +288,23 @@ class Triangle {
|
|
|
146
288
|
|
|
147
289
|
}
|
|
148
290
|
|
|
291
|
+
/**
|
|
292
|
+
* Returns a new triangle with copied values from this instance.
|
|
293
|
+
*
|
|
294
|
+
* @return {Triangle} A clone of this instance.
|
|
295
|
+
*/
|
|
149
296
|
clone() {
|
|
150
297
|
|
|
151
298
|
return new this.constructor().copy( this );
|
|
152
299
|
|
|
153
300
|
}
|
|
154
301
|
|
|
302
|
+
/**
|
|
303
|
+
* Copies the values of the given triangle to this instance.
|
|
304
|
+
*
|
|
305
|
+
* @param {Triangle} triangle - The triangle to copy.
|
|
306
|
+
* @return {Triangle} A reference to this triangle.
|
|
307
|
+
*/
|
|
155
308
|
copy( triangle ) {
|
|
156
309
|
|
|
157
310
|
this.a.copy( triangle.a );
|
|
@@ -162,6 +315,11 @@ class Triangle {
|
|
|
162
315
|
|
|
163
316
|
}
|
|
164
317
|
|
|
318
|
+
/**
|
|
319
|
+
* Computes the area of the triangle.
|
|
320
|
+
*
|
|
321
|
+
* @return {number} The triangle's area.
|
|
322
|
+
*/
|
|
165
323
|
getArea() {
|
|
166
324
|
|
|
167
325
|
_v0.subVectors( this.c, this.b );
|
|
@@ -171,54 +329,118 @@ class Triangle {
|
|
|
171
329
|
|
|
172
330
|
}
|
|
173
331
|
|
|
332
|
+
/**
|
|
333
|
+
* Computes the midpoint of the triangle.
|
|
334
|
+
*
|
|
335
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
336
|
+
* @return {Vector3} The triangle's midpoint.
|
|
337
|
+
*/
|
|
174
338
|
getMidpoint( target ) {
|
|
175
339
|
|
|
176
340
|
return target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );
|
|
177
341
|
|
|
178
342
|
}
|
|
179
343
|
|
|
344
|
+
/**
|
|
345
|
+
* Computes the normal of the triangle.
|
|
346
|
+
*
|
|
347
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
348
|
+
* @return {Vector3} The triangle's normal.
|
|
349
|
+
*/
|
|
180
350
|
getNormal( target ) {
|
|
181
351
|
|
|
182
352
|
return Triangle.getNormal( this.a, this.b, this.c, target );
|
|
183
353
|
|
|
184
354
|
}
|
|
185
355
|
|
|
356
|
+
/**
|
|
357
|
+
* Computes a plane the triangle lies within.
|
|
358
|
+
*
|
|
359
|
+
* @param {Plane} target - The target vector that is used to store the method's result.
|
|
360
|
+
* @return {Plane} The plane the triangle lies within.
|
|
361
|
+
*/
|
|
186
362
|
getPlane( target ) {
|
|
187
363
|
|
|
188
364
|
return target.setFromCoplanarPoints( this.a, this.b, this.c );
|
|
189
365
|
|
|
190
366
|
}
|
|
191
367
|
|
|
368
|
+
/**
|
|
369
|
+
* Computes a barycentric coordinates from the given vector.
|
|
370
|
+
* Returns `null` if the triangle is degenerate.
|
|
371
|
+
*
|
|
372
|
+
* @param {Vector3} point - A point in 3D space.
|
|
373
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
374
|
+
* @return {?Vector3} The barycentric coordinates for the given point
|
|
375
|
+
*/
|
|
192
376
|
getBarycoord( point, target ) {
|
|
193
377
|
|
|
194
378
|
return Triangle.getBarycoord( point, this.a, this.b, this.c, target );
|
|
195
379
|
|
|
196
380
|
}
|
|
197
381
|
|
|
382
|
+
/**
|
|
383
|
+
* Computes the value barycentrically interpolated for the given point on the
|
|
384
|
+
* triangle. Returns `null` if the triangle is degenerate.
|
|
385
|
+
*
|
|
386
|
+
* @param {Vector3} point - Position of interpolated point.
|
|
387
|
+
* @param {Vector3} v1 - Value to interpolate of first vertex.
|
|
388
|
+
* @param {Vector3} v2 - Value to interpolate of second vertex.
|
|
389
|
+
* @param {Vector3} v3 - Value to interpolate of third vertex.
|
|
390
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
391
|
+
* @return {?Vector3} The interpolated value.
|
|
392
|
+
*/
|
|
198
393
|
getInterpolation( point, v1, v2, v3, target ) {
|
|
199
394
|
|
|
200
395
|
return Triangle.getInterpolation( point, this.a, this.b, this.c, v1, v2, v3, target );
|
|
201
396
|
|
|
202
397
|
}
|
|
203
398
|
|
|
399
|
+
/**
|
|
400
|
+
* Returns `true` if the given point, when projected onto the plane of the
|
|
401
|
+
* triangle, lies within the triangle.
|
|
402
|
+
*
|
|
403
|
+
* @param {Vector3} point - The point in 3D space to test.
|
|
404
|
+
* @return {boolean} Whether the given point, when projected onto the plane of the
|
|
405
|
+
* triangle, lies within the triangle or not.
|
|
406
|
+
*/
|
|
204
407
|
containsPoint( point ) {
|
|
205
408
|
|
|
206
409
|
return Triangle.containsPoint( point, this.a, this.b, this.c );
|
|
207
410
|
|
|
208
411
|
}
|
|
209
412
|
|
|
413
|
+
/**
|
|
414
|
+
* Returns `true` if the triangle is oriented towards the given direction.
|
|
415
|
+
*
|
|
416
|
+
* @param {Vector3} direction - The (normalized) direction vector.
|
|
417
|
+
* @return {boolean} Whether the triangle is oriented towards the given direction or not.
|
|
418
|
+
*/
|
|
210
419
|
isFrontFacing( direction ) {
|
|
211
420
|
|
|
212
421
|
return Triangle.isFrontFacing( this.a, this.b, this.c, direction );
|
|
213
422
|
|
|
214
423
|
}
|
|
215
424
|
|
|
425
|
+
/**
|
|
426
|
+
* Returns `true` if this triangle intersects with the given box.
|
|
427
|
+
*
|
|
428
|
+
* @param {Box3} box - The box to intersect.
|
|
429
|
+
* @return {boolean} Whether this triangle intersects with the given box or not.
|
|
430
|
+
*/
|
|
216
431
|
intersectsBox( box ) {
|
|
217
432
|
|
|
218
433
|
return box.intersectsTriangle( this );
|
|
219
434
|
|
|
220
435
|
}
|
|
221
436
|
|
|
437
|
+
/**
|
|
438
|
+
* Returns the closest point on the triangle to the given point.
|
|
439
|
+
*
|
|
440
|
+
* @param {Vector3} p - The point to compute the closest point for.
|
|
441
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
442
|
+
* @return {Vector3} The closest point on the triangle.
|
|
443
|
+
*/
|
|
222
444
|
closestPointToPoint( p, target ) {
|
|
223
445
|
|
|
224
446
|
const a = this.a, b = this.b, c = this.c;
|
|
@@ -300,6 +522,12 @@ class Triangle {
|
|
|
300
522
|
|
|
301
523
|
}
|
|
302
524
|
|
|
525
|
+
/**
|
|
526
|
+
* Returns `true` if this triangle is equal with the given one.
|
|
527
|
+
*
|
|
528
|
+
* @param {Triangle} triangle - The triangle to test for equality.
|
|
529
|
+
* @return {boolean} Whether this triangle is equal with the given one.
|
|
530
|
+
*/
|
|
303
531
|
equals( triangle ) {
|
|
304
532
|
|
|
305
533
|
return triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );
|