super-three 0.179.0 → 0.184.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 +3 -4
- package/build/three.cjs +14522 -12207
- package/build/three.core.js +12005 -10954
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +2270 -1005
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +63 -18
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +16573 -7890
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +16533 -7888
- 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 +12 -4
- package/examples/jsm/animation/CCDIKSolver.js +8 -4
- package/examples/jsm/controls/ArcballControls.js +15 -12
- package/examples/jsm/controls/DragControls.js +9 -59
- package/examples/jsm/controls/FirstPersonControls.js +61 -57
- package/examples/jsm/controls/FlyControls.js +5 -1
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +113 -10
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +9 -9
- package/examples/jsm/controls/TransformControls.js +35 -3
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -2
- package/examples/jsm/exporters/GLTFExporter.js +185 -34
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +31 -5
- package/examples/jsm/geometries/DecalGeometry.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +21 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +110 -13
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +542 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +380 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +268 -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 +2072 -0
- package/examples/jsm/inspector/ui/Style.js +1667 -0
- package/examples/jsm/inspector/ui/Tab.js +265 -0
- package/examples/jsm/inspector/ui/Values.js +476 -0
- package/examples/jsm/inspector/ui/utils.js +69 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +3 -3
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +27 -4029
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +692 -53
- package/examples/jsm/loaders/FBXLoader.js +237 -39
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +159 -185
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +162 -53
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +9 -41
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -2
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +91 -7
- package/examples/jsm/objects/SkyMesh.js +151 -17
- package/examples/jsm/objects/Water.js +7 -6
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +11 -13
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +175 -61
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +21 -8
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +7 -6
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +52 -10
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +23 -9
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
- package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +59 -9
- package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +81 -20
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +638 -0
- package/examples/jsm/tsl/display/SSRNode.js +186 -69
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +381 -75
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- 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 +16 -18
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
- package/package.json +27 -38
- package/src/Three.Core.js +7 -3
- package/src/Three.TSL.js +61 -16
- package/src/Three.WebGPU.Nodes.js +7 -0
- package/src/Three.WebGPU.js +11 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +21 -5
- package/src/animation/AnimationMixer.js +9 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +54 -14
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +11 -10
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +100 -7
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +24 -12
- package/src/core/Clock.js +7 -0
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +55 -6
- package/src/core/Raycaster.js +4 -3
- package/src/core/RenderTarget.js +14 -5
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +259 -57
- package/src/extras/TextureUtils.js +6 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +10 -8
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +9 -3
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +4 -1
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +13 -2
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +30 -2
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +4 -4
- package/src/loaders/ImageBitmapLoader.js +17 -13
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +9 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +6 -4
- package/src/loaders/ObjectLoader.js +57 -17
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +5 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +11 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +11 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +2 -1
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +22 -3
- package/src/materials/nodes/Line2NodeMaterial.js +36 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +95 -35
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +23 -21
- package/src/math/Matrix2.js +14 -10
- package/src/math/Matrix3.js +15 -11
- package/src/math/Matrix4.js +94 -81
- package/src/math/Plane.js +5 -4
- package/src/math/Quaternion.js +60 -84
- package/src/math/Sphere.js +1 -1
- package/src/math/Spherical.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -65
- package/src/nodes/TSL.js +11 -8
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +30 -3
- package/src/nodes/accessors/Camera.js +260 -13
- package/src/nodes/accessors/ClippingNode.js +10 -9
- package/src/nodes/accessors/CubeTextureNode.js +32 -6
- package/src/nodes/accessors/InstanceNode.js +164 -39
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +16 -15
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +51 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +11 -10
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -24
- package/src/nodes/accessors/StorageTextureNode.js +62 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +41 -31
- package/src/nodes/accessors/TextureNode.js +193 -63
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +25 -5
- package/src/nodes/code/FunctionNode.js +25 -3
- package/src/nodes/core/ArrayNode.js +22 -2
- package/src/nodes/core/AssignNode.js +6 -5
- package/src/nodes/core/AttributeNode.js +5 -4
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +133 -15
- package/src/nodes/core/IndexNode.js +4 -3
- package/src/nodes/core/InputNode.js +3 -2
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +264 -46
- package/src/nodes/core/NodeBuilder.js +453 -87
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +31 -23
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +25 -97
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +34 -3
- package/src/nodes/core/PropertyNode.js +26 -3
- package/src/nodes/core/StackNode.js +99 -23
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +22 -8
- package/src/nodes/core/StructTypeNode.js +13 -18
- package/src/nodes/core/SubBuildNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +37 -13
- package/src/nodes/core/VarNode.js +96 -34
- package/src/nodes/core/VaryingNode.js +2 -18
- package/src/nodes/display/BlendModes.js +0 -63
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +18 -1
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +41 -5
- package/src/nodes/display/PassNode.js +175 -25
- package/src/nodes/display/RenderOutputNode.js +35 -9
- package/src/nodes/display/ScreenNode.js +47 -15
- package/src/nodes/display/ToneMappingNode.js +32 -5
- package/src/nodes/display/ToonOutlinePassNode.js +10 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +72 -14
- package/src/nodes/fog/Fog.js +18 -34
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +128 -46
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +44 -6
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +76 -38
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +34 -9
- package/src/nodes/lighting/LightsNode.js +10 -32
- package/src/nodes/lighting/PointShadowNode.js +167 -148
- package/src/nodes/lighting/ShadowFilterNode.js +55 -65
- package/src/nodes/lighting/ShadowNode.js +189 -44
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +25 -8
- package/src/nodes/math/MathNode.js +98 -57
- package/src/nodes/math/OperatorNode.js +8 -5
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +111 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -3
- package/src/nodes/tsl/TSLCore.js +488 -166
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +14 -13
- package/src/nodes/utils/EventNode.js +67 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +7 -4
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +60 -8
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +60 -1
- package/src/nodes/utils/RTTNode.js +14 -4
- package/src/nodes/utils/ReflectorNode.js +61 -11
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +12 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +46 -18
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +3 -2
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +12 -2
- package/src/objects/SkinnedMesh.js +29 -10
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +372 -179
- package/src/renderers/common/Animation.js +16 -4
- package/src/renderers/common/Attributes.js +16 -2
- package/src/renderers/common/Backend.js +137 -35
- package/src/renderers/common/Background.js +28 -14
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +83 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +55 -3
- package/src/renderers/common/Info.js +337 -6
- package/src/renderers/common/InspectorBase.js +151 -0
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +41 -8
- package/src/renderers/common/PostProcessing.js +9 -226
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +18 -2
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +32 -6
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +22 -6
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +927 -335
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +52 -14
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +208 -47
- package/src/renderers/common/TimestampQueryPool.js +70 -6
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +64 -2
- package/src/renderers/common/XRManager.js +79 -51
- package/src/renderers/common/extras/PMREMGenerator.js +176 -79
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- 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/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -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_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -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/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- 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.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
- 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 -6
- package/src/renderers/shaders/UniformsLib.js +8 -5
- package/src/renderers/shaders/UniformsUtils.js +52 -9
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +11 -5
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +63 -122
- package/src/renderers/webgl/WebGLPrograms.js +65 -52
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +191 -26
- package/src/renderers/webgl/WebGLState.js +79 -40
- package/src/renderers/webgl/WebGLTextures.js +234 -68
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
- package/src/renderers/webgl/WebGLUtils.js +8 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
- package/src/renderers/webgpu/WebGPUBackend.js +403 -253
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +5 -3
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
- package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +45 -29
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +5 -4
- package/src/textures/Texture.js +19 -7
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +344 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -144
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
package/src/math/MathUtils.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { warn } from '../utils.js';
|
|
2
|
+
|
|
1
3
|
const _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];
|
|
2
4
|
|
|
3
5
|
let _seed = 1234567;
|
|
@@ -7,7 +9,7 @@ const DEG2RAD = Math.PI / 180;
|
|
|
7
9
|
const RAD2DEG = 180 / Math.PI;
|
|
8
10
|
|
|
9
11
|
/**
|
|
10
|
-
* Generate a [UUID]
|
|
12
|
+
* Generate a [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)
|
|
11
13
|
* (universally unique identifier).
|
|
12
14
|
*
|
|
13
15
|
* @return {string} The UUID.
|
|
@@ -62,7 +64,7 @@ function euclideanModulo( n, m ) {
|
|
|
62
64
|
|
|
63
65
|
/**
|
|
64
66
|
* Performs a linear mapping from range `<a1, a2>` to range `<b1, b2>`
|
|
65
|
-
* for the given value.
|
|
67
|
+
* for the given value. `a2` must be greater than `a1`.
|
|
66
68
|
*
|
|
67
69
|
* @param {number} x - The value to be mapped.
|
|
68
70
|
* @param {number} a1 - Minimum value for range A.
|
|
@@ -120,7 +122,7 @@ function lerp( x, y, t ) {
|
|
|
120
122
|
/**
|
|
121
123
|
* Smoothly interpolate a number from `x` to `y` in a spring-like manner using a delta
|
|
122
124
|
* time to maintain frame rate independent movement. For details, see
|
|
123
|
-
* [Frame rate independent damping using lerp]
|
|
125
|
+
* [Frame rate independent damping using lerp](http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/).
|
|
124
126
|
*
|
|
125
127
|
* @param {number} x - The current point.
|
|
126
128
|
* @param {number} y - The target point.
|
|
@@ -155,11 +157,11 @@ function pingpong( x, length = 1 ) {
|
|
|
155
157
|
* moved between `min` and `max`, but smoothed or slowed down the closer `x` is to
|
|
156
158
|
* the `min` and `max`.
|
|
157
159
|
*
|
|
158
|
-
* See [Smoothstep]
|
|
160
|
+
* See [Smoothstep](http://en.wikipedia.org/wiki/Smoothstep) for more details.
|
|
159
161
|
*
|
|
160
|
-
* @param {number} x - The value to evaluate based on its position between min and max
|
|
161
|
-
* @param {number} min - The min value. Any x value below min will be `0`.
|
|
162
|
-
* @param {number} max - The max value. Any x value above max will be `1`.
|
|
162
|
+
* @param {number} x - The value to evaluate based on its position between `min` and `max`.
|
|
163
|
+
* @param {number} min - The min value. Any `x` value below `min` will be `0`. `min` must be lower than `max`.
|
|
164
|
+
* @param {number} max - The max value. Any `x` value above `max` will be `1`. `max` must be greater than `min`.
|
|
163
165
|
* @return {number} The alternated value.
|
|
164
166
|
*/
|
|
165
167
|
function smoothstep( x, min, max ) {
|
|
@@ -174,12 +176,12 @@ function smoothstep( x, min, max ) {
|
|
|
174
176
|
}
|
|
175
177
|
|
|
176
178
|
/**
|
|
177
|
-
* A [variation on smoothstep]
|
|
178
|
-
* that has zero 1st and 2nd order derivatives at x=0 and x=1
|
|
179
|
+
* A [variation on smoothstep](https://en.wikipedia.org/wiki/Smoothstep#Variations)
|
|
180
|
+
* that has zero 1st and 2nd order derivatives at `x=0` and `x=1`.
|
|
179
181
|
*
|
|
180
|
-
* @param {number} x - The value to evaluate based on its position between min and max
|
|
181
|
-
* @param {number} min - The min value. Any x value below min will be `0`.
|
|
182
|
-
* @param {number} max - The max value. Any x value above max will be `1`.
|
|
182
|
+
* @param {number} x - The value to evaluate based on its position between `min` and `max`.
|
|
183
|
+
* @param {number} min - The min value. Any `x` value below `min` will be `0`. `min` must be lower than `max`.
|
|
184
|
+
* @param {number} max - The max value. Any `x` value above `max` will be `1`. `max` must be greater than `min`.
|
|
183
185
|
* @return {number} The alternated value.
|
|
184
186
|
*/
|
|
185
187
|
function smootherstep( x, min, max ) {
|
|
@@ -292,7 +294,7 @@ function isPowerOfTwo( value ) {
|
|
|
292
294
|
/**
|
|
293
295
|
* Returns the smallest power of two that is greater than or equal to the given number.
|
|
294
296
|
*
|
|
295
|
-
* @param {number} value - The value to find a POT for.
|
|
297
|
+
* @param {number} value - The value to find a POT for. Must be greater than `0`.
|
|
296
298
|
* @return {number} The smallest power of two that is greater than or equal to the given number.
|
|
297
299
|
*/
|
|
298
300
|
function ceilPowerOfTwo( value ) {
|
|
@@ -304,7 +306,7 @@ function ceilPowerOfTwo( value ) {
|
|
|
304
306
|
/**
|
|
305
307
|
* Returns the largest power of two that is less than or equal to the given number.
|
|
306
308
|
*
|
|
307
|
-
* @param {number} value - The value to find a POT for.
|
|
309
|
+
* @param {number} value - The value to find a POT for. Must be greater than `0`.
|
|
308
310
|
* @return {number} The largest power of two that is less than or equal to the given number.
|
|
309
311
|
*/
|
|
310
312
|
function floorPowerOfTwo( value ) {
|
|
@@ -314,7 +316,7 @@ function floorPowerOfTwo( value ) {
|
|
|
314
316
|
}
|
|
315
317
|
|
|
316
318
|
/**
|
|
317
|
-
* Sets the given quaternion from the [Intrinsic Proper Euler Angles]
|
|
319
|
+
* Sets the given quaternion from the [Intrinsic Proper Euler Angles](https://en.wikipedia.org/wiki/Euler_angles)
|
|
318
320
|
* defined by the given angles and order.
|
|
319
321
|
*
|
|
320
322
|
* Rotations are applied to the axes in the order specified by order:
|
|
@@ -370,7 +372,7 @@ function setQuaternionFromProperEuler( q, a, b, c, order ) {
|
|
|
370
372
|
break;
|
|
371
373
|
|
|
372
374
|
default:
|
|
373
|
-
|
|
375
|
+
warn( 'MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );
|
|
374
376
|
|
|
375
377
|
}
|
|
376
378
|
|
|
@@ -479,7 +481,7 @@ const MathUtils = {
|
|
|
479
481
|
DEG2RAD: DEG2RAD,
|
|
480
482
|
RAD2DEG: RAD2DEG,
|
|
481
483
|
/**
|
|
482
|
-
* Generate a [UUID]
|
|
484
|
+
* Generate a [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)
|
|
483
485
|
* (universally unique identifier).
|
|
484
486
|
*
|
|
485
487
|
* @static
|
|
@@ -550,7 +552,7 @@ const MathUtils = {
|
|
|
550
552
|
/**
|
|
551
553
|
* Smoothly interpolate a number from `x` to `y` in a spring-like manner using a delta
|
|
552
554
|
* time to maintain frame rate independent movement. For details, see
|
|
553
|
-
* [Frame rate independent damping using lerp]
|
|
555
|
+
* [Frame rate independent damping using lerp](http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/).
|
|
554
556
|
*
|
|
555
557
|
* @static
|
|
556
558
|
* @method
|
|
@@ -577,7 +579,7 @@ const MathUtils = {
|
|
|
577
579
|
* moved between `min` and `max`, but smoothed or slowed down the closer `x` is to
|
|
578
580
|
* the `min` and `max`.
|
|
579
581
|
*
|
|
580
|
-
* See [Smoothstep]
|
|
582
|
+
* See [Smoothstep](http://en.wikipedia.org/wiki/Smoothstep) for more details.
|
|
581
583
|
*
|
|
582
584
|
* @static
|
|
583
585
|
* @method
|
|
@@ -588,7 +590,7 @@ const MathUtils = {
|
|
|
588
590
|
*/
|
|
589
591
|
smoothstep: smoothstep,
|
|
590
592
|
/**
|
|
591
|
-
* A [variation on smoothstep]
|
|
593
|
+
* A [variation on smoothstep](https://en.wikipedia.org/wiki/Smoothstep#Variations)
|
|
592
594
|
* that has zero 1st and 2nd order derivatives at x=0 and x=1.
|
|
593
595
|
*
|
|
594
596
|
* @static
|
|
@@ -683,7 +685,7 @@ const MathUtils = {
|
|
|
683
685
|
*/
|
|
684
686
|
floorPowerOfTwo: floorPowerOfTwo,
|
|
685
687
|
/**
|
|
686
|
-
* Sets the given quaternion from the [Intrinsic Proper Euler Angles]
|
|
688
|
+
* Sets the given quaternion from the [Intrinsic Proper Euler Angles](https://en.wikipedia.org/wiki/Euler_angles)
|
|
687
689
|
* defined by the given angles and order.
|
|
688
690
|
*
|
|
689
691
|
* Rotations are applied to the axes in the order specified by order:
|
package/src/math/Matrix2.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* A Note on Row-Major and Column-Major Ordering:
|
|
5
5
|
*
|
|
6
6
|
* The constructor and {@link Matrix2#set} method take arguments in
|
|
7
|
-
* [row-major]
|
|
7
|
+
* [row-major](https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order)
|
|
8
8
|
* order, while internally they are stored in the {@link Matrix2#elements} array in column-major order.
|
|
9
9
|
* This means that calling:
|
|
10
10
|
* ```js
|
|
@@ -26,6 +26,19 @@
|
|
|
26
26
|
*/
|
|
27
27
|
export class Matrix2 {
|
|
28
28
|
|
|
29
|
+
static {
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* This flag can be used for type testing.
|
|
33
|
+
*
|
|
34
|
+
* @type {boolean}
|
|
35
|
+
* @readonly
|
|
36
|
+
* @default true
|
|
37
|
+
*/
|
|
38
|
+
Matrix2.prototype.isMatrix2 = true;
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
29
42
|
/**
|
|
30
43
|
* Constructs a new 2x2 matrix. The arguments are supposed to be
|
|
31
44
|
* in row-major order. If no arguments are provided, the constructor
|
|
@@ -38,15 +51,6 @@ export class Matrix2 {
|
|
|
38
51
|
*/
|
|
39
52
|
constructor( n11, n12, n21, n22 ) {
|
|
40
53
|
|
|
41
|
-
/**
|
|
42
|
-
* This flag can be used for type testing.
|
|
43
|
-
*
|
|
44
|
-
* @type {boolean}
|
|
45
|
-
* @readonly
|
|
46
|
-
* @default true
|
|
47
|
-
*/
|
|
48
|
-
Matrix2.prototype.isMatrix2 = true;
|
|
49
|
-
|
|
50
54
|
/**
|
|
51
55
|
* A column-major list of matrix values.
|
|
52
56
|
*
|
package/src/math/Matrix3.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* A Note on Row-Major and Column-Major Ordering:
|
|
5
5
|
*
|
|
6
6
|
* The constructor and {@link Matrix3#set} method take arguments in
|
|
7
|
-
* [row-major]
|
|
7
|
+
* [row-major](https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order)
|
|
8
8
|
* order, while internally they are stored in the {@link Matrix3#elements} array in column-major order.
|
|
9
9
|
* This means that calling:
|
|
10
10
|
* ```js
|
|
@@ -28,6 +28,19 @@
|
|
|
28
28
|
*/
|
|
29
29
|
class Matrix3 {
|
|
30
30
|
|
|
31
|
+
static {
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* This flag can be used for type testing.
|
|
35
|
+
*
|
|
36
|
+
* @type {boolean}
|
|
37
|
+
* @readonly
|
|
38
|
+
* @default true
|
|
39
|
+
*/
|
|
40
|
+
Matrix3.prototype.isMatrix3 = true;
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
31
44
|
/**
|
|
32
45
|
* Constructs a new 3x3 matrix. The arguments are supposed to be
|
|
33
46
|
* in row-major order. If no arguments are provided, the constructor
|
|
@@ -45,15 +58,6 @@ class Matrix3 {
|
|
|
45
58
|
*/
|
|
46
59
|
constructor( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {
|
|
47
60
|
|
|
48
|
-
/**
|
|
49
|
-
* This flag can be used for type testing.
|
|
50
|
-
*
|
|
51
|
-
* @type {boolean}
|
|
52
|
-
* @readonly
|
|
53
|
-
* @default true
|
|
54
|
-
*/
|
|
55
|
-
Matrix3.prototype.isMatrix3 = true;
|
|
56
|
-
|
|
57
61
|
/**
|
|
58
62
|
* A column-major list of matrix values.
|
|
59
63
|
*
|
|
@@ -278,7 +282,7 @@ class Matrix3 {
|
|
|
278
282
|
}
|
|
279
283
|
|
|
280
284
|
/**
|
|
281
|
-
* Inverts this matrix, using the [analytic method]
|
|
285
|
+
* Inverts this matrix, using the [analytic method](https://en.wikipedia.org/wiki/Invertible_matrix#Analytic_solution).
|
|
282
286
|
* You can not invert with a determinant of zero. If you attempt this, the method produces
|
|
283
287
|
* a zero matrix instead.
|
|
284
288
|
*
|
package/src/math/Matrix4.js
CHANGED
|
@@ -5,7 +5,7 @@ import { Vector3 } from './Vector3.js';
|
|
|
5
5
|
* Represents a 4x4 matrix.
|
|
6
6
|
*
|
|
7
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]
|
|
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
9
|
*
|
|
10
10
|
* This allows a 3D vector representing a point in 3D space to undergo
|
|
11
11
|
* transformations such as translation, rotation, shear, scale, reflection,
|
|
@@ -15,7 +15,7 @@ import { Vector3 } from './Vector3.js';
|
|
|
15
15
|
* A Note on Row-Major and Column-Major Ordering:
|
|
16
16
|
*
|
|
17
17
|
* The constructor and {@link Matrix3#set} method take arguments in
|
|
18
|
-
* [row-major]
|
|
18
|
+
* [row-major](https://en.wikipedia.org/wiki/Row-_and_column-major_order#Column-major_order)
|
|
19
19
|
* order, while internally they are stored in the {@link Matrix3#elements} array in column-major order.
|
|
20
20
|
* This means that calling:
|
|
21
21
|
* ```js
|
|
@@ -41,6 +41,19 @@ import { Vector3 } from './Vector3.js';
|
|
|
41
41
|
*/
|
|
42
42
|
class Matrix4 {
|
|
43
43
|
|
|
44
|
+
static {
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* This flag can be used for type testing.
|
|
48
|
+
*
|
|
49
|
+
* @type {boolean}
|
|
50
|
+
* @readonly
|
|
51
|
+
* @default true
|
|
52
|
+
*/
|
|
53
|
+
Matrix4.prototype.isMatrix4 = true;
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
44
57
|
/**
|
|
45
58
|
* Constructs a new 4x4 matrix. The arguments are supposed to be
|
|
46
59
|
* in row-major order. If no arguments are provided, the constructor
|
|
@@ -65,15 +78,6 @@ class Matrix4 {
|
|
|
65
78
|
*/
|
|
66
79
|
constructor( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {
|
|
67
80
|
|
|
68
|
-
/**
|
|
69
|
-
* This flag can be used for type testing.
|
|
70
|
-
*
|
|
71
|
-
* @type {boolean}
|
|
72
|
-
* @readonly
|
|
73
|
-
* @default true
|
|
74
|
-
*/
|
|
75
|
-
Matrix4.prototype.isMatrix4 = true;
|
|
76
|
-
|
|
77
81
|
/**
|
|
78
82
|
* A column-major list of matrix values.
|
|
79
83
|
*
|
|
@@ -234,6 +238,16 @@ class Matrix4 {
|
|
|
234
238
|
*/
|
|
235
239
|
extractBasis( xAxis, yAxis, zAxis ) {
|
|
236
240
|
|
|
241
|
+
if ( this.determinant() === 0 ) {
|
|
242
|
+
|
|
243
|
+
xAxis.set( 1, 0, 0 );
|
|
244
|
+
yAxis.set( 0, 1, 0 );
|
|
245
|
+
zAxis.set( 0, 0, 1 );
|
|
246
|
+
|
|
247
|
+
return this;
|
|
248
|
+
|
|
249
|
+
}
|
|
250
|
+
|
|
237
251
|
xAxis.setFromMatrixColumn( this, 0 );
|
|
238
252
|
yAxis.setFromMatrixColumn( this, 1 );
|
|
239
253
|
zAxis.setFromMatrixColumn( this, 2 );
|
|
@@ -274,6 +288,12 @@ class Matrix4 {
|
|
|
274
288
|
*/
|
|
275
289
|
extractRotation( m ) {
|
|
276
290
|
|
|
291
|
+
if ( m.determinant() === 0 ) {
|
|
292
|
+
|
|
293
|
+
return this.identity();
|
|
294
|
+
|
|
295
|
+
}
|
|
296
|
+
|
|
277
297
|
const te = this.elements;
|
|
278
298
|
const me = m.elements;
|
|
279
299
|
|
|
@@ -309,7 +329,7 @@ class Matrix4 {
|
|
|
309
329
|
* Sets the rotation component (the upper left 3x3 matrix) of this matrix to
|
|
310
330
|
* the rotation specified by the given Euler angles. The rest of
|
|
311
331
|
* the matrix is set to the identity. Depending on the {@link Euler#order},
|
|
312
|
-
* there are six possible outcomes. See [this page]
|
|
332
|
+
* there are six possible outcomes. See [this page](https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix)
|
|
313
333
|
* for a complete list.
|
|
314
334
|
*
|
|
315
335
|
* @param {Euler} euler - The Euler angles.
|
|
@@ -439,7 +459,7 @@ class Matrix4 {
|
|
|
439
459
|
|
|
440
460
|
/**
|
|
441
461
|
* Sets the rotation component of this matrix to the rotation specified by
|
|
442
|
-
* the given Quaternion as outlined [here]
|
|
462
|
+
* the given Quaternion as outlined [here](https://en.wikipedia.org/wiki/Rotation_matrix#Quaternion)
|
|
443
463
|
* The rest of the matrix is set to the identity.
|
|
444
464
|
*
|
|
445
465
|
* @param {Quaternion} q - The Quaternion.
|
|
@@ -601,7 +621,7 @@ class Matrix4 {
|
|
|
601
621
|
/**
|
|
602
622
|
* Computes and returns the determinant of this matrix.
|
|
603
623
|
*
|
|
604
|
-
* Based on the method outlined [here]
|
|
624
|
+
* Based on the method outlined [here](http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.html).
|
|
605
625
|
*
|
|
606
626
|
* @return {number} The determinant.
|
|
607
627
|
*/
|
|
@@ -614,43 +634,18 @@ class Matrix4 {
|
|
|
614
634
|
const n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];
|
|
615
635
|
const n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];
|
|
616
636
|
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
n41 * (
|
|
621
|
-
+ n14 * n23 * n32
|
|
622
|
-
- n13 * n24 * n32
|
|
623
|
-
- n14 * n22 * n33
|
|
624
|
-
+ n12 * n24 * n33
|
|
625
|
-
+ n13 * n22 * n34
|
|
626
|
-
- n12 * n23 * n34
|
|
627
|
-
) +
|
|
628
|
-
n42 * (
|
|
629
|
-
+ n11 * n23 * n34
|
|
630
|
-
- n11 * n24 * n33
|
|
631
|
-
+ n14 * n21 * n33
|
|
632
|
-
- n13 * n21 * n34
|
|
633
|
-
+ n13 * n24 * n31
|
|
634
|
-
- n14 * n23 * n31
|
|
635
|
-
) +
|
|
636
|
-
n43 * (
|
|
637
|
-
+ n11 * n24 * n32
|
|
638
|
-
- n11 * n22 * n34
|
|
639
|
-
- n14 * n21 * n32
|
|
640
|
-
+ n12 * n21 * n34
|
|
641
|
-
+ n14 * n22 * n31
|
|
642
|
-
- n12 * n24 * n31
|
|
643
|
-
) +
|
|
644
|
-
n44 * (
|
|
645
|
-
- n13 * n22 * n31
|
|
646
|
-
- n11 * n23 * n32
|
|
647
|
-
+ n11 * n22 * n33
|
|
648
|
-
+ n13 * n21 * n32
|
|
649
|
-
- n12 * n21 * n33
|
|
650
|
-
+ n12 * n23 * n31
|
|
651
|
-
)
|
|
637
|
+
const t11 = n23 * n34 - n24 * n33;
|
|
638
|
+
const t12 = n22 * n34 - n24 * n32;
|
|
639
|
+
const t13 = n22 * n33 - n23 * n32;
|
|
652
640
|
|
|
653
|
-
|
|
641
|
+
const t21 = n21 * n34 - n24 * n31;
|
|
642
|
+
const t22 = n21 * n33 - n23 * n31;
|
|
643
|
+
const t23 = n21 * n32 - n22 * n31;
|
|
644
|
+
|
|
645
|
+
return n11 * ( n42 * t11 - n43 * t12 + n44 * t13 ) -
|
|
646
|
+
n12 * ( n41 * t11 - n43 * t21 + n44 * t22 ) +
|
|
647
|
+
n13 * ( n41 * t12 - n42 * t21 + n44 * t23 ) -
|
|
648
|
+
n14 * ( n41 * t13 - n42 * t22 + n43 * t23 );
|
|
654
649
|
|
|
655
650
|
}
|
|
656
651
|
|
|
@@ -708,7 +703,7 @@ class Matrix4 {
|
|
|
708
703
|
}
|
|
709
704
|
|
|
710
705
|
/**
|
|
711
|
-
* Inverts this matrix, using the [analytic method]
|
|
706
|
+
* Inverts this matrix, using the [analytic method](https://en.wikipedia.org/wiki/Invertible_matrix#Analytic_solution).
|
|
712
707
|
* You can not invert with a determinant of zero. If you attempt this, the method produces
|
|
713
708
|
* a zero matrix instead.
|
|
714
709
|
*
|
|
@@ -716,7 +711,7 @@ class Matrix4 {
|
|
|
716
711
|
*/
|
|
717
712
|
invert() {
|
|
718
713
|
|
|
719
|
-
// based on
|
|
714
|
+
// based on https://github.com/toji/gl-matrix
|
|
720
715
|
const te = this.elements,
|
|
721
716
|
|
|
722
717
|
n11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],
|
|
@@ -724,36 +719,44 @@ class Matrix4 {
|
|
|
724
719
|
n13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],
|
|
725
720
|
n14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],
|
|
726
721
|
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
722
|
+
t1 = n11 * n22 - n21 * n12,
|
|
723
|
+
t2 = n11 * n32 - n31 * n12,
|
|
724
|
+
t3 = n11 * n42 - n41 * n12,
|
|
725
|
+
t4 = n21 * n32 - n31 * n22,
|
|
726
|
+
t5 = n21 * n42 - n41 * n22,
|
|
727
|
+
t6 = n31 * n42 - n41 * n32,
|
|
728
|
+
t7 = n13 * n24 - n23 * n14,
|
|
729
|
+
t8 = n13 * n34 - n33 * n14,
|
|
730
|
+
t9 = n13 * n44 - n43 * n14,
|
|
731
|
+
t10 = n23 * n34 - n33 * n24,
|
|
732
|
+
t11 = n23 * n44 - n43 * n24,
|
|
733
|
+
t12 = n33 * n44 - n43 * n34;
|
|
734
|
+
|
|
735
|
+
const det = t1 * t12 - t2 * t11 + t3 * t10 + t4 * t9 - t5 * t8 + t6 * t7;
|
|
733
736
|
|
|
734
737
|
if ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
|
|
735
738
|
|
|
736
739
|
const detInv = 1 / det;
|
|
737
740
|
|
|
738
|
-
te[ 0 ] = t11 * detInv;
|
|
739
|
-
te[ 1 ] = (
|
|
740
|
-
te[ 2 ] = (
|
|
741
|
-
te[ 3 ] = (
|
|
741
|
+
te[ 0 ] = ( n22 * t12 - n32 * t11 + n42 * t10 ) * detInv;
|
|
742
|
+
te[ 1 ] = ( n31 * t11 - n21 * t12 - n41 * t10 ) * detInv;
|
|
743
|
+
te[ 2 ] = ( n24 * t6 - n34 * t5 + n44 * t4 ) * detInv;
|
|
744
|
+
te[ 3 ] = ( n33 * t5 - n23 * t6 - n43 * t4 ) * detInv;
|
|
742
745
|
|
|
743
|
-
te[ 4 ] = t12 * detInv;
|
|
744
|
-
te[ 5 ] = (
|
|
745
|
-
te[ 6 ] = (
|
|
746
|
-
te[ 7 ] = (
|
|
746
|
+
te[ 4 ] = ( n32 * t9 - n12 * t12 - n42 * t8 ) * detInv;
|
|
747
|
+
te[ 5 ] = ( n11 * t12 - n31 * t9 + n41 * t8 ) * detInv;
|
|
748
|
+
te[ 6 ] = ( n34 * t3 - n14 * t6 - n44 * t2 ) * detInv;
|
|
749
|
+
te[ 7 ] = ( n13 * t6 - n33 * t3 + n43 * t2 ) * detInv;
|
|
747
750
|
|
|
748
|
-
te[ 8 ] =
|
|
749
|
-
te[ 9 ] = (
|
|
750
|
-
te[ 10 ] = (
|
|
751
|
-
te[ 11 ] = (
|
|
751
|
+
te[ 8 ] = ( n12 * t11 - n22 * t9 + n42 * t7 ) * detInv;
|
|
752
|
+
te[ 9 ] = ( n21 * t9 - n11 * t11 - n41 * t7 ) * detInv;
|
|
753
|
+
te[ 10 ] = ( n14 * t5 - n24 * t3 + n44 * t1 ) * detInv;
|
|
754
|
+
te[ 11 ] = ( n23 * t3 - n13 * t5 - n43 * t1 ) * detInv;
|
|
752
755
|
|
|
753
|
-
te[ 12 ] =
|
|
754
|
-
te[ 13 ] = (
|
|
755
|
-
te[ 14 ] = (
|
|
756
|
-
te[ 15 ] = (
|
|
756
|
+
te[ 12 ] = ( n22 * t8 - n12 * t10 - n32 * t7 ) * detInv;
|
|
757
|
+
te[ 13 ] = ( n11 * t10 - n21 * t8 + n31 * t7 ) * detInv;
|
|
758
|
+
te[ 14 ] = ( n24 * t2 - n14 * t4 - n34 * t1 ) * detInv;
|
|
759
|
+
te[ 15 ] = ( n13 * t4 - n23 * t2 + n33 * t1 ) * detInv;
|
|
757
760
|
|
|
758
761
|
return this;
|
|
759
762
|
|
|
@@ -911,7 +914,7 @@ class Matrix4 {
|
|
|
911
914
|
* the given angle.
|
|
912
915
|
*
|
|
913
916
|
* This is a somewhat controversial but mathematically sound alternative to
|
|
914
|
-
* rotating via Quaternions. See the discussion [here]
|
|
917
|
+
* rotating via Quaternions. See the discussion [here](https://www.gamedev.net/articles/programming/math-and-physics/do-we-really-need-quaternions-r1199).
|
|
915
918
|
*
|
|
916
919
|
* @param {Vector3} axis - The normalized rotation axis.
|
|
917
920
|
* @param {number} angle - The rotation in radians.
|
|
@@ -1051,18 +1054,28 @@ class Matrix4 {
|
|
|
1051
1054
|
|
|
1052
1055
|
const te = this.elements;
|
|
1053
1056
|
|
|
1057
|
+
position.x = te[ 12 ];
|
|
1058
|
+
position.y = te[ 13 ];
|
|
1059
|
+
position.z = te[ 14 ];
|
|
1060
|
+
|
|
1061
|
+
const det = this.determinant();
|
|
1062
|
+
|
|
1063
|
+
if ( det === 0 ) {
|
|
1064
|
+
|
|
1065
|
+
scale.set( 1, 1, 1 );
|
|
1066
|
+
quaternion.identity();
|
|
1067
|
+
|
|
1068
|
+
return this;
|
|
1069
|
+
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1054
1072
|
let sx = _v1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();
|
|
1055
1073
|
const sy = _v1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();
|
|
1056
1074
|
const sz = _v1.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();
|
|
1057
1075
|
|
|
1058
|
-
// if
|
|
1059
|
-
const det = this.determinant();
|
|
1076
|
+
// if determinant is negative, we need to invert one scale
|
|
1060
1077
|
if ( det < 0 ) sx = - sx;
|
|
1061
1078
|
|
|
1062
|
-
position.x = te[ 12 ];
|
|
1063
|
-
position.y = te[ 13 ];
|
|
1064
|
-
position.z = te[ 14 ];
|
|
1065
|
-
|
|
1066
1079
|
// scale the rotation part
|
|
1067
1080
|
_m1.copy( this );
|
|
1068
1081
|
|
package/src/math/Plane.js
CHANGED
|
@@ -7,7 +7,7 @@ const _normalMatrix = /*@__PURE__*/ new Matrix3();
|
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* A two dimensional surface that extends infinitely in 3D space, represented
|
|
10
|
-
* in [Hessian normal form]
|
|
10
|
+
* in [Hessian normal form](http://mathworld.wolfram.com/HessianNormalForm.html)
|
|
11
11
|
* by a unit length normal vector and a constant.
|
|
12
12
|
*/
|
|
13
13
|
class Plane {
|
|
@@ -210,9 +210,10 @@ class Plane {
|
|
|
210
210
|
*
|
|
211
211
|
* @param {Line3} line - The line to compute the intersection for.
|
|
212
212
|
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
213
|
-
* @
|
|
213
|
+
* @param {boolean} [clampToLine=true] - Whether to clamp the intersection to the line segment.
|
|
214
|
+
* @return {?Vector3} The intersection point. Returns `null` if no intersection is detected.
|
|
214
215
|
*/
|
|
215
|
-
intersectLine( line, target ) {
|
|
216
|
+
intersectLine( line, target, clampToLine = true ) {
|
|
216
217
|
|
|
217
218
|
const direction = line.delta( _vector1 );
|
|
218
219
|
|
|
@@ -234,7 +235,7 @@ class Plane {
|
|
|
234
235
|
|
|
235
236
|
const t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;
|
|
236
237
|
|
|
237
|
-
if ( t < 0 || t > 1 ) {
|
|
238
|
+
if ( ( clampToLine === true ) && ( t < 0 || t > 1 ) ) {
|
|
238
239
|
|
|
239
240
|
return null;
|
|
240
241
|
|