@needle-tools/three 0.169.20-experimental.0 → 0.183.2-canary.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 +5 -6
- package/build/three.cjs +54184 -56703
- package/build/three.core.js +59506 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +11645 -73000
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +648 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +53912 -51652
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +53888 -51806
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +5 -15
- package/examples/jsm/animation/AnimationClipCreator.js +58 -6
- package/examples/jsm/animation/CCDIKSolver.js +152 -45
- package/examples/jsm/capabilities/WebGL.js +28 -29
- package/examples/jsm/capabilities/WebGPU.js +19 -17
- package/examples/jsm/controls/ArcballControls.js +474 -178
- package/examples/jsm/controls/DragControls.js +100 -58
- package/examples/jsm/controls/FirstPersonControls.js +116 -6
- package/examples/jsm/controls/FlyControls.js +50 -2
- package/examples/jsm/controls/MapControls.js +96 -8
- package/examples/jsm/controls/OrbitControls.js +496 -57
- package/examples/jsm/controls/PointerLockControls.js +115 -22
- package/examples/jsm/controls/TrackballControls.js +166 -14
- package/examples/jsm/controls/TransformControls.js +336 -26
- package/examples/jsm/csm/CSM.js +232 -18
- package/examples/jsm/csm/CSMFrustum.js +61 -4
- package/examples/jsm/csm/CSMHelper.js +50 -0
- package/examples/jsm/csm/CSMShader.js +13 -1
- package/examples/jsm/csm/CSMShadowNode.js +599 -0
- package/examples/jsm/curves/CurveExtras.js +303 -31
- package/examples/jsm/curves/NURBSCurve.js +91 -16
- package/examples/jsm/curves/NURBSSurface.js +52 -6
- package/examples/jsm/curves/NURBSUtils.js +102 -112
- package/examples/jsm/curves/NURBSVolume.js +24 -4
- package/examples/jsm/effects/AnaglyphEffect.js +134 -7
- package/examples/jsm/effects/AsciiEffect.js +69 -22
- package/examples/jsm/effects/OutlineEffect.js +61 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +30 -0
- package/examples/jsm/effects/StereoEffect.js +31 -0
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/DebugEnvironment.js +50 -0
- package/examples/jsm/environments/RoomEnvironment.js +83 -42
- package/examples/jsm/exporters/DRACOExporter.js +56 -14
- package/examples/jsm/exporters/EXRExporter.js +40 -9
- package/examples/jsm/exporters/GLTFExporter.js +502 -169
- package/examples/jsm/exporters/OBJExporter.js +21 -1
- package/examples/jsm/exporters/PLYExporter.js +44 -12
- package/examples/jsm/exporters/STLExporter.js +27 -5
- package/examples/jsm/exporters/USDZExporter.js +781 -291
- package/examples/jsm/geometries/BoxLineGeometry.js +23 -0
- package/examples/jsm/geometries/ConvexGeometry.js +19 -0
- package/examples/jsm/geometries/DecalGeometry.js +91 -30
- package/examples/jsm/geometries/ParametricFunctions.js +100 -0
- package/examples/jsm/geometries/ParametricGeometry.js +38 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +68 -7
- package/examples/jsm/geometries/TeapotGeometry.js +23 -38
- package/examples/jsm/geometries/TextGeometry.js +48 -29
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeHelper.js +36 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +38 -1
- package/examples/jsm/helpers/OctreeHelper.js +36 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +60 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +36 -3
- package/examples/jsm/helpers/TextureHelper.js +28 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +214 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +61 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +47 -2
- package/examples/jsm/helpers/ViewHelper.js +181 -9
- package/examples/jsm/inspector/Inspector.js +487 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Parameters.js +348 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +1975 -0
- package/examples/jsm/inspector/ui/Style.js +1613 -0
- package/examples/jsm/inspector/ui/Tab.js +233 -0
- package/examples/jsm/inspector/ui/Values.js +439 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +43 -12
- package/examples/jsm/interactive/InteractiveGroup.js +170 -52
- package/examples/jsm/interactive/SelectionBox.js +106 -9
- package/examples/jsm/interactive/SelectionHelper.js +76 -30
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +76 -58
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +42 -0
- package/examples/jsm/lights/LightProbeGenerator.js +44 -7
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +50 -14
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +16 -0
- package/examples/jsm/lines/Line2.js +41 -4
- package/examples/jsm/lines/LineGeometry.js +80 -2
- package/examples/jsm/lines/LineMaterial.js +105 -5
- package/examples/jsm/lines/LineSegments2.js +54 -4
- package/examples/jsm/lines/LineSegmentsGeometry.js +65 -8
- package/examples/jsm/lines/Wireframe.js +41 -4
- package/examples/jsm/lines/WireframeGeometry2.js +27 -2
- package/examples/jsm/lines/webgpu/Line2.js +28 -2
- package/examples/jsm/lines/webgpu/LineSegments2.js +59 -24
- package/examples/jsm/lines/webgpu/Wireframe.js +86 -0
- package/examples/jsm/loaders/3DMLoader.js +78 -6
- package/examples/jsm/loaders/3MFLoader.js +148 -7
- package/examples/jsm/loaders/AMFLoader.js +34 -14
- package/examples/jsm/loaders/BVHLoader.js +59 -12
- package/examples/jsm/loaders/ColladaLoader.js +61 -4027
- package/examples/jsm/loaders/DDSLoader.js +68 -1
- package/examples/jsm/loaders/DRACOLoader.js +146 -22
- package/examples/jsm/loaders/EXRLoader.js +255 -34
- package/examples/jsm/loaders/FBXLoader.js +80 -42
- package/examples/jsm/loaders/FontLoader.js +83 -6
- package/examples/jsm/loaders/GCodeLoader.js +71 -14
- package/examples/jsm/loaders/GLTFLoader.js +381 -263
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +52 -3
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/IESLoader.js +42 -0
- package/examples/jsm/loaders/KMZLoader.js +39 -6
- package/examples/jsm/loaders/KTX2Loader.js +124 -48
- package/examples/jsm/loaders/KTXLoader.js +31 -10
- package/examples/jsm/loaders/LDrawLoader.js +192 -145
- package/examples/jsm/loaders/LUT3dlLoader.js +47 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +46 -9
- package/examples/jsm/loaders/LUTImageLoader.js +79 -38
- package/examples/jsm/loaders/LWOLoader.js +54 -59
- package/examples/jsm/loaders/LottieLoader.js +54 -1
- package/examples/jsm/loaders/MD2Loader.js +37 -1
- package/examples/jsm/loaders/MDDLoader.js +57 -12
- package/examples/jsm/loaders/MTLLoader.js +60 -35
- package/examples/jsm/loaders/MaterialXLoader.js +268 -34
- package/examples/jsm/loaders/NRRDLoader.js +40 -8
- package/examples/jsm/loaders/OBJLoader.js +51 -2
- package/examples/jsm/loaders/PCDLoader.js +173 -21
- package/examples/jsm/loaders/PDBLoader.js +41 -2
- package/examples/jsm/loaders/PLYLoader.js +70 -39
- package/examples/jsm/loaders/PVRLoader.js +25 -6
- package/examples/jsm/loaders/RGBELoader.js +6 -438
- package/examples/jsm/loaders/STLLoader.js +48 -38
- package/examples/jsm/loaders/SVGLoader.js +119 -25
- package/examples/jsm/loaders/TDSLoader.js +92 -74
- package/examples/jsm/loaders/TGALoader.js +23 -2
- package/examples/jsm/loaders/TIFFLoader.js +23 -0
- package/examples/jsm/loaders/TTFLoader.js +50 -3
- package/examples/jsm/loaders/USDLoader.js +279 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -858
- package/examples/jsm/loaders/UltraHDRLoader.js +338 -166
- package/examples/jsm/loaders/VOXLoader.js +688 -87
- package/examples/jsm/loaders/VRMLLoader.js +121 -12
- package/examples/jsm/loaders/VTKLoader.js +77 -25
- package/examples/jsm/loaders/XYZLoader.js +36 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +77 -77
- package/examples/jsm/loaders/usd/USDAParser.js +822 -0
- package/examples/jsm/loaders/usd/USDCParser.js +1852 -0
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/Capsule.js +91 -14
- package/examples/jsm/math/ColorConverter.js +22 -0
- package/examples/jsm/math/ColorSpaces.js +74 -2
- package/examples/jsm/math/ConvexHull.js +517 -93
- package/examples/jsm/math/ImprovedNoise.js +32 -15
- package/examples/jsm/math/Lut.js +113 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +78 -13
- package/examples/jsm/math/OBB.js +141 -29
- package/examples/jsm/math/Octree.js +283 -7
- package/examples/jsm/math/SimplexNoise.js +68 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +45 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +96 -20
- package/examples/jsm/misc/Gyroscope.js +12 -0
- package/examples/jsm/misc/MD2Character.js +117 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +175 -11
- package/examples/jsm/misc/MorphAnimMesh.js +44 -0
- package/examples/jsm/misc/MorphBlendMesh.js +103 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +100 -54
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
- package/examples/jsm/misc/RollerCoaster.js +57 -0
- package/examples/jsm/misc/TubePainter.js +437 -40
- package/examples/jsm/misc/Volume.js +123 -76
- package/examples/jsm/misc/VolumeSlice.js +95 -49
- package/examples/jsm/modifiers/CurveModifier.js +66 -38
- package/examples/jsm/modifiers/CurveModifierGPU.js +42 -19
- package/examples/jsm/modifiers/EdgeSplitModifier.js +20 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +24 -10
- package/examples/jsm/modifiers/TessellateModifier.js +35 -2
- package/examples/jsm/objects/GroundedSkybox.js +25 -6
- package/examples/jsm/objects/Lensflare.js +94 -2
- package/examples/jsm/objects/LensflareMesh.js +64 -10
- package/examples/jsm/objects/MarchingCubes.js +90 -5
- package/examples/jsm/objects/Reflector.js +76 -2
- package/examples/jsm/objects/ReflectorForSSRPass.js +41 -0
- package/examples/jsm/objects/Refractor.js +62 -0
- package/examples/jsm/objects/ShadowMesh.js +54 -4
- package/examples/jsm/objects/Sky.js +106 -16
- package/examples/jsm/objects/SkyMesh.js +211 -38
- package/examples/jsm/objects/Water.js +49 -8
- package/examples/jsm/objects/Water2.js +49 -7
- package/examples/jsm/objects/Water2Mesh.js +50 -9
- package/examples/jsm/objects/WaterMesh.js +136 -43
- package/examples/jsm/physics/AmmoPhysics.js +60 -7
- package/examples/jsm/physics/JoltPhysics.js +65 -12
- package/examples/jsm/physics/RapierPhysics.js +217 -21
- package/examples/jsm/postprocessing/AfterimagePass.js +110 -29
- package/examples/jsm/postprocessing/BloomPass.js +128 -26
- package/examples/jsm/postprocessing/BokehPass.js +99 -22
- package/examples/jsm/postprocessing/ClearPass.js +54 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +82 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +59 -10
- package/examples/jsm/postprocessing/EffectComposer.js +140 -6
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +54 -5
- package/examples/jsm/postprocessing/GTAOPass.js +202 -57
- package/examples/jsm/postprocessing/GlitchPass.js +86 -34
- package/examples/jsm/postprocessing/HalftonePass.js +65 -10
- package/examples/jsm/postprocessing/LUTPass.js +38 -8
- package/examples/jsm/postprocessing/MaskPass.js +91 -0
- package/examples/jsm/postprocessing/OutlinePass.js +272 -135
- package/examples/jsm/postprocessing/OutputPass.js +65 -14
- package/examples/jsm/postprocessing/Pass.js +100 -4
- package/examples/jsm/postprocessing/RenderPass.js +94 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +124 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +120 -21
- package/examples/jsm/postprocessing/SAOPass.js +128 -55
- package/examples/jsm/postprocessing/SMAAPass.js +106 -75
- package/examples/jsm/postprocessing/SSAARenderPass.js +118 -35
- package/examples/jsm/postprocessing/SSAOPass.js +173 -60
- package/examples/jsm/postprocessing/SSRPass.js +268 -53
- package/examples/jsm/postprocessing/SavePass.js +69 -16
- package/examples/jsm/postprocessing/ShaderPass.js +65 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +79 -24
- package/examples/jsm/postprocessing/TexturePass.js +72 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +168 -59
- package/examples/jsm/renderers/CSS2DRenderer.js +98 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +111 -7
- package/examples/jsm/renderers/Projector.js +288 -32
- package/examples/jsm/renderers/SVGRenderer.js +323 -61
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +3 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +5 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +12 -5
- package/examples/jsm/shaders/AfterimageShader.js +8 -3
- package/examples/jsm/shaders/BasicShader.js +8 -1
- package/examples/jsm/shaders/BleachBypassShader.js +10 -3
- package/examples/jsm/shaders/BlendShader.js +8 -1
- package/examples/jsm/shaders/BokehShader.js +9 -3
- package/examples/jsm/shaders/BokehShader2.js +11 -4
- package/examples/jsm/shaders/BrightnessContrastShader.js +10 -4
- package/examples/jsm/shaders/ColorCorrectionShader.js +8 -1
- package/examples/jsm/shaders/ColorifyShader.js +8 -1
- package/examples/jsm/shaders/ConvolutionShader.js +9 -38
- package/examples/jsm/shaders/CopyShader.js +8 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +10 -3
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +10 -1
- package/examples/jsm/shaders/DigitalGlitch.js +10 -7
- package/examples/jsm/shaders/DotScreenShader.js +8 -3
- package/examples/jsm/shaders/ExposureShader.js +8 -1
- package/examples/jsm/shaders/FXAAShader.js +233 -221
- package/examples/jsm/shaders/FilmShader.js +13 -0
- package/examples/jsm/shaders/FocusShader.js +8 -3
- package/examples/jsm/shaders/FreiChenShader.js +10 -3
- package/examples/jsm/shaders/GTAOShader.js +55 -45
- package/examples/jsm/shaders/GammaCorrectionShader.js +11 -2
- package/examples/jsm/shaders/HalftoneShader.js +24 -4
- package/examples/jsm/shaders/HorizontalBlurShader.js +12 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +9 -2
- package/examples/jsm/shaders/HueSaturationShader.js +10 -3
- package/examples/jsm/shaders/KaleidoShader.js +11 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +8 -4
- package/examples/jsm/shaders/LuminosityShader.js +8 -2
- package/examples/jsm/shaders/MirrorShader.js +10 -4
- package/examples/jsm/shaders/NormalMapShader.js +7 -2
- package/examples/jsm/shaders/OutputShader.js +19 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +30 -17
- package/examples/jsm/shaders/RGBShiftShader.js +8 -1
- package/examples/jsm/shaders/SAOShader.js +27 -5
- package/examples/jsm/shaders/SMAAShader.js +24 -1
- package/examples/jsm/shaders/SSAOShader.js +37 -6
- package/examples/jsm/shaders/SSRShader.js +32 -6
- package/examples/jsm/shaders/SepiaShader.js +8 -3
- package/examples/jsm/shaders/SobelOperatorShader.js +9 -3
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +13 -8
- package/examples/jsm/shaders/TechnicolorShader.js +10 -4
- package/examples/jsm/shaders/ToonShader.js +29 -6
- package/examples/jsm/shaders/TriangleBlurShader.js +9 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +19 -6
- package/examples/jsm/shaders/VelocityShader.js +8 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +9 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +8 -1
- package/examples/jsm/shaders/VignetteShader.js +8 -3
- package/examples/jsm/shaders/VolumeShader.js +11 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +11 -0
- package/examples/jsm/textures/FlakesTexture.js +14 -0
- package/examples/jsm/transpiler/AST.js +436 -31
- package/examples/jsm/transpiler/GLSLDecoder.js +380 -135
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -1
- package/examples/jsm/transpiler/TSLEncoder.js +363 -97
- package/examples/jsm/transpiler/Transpiler.js +50 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +839 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +244 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +549 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +282 -0
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/{src/nodes → examples/jsm/tsl}/display/BleachBypass.js +11 -4
- package/examples/jsm/tsl/display/BloomNode.js +534 -0
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +334 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +104 -0
- package/examples/jsm/tsl/display/FXAANode.js +365 -0
- package/examples/jsm/tsl/display/FilmNode.js +101 -0
- package/examples/jsm/tsl/display/GTAONode.js +571 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +389 -0
- package/examples/jsm/tsl/display/GodraysNode.js +624 -0
- package/examples/jsm/tsl/display/LensflareNode.js +279 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +109 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +762 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +335 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +768 -0
- package/{src/nodes → examples/jsm/tsl}/display/SSAAPassNode.js +120 -49
- package/examples/jsm/tsl/display/SSGINode.js +642 -0
- package/examples/jsm/tsl/display/SSRNode.js +656 -0
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/{src/nodes → examples/jsm/tsl}/display/Sepia.js +9 -2
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +61 -19
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +192 -0
- package/{src/nodes → examples/jsm/tsl}/display/StereoPassNode.js +48 -12
- package/examples/jsm/tsl/display/TRAANode.js +726 -0
- package/examples/jsm/tsl/display/TransitionNode.js +141 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +54 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
- package/examples/jsm/tsl/math/Bayer.js +73 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +70 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +91 -29
- package/examples/jsm/utils/CameraUtils.js +15 -6
- package/examples/jsm/utils/GeometryCompressionUtils.js +23 -30
- package/examples/jsm/utils/GeometryUtils.js +32 -27
- package/examples/jsm/utils/LDrawUtils.js +14 -5
- package/examples/jsm/utils/SceneOptimizer.js +458 -0
- package/examples/jsm/utils/SceneUtils.js +53 -3
- package/examples/jsm/utils/ShadowMapViewer.js +72 -33
- package/examples/jsm/utils/ShadowMapViewerGPU.js +61 -29
- package/examples/jsm/utils/SkeletonUtils.js +48 -0
- package/examples/jsm/utils/SortUtils.js +17 -5
- package/examples/jsm/utils/UVsDebug.js +12 -4
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +16 -0
- package/examples/jsm/utils/{TextureUtilsGPU.js → WebGPUTextureUtils.js} +20 -2
- package/examples/jsm/utils/WorkerPool.js +67 -2
- package/examples/jsm/webxr/ARButton.js +19 -0
- package/examples/jsm/webxr/OculusHandModel.js +84 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +148 -22
- package/examples/jsm/webxr/Text2D.js +20 -6
- package/examples/jsm/webxr/VRButton.js +31 -0
- package/examples/jsm/webxr/XRButton.js +23 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +94 -3
- package/examples/jsm/webxr/XREstimatedLight.js +35 -4
- package/examples/jsm/webxr/XRHandMeshModel.js +37 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +96 -6
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +44 -0
- package/examples/jsm/webxr/XRPlanes.js +18 -0
- package/package.json +29 -37
- package/src/Three.Core.js +198 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +641 -0
- package/src/Three.WebGPU.Nodes.js +14 -186
- package/src/Three.WebGPU.js +16 -186
- package/src/Three.js +2 -197
- package/src/animation/AnimationAction.js +263 -31
- package/src/animation/AnimationClip.js +162 -7
- package/src/animation/AnimationMixer.js +105 -15
- package/src/animation/AnimationObjectGroup.js +45 -21
- package/src/animation/AnimationUtils.js +163 -24
- package/src/animation/KeyframeTrack.js +191 -17
- package/src/animation/PropertyBinding.js +91 -16
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/Audio.js +386 -8
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +94 -13
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +37 -0
- package/src/cameras/Camera.js +61 -0
- package/src/cameras/CubeCamera.js +86 -0
- package/src/cameras/OrthographicCamera.js +110 -1
- package/src/cameras/PerspectiveCamera.js +174 -35
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +1546 -11
- package/src/core/BufferAttribute.js +417 -3
- package/src/core/BufferGeometry.js +407 -22
- package/src/core/Clock.js +69 -8
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/GLBufferAttribute.js +113 -2
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +141 -7
- package/src/core/InterleavedBufferAttribute.js +200 -2
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +673 -26
- package/src/core/Raycaster.js +136 -2
- package/src/core/RenderTarget.js +256 -27
- package/src/core/RenderTarget3D.js +48 -0
- package/src/core/Timer.js +184 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +89 -1
- package/src/extras/DataUtils.js +50 -9
- package/src/extras/Earcut.js +18 -779
- package/src/extras/ImageUtils.js +22 -14
- package/src/extras/PMREMGenerator.js +316 -67
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +101 -15
- package/src/extras/core/Curve.js +156 -55
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +34 -2
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +80 -4
- 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/extras/lib/earcut.js +685 -0
- package/src/geometries/BoxGeometry.js +39 -0
- package/src/geometries/CapsuleGeometry.js +196 -11
- package/src/geometries/CircleGeometry.js +41 -0
- package/src/geometries/ConeGeometry.js +39 -0
- package/src/geometries/CylinderGeometry.js +42 -2
- package/src/geometries/DodecahedronGeometry.js +33 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +148 -52
- package/src/geometries/IcosahedronGeometry.js +33 -0
- package/src/geometries/LatheGeometry.js +44 -3
- package/src/geometries/OctahedronGeometry.js +33 -0
- package/src/geometries/PlaneGeometry.js +35 -0
- package/src/geometries/PolyhedronGeometry.js +30 -1
- package/src/geometries/RingGeometry.js +37 -0
- package/src/geometries/ShapeGeometry.js +38 -0
- package/src/geometries/SphereGeometry.js +38 -0
- package/src/geometries/TetrahedronGeometry.js +33 -0
- package/src/geometries/TorusGeometry.js +44 -3
- package/src/geometries/TorusKnotGeometry.js +39 -0
- package/src/geometries/TubeGeometry.js +50 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +62 -5
- 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 +103 -27
- package/src/helpers/DirectionalLightHelper.js +55 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +42 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -24
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +73 -7
- package/src/helpers/SpotLightHelper.js +43 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +70 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +42 -0
- package/src/lights/Light.js +37 -11
- package/src/lights/LightProbe.js +37 -9
- package/src/lights/LightShadow.js +202 -7
- package/src/lights/PointLight.js +74 -0
- package/src/lights/PointLightShadow.js +15 -80
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +124 -1
- package/src/lights/SpotLightShadow.js +33 -3
- package/src/lights/webgpu/IESSpotLight.js +22 -0
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/AnimationLoader.js +34 -2
- package/src/loaders/AudioLoader.js +34 -2
- package/src/loaders/BufferGeometryLoader.js +38 -13
- package/src/loaders/Cache.js +75 -2
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +45 -4
- package/src/loaders/FileLoader.js +85 -5
- package/src/loaders/ImageBitmapLoader.js +113 -11
- package/src/loaders/ImageLoader.js +85 -8
- package/src/loaders/Loader.js +150 -0
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +187 -0
- package/src/loaders/MaterialLoader.js +62 -3
- package/src/loaders/ObjectLoader.js +131 -31
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +68 -4
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -1
- package/src/materials/Material.js +502 -8
- package/src/materials/MeshBasicMaterial.js +168 -2
- package/src/materials/MeshDepthMaterial.js +94 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +283 -0
- package/src/materials/MeshMatcapMaterial.js +164 -0
- package/src/materials/MeshNormalMaterial.js +114 -0
- package/src/materials/MeshPhongMaterial.js +298 -0
- package/src/materials/MeshPhysicalMaterial.js +296 -4
- package/src/materials/MeshStandardMaterial.js +300 -2
- package/src/materials/MeshToonMaterial.js +219 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +234 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +158 -53
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +81 -6
- package/src/materials/nodes/MeshBasicNodeMaterial.js +59 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +23 -3
- package/src/materials/nodes/MeshNormalNodeMaterial.js +27 -4
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +276 -3
- package/src/materials/nodes/MeshSSSNodeMaterial.js +98 -10
- package/src/materials/nodes/MeshStandardNodeMaterial.js +83 -4
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +789 -74
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +180 -11
- package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +86 -23
- package/src/materials/nodes/VolumeNodeMaterial.js +57 -84
- package/src/materials/nodes/manager/NodeMaterialObserver.js +329 -12
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +271 -0
- package/src/math/Color.js +355 -11
- package/src/math/ColorManagement.js +158 -92
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +139 -5
- package/src/math/Frustum.js +108 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +221 -2
- package/src/math/MathUtils.js +408 -20
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +489 -94
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +322 -90
- package/src/math/Ray.js +162 -0
- package/src/math/Sphere.js +175 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +206 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -15
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- 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 +91 -88
- package/src/nodes/TSL.js +32 -38
- package/src/nodes/accessors/AccessorsUtils.js +37 -9
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +49 -14
- package/src/nodes/accessors/Bitangent.js +82 -13
- package/src/nodes/accessors/BufferAttributeNode.js +269 -8
- package/src/nodes/accessors/BufferNode.js +91 -2
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +400 -10
- package/src/nodes/accessors/ClippingNode.js +149 -45
- package/src/nodes/accessors/CubeTextureNode.js +137 -7
- package/src/nodes/accessors/InstanceNode.js +245 -40
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +88 -0
- package/src/nodes/accessors/MaterialNode.js +355 -13
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +52 -14
- package/src/nodes/accessors/ModelNode.js +117 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -39
- package/src/nodes/accessors/MorphNode.js +73 -26
- package/src/nodes/accessors/Normal.js +174 -19
- package/src/nodes/accessors/Object3DNode.js +146 -12
- package/src/nodes/accessors/PointUVNode.js +25 -0
- package/src/nodes/accessors/Position.js +119 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +190 -4
- package/src/nodes/accessors/ReferenceNode.js +223 -8
- package/src/nodes/accessors/ReflectVector.js +29 -3
- package/src/nodes/accessors/RendererReferenceNode.js +45 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +180 -43
- package/src/nodes/accessors/StorageBufferNode.js +278 -26
- package/src/nodes/accessors/StorageTextureNode.js +205 -12
- package/src/nodes/accessors/Tangent.js +48 -10
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +104 -11
- package/src/nodes/accessors/TextureBicubic.js +31 -4
- package/src/nodes/accessors/TextureNode.js +564 -52
- package/src/nodes/accessors/TextureSizeNode.js +42 -1
- package/src/nodes/accessors/UV.js +9 -1
- package/src/nodes/accessors/UniformArrayNode.js +226 -34
- package/src/nodes/accessors/UserDataNode.js +46 -2
- package/src/nodes/accessors/VelocityNode.js +93 -3
- package/src/nodes/accessors/VertexColorNode.js +39 -4
- package/src/nodes/code/CodeNode.js +101 -8
- package/src/nodes/code/ExpressionNode.js +29 -2
- package/src/nodes/code/FunctionCallNode.js +98 -10
- package/src/nodes/code/FunctionNode.js +69 -2
- package/src/nodes/core/ArrayNode.js +174 -0
- package/src/nodes/core/AssignNode.js +80 -9
- package/src/nodes/core/AttributeNode.js +47 -4
- package/src/nodes/core/BypassNode.js +47 -3
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +220 -14
- package/src/nodes/core/IndexNode.js +72 -7
- package/src/nodes/core/InputNode.js +50 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/IsolateNode.js +133 -0
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +113 -2
- package/src/nodes/core/Node.js +595 -36
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1840 -121
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +153 -24
- package/src/nodes/core/NodeFunction.js +48 -1
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +13 -1
- package/src/nodes/core/NodeUniform.js +53 -1
- package/src/nodes/core/NodeUtils.js +201 -51
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +47 -1
- package/src/nodes/core/OutputStructNode.js +54 -12
- package/src/nodes/core/ParameterNode.js +60 -2
- package/src/nodes/core/PropertyNode.js +286 -7
- package/src/nodes/core/StackNode.js +337 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +134 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +126 -6
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +85 -7
- package/src/nodes/core/UniformNode.js +163 -16
- package/src/nodes/core/VarNode.js +317 -10
- package/src/nodes/core/VaryingNode.js +115 -13
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +171 -0
- package/src/nodes/display/BumpMapNode.js +38 -2
- package/src/nodes/display/ColorAdjustment.js +118 -6
- package/src/nodes/display/ColorSpaceFunctions.js +22 -6
- package/src/nodes/display/ColorSpaceNode.js +97 -47
- package/src/nodes/display/FrontFacingNode.js +64 -7
- package/src/nodes/display/NormalMapNode.js +101 -54
- package/src/nodes/display/PassNode.js +690 -33
- package/src/nodes/display/RenderOutputNode.js +94 -4
- package/src/nodes/display/ScreenNode.js +138 -27
- package/src/nodes/display/ToneMappingFunctions.js +62 -10
- package/src/nodes/display/ToneMappingNode.js +88 -8
- package/src/nodes/display/ToonOutlinePassNode.js +84 -4
- package/src/nodes/display/ViewportDepthNode.js +227 -10
- package/src/nodes/display/ViewportDepthTextureNode.js +39 -5
- package/src/nodes/display/ViewportSharedTextureNode.js +35 -1
- package/src/nodes/display/ViewportTextureNode.js +171 -7
- package/src/nodes/fog/Fog.js +97 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +45 -1
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
- package/src/nodes/functions/BasicLightingModel.js +28 -6
- package/src/nodes/functions/PhongLightingModel.js +36 -6
- package/src/nodes/functions/PhysicalLightingModel.js +336 -91
- package/src/nodes/functions/ShadowMaskModel.js +30 -3
- package/src/nodes/functions/ToonLightingModel.js +21 -2
- 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/geometry/RangeNode.js +97 -8
- package/src/nodes/gpgpu/AtomicFunctionNode.js +198 -23
- package/src/nodes/gpgpu/BarrierNode.js +52 -3
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +135 -6
- package/src/nodes/gpgpu/ComputeNode.js +212 -16
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +143 -9
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +186 -399
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +12 -11
- package/src/nodes/lighting/EnvironmentNode.js +59 -19
- package/src/nodes/lighting/HemisphereLightNode.js +33 -2
- package/src/nodes/lighting/IESSpotLightNode.js +13 -1
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +11 -3
- package/src/nodes/lighting/LightingContextNode.js +52 -4
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +238 -35
- package/src/nodes/lighting/PointLightNode.js +60 -25
- package/src/nodes/lighting/PointShadowNode.js +325 -0
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/RectAreaLightNode.js +50 -14
- package/src/nodes/lighting/ShadowBaseNode.js +81 -0
- package/src/nodes/lighting/ShadowFilterNode.js +264 -0
- package/src/nodes/lighting/ShadowNode.js +867 -0
- package/src/nodes/lighting/SpotLightNode.js +99 -18
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +110 -21
- package/src/nodes/math/Hash.js +8 -0
- package/src/nodes/math/MathNode.js +820 -97
- package/src/nodes/math/MathUtils.js +47 -1
- package/src/nodes/math/OperatorNode.js +517 -84
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/TriNoise3D.js +17 -7
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +180 -23
- package/src/nodes/pmrem/PMREMUtils.js +114 -5
- package/src/nodes/procedural/Checker.js +8 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +10 -4
- package/src/nodes/tsl/TSLCore.js +732 -160
- package/src/nodes/utils/ArrayElementNode.js +55 -4
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +79 -2
- package/src/nodes/utils/DebugNode.js +83 -0
- package/src/nodes/utils/Discard.js +18 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +118 -0
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +91 -22
- package/src/nodes/utils/JoinNode.js +57 -4
- package/src/nodes/utils/LoopNode.js +193 -55
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -1
- package/src/nodes/utils/MemberNode.js +120 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +30 -1
- package/src/nodes/utils/PostProcessingUtils.js +154 -0
- package/src/nodes/utils/RTTNode.js +165 -9
- package/src/nodes/utils/ReflectorNode.js +407 -21
- package/src/nodes/utils/RemapNode.js +81 -2
- package/src/nodes/utils/RotateNode.js +41 -1
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +66 -3
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/SpriteUtils.js +16 -0
- package/src/nodes/utils/StorageArrayElementNode.js +56 -3
- package/src/nodes/utils/Timer.js +26 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/nodes/utils/UVUtils.js +48 -0
- package/src/nodes/utils/ViewportUtils.js +12 -0
- package/src/objects/BatchedMesh.js +798 -309
- 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 +131 -2
- package/src/objects/LOD.js +99 -5
- package/src/objects/Line.js +90 -7
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +20 -1
- package/src/objects/Mesh.js +84 -0
- package/src/objects/Points.js +60 -0
- package/src/objects/Skeleton.js +120 -5
- package/src/objects/SkinnedMesh.js +102 -6
- package/src/objects/Sprite.js +65 -1
- package/src/renderers/WebGL3DRenderTarget.js +26 -0
- package/src/renderers/WebGLArrayRenderTarget.js +26 -0
- package/src/renderers/WebGLCubeRenderTarget.js +41 -5
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +1016 -278
- package/src/renderers/common/Animation.js +123 -14
- package/src/renderers/common/Attributes.js +41 -1
- package/src/renderers/common/Backend.js +623 -44
- package/src/renderers/common/Background.js +99 -16
- package/src/renderers/common/BindGroup.js +37 -2
- package/src/renderers/common/Binding.js +46 -0
- package/src/renderers/common/Bindings.js +211 -20
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +89 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +73 -10
- package/src/renderers/common/ClippingContext.js +172 -87
- 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 +77 -7
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +163 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +81 -36
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Lighting.js +57 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +150 -7
- package/src/renderers/common/PostProcessing.js +22 -84
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +63 -6
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +40 -10
- package/src/renderers/common/RenderContext.js +219 -4
- package/src/renderers/common/RenderContexts.js +54 -17
- package/src/renderers/common/RenderList.js +233 -24
- package/src/renderers/common/RenderLists.js +46 -6
- package/src/renderers/common/RenderObject.js +548 -46
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +133 -15
- package/src/renderers/common/RenderPipeline.js +216 -6
- package/src/renderers/common/Renderer.js +2155 -332
- package/src/renderers/common/RendererUtils.js +200 -0
- package/src/renderers/common/SampledTexture.js +99 -39
- package/src/renderers/common/Sampler.js +148 -1
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageBuffer.js +38 -2
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +65 -0
- package/src/renderers/common/Textures.js +273 -57
- package/src/renderers/common/TimestampQueryPool.js +163 -0
- package/src/renderers/common/Uniform.js +233 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +235 -26
- package/src/renderers/common/XRManager.js +1677 -0
- package/src/renderers/common/XRRenderTarget.js +91 -0
- package/src/renderers/common/extras/PMREMGenerator.js +371 -108
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +95 -17
- package/src/renderers/common/nodes/NodeManager.js +852 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +84 -8
- package/src/renderers/common/nodes/NodeSampler.js +41 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +48 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +81 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +154 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +230 -181
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk.js +3 -3
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +14 -2
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -5
- package/src/renderers/shaders/UniformsLib.js +2 -7
- package/src/renderers/shaders/UniformsUtils.js +21 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLBackground.js +30 -5
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +7 -14
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -35
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +87 -148
- package/src/renderers/webgl/WebGLPrograms.js +53 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +204 -28
- package/src/renderers/webgl/WebGLState.js +88 -56
- package/src/renderers/webgl/WebGLTextures.js +293 -59
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +7 -5
- package/src/renderers/webgl-fallback/WebGLBackend.js +1416 -293
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +785 -92
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +62 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +3 -3
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +584 -20
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +468 -80
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +72 -24
- package/src/renderers/webgpu/WebGPUBackend.js +1517 -428
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +31 -4
- package/src/renderers/webgpu/WebGPURenderer.js +55 -4
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +23 -16
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +37 -42
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +1335 -241
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +32 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +144 -20
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +460 -116
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -4
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +283 -69
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +225 -178
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +583 -191
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +150 -28
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +52 -7
- package/src/renderers/webxr/WebXRManager.js +275 -15
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +88 -0
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +79 -2
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -11
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +106 -4
- package/src/textures/Texture.js +488 -6
- package/src/textures/VideoFrameTexture.js +72 -0
- package/src/textures/VideoTexture.js +78 -6
- package/src/utils.js +322 -3
- 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/effects/PeppersGhostEffect.js +0 -153
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +0 -729
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/RGBMLoader.js +0 -1081
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -432
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -144
- package/examples/jsm/misc/Timer.js +0 -128
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/GodRaysShader.js +0 -321
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/accessors/SceneNode.js +0 -55
- package/src/nodes/code/ScriptableNode.js +0 -505
- package/src/nodes/code/ScriptableValueNode.js +0 -170
- package/src/nodes/core/CacheNode.js +0 -50
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -158
- package/src/nodes/display/AnaglyphPassNode.js +0 -67
- package/src/nodes/display/AnamorphicNode.js +0 -151
- package/src/nodes/display/BlendMode.js +0 -54
- package/src/nodes/display/BloomNode.js +0 -341
- package/src/nodes/display/DenoiseNode.js +0 -204
- package/src/nodes/display/DepthOfFieldNode.js +0 -124
- package/src/nodes/display/DotScreenNode.js +0 -66
- package/src/nodes/display/FXAANode.js +0 -332
- package/src/nodes/display/FilmNode.js +0 -56
- package/src/nodes/display/GTAONode.js +0 -331
- package/src/nodes/display/GaussianBlurNode.js +0 -213
- package/src/nodes/display/Lut3DNode.js +0 -57
- package/src/nodes/display/MotionBlur.js +0 -25
- package/src/nodes/display/ParallaxBarrierPassNode.js +0 -58
- package/src/nodes/display/PixelationPassNode.js +0 -213
- package/src/nodes/display/PosterizeNode.js +0 -33
- package/src/nodes/display/RGBShiftNode.js +0 -53
- package/src/nodes/display/StereoCompositePassNode.js +0 -110
- package/src/nodes/display/TransitionNode.js +0 -80
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/EquirectUVNode.js +0 -36
- package/src/nodes/utils/MatcapUVNode.js +0 -33
- package/src/nodes/utils/OscNode.js +0 -85
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -45
- package/src/nodes/utils/TimerNode.js +0 -97
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -64
- package/src/renderers/common/nodes/Nodes.js +0 -534
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -136
package/src/math/Matrix4.js
CHANGED
|
@@ -1,12 +1,84 @@
|
|
|
1
1
|
import { WebGLCoordinateSystem, WebGPUCoordinateSystem } from '../constants.js';
|
|
2
2
|
import { Vector3 } from './Vector3.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Represents a 4x4 matrix.
|
|
6
|
+
*
|
|
7
|
+
* The most common use of a 4x4 matrix in 3D computer graphics is as a transformation matrix.
|
|
8
|
+
* For an introduction to transformation matrices as used in WebGL, check out [this tutorial](https://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices)
|
|
9
|
+
*
|
|
10
|
+
* This allows a 3D vector representing a point in 3D space to undergo
|
|
11
|
+
* transformations such as translation, rotation, shear, scale, reflection,
|
|
12
|
+
* orthogonal or perspective projection and so on, by being multiplied by the
|
|
13
|
+
* matrix. This is known as `applying` the matrix to the vector.
|
|
14
|
+
*
|
|
15
|
+
* A Note on Row-Major and Column-Major Ordering:
|
|
16
|
+
*
|
|
17
|
+
* The constructor and {@link Matrix3#set} method take arguments in
|
|
18
|
+
* [row-major](https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order)
|
|
19
|
+
* order, while internally they are stored in the {@link Matrix3#elements} array in column-major order.
|
|
20
|
+
* This means that calling:
|
|
21
|
+
* ```js
|
|
22
|
+
* const m = new THREE.Matrix4();
|
|
23
|
+
* m.set( 11, 12, 13, 14,
|
|
24
|
+
* 21, 22, 23, 24,
|
|
25
|
+
* 31, 32, 33, 34,
|
|
26
|
+
* 41, 42, 43, 44 );
|
|
27
|
+
* ```
|
|
28
|
+
* will result in the elements array containing:
|
|
29
|
+
* ```js
|
|
30
|
+
* m.elements = [ 11, 21, 31, 41,
|
|
31
|
+
* 12, 22, 32, 42,
|
|
32
|
+
* 13, 23, 33, 43,
|
|
33
|
+
* 14, 24, 34, 44 ];
|
|
34
|
+
* ```
|
|
35
|
+
* and internally all calculations are performed using column-major ordering.
|
|
36
|
+
* However, as the actual ordering makes no difference mathematically and
|
|
37
|
+
* most people are used to thinking about matrices in row-major order, the
|
|
38
|
+
* three.js documentation shows matrices in row-major order. Just bear in
|
|
39
|
+
* mind that if you are reading the source code, you'll have to take the
|
|
40
|
+
* transpose of any matrices outlined here to make sense of the calculations.
|
|
41
|
+
*/
|
|
4
42
|
class Matrix4 {
|
|
5
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Constructs a new 4x4 matrix. The arguments are supposed to be
|
|
46
|
+
* in row-major order. If no arguments are provided, the constructor
|
|
47
|
+
* initializes the matrix as an identity matrix.
|
|
48
|
+
*
|
|
49
|
+
* @param {number} [n11] - 1-1 matrix element.
|
|
50
|
+
* @param {number} [n12] - 1-2 matrix element.
|
|
51
|
+
* @param {number} [n13] - 1-3 matrix element.
|
|
52
|
+
* @param {number} [n14] - 1-4 matrix element.
|
|
53
|
+
* @param {number} [n21] - 2-1 matrix element.
|
|
54
|
+
* @param {number} [n22] - 2-2 matrix element.
|
|
55
|
+
* @param {number} [n23] - 2-3 matrix element.
|
|
56
|
+
* @param {number} [n24] - 2-4 matrix element.
|
|
57
|
+
* @param {number} [n31] - 3-1 matrix element.
|
|
58
|
+
* @param {number} [n32] - 3-2 matrix element.
|
|
59
|
+
* @param {number} [n33] - 3-3 matrix element.
|
|
60
|
+
* @param {number} [n34] - 3-4 matrix element.
|
|
61
|
+
* @param {number} [n41] - 4-1 matrix element.
|
|
62
|
+
* @param {number} [n42] - 4-2 matrix element.
|
|
63
|
+
* @param {number} [n43] - 4-3 matrix element.
|
|
64
|
+
* @param {number} [n44] - 4-4 matrix element.
|
|
65
|
+
*/
|
|
6
66
|
constructor( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {
|
|
7
67
|
|
|
68
|
+
/**
|
|
69
|
+
* This flag can be used for type testing.
|
|
70
|
+
*
|
|
71
|
+
* @type {boolean}
|
|
72
|
+
* @readonly
|
|
73
|
+
* @default true
|
|
74
|
+
*/
|
|
8
75
|
Matrix4.prototype.isMatrix4 = true;
|
|
9
76
|
|
|
77
|
+
/**
|
|
78
|
+
* A column-major list of matrix values.
|
|
79
|
+
*
|
|
80
|
+
* @type {Array<number>}
|
|
81
|
+
*/
|
|
10
82
|
this.elements = [
|
|
11
83
|
|
|
12
84
|
1, 0, 0, 0,
|
|
@@ -24,6 +96,28 @@ class Matrix4 {
|
|
|
24
96
|
|
|
25
97
|
}
|
|
26
98
|
|
|
99
|
+
/**
|
|
100
|
+
* Sets the elements of the matrix.The arguments are supposed to be
|
|
101
|
+
* in row-major order.
|
|
102
|
+
*
|
|
103
|
+
* @param {number} [n11] - 1-1 matrix element.
|
|
104
|
+
* @param {number} [n12] - 1-2 matrix element.
|
|
105
|
+
* @param {number} [n13] - 1-3 matrix element.
|
|
106
|
+
* @param {number} [n14] - 1-4 matrix element.
|
|
107
|
+
* @param {number} [n21] - 2-1 matrix element.
|
|
108
|
+
* @param {number} [n22] - 2-2 matrix element.
|
|
109
|
+
* @param {number} [n23] - 2-3 matrix element.
|
|
110
|
+
* @param {number} [n24] - 2-4 matrix element.
|
|
111
|
+
* @param {number} [n31] - 3-1 matrix element.
|
|
112
|
+
* @param {number} [n32] - 3-2 matrix element.
|
|
113
|
+
* @param {number} [n33] - 3-3 matrix element.
|
|
114
|
+
* @param {number} [n34] - 3-4 matrix element.
|
|
115
|
+
* @param {number} [n41] - 4-1 matrix element.
|
|
116
|
+
* @param {number} [n42] - 4-2 matrix element.
|
|
117
|
+
* @param {number} [n43] - 4-3 matrix element.
|
|
118
|
+
* @param {number} [n44] - 4-4 matrix element.
|
|
119
|
+
* @return {Matrix4} A reference to this matrix.
|
|
120
|
+
*/
|
|
27
121
|
set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {
|
|
28
122
|
|
|
29
123
|
const te = this.elements;
|
|
@@ -37,6 +131,11 @@ class Matrix4 {
|
|
|
37
131
|
|
|
38
132
|
}
|
|
39
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Sets this matrix to the 4x4 identity matrix.
|
|
136
|
+
*
|
|
137
|
+
* @return {Matrix4} A reference to this matrix.
|
|
138
|
+
*/
|
|
40
139
|
identity() {
|
|
41
140
|
|
|
42
141
|
this.set(
|
|
@@ -52,12 +151,23 @@ class Matrix4 {
|
|
|
52
151
|
|
|
53
152
|
}
|
|
54
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Returns a matrix with copied values from this instance.
|
|
156
|
+
*
|
|
157
|
+
* @return {Matrix4} A clone of this instance.
|
|
158
|
+
*/
|
|
55
159
|
clone() {
|
|
56
160
|
|
|
57
161
|
return new Matrix4().fromArray( this.elements );
|
|
58
162
|
|
|
59
163
|
}
|
|
60
164
|
|
|
165
|
+
/**
|
|
166
|
+
* Copies the values of the given matrix to this instance.
|
|
167
|
+
*
|
|
168
|
+
* @param {Matrix4} m - The matrix to copy.
|
|
169
|
+
* @return {Matrix4} A reference to this matrix.
|
|
170
|
+
*/
|
|
61
171
|
copy( m ) {
|
|
62
172
|
|
|
63
173
|
const te = this.elements;
|
|
@@ -72,6 +182,13 @@ class Matrix4 {
|
|
|
72
182
|
|
|
73
183
|
}
|
|
74
184
|
|
|
185
|
+
/**
|
|
186
|
+
* Copies the translation component of the given matrix
|
|
187
|
+
* into this matrix's translation component.
|
|
188
|
+
*
|
|
189
|
+
* @param {Matrix4} m - The matrix to copy the translation component.
|
|
190
|
+
* @return {Matrix4} A reference to this matrix.
|
|
191
|
+
*/
|
|
75
192
|
copyPosition( m ) {
|
|
76
193
|
|
|
77
194
|
const te = this.elements, me = m.elements;
|
|
@@ -84,6 +201,12 @@ class Matrix4 {
|
|
|
84
201
|
|
|
85
202
|
}
|
|
86
203
|
|
|
204
|
+
/**
|
|
205
|
+
* Set the upper 3x3 elements of this matrix to the values of given 3x3 matrix.
|
|
206
|
+
*
|
|
207
|
+
* @param {Matrix3} m - The 3x3 matrix.
|
|
208
|
+
* @return {Matrix4} A reference to this matrix.
|
|
209
|
+
*/
|
|
87
210
|
setFromMatrix3( m ) {
|
|
88
211
|
|
|
89
212
|
const me = m.elements;
|
|
@@ -101,8 +224,26 @@ class Matrix4 {
|
|
|
101
224
|
|
|
102
225
|
}
|
|
103
226
|
|
|
227
|
+
/**
|
|
228
|
+
* Extracts the basis of this matrix into the three axis vectors provided.
|
|
229
|
+
*
|
|
230
|
+
* @param {Vector3} xAxis - The basis's x axis.
|
|
231
|
+
* @param {Vector3} yAxis - The basis's y axis.
|
|
232
|
+
* @param {Vector3} zAxis - The basis's z axis.
|
|
233
|
+
* @return {Matrix4} A reference to this matrix.
|
|
234
|
+
*/
|
|
104
235
|
extractBasis( xAxis, yAxis, zAxis ) {
|
|
105
236
|
|
|
237
|
+
if ( this.determinant() === 0 ) {
|
|
238
|
+
|
|
239
|
+
xAxis.set( 1, 0, 0 );
|
|
240
|
+
yAxis.set( 0, 1, 0 );
|
|
241
|
+
zAxis.set( 0, 0, 1 );
|
|
242
|
+
|
|
243
|
+
return this;
|
|
244
|
+
|
|
245
|
+
}
|
|
246
|
+
|
|
106
247
|
xAxis.setFromMatrixColumn( this, 0 );
|
|
107
248
|
yAxis.setFromMatrixColumn( this, 1 );
|
|
108
249
|
zAxis.setFromMatrixColumn( this, 2 );
|
|
@@ -111,6 +252,14 @@ class Matrix4 {
|
|
|
111
252
|
|
|
112
253
|
}
|
|
113
254
|
|
|
255
|
+
/**
|
|
256
|
+
* Sets the given basis vectors to this matrix.
|
|
257
|
+
*
|
|
258
|
+
* @param {Vector3} xAxis - The basis's x axis.
|
|
259
|
+
* @param {Vector3} yAxis - The basis's y axis.
|
|
260
|
+
* @param {Vector3} zAxis - The basis's z axis.
|
|
261
|
+
* @return {Matrix4} A reference to this matrix.
|
|
262
|
+
*/
|
|
114
263
|
makeBasis( xAxis, yAxis, zAxis ) {
|
|
115
264
|
|
|
116
265
|
this.set(
|
|
@@ -124,9 +273,22 @@ class Matrix4 {
|
|
|
124
273
|
|
|
125
274
|
}
|
|
126
275
|
|
|
276
|
+
/**
|
|
277
|
+
* Extracts the rotation component of the given matrix
|
|
278
|
+
* into this matrix's rotation component.
|
|
279
|
+
*
|
|
280
|
+
* Note: This method does not support reflection matrices.
|
|
281
|
+
*
|
|
282
|
+
* @param {Matrix4} m - The matrix.
|
|
283
|
+
* @return {Matrix4} A reference to this matrix.
|
|
284
|
+
*/
|
|
127
285
|
extractRotation( m ) {
|
|
128
286
|
|
|
129
|
-
|
|
287
|
+
if ( m.determinant() === 0 ) {
|
|
288
|
+
|
|
289
|
+
return this.identity();
|
|
290
|
+
|
|
291
|
+
}
|
|
130
292
|
|
|
131
293
|
const te = this.elements;
|
|
132
294
|
const me = m.elements;
|
|
@@ -159,6 +321,16 @@ class Matrix4 {
|
|
|
159
321
|
|
|
160
322
|
}
|
|
161
323
|
|
|
324
|
+
/**
|
|
325
|
+
* Sets the rotation component (the upper left 3x3 matrix) of this matrix to
|
|
326
|
+
* the rotation specified by the given Euler angles. The rest of
|
|
327
|
+
* the matrix is set to the identity. Depending on the {@link Euler#order},
|
|
328
|
+
* there are six possible outcomes. See [this page](https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix)
|
|
329
|
+
* for a complete list.
|
|
330
|
+
*
|
|
331
|
+
* @param {Euler} euler - The Euler angles.
|
|
332
|
+
* @return {Matrix4} A reference to this matrix.
|
|
333
|
+
*/
|
|
162
334
|
makeRotationFromEuler( euler ) {
|
|
163
335
|
|
|
164
336
|
const te = this.elements;
|
|
@@ -281,12 +453,29 @@ class Matrix4 {
|
|
|
281
453
|
|
|
282
454
|
}
|
|
283
455
|
|
|
456
|
+
/**
|
|
457
|
+
* Sets the rotation component of this matrix to the rotation specified by
|
|
458
|
+
* the given Quaternion as outlined [here](https://en.wikipedia.org/wiki/Rotation_matrix#Quaternion)
|
|
459
|
+
* The rest of the matrix is set to the identity.
|
|
460
|
+
*
|
|
461
|
+
* @param {Quaternion} q - The Quaternion.
|
|
462
|
+
* @return {Matrix4} A reference to this matrix.
|
|
463
|
+
*/
|
|
284
464
|
makeRotationFromQuaternion( q ) {
|
|
285
465
|
|
|
286
466
|
return this.compose( _zero, q, _one );
|
|
287
467
|
|
|
288
468
|
}
|
|
289
469
|
|
|
470
|
+
/**
|
|
471
|
+
* Sets the rotation component of the transformation matrix, looking from `eye` towards
|
|
472
|
+
* `target`, and oriented by the up-direction.
|
|
473
|
+
*
|
|
474
|
+
* @param {Vector3} eye - The eye vector.
|
|
475
|
+
* @param {Vector3} target - The target vector.
|
|
476
|
+
* @param {Vector3} up - The up vector.
|
|
477
|
+
* @return {Matrix4} A reference to this matrix.
|
|
478
|
+
*/
|
|
290
479
|
lookAt( eye, target, up ) {
|
|
291
480
|
|
|
292
481
|
const te = this.elements;
|
|
@@ -334,18 +523,38 @@ class Matrix4 {
|
|
|
334
523
|
|
|
335
524
|
}
|
|
336
525
|
|
|
526
|
+
/**
|
|
527
|
+
* Post-multiplies this matrix by the given 4x4 matrix.
|
|
528
|
+
*
|
|
529
|
+
* @param {Matrix4} m - The matrix to multiply with.
|
|
530
|
+
* @return {Matrix4} A reference to this matrix.
|
|
531
|
+
*/
|
|
337
532
|
multiply( m ) {
|
|
338
533
|
|
|
339
534
|
return this.multiplyMatrices( this, m );
|
|
340
535
|
|
|
341
536
|
}
|
|
342
537
|
|
|
538
|
+
/**
|
|
539
|
+
* Pre-multiplies this matrix by the given 4x4 matrix.
|
|
540
|
+
*
|
|
541
|
+
* @param {Matrix4} m - The matrix to multiply with.
|
|
542
|
+
* @return {Matrix4} A reference to this matrix.
|
|
543
|
+
*/
|
|
343
544
|
premultiply( m ) {
|
|
344
545
|
|
|
345
546
|
return this.multiplyMatrices( m, this );
|
|
346
547
|
|
|
347
548
|
}
|
|
348
549
|
|
|
550
|
+
/**
|
|
551
|
+
* Multiples the given 4x4 matrices and stores the result
|
|
552
|
+
* in this matrix.
|
|
553
|
+
*
|
|
554
|
+
* @param {Matrix4} a - The first matrix.
|
|
555
|
+
* @param {Matrix4} b - The second matrix.
|
|
556
|
+
* @return {Matrix4} A reference to this matrix.
|
|
557
|
+
*/
|
|
349
558
|
multiplyMatrices( a, b ) {
|
|
350
559
|
|
|
351
560
|
const ae = a.elements;
|
|
@@ -386,6 +595,12 @@ class Matrix4 {
|
|
|
386
595
|
|
|
387
596
|
}
|
|
388
597
|
|
|
598
|
+
/**
|
|
599
|
+
* Multiplies every component of the matrix by the given scalar.
|
|
600
|
+
*
|
|
601
|
+
* @param {number} s - The scalar.
|
|
602
|
+
* @return {Matrix4} A reference to this matrix.
|
|
603
|
+
*/
|
|
389
604
|
multiplyScalar( s ) {
|
|
390
605
|
|
|
391
606
|
const te = this.elements;
|
|
@@ -399,6 +614,13 @@ class Matrix4 {
|
|
|
399
614
|
|
|
400
615
|
}
|
|
401
616
|
|
|
617
|
+
/**
|
|
618
|
+
* Computes and returns the determinant of this matrix.
|
|
619
|
+
*
|
|
620
|
+
* Based on the method outlined [here](http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.html).
|
|
621
|
+
*
|
|
622
|
+
* @return {number} The determinant.
|
|
623
|
+
*/
|
|
402
624
|
determinant() {
|
|
403
625
|
|
|
404
626
|
const te = this.elements;
|
|
@@ -408,47 +630,26 @@ class Matrix4 {
|
|
|
408
630
|
const n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];
|
|
409
631
|
const n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];
|
|
410
632
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
return (
|
|
415
|
-
n41 * (
|
|
416
|
-
+ n14 * n23 * n32
|
|
417
|
-
- n13 * n24 * n32
|
|
418
|
-
- n14 * n22 * n33
|
|
419
|
-
+ n12 * n24 * n33
|
|
420
|
-
+ n13 * n22 * n34
|
|
421
|
-
- n12 * n23 * n34
|
|
422
|
-
) +
|
|
423
|
-
n42 * (
|
|
424
|
-
+ n11 * n23 * n34
|
|
425
|
-
- n11 * n24 * n33
|
|
426
|
-
+ n14 * n21 * n33
|
|
427
|
-
- n13 * n21 * n34
|
|
428
|
-
+ n13 * n24 * n31
|
|
429
|
-
- n14 * n23 * n31
|
|
430
|
-
) +
|
|
431
|
-
n43 * (
|
|
432
|
-
+ n11 * n24 * n32
|
|
433
|
-
- n11 * n22 * n34
|
|
434
|
-
- n14 * n21 * n32
|
|
435
|
-
+ n12 * n21 * n34
|
|
436
|
-
+ n14 * n22 * n31
|
|
437
|
-
- n12 * n24 * n31
|
|
438
|
-
) +
|
|
439
|
-
n44 * (
|
|
440
|
-
- n13 * n22 * n31
|
|
441
|
-
- n11 * n23 * n32
|
|
442
|
-
+ n11 * n22 * n33
|
|
443
|
-
+ n13 * n21 * n32
|
|
444
|
-
- n12 * n21 * n33
|
|
445
|
-
+ n12 * n23 * n31
|
|
446
|
-
)
|
|
633
|
+
const t11 = n23 * n34 - n24 * n33;
|
|
634
|
+
const t12 = n22 * n34 - n24 * n32;
|
|
635
|
+
const t13 = n22 * n33 - n23 * n32;
|
|
447
636
|
|
|
448
|
-
|
|
637
|
+
const t21 = n21 * n34 - n24 * n31;
|
|
638
|
+
const t22 = n21 * n33 - n23 * n31;
|
|
639
|
+
const t23 = n21 * n32 - n22 * n31;
|
|
640
|
+
|
|
641
|
+
return n11 * ( n42 * t11 - n43 * t12 + n44 * t13 ) -
|
|
642
|
+
n12 * ( n41 * t11 - n43 * t21 + n44 * t22 ) +
|
|
643
|
+
n13 * ( n41 * t12 - n42 * t21 + n44 * t23 ) -
|
|
644
|
+
n14 * ( n41 * t13 - n42 * t22 + n43 * t23 );
|
|
449
645
|
|
|
450
646
|
}
|
|
451
647
|
|
|
648
|
+
/**
|
|
649
|
+
* Transposes this matrix in place.
|
|
650
|
+
*
|
|
651
|
+
* @return {Matrix4} A reference to this matrix.
|
|
652
|
+
*/
|
|
452
653
|
transpose() {
|
|
453
654
|
|
|
454
655
|
const te = this.elements;
|
|
@@ -466,6 +667,15 @@ class Matrix4 {
|
|
|
466
667
|
|
|
467
668
|
}
|
|
468
669
|
|
|
670
|
+
/**
|
|
671
|
+
* Sets the position component for this matrix from the given vector,
|
|
672
|
+
* without affecting the rest of the matrix.
|
|
673
|
+
*
|
|
674
|
+
* @param {number|Vector3} x - The x component of the vector or alternatively the vector object.
|
|
675
|
+
* @param {number} y - The y component of the vector.
|
|
676
|
+
* @param {number} z - The z component of the vector.
|
|
677
|
+
* @return {Matrix4} A reference to this matrix.
|
|
678
|
+
*/
|
|
469
679
|
setPosition( x, y, z ) {
|
|
470
680
|
|
|
471
681
|
const te = this.elements;
|
|
@@ -488,9 +698,16 @@ class Matrix4 {
|
|
|
488
698
|
|
|
489
699
|
}
|
|
490
700
|
|
|
701
|
+
/**
|
|
702
|
+
* Inverts this matrix, using the [analytic method](https://en.wikipedia.org/wiki/Invertible_matrix#Analytic_solution).
|
|
703
|
+
* You can not invert with a determinant of zero. If you attempt this, the method produces
|
|
704
|
+
* a zero matrix instead.
|
|
705
|
+
*
|
|
706
|
+
* @return {Matrix4} A reference to this matrix.
|
|
707
|
+
*/
|
|
491
708
|
invert() {
|
|
492
709
|
|
|
493
|
-
// based on
|
|
710
|
+
// based on https://github.com/toji/gl-matrix
|
|
494
711
|
const te = this.elements,
|
|
495
712
|
|
|
496
713
|
n11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],
|
|
@@ -498,41 +715,55 @@ class Matrix4 {
|
|
|
498
715
|
n13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],
|
|
499
716
|
n14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],
|
|
500
717
|
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
718
|
+
t1 = n11 * n22 - n21 * n12,
|
|
719
|
+
t2 = n11 * n32 - n31 * n12,
|
|
720
|
+
t3 = n11 * n42 - n41 * n12,
|
|
721
|
+
t4 = n21 * n32 - n31 * n22,
|
|
722
|
+
t5 = n21 * n42 - n41 * n22,
|
|
723
|
+
t6 = n31 * n42 - n41 * n32,
|
|
724
|
+
t7 = n13 * n24 - n23 * n14,
|
|
725
|
+
t8 = n13 * n34 - n33 * n14,
|
|
726
|
+
t9 = n13 * n44 - n43 * n14,
|
|
727
|
+
t10 = n23 * n34 - n33 * n24,
|
|
728
|
+
t11 = n23 * n44 - n43 * n24,
|
|
729
|
+
t12 = n33 * n44 - n43 * n34;
|
|
730
|
+
|
|
731
|
+
const det = t1 * t12 - t2 * t11 + t3 * t10 + t4 * t9 - t5 * t8 + t6 * t7;
|
|
507
732
|
|
|
508
733
|
if ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
|
|
509
734
|
|
|
510
735
|
const detInv = 1 / det;
|
|
511
736
|
|
|
512
|
-
te[ 0 ] = t11 * detInv;
|
|
513
|
-
te[ 1 ] = (
|
|
514
|
-
te[ 2 ] = (
|
|
515
|
-
te[ 3 ] = (
|
|
737
|
+
te[ 0 ] = ( n22 * t12 - n32 * t11 + n42 * t10 ) * detInv;
|
|
738
|
+
te[ 1 ] = ( n31 * t11 - n21 * t12 - n41 * t10 ) * detInv;
|
|
739
|
+
te[ 2 ] = ( n24 * t6 - n34 * t5 + n44 * t4 ) * detInv;
|
|
740
|
+
te[ 3 ] = ( n33 * t5 - n23 * t6 - n43 * t4 ) * detInv;
|
|
516
741
|
|
|
517
|
-
te[ 4 ] = t12 * detInv;
|
|
518
|
-
te[ 5 ] = (
|
|
519
|
-
te[ 6 ] = (
|
|
520
|
-
te[ 7 ] = (
|
|
742
|
+
te[ 4 ] = ( n32 * t9 - n12 * t12 - n42 * t8 ) * detInv;
|
|
743
|
+
te[ 5 ] = ( n11 * t12 - n31 * t9 + n41 * t8 ) * detInv;
|
|
744
|
+
te[ 6 ] = ( n34 * t3 - n14 * t6 - n44 * t2 ) * detInv;
|
|
745
|
+
te[ 7 ] = ( n13 * t6 - n33 * t3 + n43 * t2 ) * detInv;
|
|
521
746
|
|
|
522
|
-
te[ 8 ] =
|
|
523
|
-
te[ 9 ] = (
|
|
524
|
-
te[ 10 ] = (
|
|
525
|
-
te[ 11 ] = (
|
|
747
|
+
te[ 8 ] = ( n12 * t11 - n22 * t9 + n42 * t7 ) * detInv;
|
|
748
|
+
te[ 9 ] = ( n21 * t9 - n11 * t11 - n41 * t7 ) * detInv;
|
|
749
|
+
te[ 10 ] = ( n14 * t5 - n24 * t3 + n44 * t1 ) * detInv;
|
|
750
|
+
te[ 11 ] = ( n23 * t3 - n13 * t5 - n43 * t1 ) * detInv;
|
|
526
751
|
|
|
527
|
-
te[ 12 ] =
|
|
528
|
-
te[ 13 ] = (
|
|
529
|
-
te[ 14 ] = (
|
|
530
|
-
te[ 15 ] = (
|
|
752
|
+
te[ 12 ] = ( n22 * t8 - n12 * t10 - n32 * t7 ) * detInv;
|
|
753
|
+
te[ 13 ] = ( n11 * t10 - n21 * t8 + n31 * t7 ) * detInv;
|
|
754
|
+
te[ 14 ] = ( n24 * t2 - n14 * t4 - n34 * t1 ) * detInv;
|
|
755
|
+
te[ 15 ] = ( n13 * t4 - n23 * t2 + n33 * t1 ) * detInv;
|
|
531
756
|
|
|
532
757
|
return this;
|
|
533
758
|
|
|
534
759
|
}
|
|
535
760
|
|
|
761
|
+
/**
|
|
762
|
+
* Multiplies the columns of this matrix by the given vector.
|
|
763
|
+
*
|
|
764
|
+
* @param {Vector3} v - The scale vector.
|
|
765
|
+
* @return {Matrix4} A reference to this matrix.
|
|
766
|
+
*/
|
|
536
767
|
scale( v ) {
|
|
537
768
|
|
|
538
769
|
const te = this.elements;
|
|
@@ -547,6 +778,11 @@ class Matrix4 {
|
|
|
547
778
|
|
|
548
779
|
}
|
|
549
780
|
|
|
781
|
+
/**
|
|
782
|
+
* Gets the maximum scale value of the three axes.
|
|
783
|
+
*
|
|
784
|
+
* @return {number} The maximum scale.
|
|
785
|
+
*/
|
|
550
786
|
getMaxScaleOnAxis() {
|
|
551
787
|
|
|
552
788
|
const te = this.elements;
|
|
@@ -559,6 +795,14 @@ class Matrix4 {
|
|
|
559
795
|
|
|
560
796
|
}
|
|
561
797
|
|
|
798
|
+
/**
|
|
799
|
+
* Sets this matrix as a translation transform from the given vector.
|
|
800
|
+
*
|
|
801
|
+
* @param {number|Vector3} x - The amount to translate in the X axis or alternatively a translation vector.
|
|
802
|
+
* @param {number} y - The amount to translate in the Y axis.
|
|
803
|
+
* @param {number} z - The amount to translate in the z axis.
|
|
804
|
+
* @return {Matrix4} A reference to this matrix.
|
|
805
|
+
*/
|
|
562
806
|
makeTranslation( x, y, z ) {
|
|
563
807
|
|
|
564
808
|
if ( x.isVector3 ) {
|
|
@@ -589,6 +833,13 @@ class Matrix4 {
|
|
|
589
833
|
|
|
590
834
|
}
|
|
591
835
|
|
|
836
|
+
/**
|
|
837
|
+
* Sets this matrix as a rotational transformation around the X axis by
|
|
838
|
+
* the given angle.
|
|
839
|
+
*
|
|
840
|
+
* @param {number} theta - The rotation in radians.
|
|
841
|
+
* @return {Matrix4} A reference to this matrix.
|
|
842
|
+
*/
|
|
592
843
|
makeRotationX( theta ) {
|
|
593
844
|
|
|
594
845
|
const c = Math.cos( theta ), s = Math.sin( theta );
|
|
@@ -606,6 +857,13 @@ class Matrix4 {
|
|
|
606
857
|
|
|
607
858
|
}
|
|
608
859
|
|
|
860
|
+
/**
|
|
861
|
+
* Sets this matrix as a rotational transformation around the Y axis by
|
|
862
|
+
* the given angle.
|
|
863
|
+
*
|
|
864
|
+
* @param {number} theta - The rotation in radians.
|
|
865
|
+
* @return {Matrix4} A reference to this matrix.
|
|
866
|
+
*/
|
|
609
867
|
makeRotationY( theta ) {
|
|
610
868
|
|
|
611
869
|
const c = Math.cos( theta ), s = Math.sin( theta );
|
|
@@ -623,6 +881,13 @@ class Matrix4 {
|
|
|
623
881
|
|
|
624
882
|
}
|
|
625
883
|
|
|
884
|
+
/**
|
|
885
|
+
* Sets this matrix as a rotational transformation around the Z axis by
|
|
886
|
+
* the given angle.
|
|
887
|
+
*
|
|
888
|
+
* @param {number} theta - The rotation in radians.
|
|
889
|
+
* @return {Matrix4} A reference to this matrix.
|
|
890
|
+
*/
|
|
626
891
|
makeRotationZ( theta ) {
|
|
627
892
|
|
|
628
893
|
const c = Math.cos( theta ), s = Math.sin( theta );
|
|
@@ -640,6 +905,17 @@ class Matrix4 {
|
|
|
640
905
|
|
|
641
906
|
}
|
|
642
907
|
|
|
908
|
+
/**
|
|
909
|
+
* Sets this matrix as a rotational transformation around the given axis by
|
|
910
|
+
* the given angle.
|
|
911
|
+
*
|
|
912
|
+
* This is a somewhat controversial but mathematically sound alternative to
|
|
913
|
+
* rotating via Quaternions. See the discussion [here](https://www.gamedev.net/articles/programming/math-and-physics/do-we-really-need-quaternions-r1199).
|
|
914
|
+
*
|
|
915
|
+
* @param {Vector3} axis - The normalized rotation axis.
|
|
916
|
+
* @param {number} angle - The rotation in radians.
|
|
917
|
+
* @return {Matrix4} A reference to this matrix.
|
|
918
|
+
*/
|
|
643
919
|
makeRotationAxis( axis, angle ) {
|
|
644
920
|
|
|
645
921
|
// Based on http://www.gamedev.net/reference/articles/article1199.asp
|
|
@@ -663,6 +939,14 @@ class Matrix4 {
|
|
|
663
939
|
|
|
664
940
|
}
|
|
665
941
|
|
|
942
|
+
/**
|
|
943
|
+
* Sets this matrix as a scale transformation.
|
|
944
|
+
*
|
|
945
|
+
* @param {number} x - The amount to scale in the X axis.
|
|
946
|
+
* @param {number} y - The amount to scale in the Y axis.
|
|
947
|
+
* @param {number} z - The amount to scale in the Z axis.
|
|
948
|
+
* @return {Matrix4} A reference to this matrix.
|
|
949
|
+
*/
|
|
666
950
|
makeScale( x, y, z ) {
|
|
667
951
|
|
|
668
952
|
this.set(
|
|
@@ -678,6 +962,17 @@ class Matrix4 {
|
|
|
678
962
|
|
|
679
963
|
}
|
|
680
964
|
|
|
965
|
+
/**
|
|
966
|
+
* Sets this matrix as a shear transformation.
|
|
967
|
+
*
|
|
968
|
+
* @param {number} xy - The amount to shear X by Y.
|
|
969
|
+
* @param {number} xz - The amount to shear X by Z.
|
|
970
|
+
* @param {number} yx - The amount to shear Y by X.
|
|
971
|
+
* @param {number} yz - The amount to shear Y by Z.
|
|
972
|
+
* @param {number} zx - The amount to shear Z by X.
|
|
973
|
+
* @param {number} zy - The amount to shear Z by Y.
|
|
974
|
+
* @return {Matrix4} A reference to this matrix.
|
|
975
|
+
*/
|
|
681
976
|
makeShear( xy, xz, yx, yz, zx, zy ) {
|
|
682
977
|
|
|
683
978
|
this.set(
|
|
@@ -693,6 +988,15 @@ class Matrix4 {
|
|
|
693
988
|
|
|
694
989
|
}
|
|
695
990
|
|
|
991
|
+
/**
|
|
992
|
+
* Sets this matrix to the transformation composed of the given position,
|
|
993
|
+
* rotation (Quaternion) and scale.
|
|
994
|
+
*
|
|
995
|
+
* @param {Vector3} position - The position vector.
|
|
996
|
+
* @param {Quaternion} quaternion - The rotation as a Quaternion.
|
|
997
|
+
* @param {Vector3} scale - The scale vector.
|
|
998
|
+
* @return {Matrix4} A reference to this matrix.
|
|
999
|
+
*/
|
|
696
1000
|
compose( position, quaternion, scale ) {
|
|
697
1001
|
|
|
698
1002
|
const te = this.elements;
|
|
@@ -729,22 +1033,45 @@ class Matrix4 {
|
|
|
729
1033
|
|
|
730
1034
|
}
|
|
731
1035
|
|
|
1036
|
+
/**
|
|
1037
|
+
* Decomposes this matrix into its position, rotation and scale components
|
|
1038
|
+
* and provides the result in the given objects.
|
|
1039
|
+
*
|
|
1040
|
+
* Note: Not all matrices are decomposable in this way. For example, if an
|
|
1041
|
+
* object has a non-uniformly scaled parent, then the object's world matrix
|
|
1042
|
+
* may not be decomposable, and this method may not be appropriate.
|
|
1043
|
+
*
|
|
1044
|
+
* @param {Vector3} position - The position vector.
|
|
1045
|
+
* @param {Quaternion} quaternion - The rotation as a Quaternion.
|
|
1046
|
+
* @param {Vector3} scale - The scale vector.
|
|
1047
|
+
* @return {Matrix4} A reference to this matrix.
|
|
1048
|
+
*/
|
|
732
1049
|
decompose( position, quaternion, scale ) {
|
|
733
1050
|
|
|
734
1051
|
const te = this.elements;
|
|
735
1052
|
|
|
1053
|
+
position.x = te[ 12 ];
|
|
1054
|
+
position.y = te[ 13 ];
|
|
1055
|
+
position.z = te[ 14 ];
|
|
1056
|
+
|
|
1057
|
+
const det = this.determinant();
|
|
1058
|
+
|
|
1059
|
+
if ( det === 0 ) {
|
|
1060
|
+
|
|
1061
|
+
scale.set( 1, 1, 1 );
|
|
1062
|
+
quaternion.identity();
|
|
1063
|
+
|
|
1064
|
+
return this;
|
|
1065
|
+
|
|
1066
|
+
}
|
|
1067
|
+
|
|
736
1068
|
let sx = _v1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();
|
|
737
1069
|
const sy = _v1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();
|
|
738
1070
|
const sz = _v1.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();
|
|
739
1071
|
|
|
740
|
-
// if
|
|
741
|
-
const det = this.determinant();
|
|
1072
|
+
// if determinant is negative, we need to invert one scale
|
|
742
1073
|
if ( det < 0 ) sx = - sx;
|
|
743
1074
|
|
|
744
|
-
position.x = te[ 12 ];
|
|
745
|
-
position.y = te[ 13 ];
|
|
746
|
-
position.z = te[ 14 ];
|
|
747
|
-
|
|
748
1075
|
// scale the rotation part
|
|
749
1076
|
_m1.copy( this );
|
|
750
1077
|
|
|
@@ -774,9 +1101,24 @@ class Matrix4 {
|
|
|
774
1101
|
|
|
775
1102
|
}
|
|
776
1103
|
|
|
777
|
-
|
|
1104
|
+
/**
|
|
1105
|
+
* Creates a perspective projection matrix. This is used internally by
|
|
1106
|
+
* {@link PerspectiveCamera#updateProjectionMatrix}.
|
|
1107
|
+
|
|
1108
|
+
* @param {number} left - Left boundary of the viewing frustum at the near plane.
|
|
1109
|
+
* @param {number} right - Right boundary of the viewing frustum at the near plane.
|
|
1110
|
+
* @param {number} top - Top boundary of the viewing frustum at the near plane.
|
|
1111
|
+
* @param {number} bottom - Bottom boundary of the viewing frustum at the near plane.
|
|
1112
|
+
* @param {number} near - The distance from the camera to the near plane.
|
|
1113
|
+
* @param {number} far - The distance from the camera to the far plane.
|
|
1114
|
+
* @param {(WebGLCoordinateSystem|WebGPUCoordinateSystem)} [coordinateSystem=WebGLCoordinateSystem] - The coordinate system.
|
|
1115
|
+
* @param {boolean} [reversedDepth=false] - Whether to use a reversed depth.
|
|
1116
|
+
* @return {Matrix4} A reference to this matrix.
|
|
1117
|
+
*/
|
|
1118
|
+
makePerspective( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem, reversedDepth = false ) {
|
|
778
1119
|
|
|
779
1120
|
const te = this.elements;
|
|
1121
|
+
|
|
780
1122
|
const x = 2 * near / ( right - left );
|
|
781
1123
|
const y = 2 * near / ( top - bottom );
|
|
782
1124
|
|
|
@@ -785,19 +1127,28 @@ class Matrix4 {
|
|
|
785
1127
|
|
|
786
1128
|
let c, d;
|
|
787
1129
|
|
|
788
|
-
if (
|
|
1130
|
+
if ( reversedDepth ) {
|
|
1131
|
+
|
|
1132
|
+
c = near / ( far - near );
|
|
1133
|
+
d = ( far * near ) / ( far - near );
|
|
789
1134
|
|
|
790
|
-
|
|
791
|
-
d = ( - 2 * far * near ) / ( far - near );
|
|
1135
|
+
} else {
|
|
792
1136
|
|
|
793
|
-
|
|
1137
|
+
if ( coordinateSystem === WebGLCoordinateSystem ) {
|
|
794
1138
|
|
|
795
|
-
|
|
796
|
-
|
|
1139
|
+
c = - ( far + near ) / ( far - near );
|
|
1140
|
+
d = ( - 2 * far * near ) / ( far - near );
|
|
797
1141
|
|
|
798
|
-
|
|
1142
|
+
} else if ( coordinateSystem === WebGPUCoordinateSystem ) {
|
|
1143
|
+
|
|
1144
|
+
c = - far / ( far - near );
|
|
1145
|
+
d = ( - far * near ) / ( far - near );
|
|
799
1146
|
|
|
800
|
-
|
|
1147
|
+
} else {
|
|
1148
|
+
|
|
1149
|
+
throw new Error( 'THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem );
|
|
1150
|
+
|
|
1151
|
+
}
|
|
801
1152
|
|
|
802
1153
|
}
|
|
803
1154
|
|
|
@@ -810,43 +1161,72 @@ class Matrix4 {
|
|
|
810
1161
|
|
|
811
1162
|
}
|
|
812
1163
|
|
|
813
|
-
|
|
1164
|
+
/**
|
|
1165
|
+
* Creates a orthographic projection matrix. This is used internally by
|
|
1166
|
+
* {@link OrthographicCamera#updateProjectionMatrix}.
|
|
1167
|
+
|
|
1168
|
+
* @param {number} left - Left boundary of the viewing frustum at the near plane.
|
|
1169
|
+
* @param {number} right - Right boundary of the viewing frustum at the near plane.
|
|
1170
|
+
* @param {number} top - Top boundary of the viewing frustum at the near plane.
|
|
1171
|
+
* @param {number} bottom - Bottom boundary of the viewing frustum at the near plane.
|
|
1172
|
+
* @param {number} near - The distance from the camera to the near plane.
|
|
1173
|
+
* @param {number} far - The distance from the camera to the far plane.
|
|
1174
|
+
* @param {(WebGLCoordinateSystem|WebGPUCoordinateSystem)} [coordinateSystem=WebGLCoordinateSystem] - The coordinate system.
|
|
1175
|
+
* @param {boolean} [reversedDepth=false] - Whether to use a reversed depth.
|
|
1176
|
+
* @return {Matrix4} A reference to this matrix.
|
|
1177
|
+
*/
|
|
1178
|
+
makeOrthographic( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem, reversedDepth = false ) {
|
|
814
1179
|
|
|
815
1180
|
const te = this.elements;
|
|
816
|
-
const w = 1.0 / ( right - left );
|
|
817
|
-
const h = 1.0 / ( top - bottom );
|
|
818
|
-
const p = 1.0 / ( far - near );
|
|
819
|
-
|
|
820
|
-
const x = ( right + left ) * w;
|
|
821
|
-
const y = ( top + bottom ) * h;
|
|
822
1181
|
|
|
823
|
-
|
|
1182
|
+
const x = 2 / ( right - left );
|
|
1183
|
+
const y = 2 / ( top - bottom );
|
|
824
1184
|
|
|
825
|
-
|
|
1185
|
+
const a = - ( right + left ) / ( right - left );
|
|
1186
|
+
const b = - ( top + bottom ) / ( top - bottom );
|
|
826
1187
|
|
|
827
|
-
|
|
828
|
-
zInv = - 2 * p;
|
|
1188
|
+
let c, d;
|
|
829
1189
|
|
|
830
|
-
|
|
1190
|
+
if ( reversedDepth ) {
|
|
831
1191
|
|
|
832
|
-
|
|
833
|
-
|
|
1192
|
+
c = 1 / ( far - near );
|
|
1193
|
+
d = far / ( far - near );
|
|
834
1194
|
|
|
835
1195
|
} else {
|
|
836
1196
|
|
|
837
|
-
|
|
1197
|
+
if ( coordinateSystem === WebGLCoordinateSystem ) {
|
|
1198
|
+
|
|
1199
|
+
c = - 2 / ( far - near );
|
|
1200
|
+
d = - ( far + near ) / ( far - near );
|
|
1201
|
+
|
|
1202
|
+
} else if ( coordinateSystem === WebGPUCoordinateSystem ) {
|
|
1203
|
+
|
|
1204
|
+
c = - 1 / ( far - near );
|
|
1205
|
+
d = - near / ( far - near );
|
|
1206
|
+
|
|
1207
|
+
} else {
|
|
1208
|
+
|
|
1209
|
+
throw new Error( 'THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem );
|
|
1210
|
+
|
|
1211
|
+
}
|
|
838
1212
|
|
|
839
1213
|
}
|
|
840
1214
|
|
|
841
|
-
te[ 0 ] =
|
|
842
|
-
te[ 1 ] = 0; te[ 5 ] =
|
|
843
|
-
te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] =
|
|
1215
|
+
te[ 0 ] = x; te[ 4 ] = 0; te[ 8 ] = 0; te[ 12 ] = a;
|
|
1216
|
+
te[ 1 ] = 0; te[ 5 ] = y; te[ 9 ] = 0; te[ 13 ] = b;
|
|
1217
|
+
te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = c; te[ 14 ] = d;
|
|
844
1218
|
te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = 0; te[ 15 ] = 1;
|
|
845
1219
|
|
|
846
1220
|
return this;
|
|
847
1221
|
|
|
848
1222
|
}
|
|
849
1223
|
|
|
1224
|
+
/**
|
|
1225
|
+
* Returns `true` if this matrix is equal with the given one.
|
|
1226
|
+
*
|
|
1227
|
+
* @param {Matrix4} matrix - The matrix to test for equality.
|
|
1228
|
+
* @return {boolean} Whether this matrix is equal with the given one.
|
|
1229
|
+
*/
|
|
850
1230
|
equals( matrix ) {
|
|
851
1231
|
|
|
852
1232
|
const te = this.elements;
|
|
@@ -862,6 +1242,13 @@ class Matrix4 {
|
|
|
862
1242
|
|
|
863
1243
|
}
|
|
864
1244
|
|
|
1245
|
+
/**
|
|
1246
|
+
* Sets the elements of the matrix from the given array.
|
|
1247
|
+
*
|
|
1248
|
+
* @param {Array<number>} array - The matrix elements in column-major order.
|
|
1249
|
+
* @param {number} [offset=0] - Index of the first element in the array.
|
|
1250
|
+
* @return {Matrix4} A reference to this matrix.
|
|
1251
|
+
*/
|
|
865
1252
|
fromArray( array, offset = 0 ) {
|
|
866
1253
|
|
|
867
1254
|
for ( let i = 0; i < 16; i ++ ) {
|
|
@@ -874,6 +1261,14 @@ class Matrix4 {
|
|
|
874
1261
|
|
|
875
1262
|
}
|
|
876
1263
|
|
|
1264
|
+
/**
|
|
1265
|
+
* Writes the elements of this matrix to the given array. If no array is provided,
|
|
1266
|
+
* the method returns a new instance.
|
|
1267
|
+
*
|
|
1268
|
+
* @param {Array<number>} [array=[]] - The target array holding the matrix elements in column-major order.
|
|
1269
|
+
* @param {number} [offset=0] - Index of the first element in the array.
|
|
1270
|
+
* @return {Array<number>} The matrix elements in column-major order.
|
|
1271
|
+
*/
|
|
877
1272
|
toArray( array = [], offset = 0 ) {
|
|
878
1273
|
|
|
879
1274
|
const te = this.elements;
|