@plastic-software/three 0.167.4 → 0.174.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +36217 -23964
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46744
- package/build/three.module.min.js +2 -3
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50671
- package/build/three.webgpu.min.js +2 -3
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
package/src/math/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]{@link 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]{@link 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,6 +224,14 @@ 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
|
|
|
106
237
|
xAxis.setFromMatrixColumn( this, 0 );
|
|
@@ -111,6 +242,14 @@ class Matrix4 {
|
|
|
111
242
|
|
|
112
243
|
}
|
|
113
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Sets the given basis vectors to this matrix.
|
|
247
|
+
*
|
|
248
|
+
* @param {Vector3} xAxis - The basis's x axis.
|
|
249
|
+
* @param {Vector3} yAxis - The basis's y axis.
|
|
250
|
+
* @param {Vector3} zAxis - The basis's z axis.
|
|
251
|
+
* @return {Matrix4} A reference to this matrix.
|
|
252
|
+
*/
|
|
114
253
|
makeBasis( xAxis, yAxis, zAxis ) {
|
|
115
254
|
|
|
116
255
|
this.set(
|
|
@@ -124,10 +263,17 @@ class Matrix4 {
|
|
|
124
263
|
|
|
125
264
|
}
|
|
126
265
|
|
|
266
|
+
/**
|
|
267
|
+
* Extracts the rotation component of the given matrix
|
|
268
|
+
* into this matrix's rotation component.
|
|
269
|
+
*
|
|
270
|
+
* Note: This method does not support reflection matrices.
|
|
271
|
+
*
|
|
272
|
+
* @param {Matrix4} m - The matrix.
|
|
273
|
+
* @return {Matrix4} A reference to this matrix.
|
|
274
|
+
*/
|
|
127
275
|
extractRotation( m ) {
|
|
128
276
|
|
|
129
|
-
// this method does not support reflection matrices
|
|
130
|
-
|
|
131
277
|
const te = this.elements;
|
|
132
278
|
const me = m.elements;
|
|
133
279
|
|
|
@@ -159,6 +305,16 @@ class Matrix4 {
|
|
|
159
305
|
|
|
160
306
|
}
|
|
161
307
|
|
|
308
|
+
/**
|
|
309
|
+
* Sets the rotation component (the upper left 3x3 matrix) of this matrix to
|
|
310
|
+
* the rotation specified by the given Euler angles. The rest of
|
|
311
|
+
* the matrix is set to the identity. Depending on the {@link Euler#order},
|
|
312
|
+
* there are six possible outcomes. See [this page]{@link https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix}
|
|
313
|
+
* for a complete list.
|
|
314
|
+
*
|
|
315
|
+
* @param {Euler} euler - The Euler angles.
|
|
316
|
+
* @return {Matrix4} A reference to this matrix.
|
|
317
|
+
*/
|
|
162
318
|
makeRotationFromEuler( euler ) {
|
|
163
319
|
|
|
164
320
|
const te = this.elements;
|
|
@@ -281,12 +437,29 @@ class Matrix4 {
|
|
|
281
437
|
|
|
282
438
|
}
|
|
283
439
|
|
|
440
|
+
/**
|
|
441
|
+
* Sets the rotation component of this matrix to the rotation specified by
|
|
442
|
+
* the given Quaternion as outlined [here]{@link https://en.wikipedia.org/wiki/Rotation_matrix#Quaternion}
|
|
443
|
+
* The rest of the matrix is set to the identity.
|
|
444
|
+
*
|
|
445
|
+
* @param {Quaternion} q - The Quaternion.
|
|
446
|
+
* @return {Matrix4} A reference to this matrix.
|
|
447
|
+
*/
|
|
284
448
|
makeRotationFromQuaternion( q ) {
|
|
285
449
|
|
|
286
450
|
return this.compose( _zero, q, _one );
|
|
287
451
|
|
|
288
452
|
}
|
|
289
453
|
|
|
454
|
+
/**
|
|
455
|
+
* Sets the rotation component of the transformation matrix, looking from `eye` towards
|
|
456
|
+
* `target`, and oriented by the up-direction.
|
|
457
|
+
*
|
|
458
|
+
* @param {Vector3} eye - The eye vector.
|
|
459
|
+
* @param {Vector3} target - The target vector.
|
|
460
|
+
* @param {Vector3} up - The up vector.
|
|
461
|
+
* @return {Matrix4} A reference to this matrix.
|
|
462
|
+
*/
|
|
290
463
|
lookAt( eye, target, up ) {
|
|
291
464
|
|
|
292
465
|
const te = this.elements;
|
|
@@ -334,18 +507,38 @@ class Matrix4 {
|
|
|
334
507
|
|
|
335
508
|
}
|
|
336
509
|
|
|
510
|
+
/**
|
|
511
|
+
* Post-multiplies this matrix by the given 4x4 matrix.
|
|
512
|
+
*
|
|
513
|
+
* @param {Matrix4} m - The matrix to multiply with.
|
|
514
|
+
* @return {Matrix4} A reference to this matrix.
|
|
515
|
+
*/
|
|
337
516
|
multiply( m ) {
|
|
338
517
|
|
|
339
518
|
return this.multiplyMatrices( this, m );
|
|
340
519
|
|
|
341
520
|
}
|
|
342
521
|
|
|
522
|
+
/**
|
|
523
|
+
* Pre-multiplies this matrix by the given 4x4 matrix.
|
|
524
|
+
*
|
|
525
|
+
* @param {Matrix4} m - The matrix to multiply with.
|
|
526
|
+
* @return {Matrix4} A reference to this matrix.
|
|
527
|
+
*/
|
|
343
528
|
premultiply( m ) {
|
|
344
529
|
|
|
345
530
|
return this.multiplyMatrices( m, this );
|
|
346
531
|
|
|
347
532
|
}
|
|
348
533
|
|
|
534
|
+
/**
|
|
535
|
+
* Multiples the given 4x4 matrices and stores the result
|
|
536
|
+
* in this matrix.
|
|
537
|
+
*
|
|
538
|
+
* @param {Matrix4} a - The first matrix.
|
|
539
|
+
* @param {Matrix4} b - The second matrix.
|
|
540
|
+
* @return {Matrix4} A reference to this matrix.
|
|
541
|
+
*/
|
|
349
542
|
multiplyMatrices( a, b ) {
|
|
350
543
|
|
|
351
544
|
const ae = a.elements;
|
|
@@ -386,6 +579,12 @@ class Matrix4 {
|
|
|
386
579
|
|
|
387
580
|
}
|
|
388
581
|
|
|
582
|
+
/**
|
|
583
|
+
* Multiplies every component of the matrix by the given scalar.
|
|
584
|
+
*
|
|
585
|
+
* @param {number} s - The scalar.
|
|
586
|
+
* @return {Matrix4} A reference to this matrix.
|
|
587
|
+
*/
|
|
389
588
|
multiplyScalar( s ) {
|
|
390
589
|
|
|
391
590
|
const te = this.elements;
|
|
@@ -399,6 +598,13 @@ class Matrix4 {
|
|
|
399
598
|
|
|
400
599
|
}
|
|
401
600
|
|
|
601
|
+
/**
|
|
602
|
+
* Computes and returns the determinant of this matrix.
|
|
603
|
+
*
|
|
604
|
+
* Based on the method outlined [here]{@link http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.html}.
|
|
605
|
+
*
|
|
606
|
+
* @return {number} The determinant.
|
|
607
|
+
*/
|
|
402
608
|
determinant() {
|
|
403
609
|
|
|
404
610
|
const te = this.elements;
|
|
@@ -409,7 +615,6 @@ class Matrix4 {
|
|
|
409
615
|
const n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];
|
|
410
616
|
|
|
411
617
|
//TODO: make this more efficient
|
|
412
|
-
//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )
|
|
413
618
|
|
|
414
619
|
return (
|
|
415
620
|
n41 * (
|
|
@@ -449,6 +654,11 @@ class Matrix4 {
|
|
|
449
654
|
|
|
450
655
|
}
|
|
451
656
|
|
|
657
|
+
/**
|
|
658
|
+
* Transposes this matrix in place.
|
|
659
|
+
*
|
|
660
|
+
* @return {Matrix4} A reference to this matrix.
|
|
661
|
+
*/
|
|
452
662
|
transpose() {
|
|
453
663
|
|
|
454
664
|
const te = this.elements;
|
|
@@ -466,6 +676,15 @@ class Matrix4 {
|
|
|
466
676
|
|
|
467
677
|
}
|
|
468
678
|
|
|
679
|
+
/**
|
|
680
|
+
* Sets the position component for this matrix from the given vector,
|
|
681
|
+
* without affecting the rest of the matrix.
|
|
682
|
+
*
|
|
683
|
+
* @param {number|Vector3} x - The x component of the vector or alternatively the vector object.
|
|
684
|
+
* @param {number} y - The y component of the vector.
|
|
685
|
+
* @param {number} z - The z component of the vector.
|
|
686
|
+
* @return {Matrix4} A reference to this matrix.
|
|
687
|
+
*/
|
|
469
688
|
setPosition( x, y, z ) {
|
|
470
689
|
|
|
471
690
|
const te = this.elements;
|
|
@@ -488,6 +707,13 @@ class Matrix4 {
|
|
|
488
707
|
|
|
489
708
|
}
|
|
490
709
|
|
|
710
|
+
/**
|
|
711
|
+
* Inverts this matrix, using the [analytic method]{@link https://en.wikipedia.org/wiki/Invertible_matrix#Analytic_solution}.
|
|
712
|
+
* You can not invert with a determinant of zero. If you attempt this, the method produces
|
|
713
|
+
* a zero matrix instead.
|
|
714
|
+
*
|
|
715
|
+
* @return {Matrix4} A reference to this matrix.
|
|
716
|
+
*/
|
|
491
717
|
invert() {
|
|
492
718
|
|
|
493
719
|
// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
|
|
@@ -533,6 +759,12 @@ class Matrix4 {
|
|
|
533
759
|
|
|
534
760
|
}
|
|
535
761
|
|
|
762
|
+
/**
|
|
763
|
+
* Multiplies the columns of this matrix by the given vector.
|
|
764
|
+
*
|
|
765
|
+
* @param {Vector3} v - The scale vector.
|
|
766
|
+
* @return {Matrix4} A reference to this matrix.
|
|
767
|
+
*/
|
|
536
768
|
scale( v ) {
|
|
537
769
|
|
|
538
770
|
const te = this.elements;
|
|
@@ -547,6 +779,11 @@ class Matrix4 {
|
|
|
547
779
|
|
|
548
780
|
}
|
|
549
781
|
|
|
782
|
+
/**
|
|
783
|
+
* Gets the maximum scale value of the three axes.
|
|
784
|
+
*
|
|
785
|
+
* @return {number} The maximum scale.
|
|
786
|
+
*/
|
|
550
787
|
getMaxScaleOnAxis() {
|
|
551
788
|
|
|
552
789
|
const te = this.elements;
|
|
@@ -559,6 +796,14 @@ class Matrix4 {
|
|
|
559
796
|
|
|
560
797
|
}
|
|
561
798
|
|
|
799
|
+
/**
|
|
800
|
+
* Sets this matrix as a translation transform from the given vector.
|
|
801
|
+
*
|
|
802
|
+
* @param {number|Vector3} x - The amount to translate in the X axis or alternatively a translation vector.
|
|
803
|
+
* @param {number} y - The amount to translate in the Y axis.
|
|
804
|
+
* @param {number} z - The amount to translate in the z axis.
|
|
805
|
+
* @return {Matrix4} A reference to this matrix.
|
|
806
|
+
*/
|
|
562
807
|
makeTranslation( x, y, z ) {
|
|
563
808
|
|
|
564
809
|
if ( x.isVector3 ) {
|
|
@@ -589,6 +834,13 @@ class Matrix4 {
|
|
|
589
834
|
|
|
590
835
|
}
|
|
591
836
|
|
|
837
|
+
/**
|
|
838
|
+
* Sets this matrix as a rotational transformation around the X axis by
|
|
839
|
+
* the given angle.
|
|
840
|
+
*
|
|
841
|
+
* @param {number} theta - The rotation in radians.
|
|
842
|
+
* @return {Matrix4} A reference to this matrix.
|
|
843
|
+
*/
|
|
592
844
|
makeRotationX( theta ) {
|
|
593
845
|
|
|
594
846
|
const c = Math.cos( theta ), s = Math.sin( theta );
|
|
@@ -606,6 +858,13 @@ class Matrix4 {
|
|
|
606
858
|
|
|
607
859
|
}
|
|
608
860
|
|
|
861
|
+
/**
|
|
862
|
+
* Sets this matrix as a rotational transformation around the Y axis by
|
|
863
|
+
* the given angle.
|
|
864
|
+
*
|
|
865
|
+
* @param {number} theta - The rotation in radians.
|
|
866
|
+
* @return {Matrix4} A reference to this matrix.
|
|
867
|
+
*/
|
|
609
868
|
makeRotationY( theta ) {
|
|
610
869
|
|
|
611
870
|
const c = Math.cos( theta ), s = Math.sin( theta );
|
|
@@ -623,6 +882,13 @@ class Matrix4 {
|
|
|
623
882
|
|
|
624
883
|
}
|
|
625
884
|
|
|
885
|
+
/**
|
|
886
|
+
* Sets this matrix as a rotational transformation around the Z axis by
|
|
887
|
+
* the given angle.
|
|
888
|
+
*
|
|
889
|
+
* @param {number} theta - The rotation in radians.
|
|
890
|
+
* @return {Matrix4} A reference to this matrix.
|
|
891
|
+
*/
|
|
626
892
|
makeRotationZ( theta ) {
|
|
627
893
|
|
|
628
894
|
const c = Math.cos( theta ), s = Math.sin( theta );
|
|
@@ -640,6 +906,17 @@ class Matrix4 {
|
|
|
640
906
|
|
|
641
907
|
}
|
|
642
908
|
|
|
909
|
+
/**
|
|
910
|
+
* Sets this matrix as a rotational transformation around the given axis by
|
|
911
|
+
* the given angle.
|
|
912
|
+
*
|
|
913
|
+
* This is a somewhat controversial but mathematically sound alternative to
|
|
914
|
+
* rotating via Quaternions. See the discussion [here]{@link https://www.gamedev.net/articles/programming/math-and-physics/do-we-really-need-quaternions-r1199}.
|
|
915
|
+
*
|
|
916
|
+
* @param {Vector3} axis - The normalized rotation axis.
|
|
917
|
+
* @param {number} angle - The rotation in radians.
|
|
918
|
+
* @return {Matrix4} A reference to this matrix.
|
|
919
|
+
*/
|
|
643
920
|
makeRotationAxis( axis, angle ) {
|
|
644
921
|
|
|
645
922
|
// Based on http://www.gamedev.net/reference/articles/article1199.asp
|
|
@@ -663,6 +940,14 @@ class Matrix4 {
|
|
|
663
940
|
|
|
664
941
|
}
|
|
665
942
|
|
|
943
|
+
/**
|
|
944
|
+
* Sets this matrix as a scale transformation.
|
|
945
|
+
*
|
|
946
|
+
* @param {number} x - The amount to scale in the X axis.
|
|
947
|
+
* @param {number} y - The amount to scale in the Y axis.
|
|
948
|
+
* @param {number} z - The amount to scale in the Z axis.
|
|
949
|
+
* @return {Matrix4} A reference to this matrix.
|
|
950
|
+
*/
|
|
666
951
|
makeScale( x, y, z ) {
|
|
667
952
|
|
|
668
953
|
this.set(
|
|
@@ -678,6 +963,17 @@ class Matrix4 {
|
|
|
678
963
|
|
|
679
964
|
}
|
|
680
965
|
|
|
966
|
+
/**
|
|
967
|
+
* Sets this matrix as a shear transformation.
|
|
968
|
+
*
|
|
969
|
+
* @param {number} xy - The amount to shear X by Y.
|
|
970
|
+
* @param {number} xz - The amount to shear X by Z.
|
|
971
|
+
* @param {number} yx - The amount to shear Y by X.
|
|
972
|
+
* @param {number} yz - The amount to shear Y by Z.
|
|
973
|
+
* @param {number} zx - The amount to shear Z by X.
|
|
974
|
+
* @param {number} zy - The amount to shear Z by Y.
|
|
975
|
+
* @return {Matrix4} A reference to this matrix.
|
|
976
|
+
*/
|
|
681
977
|
makeShear( xy, xz, yx, yz, zx, zy ) {
|
|
682
978
|
|
|
683
979
|
this.set(
|
|
@@ -693,6 +989,15 @@ class Matrix4 {
|
|
|
693
989
|
|
|
694
990
|
}
|
|
695
991
|
|
|
992
|
+
/**
|
|
993
|
+
* Sets this matrix to the transformation composed of the given position,
|
|
994
|
+
* rotation (Quaternion) and scale.
|
|
995
|
+
*
|
|
996
|
+
* @param {Vector3} position - The position vector.
|
|
997
|
+
* @param {Quaternion} quaternion - The rotation as a Quaternion.
|
|
998
|
+
* @param {Vector3} scale - The scale vector.
|
|
999
|
+
* @return {Matrix4} A reference to this matrix.
|
|
1000
|
+
*/
|
|
696
1001
|
compose( position, quaternion, scale ) {
|
|
697
1002
|
|
|
698
1003
|
const te = this.elements;
|
|
@@ -729,6 +1034,19 @@ class Matrix4 {
|
|
|
729
1034
|
|
|
730
1035
|
}
|
|
731
1036
|
|
|
1037
|
+
/**
|
|
1038
|
+
* Decomposes this matrix into its position, rotation and scale components
|
|
1039
|
+
* and provides the result in the given objects.
|
|
1040
|
+
*
|
|
1041
|
+
* Note: Not all matrices are decomposable in this way. For example, if an
|
|
1042
|
+
* object has a non-uniformly scaled parent, then the object's world matrix
|
|
1043
|
+
* may not be decomposable, and this method may not be appropriate.
|
|
1044
|
+
*
|
|
1045
|
+
* @param {Vector3} position - The position vector.
|
|
1046
|
+
* @param {Quaternion} quaternion - The rotation as a Quaternion.
|
|
1047
|
+
* @param {Vector3} scale - The scale vector.
|
|
1048
|
+
* @return {Matrix4} A reference to this matrix.
|
|
1049
|
+
*/
|
|
732
1050
|
decompose( position, quaternion, scale ) {
|
|
733
1051
|
|
|
734
1052
|
const te = this.elements;
|
|
@@ -774,6 +1092,19 @@ class Matrix4 {
|
|
|
774
1092
|
|
|
775
1093
|
}
|
|
776
1094
|
|
|
1095
|
+
/**
|
|
1096
|
+
* Creates a perspective projection matrix. This is used internally by
|
|
1097
|
+
* {@link PerspectiveCamera#updateProjectionMatrix}.
|
|
1098
|
+
|
|
1099
|
+
* @param {number} left - Left boundary of the viewing frustum at the near plane.
|
|
1100
|
+
* @param {number} right - Right boundary of the viewing frustum at the near plane.
|
|
1101
|
+
* @param {number} top - Top boundary of the viewing frustum at the near plane.
|
|
1102
|
+
* @param {number} bottom - Bottom boundary of the viewing frustum at the near plane.
|
|
1103
|
+
* @param {number} near - The distance from the camera to the near plane.
|
|
1104
|
+
* @param {number} far - The distance from the camera to the far plane.
|
|
1105
|
+
* @param {(WebGLCoordinateSystem|WebGPUCoordinateSystem)} [coordinateSystem=WebGLCoordinateSystem] - The coordinate system.
|
|
1106
|
+
* @return {Matrix4} A reference to this matrix.
|
|
1107
|
+
*/
|
|
777
1108
|
makePerspective( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {
|
|
778
1109
|
|
|
779
1110
|
const te = this.elements;
|
|
@@ -810,6 +1141,19 @@ class Matrix4 {
|
|
|
810
1141
|
|
|
811
1142
|
}
|
|
812
1143
|
|
|
1144
|
+
/**
|
|
1145
|
+
* Creates a orthographic projection matrix. This is used internally by
|
|
1146
|
+
* {@link OrthographicCamera#updateProjectionMatrix}.
|
|
1147
|
+
|
|
1148
|
+
* @param {number} left - Left boundary of the viewing frustum at the near plane.
|
|
1149
|
+
* @param {number} right - Right boundary of the viewing frustum at the near plane.
|
|
1150
|
+
* @param {number} top - Top boundary of the viewing frustum at the near plane.
|
|
1151
|
+
* @param {number} bottom - Bottom boundary of the viewing frustum at the near plane.
|
|
1152
|
+
* @param {number} near - The distance from the camera to the near plane.
|
|
1153
|
+
* @param {number} far - The distance from the camera to the far plane.
|
|
1154
|
+
* @param {(WebGLCoordinateSystem|WebGPUCoordinateSystem)} [coordinateSystem=WebGLCoordinateSystem] - The coordinate system.
|
|
1155
|
+
* @return {Matrix4} A reference to this matrix.
|
|
1156
|
+
*/
|
|
813
1157
|
makeOrthographic( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {
|
|
814
1158
|
|
|
815
1159
|
const te = this.elements;
|
|
@@ -847,6 +1191,12 @@ class Matrix4 {
|
|
|
847
1191
|
|
|
848
1192
|
}
|
|
849
1193
|
|
|
1194
|
+
/**
|
|
1195
|
+
* Returns `true` if this matrix is equal with the given one.
|
|
1196
|
+
*
|
|
1197
|
+
* @param {Matrix4} matrix - The matrix to test for equality.
|
|
1198
|
+
* @return {boolean} Whether this matrix is equal with the given one.
|
|
1199
|
+
*/
|
|
850
1200
|
equals( matrix ) {
|
|
851
1201
|
|
|
852
1202
|
const te = this.elements;
|
|
@@ -862,6 +1212,13 @@ class Matrix4 {
|
|
|
862
1212
|
|
|
863
1213
|
}
|
|
864
1214
|
|
|
1215
|
+
/**
|
|
1216
|
+
* Sets the elements of the matrix from the given array.
|
|
1217
|
+
*
|
|
1218
|
+
* @param {Array<number>} array - The matrix elements in column-major order.
|
|
1219
|
+
* @param {number} [offset=0] - Index of the first element in the array.
|
|
1220
|
+
* @return {Matrix4} A reference to this matrix.
|
|
1221
|
+
*/
|
|
865
1222
|
fromArray( array, offset = 0 ) {
|
|
866
1223
|
|
|
867
1224
|
for ( let i = 0; i < 16; i ++ ) {
|
|
@@ -874,6 +1231,14 @@ class Matrix4 {
|
|
|
874
1231
|
|
|
875
1232
|
}
|
|
876
1233
|
|
|
1234
|
+
/**
|
|
1235
|
+
* Writes the elements of this matrix to the given array. If no array is provided,
|
|
1236
|
+
* the method returns a new instance.
|
|
1237
|
+
*
|
|
1238
|
+
* @param {Array<number>} [array=[]] - The target array holding the matrix elements in column-major order.
|
|
1239
|
+
* @param {number} [offset=0] - Index of the first element in the array.
|
|
1240
|
+
* @return {Array<number>} The matrix elements in column-major order.
|
|
1241
|
+
*/
|
|
877
1242
|
toArray( array = [], offset = 0 ) {
|
|
878
1243
|
|
|
879
1244
|
const te = this.elements;
|