super-three 0.141.0 → 0.147.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/README.md +9 -9
- package/build/three.cjs +2441 -1569
- package/build/three.js +2441 -1569
- package/build/three.min.js +1 -1
- package/build/three.module.js +2847 -1576
- package/examples/js/animation/AnimationClipCreator.js +0 -8
- package/examples/js/animation/CCDIKSolver.js +50 -67
- package/examples/js/animation/MMDAnimationHelper.js +66 -137
- package/examples/js/animation/MMDPhysics.js +71 -150
- package/examples/js/cameras/CinematicCamera.js +33 -22
- package/examples/js/controls/ArcballControls.js +149 -403
- package/examples/js/controls/DragControls.js +8 -33
- package/examples/js/controls/FirstPersonControls.js +32 -61
- package/examples/js/controls/FlyControls.js +29 -63
- package/examples/js/controls/OrbitControls.js +125 -103
- package/examples/js/controls/PointerLockControls.js +5 -22
- package/examples/js/controls/TrackballControls.js +33 -88
- package/examples/js/controls/TransformControls.js +101 -182
- package/examples/js/csm/CSM.js +4 -39
- package/examples/js/csm/CSMFrustum.js +3 -9
- package/examples/js/csm/CSMHelper.js +24 -4
- package/examples/js/csm/CSMShader.js +2 -6
- package/examples/js/curves/CurveExtras.js +27 -27
- package/examples/js/curves/NURBSCurve.js +4 -16
- package/examples/js/curves/NURBSSurface.js +3 -9
- package/examples/js/curves/NURBSUtils.js +8 -45
- package/examples/js/effects/AnaglyphEffect.js +6 -20
- package/examples/js/effects/AsciiEffect.js +32 -31
- package/examples/js/effects/OutlineEffect.js +30 -54
- package/examples/js/effects/ParallaxBarrierEffect.js +2 -15
- package/examples/js/effects/PeppersGhostEffect.js +14 -41
- package/examples/js/effects/StereoEffect.js +2 -6
- package/examples/js/environments/RoomEnvironment.js +32 -8
- package/examples/js/exporters/ColladaExporter.js +52 -78
- package/examples/js/exporters/DRACOExporter.js +22 -34
- package/examples/js/exporters/EXRExporter.js +15 -18
- package/examples/js/exporters/GLTFExporter.js +168 -345
- package/examples/js/exporters/MMDExporter.js +5 -12
- package/examples/js/exporters/OBJExporter.js +40 -52
- package/examples/js/exporters/PLYExporter.js +50 -57
- package/examples/js/exporters/STLExporter.js +5 -14
- package/examples/js/exporters/USDZExporter.js +119 -27
- package/examples/js/geometries/BoxLineGeometry.js +0 -1
- package/examples/js/geometries/ConvexGeometry.js +12 -7
- package/examples/js/geometries/DecalGeometry.js +53 -20
- package/examples/js/geometries/LightningStrike.js +54 -67
- package/examples/js/geometries/ParametricGeometries.js +8 -7
- package/examples/js/geometries/ParametricGeometry.js +23 -17
- package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
- package/examples/js/geometries/TeapotGeometry.js +54 -50
- package/examples/js/geometries/TextGeometry.js +6 -4
- package/examples/js/helpers/LightProbeHelper.js +1 -2
- package/examples/js/helpers/OctreeHelper.js +22 -20
- package/examples/js/helpers/PositionalAudioHelper.js +8 -6
- package/examples/js/helpers/RectAreaLightHelper.js +6 -7
- package/examples/js/helpers/VertexNormalsHelper.js +15 -13
- package/examples/js/helpers/VertexTangentsHelper.js +15 -9
- package/examples/js/helpers/ViewHelper.js +31 -16
- package/examples/js/interactive/HTMLMesh.js +25 -39
- package/examples/js/interactive/InteractiveGroup.js +9 -14
- package/examples/js/interactive/SelectionBox.js +3 -70
- package/examples/js/interactive/SelectionHelper.js +2 -8
- package/examples/js/libs/ktx-parse.umd.js +1 -0
- package/examples/js/libs/meshopt_decoder.js +98 -32
- package/examples/js/lights/LightProbeGenerator.js +32 -39
- package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
- package/examples/js/lines/LineGeometry.js +3 -5
- package/examples/js/lines/LineMaterial.js +4 -11
- package/examples/js/lines/LineSegments2.js +40 -89
- package/examples/js/lines/LineSegmentsGeometry.js +7 -28
- package/examples/js/lines/Wireframe.js +2 -7
- package/examples/js/lines/WireframeGeometry2.js +3 -1
- package/examples/js/loaders/3DMLoader.js +58 -155
- package/examples/js/loaders/3MFLoader.js +72 -106
- package/examples/js/loaders/AMFLoader.js +0 -25
- package/examples/js/loaders/BVHLoader.js +44 -43
- package/examples/js/loaders/BasisTextureLoader.js +16 -46
- package/examples/js/loaders/ColladaLoader.js +229 -359
- package/examples/js/loaders/DDSLoader.js +24 -25
- package/examples/js/loaders/DRACOLoader.js +30 -90
- package/examples/js/loaders/EXRLoader.js +69 -177
- package/examples/js/loaders/FBXLoader.js +294 -441
- package/examples/js/loaders/FontLoader.js +9 -31
- package/examples/js/loaders/GCodeLoader.js +15 -16
- package/examples/js/loaders/GLTFLoader.js +458 -739
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -17
- package/examples/js/loaders/KMZLoader.js +3 -7
- package/examples/js/loaders/KTXLoader.js +12 -30
- package/examples/js/loaders/LDrawLoader.js +309 -355
- package/examples/js/loaders/LUT3dlLoader.js +7 -11
- package/examples/js/loaders/LUTCubeLoader.js +0 -8
- package/examples/js/loaders/LWOLoader.js +59 -124
- package/examples/js/loaders/LogLuvLoader.js +27 -77
- package/examples/js/loaders/LottieLoader.js +4 -4
- package/examples/js/loaders/MD2Loader.js +26 -27
- package/examples/js/loaders/MDDLoader.js +6 -10
- package/examples/js/loaders/MMDLoader.js +180 -189
- package/examples/js/loaders/MTLLoader.js +18 -47
- package/examples/js/loaders/NRRDLoader.js +44 -84
- package/examples/js/loaders/OBJLoader.js +56 -77
- package/examples/js/loaders/PCDLoader.js +92 -42
- package/examples/js/loaders/PDBLoader.js +17 -13
- package/examples/js/loaders/PLYLoader.js +65 -51
- package/examples/js/loaders/PRWMLoader.js +11 -22
- package/examples/js/loaders/PVRLoader.js +7 -16
- package/examples/js/loaders/RGBELoader.js +36 -61
- package/examples/js/loaders/RGBMLoader.js +26 -87
- package/examples/js/loaders/STLLoader.js +20 -27
- package/examples/js/loaders/SVGLoader.js +365 -236
- package/examples/js/loaders/TDSLoader.js +81 -118
- package/examples/js/loaders/TGALoader.js +39 -41
- package/examples/js/loaders/TIFFLoader.js +30 -0
- package/examples/js/loaders/TTFLoader.js +0 -8
- package/examples/js/loaders/TiltLoader.js +14 -15
- package/examples/js/loaders/VOXLoader.js +8 -16
- package/examples/js/loaders/VRMLLoader.js +266 -354
- package/examples/js/loaders/VTKLoader.js +102 -119
- package/examples/js/loaders/XYZLoader.js +2 -4
- package/examples/js/loaders/lwo/IFFParser.js +55 -136
- package/examples/js/loaders/lwo/LWO2Parser.js +39 -89
- package/examples/js/loaders/lwo/LWO3Parser.js +38 -79
- package/examples/js/materials/MeshGouraudMaterial.js +387 -0
- package/examples/js/math/Capsule.js +0 -17
- package/examples/js/math/ColorConverter.js +3 -53
- package/examples/js/math/ConvexHull.js +185 -141
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/math/Lut.js +8 -15
- package/examples/js/math/MeshSurfaceSampler.js +6 -28
- package/examples/js/math/OBB.js +90 -49
- package/examples/js/math/Octree.js +2 -57
- package/examples/js/math/SimplexNoise.js +74 -88
- package/examples/js/misc/ConvexObjectBreaker.js +37 -48
- package/examples/js/misc/GPUComputationRenderer.js +47 -14
- package/examples/js/misc/Gyroscope.js +5 -9
- package/examples/js/misc/MD2Character.js +14 -23
- package/examples/js/misc/MD2CharacterComplex.js +73 -54
- package/examples/js/misc/MorphAnimMesh.js +0 -6
- package/examples/js/misc/MorphBlendMesh.js +3 -30
- package/examples/js/misc/ProgressiveLightMap.js +47 -43
- package/examples/js/misc/RollerCoaster.js +17 -24
- package/examples/js/misc/TubePainter.js +18 -12
- package/examples/js/misc/Volume.js +173 -194
- package/examples/js/misc/VolumeSlice.js +91 -99
- package/examples/js/modifiers/CurveModifier.js +19 -21
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
- package/examples/js/modifiers/SimplifyModifier.js +57 -60
- package/examples/js/modifiers/TessellateModifier.js +2 -9
- package/examples/js/objects/GroundProjectedEnv.js +181 -0
- package/examples/js/objects/Lensflare.js +47 -38
- package/examples/js/objects/LightningStorm.js +10 -13
- package/examples/js/objects/MarchingCubes.js +80 -59
- package/examples/js/objects/Reflector.js +31 -22
- package/examples/js/objects/ReflectorForSSRPass.js +20 -25
- package/examples/js/objects/Refractor.js +61 -33
- package/examples/js/objects/ShadowMesh.js +6 -3
- package/examples/js/objects/Sky.js +2 -7
- package/examples/js/objects/Water.js +23 -18
- package/examples/js/objects/Water2.js +20 -19
- package/examples/js/physics/AmmoPhysics.js +23 -20
- package/examples/js/physics/OimoPhysics.js +19 -17
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
- package/examples/js/postprocessing/AfterimagePass.js +19 -12
- package/examples/js/postprocessing/BloomPass.js +38 -17
- package/examples/js/postprocessing/BokehPass.js +29 -12
- package/examples/js/postprocessing/ClearPass.js +1 -6
- package/examples/js/postprocessing/CubeTexturePass.js +12 -9
- package/examples/js/postprocessing/DotScreenPass.js +7 -5
- package/examples/js/postprocessing/EffectComposer.js +25 -32
- package/examples/js/postprocessing/FilmPass.js +7 -5
- package/examples/js/postprocessing/GlitchPass.js +10 -11
- package/examples/js/postprocessing/HalftonePass.js +9 -9
- package/examples/js/postprocessing/LUTPass.js +2 -15
- package/examples/js/postprocessing/MaskPass.js +20 -17
- package/examples/js/postprocessing/OutlinePass.js +49 -38
- package/examples/js/postprocessing/Pass.js +11 -14
- package/examples/js/postprocessing/RenderPass.js +3 -7
- package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
- package/examples/js/postprocessing/SAOPass.js +40 -32
- package/examples/js/postprocessing/SMAAPass.js +34 -17
- package/examples/js/postprocessing/SSAARenderPass.js +14 -14
- package/examples/js/postprocessing/SSAOPass.js +56 -42
- package/examples/js/postprocessing/SSRPass.js +78 -61
- package/examples/js/postprocessing/SavePass.js +14 -6
- package/examples/js/postprocessing/ShaderPass.js +9 -8
- package/examples/js/postprocessing/TAARenderPass.js +11 -9
- package/examples/js/postprocessing/TexturePass.js +7 -4
- package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
- package/examples/js/renderers/CSS2DRenderer.js +4 -23
- package/examples/js/renderers/CSS3DRenderer.js +5 -26
- package/examples/js/renderers/Projector.js +31 -108
- package/examples/js/renderers/SVGRenderer.js +4 -50
- package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
- package/examples/js/shaders/AfterimageShader.js +3 -6
- package/examples/js/shaders/BasicShader.js +3 -6
- package/examples/js/shaders/BleachBypassShader.js +3 -6
- package/examples/js/shaders/BlendShader.js +3 -6
- package/examples/js/shaders/BokehShader.js +3 -6
- package/examples/js/shaders/BokehShader2.js +4 -13
- package/examples/js/shaders/BrightnessContrastShader.js +3 -6
- package/examples/js/shaders/ColorCorrectionShader.js +2 -6
- package/examples/js/shaders/ColorifyShader.js +2 -6
- package/examples/js/shaders/ConvolutionShader.js +5 -10
- package/examples/js/shaders/CopyShader.js +3 -6
- package/examples/js/shaders/DOFMipMapShader.js +3 -6
- package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
- package/examples/js/shaders/DigitalGlitch.js +3 -6
- package/examples/js/shaders/DotScreenShader.js +2 -6
- package/examples/js/shaders/FXAAShader.js +1 -3
- package/examples/js/shaders/FilmShader.js +3 -6
- package/examples/js/shaders/FocusShader.js +3 -6
- package/examples/js/shaders/FreiChenShader.js +2 -6
- package/examples/js/shaders/GammaCorrectionShader.js +3 -6
- package/examples/js/shaders/GodRaysShader.js +11 -24
- package/examples/js/shaders/HalftoneShader.js +3 -6
- package/examples/js/shaders/HorizontalBlurShader.js +3 -6
- package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
- package/examples/js/shaders/HueSaturationShader.js +3 -6
- package/examples/js/shaders/KaleidoShader.js +3 -6
- package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
- package/examples/js/shaders/LuminosityShader.js +4 -7
- package/examples/js/shaders/MMDToonShader.js +2 -4
- package/examples/js/shaders/MirrorShader.js +3 -6
- package/examples/js/shaders/NormalMapShader.js +2 -6
- package/examples/js/shaders/RGBShiftShader.js +3 -6
- package/examples/js/shaders/SAOShader.js +2 -6
- package/examples/js/shaders/SMAAShader.js +6 -18
- package/examples/js/shaders/SSAOShader.js +2 -6
- package/examples/js/shaders/SSRShader.js +6 -18
- package/examples/js/shaders/SepiaShader.js +3 -6
- package/examples/js/shaders/SobelOperatorShader.js +2 -6
- package/examples/js/shaders/TechnicolorShader.js +3 -6
- package/examples/js/shaders/ToneMapShader.js +4 -7
- package/examples/js/shaders/ToonShader.js +8 -24
- package/examples/js/shaders/TriangleBlurShader.js +2 -6
- package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
- package/examples/js/shaders/VelocityShader.js +126 -0
- package/examples/js/shaders/VerticalBlurShader.js +3 -6
- package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
- package/examples/js/shaders/VignetteShader.js +3 -6
- package/examples/js/shaders/VolumeShader.js +2 -6
- package/examples/js/shaders/WaterRefractionShader.js +2 -6
- package/examples/js/textures/FlakesTexture.js +0 -1
- package/examples/js/utils/BufferGeometryUtils.js +237 -171
- package/examples/js/utils/CameraUtils.js +5 -20
- package/examples/js/utils/GPUStatsPanel.js +3 -12
- package/examples/js/utils/GeometryCompressionUtils.js +19 -44
- package/examples/js/utils/GeometryUtils.js +15 -36
- package/examples/js/utils/LDrawUtils.js +8 -11
- package/examples/js/utils/PackedPhongMaterial.js +6 -4
- package/examples/js/utils/SceneUtils.js +109 -14
- package/examples/js/utils/ShadowMapViewer.js +17 -14
- package/examples/js/utils/SkeletonUtils.js +13 -27
- package/examples/js/utils/UVsDebug.js +20 -12
- package/examples/js/utils/WorkerPool.js +1 -11
- package/examples/jsm/animation/CCDIKSolver.js +27 -3
- package/examples/jsm/animation/MMDPhysics.js +28 -22
- package/examples/jsm/capabilities/WebGPU.js +3 -1
- package/examples/jsm/controls/ArcballControls.js +17 -2
- package/examples/jsm/controls/FirstPersonControls.js +20 -27
- package/examples/jsm/controls/FlyControls.js +16 -24
- package/examples/jsm/controls/OrbitControls.js +44 -9
- package/examples/jsm/controls/PointerLockControls.js +0 -7
- package/examples/jsm/controls/TrackballControls.js +14 -5
- package/examples/jsm/controls/TransformControls.js +18 -16
- package/examples/jsm/csm/CSM.js +1 -0
- package/examples/jsm/csm/CSMHelper.js +30 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -2
- package/examples/jsm/effects/OutlineEffect.js +4 -25
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
- package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
- package/examples/jsm/effects/StereoEffect.js +2 -2
- package/examples/jsm/environments/RoomEnvironment.js +23 -0
- package/examples/jsm/exporters/ColladaExporter.js +4 -13
- package/examples/jsm/exporters/DRACOExporter.js +0 -13
- package/examples/jsm/exporters/GLTFExporter.js +29 -110
- package/examples/jsm/exporters/KTX2Exporter.js +29 -29
- package/examples/jsm/exporters/OBJExporter.js +0 -18
- package/examples/jsm/exporters/PLYExporter.js +14 -22
- package/examples/jsm/exporters/STLExporter.js +1 -9
- package/examples/jsm/exporters/USDZExporter.js +107 -4
- package/examples/jsm/geometries/ConvexGeometry.js +1 -1
- package/examples/jsm/geometries/ParametricGeometry.js +0 -6
- package/examples/jsm/helpers/OctreeHelper.js +22 -8
- package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
- package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
- package/examples/jsm/helpers/ViewHelper.js +24 -0
- package/examples/jsm/interactive/HTMLMesh.js +14 -15
- package/examples/jsm/interactive/InteractiveGroup.js +4 -2
- package/examples/jsm/interactive/SelectionHelper.js +5 -3
- package/examples/jsm/libs/flow.module.js +610 -160
- package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
- package/examples/jsm/libs/utif.module.js +1579 -0
- package/examples/jsm/libs/zstddec.module.js +1 -0
- package/examples/jsm/lines/LineSegments2.js +4 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -2
- package/examples/jsm/loaders/ColladaLoader.js +29 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -28
- package/examples/jsm/loaders/EXRLoader.js +3 -13
- package/examples/jsm/loaders/FBXLoader.js +26 -3
- package/examples/jsm/loaders/FontLoader.js +3 -16
- package/examples/jsm/loaders/GLTFLoader.js +321 -464
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
- package/examples/jsm/loaders/KTX2Loader.js +254 -53
- package/examples/jsm/loaders/LDrawLoader.js +149 -87
- package/examples/jsm/loaders/LottieLoader.js +4 -2
- package/examples/jsm/loaders/MaterialXLoader.js +728 -0
- package/examples/jsm/loaders/OBJLoader.js +6 -14
- package/examples/jsm/loaders/PCDLoader.js +60 -14
- package/examples/jsm/loaders/PLYLoader.js +71 -19
- package/examples/jsm/loaders/RGBELoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +231 -17
- package/examples/jsm/loaders/TIFFLoader.js +36 -0
- package/examples/jsm/loaders/USDZLoader.js +633 -0
- package/examples/jsm/loaders/VRMLLoader.js +36 -26
- package/examples/jsm/loaders/VTKLoader.js +1 -1
- package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
- package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
- package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
- package/examples/jsm/math/ColorConverter.js +1 -49
- package/examples/jsm/math/ConvexHull.js +4 -4
- package/examples/jsm/math/Octree.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
- package/examples/jsm/misc/Volume.js +169 -171
- package/examples/jsm/misc/VolumeSlice.js +78 -80
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/node-editor/NodeEditor.js +91 -12
- package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
- package/examples/jsm/node-editor/core/BaseNode.js +10 -3
- package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
- package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +7 -10
- package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +7 -10
- package/examples/jsm/node-editor/math/AngleEditor.js +4 -4
- package/examples/jsm/node-editor/math/DotEditor.js +1 -1
- package/examples/jsm/node-editor/math/InvertEditor.js +3 -3
- package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
- package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
- package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
- package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
- package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
- package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
- package/examples/jsm/node-editor/utils/PreviewEditor.js +7 -3
- package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
- package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
- package/examples/jsm/nodes/Nodes.js +70 -13
- package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
- package/examples/jsm/nodes/accessors/NormalNode.js +8 -8
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +11 -5
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
- package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
- package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
- package/examples/jsm/nodes/core/AttributeNode.js +32 -9
- package/examples/jsm/nodes/core/CodeNode.js +3 -3
- package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
- package/examples/jsm/nodes/core/FunctionNode.js +2 -2
- package/examples/jsm/nodes/core/Node.js +15 -13
- package/examples/jsm/nodes/core/NodeBuilder.js +67 -18
- package/examples/jsm/nodes/core/NodeFrame.js +2 -2
- package/examples/jsm/nodes/core/NodeUtils.js +23 -1
- package/examples/jsm/nodes/core/NodeVarying.js +17 -0
- package/examples/jsm/nodes/core/VaryingNode.js +56 -0
- package/examples/jsm/nodes/core/constants.js +13 -13
- package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +84 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
- package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
- package/examples/jsm/nodes/display/ViewportNode.js +106 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
- package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
- package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +3 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
- package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
- package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +33 -0
- package/examples/jsm/nodes/materials/Materials.js +21 -31
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
- package/examples/jsm/nodes/materials/NodeMaterial.js +11 -3
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
- package/examples/jsm/nodes/materialx/DISCLAIMER.md +199 -0
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +56 -0
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +617 -0
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
- package/examples/jsm/nodes/math/MathNode.js +7 -17
- package/examples/jsm/nodes/math/OperatorNode.js +16 -3
- package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
- package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
- package/examples/jsm/nodes/shadernode/ShaderNode.js +40 -25
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +95 -68
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +49 -6
- package/examples/jsm/nodes/utils/ConvertNode.js +18 -12
- package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
- package/examples/jsm/nodes/utils/JoinNode.js +15 -9
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +3 -2
- package/examples/jsm/nodes/utils/OscNode.js +2 -2
- package/examples/jsm/nodes/utils/RemapNode.js +34 -0
- package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
- package/examples/jsm/nodes/utils/SplitNode.js +21 -5
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
- package/examples/jsm/nodes/utils/TimerNode.js +23 -3
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
- package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
- package/examples/jsm/objects/Reflector.js +12 -5
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
- package/examples/jsm/objects/Refractor.js +12 -6
- package/examples/jsm/objects/ShadowMesh.js +8 -2
- package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
- package/examples/jsm/postprocessing/BloomPass.js +22 -3
- package/examples/jsm/postprocessing/BokehPass.js +18 -4
- package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
- package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
- package/examples/jsm/postprocessing/EffectComposer.js +9 -0
- package/examples/jsm/postprocessing/FilmPass.js +8 -0
- package/examples/jsm/postprocessing/GlitchPass.js +13 -1
- package/examples/jsm/postprocessing/HalftonePass.js +8 -0
- package/examples/jsm/postprocessing/OutlinePass.js +25 -3
- package/examples/jsm/postprocessing/Pass.js +2 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
- package/examples/jsm/postprocessing/SAOPass.js +20 -0
- package/examples/jsm/postprocessing/SMAAPass.js +16 -0
- package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
- package/examples/jsm/postprocessing/SavePass.js +17 -1
- package/examples/jsm/postprocessing/ShaderPass.js +8 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
- package/examples/jsm/postprocessing/TexturePass.js +8 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
- package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
- package/examples/jsm/renderers/Projector.js +2 -24
- package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +363 -231
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
- package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +68 -3
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
- package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
- package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
- package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +113 -93
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +63 -36
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/shaders/LuminosityShader.js +1 -1
- package/examples/jsm/shaders/MMDToonShader.js +2 -4
- package/examples/jsm/shaders/ToneMapShader.js +1 -1
- package/examples/jsm/shaders/VelocityShader.js +128 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +176 -43
- package/examples/jsm/utils/GeometryUtils.js +17 -25
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
- package/examples/jsm/utils/SceneUtils.js +117 -12
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
- package/examples/jsm/webxr/VRButton.js +1 -7
- package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
- package/package.json +22 -18
- package/src/Three.Legacy.js +262 -36
- package/src/Three.js +4 -2
- package/src/animation/AnimationAction.js +6 -5
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +1 -1
- package/src/animation/AnimationUtils.js +204 -199
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/PropertyBinding.js +31 -5
- package/src/audio/AudioContext.js +5 -5
- package/src/cameras/CubeCamera.js +14 -21
- package/src/constants.js +2 -4
- package/src/core/BufferAttribute.js +81 -111
- package/src/core/BufferGeometry.js +3 -41
- package/src/core/InstancedBufferAttribute.js +0 -10
- package/src/core/InstancedBufferGeometry.js +1 -7
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +57 -8
- package/src/core/Object3D.js +22 -5
- package/src/core/Uniform.js +0 -7
- package/src/core/UniformsGroup.js +92 -0
- package/src/extras/DataUtils.js +104 -88
- package/src/extras/Earcut.js +67 -67
- package/src/extras/core/Path.js +1 -0
- package/src/extras/core/ShapePath.js +1 -4
- package/src/extras/curves/CatmullRomCurve3.js +4 -2
- package/src/geometries/BoxGeometry.js +1 -1
- package/src/geometries/CapsuleGeometry.js +1 -1
- package/src/geometries/CircleGeometry.js +1 -1
- package/src/geometries/ConeGeometry.js +1 -1
- package/src/geometries/CylinderGeometry.js +2 -1
- package/src/geometries/DodecahedronGeometry.js +1 -1
- package/src/geometries/EdgesGeometry.js +5 -4
- package/src/geometries/ExtrudeGeometry.js +2 -11
- package/src/geometries/IcosahedronGeometry.js +1 -1
- package/src/geometries/LatheGeometry.js +2 -2
- package/src/geometries/OctahedronGeometry.js +1 -1
- package/src/geometries/PlaneGeometry.js +2 -1
- package/src/geometries/PolyhedronGeometry.js +2 -2
- package/src/geometries/RingGeometry.js +1 -1
- package/src/geometries/ShapeGeometry.js +3 -2
- package/src/geometries/SphereGeometry.js +2 -1
- package/src/geometries/TetrahedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +2 -1
- package/src/geometries/TorusKnotGeometry.js +2 -1
- package/src/geometries/TubeGeometry.js +2 -1
- package/src/geometries/WireframeGeometry.js +1 -0
- package/src/helpers/ArrowHelper.js +9 -0
- package/src/helpers/Box3Helper.js +7 -0
- package/src/helpers/BoxHelper.js +7 -1
- package/src/helpers/CameraHelper.js +97 -38
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/GridHelper.js +7 -0
- package/src/helpers/HemisphereLightHelper.js +5 -1
- package/src/helpers/PlaneHelper.js +15 -9
- package/src/helpers/PointLightHelper.js +2 -1
- package/src/helpers/PolarGridHelper.js +25 -14
- package/src/helpers/SkeletonHelper.js +7 -0
- package/src/helpers/SpotLightHelper.js +5 -2
- package/src/lights/LightShadow.js +1 -2
- package/src/lights/PointLight.js +2 -2
- package/src/lights/SpotLight.js +4 -2
- package/src/loaders/FileLoader.js +16 -2
- package/src/loaders/LoadingManager.js +1 -1
- package/src/loaders/MaterialLoader.js +49 -7
- package/src/loaders/ObjectLoader.js +9 -42
- package/src/materials/Material.js +2 -34
- package/src/materials/Materials.js +0 -27
- package/src/materials/MeshLambertMaterial.js +28 -1
- package/src/materials/MeshPhysicalMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +3 -7
- package/src/math/Color.js +8 -18
- package/src/math/MathUtils.js +1 -7
- package/src/math/Matrix3.js +54 -25
- package/src/math/Matrix4.js +3 -27
- package/src/math/Quaternion.js +1 -21
- package/src/math/Ray.js +2 -5
- package/src/math/Sphere.js +36 -21
- package/src/math/Vector2.js +4 -24
- package/src/math/Vector3.js +7 -46
- package/src/math/Vector4.js +4 -24
- package/src/objects/InstancedMesh.js +7 -0
- package/src/objects/LOD.js +25 -6
- package/src/renderers/WebGL3DRenderTarget.js +1 -1
- package/src/renderers/WebGLArrayRenderTarget.js +1 -1
- package/src/renderers/WebGLCubeRenderTarget.js +1 -1
- package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
- package/src/renderers/WebGLRenderTarget.js +1 -1
- package/src/renderers/WebGLRenderer.js +119 -69
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
- package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -13
- package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -0
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
- package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +7 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
- package/src/renderers/shaders/ShaderLib.js +50 -36
- package/src/renderers/shaders/UniformsLib.js +13 -12
- package/src/renderers/shaders/UniformsUtils.js +29 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -0
- package/src/renderers/webgl/WebGLBackground.js +17 -9
- package/src/renderers/webgl/WebGLLights.js +37 -17
- package/src/renderers/webgl/WebGLMaterials.js +2 -1
- package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
- package/src/renderers/webgl/WebGLProgram.js +6 -11
- package/src/renderers/webgl/WebGLPrograms.js +30 -26
- package/src/renderers/webgl/WebGLRenderLists.js +5 -4
- package/src/renderers/webgl/WebGLRenderStates.js +5 -4
- package/src/renderers/webgl/WebGLShaderCache.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -16
- package/src/renderers/webgl/WebGLState.js +125 -41
- package/src/renderers/webgl/WebGLTextures.js +94 -39
- package/src/renderers/webgl/WebGLUniforms.js +156 -28
- package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
- package/src/renderers/webgl/WebGLUtils.js +3 -1
- package/src/renderers/webvr/WebVRManager.js +42 -9
- package/src/renderers/webvr/WebVRUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +91 -50
- package/src/renderers/webxr/WebXRManager.js +127 -34
- package/src/scenes/Scene.js +24 -3
- package/src/textures/CompressedArrayTexture.js +18 -0
- package/src/textures/Source.js +1 -1
- package/src/textures/Texture.js +2 -1
- package/src/utils.js +1 -1
- package/examples/js/controls/experimental/CameraControls.js +0 -1048
- package/examples/js/libs/lottie_canvas.js +0 -12751
- package/examples/js/loaders/KTX2Loader.js +0 -558
- package/examples/js/shaders/PixelShader.js +0 -51
- package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
- package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
- package/examples/jsm/nodes/core/NodeVary.js +0 -14
- package/examples/jsm/nodes/core/VaryNode.js +0 -54
- package/examples/jsm/package.json +0 -3
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
- package/examples/jsm/shaders/PixelShader.js +0 -44
- package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
( function () {
|
|
2
2
|
|
|
3
3
|
const _raycaster = new THREE.Raycaster();
|
|
4
|
-
|
|
5
4
|
const _tempVector = new THREE.Vector3();
|
|
6
|
-
|
|
7
5
|
const _tempVector2 = new THREE.Vector3();
|
|
8
|
-
|
|
9
6
|
const _tempQuaternion = new THREE.Quaternion();
|
|
10
|
-
|
|
11
7
|
const _unit = {
|
|
12
8
|
X: new THREE.Vector3( 1, 0, 0 ),
|
|
13
9
|
Y: new THREE.Vector3( 0, 1, 0 ),
|
|
@@ -26,13 +22,11 @@
|
|
|
26
22
|
const _objectChangeEvent = {
|
|
27
23
|
type: 'objectChange'
|
|
28
24
|
};
|
|
29
|
-
|
|
30
25
|
class TransformControls extends THREE.Object3D {
|
|
31
26
|
|
|
32
27
|
constructor( camera, domElement ) {
|
|
33
28
|
|
|
34
29
|
super();
|
|
35
|
-
|
|
36
30
|
if ( domElement === undefined ) {
|
|
37
31
|
|
|
38
32
|
console.warn( 'THREE.TransformControls: The second parameter "domElement" is now mandatory.' );
|
|
@@ -46,16 +40,14 @@
|
|
|
46
40
|
this.domElement.style.touchAction = 'none'; // disable touch scroll
|
|
47
41
|
|
|
48
42
|
const _gizmo = new TransformControlsGizmo();
|
|
49
|
-
|
|
50
43
|
this._gizmo = _gizmo;
|
|
51
44
|
this.add( _gizmo );
|
|
52
|
-
|
|
53
45
|
const _plane = new TransformControlsPlane();
|
|
54
|
-
|
|
55
46
|
this._plane = _plane;
|
|
56
47
|
this.add( _plane );
|
|
57
|
-
const scope = this;
|
|
48
|
+
const scope = this;
|
|
58
49
|
|
|
50
|
+
// Defined getter, setter and store for a property
|
|
59
51
|
function defineProperty( propName, defaultValue ) {
|
|
60
52
|
|
|
61
53
|
let propValue = defaultValue;
|
|
@@ -86,11 +78,12 @@
|
|
|
86
78
|
_plane[ propName ] = defaultValue;
|
|
87
79
|
_gizmo[ propName ] = defaultValue;
|
|
88
80
|
|
|
89
|
-
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Define properties with getters/setter
|
|
90
84
|
// Setting the defined property will automatically trigger change event
|
|
91
85
|
// Defined properties are passed down to gizmo and plane
|
|
92
86
|
|
|
93
|
-
|
|
94
87
|
defineProperty( 'camera', camera );
|
|
95
88
|
defineProperty( 'object', undefined );
|
|
96
89
|
defineProperty( 'enabled', true );
|
|
@@ -104,7 +97,9 @@
|
|
|
104
97
|
defineProperty( 'dragging', false );
|
|
105
98
|
defineProperty( 'showX', true );
|
|
106
99
|
defineProperty( 'showY', true );
|
|
107
|
-
defineProperty( 'showZ', true );
|
|
100
|
+
defineProperty( 'showZ', true );
|
|
101
|
+
|
|
102
|
+
// Reusable utility variables
|
|
108
103
|
|
|
109
104
|
const worldPosition = new THREE.Vector3();
|
|
110
105
|
const worldPositionStart = new THREE.Vector3();
|
|
@@ -116,7 +111,9 @@
|
|
|
116
111
|
const pointEnd = new THREE.Vector3();
|
|
117
112
|
const rotationAxis = new THREE.Vector3();
|
|
118
113
|
const rotationAngle = 0;
|
|
119
|
-
const eye = new THREE.Vector3();
|
|
114
|
+
const eye = new THREE.Vector3();
|
|
115
|
+
|
|
116
|
+
// TODO: remove properties unused in plane and gizmo
|
|
120
117
|
|
|
121
118
|
defineProperty( 'worldPosition', worldPosition );
|
|
122
119
|
defineProperty( 'worldPositionStart', worldPositionStart );
|
|
@@ -152,15 +149,14 @@
|
|
|
152
149
|
this.domElement.addEventListener( 'pointermove', this._onPointerHover );
|
|
153
150
|
this.domElement.addEventListener( 'pointerup', this._onPointerUp );
|
|
154
151
|
|
|
155
|
-
}
|
|
156
|
-
|
|
152
|
+
}
|
|
157
153
|
|
|
154
|
+
// updateMatrixWorld updates key transformation variables
|
|
158
155
|
updateMatrixWorld() {
|
|
159
156
|
|
|
160
157
|
if ( this.object !== undefined ) {
|
|
161
158
|
|
|
162
159
|
this.object.updateMatrixWorld();
|
|
163
|
-
|
|
164
160
|
if ( this.object.parent === null ) {
|
|
165
161
|
|
|
166
162
|
console.error( 'TransformControls: The attached 3D object must be a part of the scene graph.' );
|
|
@@ -172,28 +168,31 @@
|
|
|
172
168
|
}
|
|
173
169
|
|
|
174
170
|
this.object.matrixWorld.decompose( this.worldPosition, this.worldQuaternion, this._worldScale );
|
|
175
|
-
|
|
176
171
|
this._parentQuaternionInv.copy( this._parentQuaternion ).invert();
|
|
177
|
-
|
|
178
172
|
this._worldQuaternionInv.copy( this.worldQuaternion ).invert();
|
|
179
173
|
|
|
180
174
|
}
|
|
181
175
|
|
|
182
176
|
this.camera.updateMatrixWorld();
|
|
183
177
|
this.camera.matrixWorld.decompose( this.cameraPosition, this.cameraQuaternion, this._cameraScale );
|
|
184
|
-
|
|
178
|
+
if ( this.camera.isOrthographicCamera ) {
|
|
179
|
+
|
|
180
|
+
this.camera.getWorldDirection( this.eye ).negate();
|
|
181
|
+
|
|
182
|
+
} else {
|
|
183
|
+
|
|
184
|
+
this.eye.copy( this.cameraPosition ).sub( this.worldPosition ).normalize();
|
|
185
|
+
|
|
186
|
+
}
|
|
187
|
+
|
|
185
188
|
super.updateMatrixWorld( this );
|
|
186
189
|
|
|
187
190
|
}
|
|
188
|
-
|
|
189
191
|
pointerHover( pointer ) {
|
|
190
192
|
|
|
191
193
|
if ( this.object === undefined || this.dragging === true ) return;
|
|
192
|
-
|
|
193
194
|
_raycaster.setFromCamera( pointer, this.camera );
|
|
194
|
-
|
|
195
195
|
const intersect = intersectObjectWithRay( this._gizmo.picker[ this.mode ], _raycaster );
|
|
196
|
-
|
|
197
196
|
if ( intersect ) {
|
|
198
197
|
|
|
199
198
|
this.axis = intersect.object.name;
|
|
@@ -205,28 +204,20 @@
|
|
|
205
204
|
}
|
|
206
205
|
|
|
207
206
|
}
|
|
208
|
-
|
|
209
207
|
pointerDown( pointer ) {
|
|
210
208
|
|
|
211
209
|
if ( this.object === undefined || this.dragging === true || pointer.button !== 0 ) return;
|
|
212
|
-
|
|
213
210
|
if ( this.axis !== null ) {
|
|
214
211
|
|
|
215
212
|
_raycaster.setFromCamera( pointer, this.camera );
|
|
216
|
-
|
|
217
213
|
const planeIntersect = intersectObjectWithRay( this._plane, _raycaster, true );
|
|
218
|
-
|
|
219
214
|
if ( planeIntersect ) {
|
|
220
215
|
|
|
221
216
|
this.object.updateMatrixWorld();
|
|
222
217
|
this.object.parent.updateMatrixWorld();
|
|
223
|
-
|
|
224
218
|
this._positionStart.copy( this.object.position );
|
|
225
|
-
|
|
226
219
|
this._quaternionStart.copy( this.object.quaternion );
|
|
227
|
-
|
|
228
220
|
this._scaleStart.copy( this.object.scale );
|
|
229
|
-
|
|
230
221
|
this.object.matrixWorld.decompose( this.worldPositionStart, this.worldQuaternionStart, this._worldScaleStart );
|
|
231
222
|
this.pointStart.copy( planeIntersect.point ).sub( this.worldPositionStart );
|
|
232
223
|
|
|
@@ -239,14 +230,12 @@
|
|
|
239
230
|
}
|
|
240
231
|
|
|
241
232
|
}
|
|
242
|
-
|
|
243
233
|
pointerMove( pointer ) {
|
|
244
234
|
|
|
245
235
|
const axis = this.axis;
|
|
246
236
|
const mode = this.mode;
|
|
247
237
|
const object = this.object;
|
|
248
238
|
let space = this.space;
|
|
249
|
-
|
|
250
239
|
if ( mode === 'scale' ) {
|
|
251
240
|
|
|
252
241
|
space = 'local';
|
|
@@ -258,18 +247,15 @@
|
|
|
258
247
|
}
|
|
259
248
|
|
|
260
249
|
if ( object === undefined || axis === null || this.dragging === false || pointer.button !== - 1 ) return;
|
|
261
|
-
|
|
262
250
|
_raycaster.setFromCamera( pointer, this.camera );
|
|
263
|
-
|
|
264
251
|
const planeIntersect = intersectObjectWithRay( this._plane, _raycaster, true );
|
|
265
252
|
if ( ! planeIntersect ) return;
|
|
266
253
|
this.pointEnd.copy( planeIntersect.point ).sub( this.worldPositionStart );
|
|
267
|
-
|
|
268
254
|
if ( mode === 'translate' ) {
|
|
269
255
|
|
|
270
256
|
// Apply translate
|
|
271
|
-
this._offset.copy( this.pointEnd ).sub( this.pointStart );
|
|
272
257
|
|
|
258
|
+
this._offset.copy( this.pointEnd ).sub( this.pointStart );
|
|
273
259
|
if ( space === 'local' && axis !== 'XYZ' ) {
|
|
274
260
|
|
|
275
261
|
this._offset.applyQuaternion( this._worldQuaternionInv );
|
|
@@ -279,7 +265,6 @@
|
|
|
279
265
|
if ( axis.indexOf( 'X' ) === - 1 ) this._offset.x = 0;
|
|
280
266
|
if ( axis.indexOf( 'Y' ) === - 1 ) this._offset.y = 0;
|
|
281
267
|
if ( axis.indexOf( 'Z' ) === - 1 ) this._offset.z = 0;
|
|
282
|
-
|
|
283
268
|
if ( space === 'local' && axis !== 'XYZ' ) {
|
|
284
269
|
|
|
285
270
|
this._offset.applyQuaternion( this._quaternionStart ).divide( this._parentScale );
|
|
@@ -290,14 +275,15 @@
|
|
|
290
275
|
|
|
291
276
|
}
|
|
292
277
|
|
|
293
|
-
object.position.copy( this._offset ).add( this._positionStart );
|
|
278
|
+
object.position.copy( this._offset ).add( this._positionStart );
|
|
279
|
+
|
|
280
|
+
// Apply translation snap
|
|
294
281
|
|
|
295
282
|
if ( this.translationSnap ) {
|
|
296
283
|
|
|
297
284
|
if ( space === 'local' ) {
|
|
298
285
|
|
|
299
286
|
object.position.applyQuaternion( _tempQuaternion.copy( this._quaternionStart ).invert() );
|
|
300
|
-
|
|
301
287
|
if ( axis.search( 'X' ) !== - 1 ) {
|
|
302
288
|
|
|
303
289
|
object.position.x = Math.round( object.position.x / this.translationSnap ) * this.translationSnap;
|
|
@@ -362,21 +348,15 @@
|
|
|
362
348
|
|
|
363
349
|
let d = this.pointEnd.length() / this.pointStart.length();
|
|
364
350
|
if ( this.pointEnd.dot( this.pointStart ) < 0 ) d *= - 1;
|
|
365
|
-
|
|
366
351
|
_tempVector2.set( d, d, d );
|
|
367
352
|
|
|
368
353
|
} else {
|
|
369
354
|
|
|
370
355
|
_tempVector.copy( this.pointStart );
|
|
371
|
-
|
|
372
356
|
_tempVector2.copy( this.pointEnd );
|
|
373
|
-
|
|
374
357
|
_tempVector.applyQuaternion( this._worldQuaternionInv );
|
|
375
|
-
|
|
376
358
|
_tempVector2.applyQuaternion( this._worldQuaternionInv );
|
|
377
|
-
|
|
378
359
|
_tempVector2.divide( _tempVector );
|
|
379
|
-
|
|
380
360
|
if ( axis.search( 'X' ) === - 1 ) {
|
|
381
361
|
|
|
382
362
|
_tempVector2.x = 1;
|
|
@@ -395,11 +375,11 @@
|
|
|
395
375
|
|
|
396
376
|
}
|
|
397
377
|
|
|
398
|
-
}
|
|
378
|
+
}
|
|
399
379
|
|
|
380
|
+
// Apply scale
|
|
400
381
|
|
|
401
382
|
object.scale.copy( this._scaleStart ).multiply( _tempVector2 );
|
|
402
|
-
|
|
403
383
|
if ( this.scaleSnap ) {
|
|
404
384
|
|
|
405
385
|
if ( axis.search( 'X' ) !== - 1 ) {
|
|
@@ -425,18 +405,13 @@
|
|
|
425
405
|
} else if ( mode === 'rotate' ) {
|
|
426
406
|
|
|
427
407
|
this._offset.copy( this.pointEnd ).sub( this.pointStart );
|
|
428
|
-
|
|
429
408
|
const ROTATION_SPEED = 20 / this.worldPosition.distanceTo( _tempVector.setFromMatrixPosition( this.camera.matrixWorld ) );
|
|
430
|
-
|
|
431
409
|
if ( axis === 'E' ) {
|
|
432
410
|
|
|
433
411
|
this.rotationAxis.copy( this.eye );
|
|
434
412
|
this.rotationAngle = this.pointEnd.angleTo( this.pointStart );
|
|
435
|
-
|
|
436
413
|
this._startNorm.copy( this.pointStart ).normalize();
|
|
437
|
-
|
|
438
414
|
this._endNorm.copy( this.pointEnd ).normalize();
|
|
439
|
-
|
|
440
415
|
this.rotationAngle *= this._endNorm.cross( this._startNorm ).dot( this.eye ) < 0 ? 1 : - 1;
|
|
441
416
|
|
|
442
417
|
} else if ( axis === 'XYZE' ) {
|
|
@@ -447,9 +422,7 @@
|
|
|
447
422
|
} else if ( axis === 'X' || axis === 'Y' || axis === 'Z' ) {
|
|
448
423
|
|
|
449
424
|
this.rotationAxis.copy( _unit[ axis ] );
|
|
450
|
-
|
|
451
425
|
_tempVector.copy( _unit[ axis ] );
|
|
452
|
-
|
|
453
426
|
if ( space === 'local' ) {
|
|
454
427
|
|
|
455
428
|
_tempVector.applyQuaternion( this.worldQuaternion );
|
|
@@ -458,11 +431,13 @@
|
|
|
458
431
|
|
|
459
432
|
this.rotationAngle = this._offset.dot( _tempVector.cross( this.eye ).normalize() ) * ROTATION_SPEED;
|
|
460
433
|
|
|
461
|
-
}
|
|
434
|
+
}
|
|
462
435
|
|
|
436
|
+
// Apply rotation snap
|
|
463
437
|
|
|
464
|
-
if ( this.rotationSnap ) this.rotationAngle = Math.round( this.rotationAngle / this.rotationSnap ) * this.rotationSnap;
|
|
438
|
+
if ( this.rotationSnap ) this.rotationAngle = Math.round( this.rotationAngle / this.rotationSnap ) * this.rotationSnap;
|
|
465
439
|
|
|
440
|
+
// Apply rotate
|
|
466
441
|
if ( space === 'local' && axis !== 'E' && axis !== 'XYZE' ) {
|
|
467
442
|
|
|
468
443
|
object.quaternion.copy( this._quaternionStart );
|
|
@@ -482,11 +457,9 @@
|
|
|
482
457
|
this.dispatchEvent( _objectChangeEvent );
|
|
483
458
|
|
|
484
459
|
}
|
|
485
|
-
|
|
486
460
|
pointerUp( pointer ) {
|
|
487
461
|
|
|
488
462
|
if ( pointer.button !== 0 ) return;
|
|
489
|
-
|
|
490
463
|
if ( this.dragging && this.axis !== null ) {
|
|
491
464
|
|
|
492
465
|
_mouseUpEvent.mode = this.mode;
|
|
@@ -498,7 +471,6 @@
|
|
|
498
471
|
this.axis = null;
|
|
499
472
|
|
|
500
473
|
}
|
|
501
|
-
|
|
502
474
|
dispose() {
|
|
503
475
|
|
|
504
476
|
this.domElement.removeEventListener( 'pointerdown', this._onPointerDown );
|
|
@@ -512,18 +484,18 @@
|
|
|
512
484
|
|
|
513
485
|
} );
|
|
514
486
|
|
|
515
|
-
}
|
|
516
|
-
|
|
487
|
+
}
|
|
517
488
|
|
|
489
|
+
// Set current object
|
|
518
490
|
attach( object ) {
|
|
519
491
|
|
|
520
492
|
this.object = object;
|
|
521
493
|
this.visible = true;
|
|
522
494
|
return this;
|
|
523
495
|
|
|
524
|
-
}
|
|
525
|
-
|
|
496
|
+
}
|
|
526
497
|
|
|
498
|
+
// Detach from object
|
|
527
499
|
detach() {
|
|
528
500
|
|
|
529
501
|
this.object = undefined;
|
|
@@ -532,11 +504,9 @@
|
|
|
532
504
|
return this;
|
|
533
505
|
|
|
534
506
|
}
|
|
535
|
-
|
|
536
507
|
reset() {
|
|
537
508
|
|
|
538
509
|
if ( ! this.enabled ) return;
|
|
539
|
-
|
|
540
510
|
if ( this.dragging ) {
|
|
541
511
|
|
|
542
512
|
this.object.position.copy( this._positionStart );
|
|
@@ -549,64 +519,53 @@
|
|
|
549
519
|
}
|
|
550
520
|
|
|
551
521
|
}
|
|
552
|
-
|
|
553
522
|
getRaycaster() {
|
|
554
523
|
|
|
555
524
|
return _raycaster;
|
|
556
525
|
|
|
557
|
-
}
|
|
526
|
+
}
|
|
558
527
|
|
|
528
|
+
// TODO: deprecate
|
|
559
529
|
|
|
560
530
|
getMode() {
|
|
561
531
|
|
|
562
532
|
return this.mode;
|
|
563
533
|
|
|
564
534
|
}
|
|
565
|
-
|
|
566
535
|
setMode( mode ) {
|
|
567
536
|
|
|
568
537
|
this.mode = mode;
|
|
569
538
|
|
|
570
539
|
}
|
|
571
|
-
|
|
572
540
|
setTranslationSnap( translationSnap ) {
|
|
573
541
|
|
|
574
542
|
this.translationSnap = translationSnap;
|
|
575
543
|
|
|
576
544
|
}
|
|
577
|
-
|
|
578
545
|
setRotationSnap( rotationSnap ) {
|
|
579
546
|
|
|
580
547
|
this.rotationSnap = rotationSnap;
|
|
581
548
|
|
|
582
549
|
}
|
|
583
|
-
|
|
584
550
|
setScaleSnap( scaleSnap ) {
|
|
585
551
|
|
|
586
552
|
this.scaleSnap = scaleSnap;
|
|
587
553
|
|
|
588
554
|
}
|
|
589
|
-
|
|
590
555
|
setSize( size ) {
|
|
591
556
|
|
|
592
557
|
this.size = size;
|
|
593
558
|
|
|
594
559
|
}
|
|
595
|
-
|
|
596
560
|
setSpace( space ) {
|
|
597
561
|
|
|
598
562
|
this.space = space;
|
|
599
563
|
|
|
600
564
|
}
|
|
601
565
|
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
console.warn( 'THREE.TransformControls: update function has no more functionality and therefore has been deprecated.' );
|
|
605
|
-
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
} // mouse / touch event handlers
|
|
566
|
+
}
|
|
609
567
|
|
|
568
|
+
// mouse / touch event handlers
|
|
610
569
|
|
|
611
570
|
function getPointer( event ) {
|
|
612
571
|
|
|
@@ -634,7 +593,6 @@
|
|
|
634
593
|
function onPointerHover( event ) {
|
|
635
594
|
|
|
636
595
|
if ( ! this.enabled ) return;
|
|
637
|
-
|
|
638
596
|
switch ( event.pointerType ) {
|
|
639
597
|
|
|
640
598
|
case 'mouse':
|
|
@@ -649,7 +607,6 @@
|
|
|
649
607
|
function onPointerDown( event ) {
|
|
650
608
|
|
|
651
609
|
if ( ! this.enabled ) return;
|
|
652
|
-
|
|
653
610
|
if ( ! document.pointerLockElement ) {
|
|
654
611
|
|
|
655
612
|
this.domElement.setPointerCapture( event.pointerId );
|
|
@@ -681,7 +638,6 @@
|
|
|
681
638
|
function intersectObjectWithRay( object, raycaster, includeInvisible ) {
|
|
682
639
|
|
|
683
640
|
const allIntersections = raycaster.intersectObject( object, true );
|
|
684
|
-
|
|
685
641
|
for ( let i = 0; i < allIntersections.length; i ++ ) {
|
|
686
642
|
|
|
687
643
|
if ( allIntersections[ i ].object.visible || includeInvisible ) {
|
|
@@ -694,45 +650,35 @@
|
|
|
694
650
|
|
|
695
651
|
return false;
|
|
696
652
|
|
|
697
|
-
}
|
|
698
|
-
// Reusable utility variables
|
|
653
|
+
}
|
|
699
654
|
|
|
655
|
+
//
|
|
700
656
|
|
|
701
|
-
|
|
657
|
+
// Reusable utility variables
|
|
702
658
|
|
|
659
|
+
const _tempEuler = new THREE.Euler();
|
|
703
660
|
const _alignVector = new THREE.Vector3( 0, 1, 0 );
|
|
704
|
-
|
|
705
661
|
const _zeroVector = new THREE.Vector3( 0, 0, 0 );
|
|
706
|
-
|
|
707
662
|
const _lookAtMatrix = new THREE.Matrix4();
|
|
708
|
-
|
|
709
663
|
const _tempQuaternion2 = new THREE.Quaternion();
|
|
710
|
-
|
|
711
664
|
const _identityQuaternion = new THREE.Quaternion();
|
|
712
|
-
|
|
713
665
|
const _dirVector = new THREE.Vector3();
|
|
714
|
-
|
|
715
666
|
const _tempMatrix = new THREE.Matrix4();
|
|
716
|
-
|
|
717
667
|
const _unitX = new THREE.Vector3( 1, 0, 0 );
|
|
718
|
-
|
|
719
668
|
const _unitY = new THREE.Vector3( 0, 1, 0 );
|
|
720
|
-
|
|
721
669
|
const _unitZ = new THREE.Vector3( 0, 0, 1 );
|
|
722
|
-
|
|
723
670
|
const _v1 = new THREE.Vector3();
|
|
724
|
-
|
|
725
671
|
const _v2 = new THREE.Vector3();
|
|
726
|
-
|
|
727
672
|
const _v3 = new THREE.Vector3();
|
|
728
|
-
|
|
729
673
|
class TransformControlsGizmo extends THREE.Object3D {
|
|
730
674
|
|
|
731
675
|
constructor() {
|
|
732
676
|
|
|
733
677
|
super();
|
|
734
678
|
this.isTransformControlsGizmo = true;
|
|
735
|
-
this.type = 'TransformControlsGizmo';
|
|
679
|
+
this.type = 'TransformControlsGizmo';
|
|
680
|
+
|
|
681
|
+
// shared materials
|
|
736
682
|
|
|
737
683
|
const gizmoMaterial = new THREE.MeshBasicMaterial( {
|
|
738
684
|
depthTest: false,
|
|
@@ -747,7 +693,9 @@
|
|
|
747
693
|
fog: false,
|
|
748
694
|
toneMapped: false,
|
|
749
695
|
transparent: true
|
|
750
|
-
} );
|
|
696
|
+
} );
|
|
697
|
+
|
|
698
|
+
// Make unique material for each axis/color
|
|
751
699
|
|
|
752
700
|
const matInvisible = gizmoMaterial.clone();
|
|
753
701
|
matInvisible.opacity = 0.15;
|
|
@@ -776,7 +724,9 @@
|
|
|
776
724
|
const matYellow = gizmoMaterial.clone();
|
|
777
725
|
matYellow.color.setHex( 0xffff00 );
|
|
778
726
|
const matGray = gizmoMaterial.clone();
|
|
779
|
-
matGray.color.setHex( 0x787878 );
|
|
727
|
+
matGray.color.setHex( 0x787878 );
|
|
728
|
+
|
|
729
|
+
// reusable geometry
|
|
780
730
|
|
|
781
731
|
const arrowGeometry = new THREE.CylinderGeometry( 0, 0.04, 0.1, 12 );
|
|
782
732
|
arrowGeometry.translate( 0, 0.05, 0 );
|
|
@@ -786,7 +736,6 @@
|
|
|
786
736
|
lineGeometry.setAttribute( 'position', new THREE.Float32BufferAttribute( [ 0, 0, 0, 1, 0, 0 ], 3 ) );
|
|
787
737
|
const lineGeometry2 = new THREE.CylinderGeometry( 0.0075, 0.0075, 0.5, 3 );
|
|
788
738
|
lineGeometry2.translate( 0, 0.25, 0 );
|
|
789
|
-
|
|
790
739
|
function CircleGeometry( radius, arc ) {
|
|
791
740
|
|
|
792
741
|
const geometry = new THREE.TorusGeometry( radius, 0.0075, 3, 64, arc * Math.PI * 2 );
|
|
@@ -794,8 +743,9 @@
|
|
|
794
743
|
geometry.rotateX( Math.PI / 2 );
|
|
795
744
|
return geometry;
|
|
796
745
|
|
|
797
|
-
}
|
|
746
|
+
}
|
|
798
747
|
|
|
748
|
+
// Special geometry for transform helper. If scaled with position vector it spans from [0,0,0] to position
|
|
799
749
|
|
|
800
750
|
function TranslateHelperGeometry() {
|
|
801
751
|
|
|
@@ -803,8 +753,9 @@
|
|
|
803
753
|
geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( [ 0, 0, 0, 1, 1, 1 ], 3 ) );
|
|
804
754
|
return geometry;
|
|
805
755
|
|
|
806
|
-
}
|
|
756
|
+
}
|
|
807
757
|
|
|
758
|
+
// Gizmo definitions - custom hierarchy definitions for setupGizmo() function
|
|
808
759
|
|
|
809
760
|
const gizmoTranslate = {
|
|
810
761
|
X: [[ new THREE.Mesh( arrowGeometry, matRed ), [ 0.5, 0, 0 ], [ 0, 0, - Math.PI / 2 ]], [ new THREE.Mesh( arrowGeometry, matRed ), [ - 0.5, 0, 0 ], [ 0, 0, Math.PI / 2 ]], [ new THREE.Mesh( lineGeometry2, matRed ), [ 0, 0, 0 ], [ 0, 0, - Math.PI / 2 ]]],
|
|
@@ -871,12 +822,13 @@
|
|
|
871
822
|
X: [[ new THREE.Line( lineGeometry, matHelper.clone() ), [ - 1e3, 0, 0 ], null, [ 1e6, 1, 1 ], 'helper' ]],
|
|
872
823
|
Y: [[ new THREE.Line( lineGeometry, matHelper.clone() ), [ 0, - 1e3, 0 ], [ 0, 0, Math.PI / 2 ], [ 1e6, 1, 1 ], 'helper' ]],
|
|
873
824
|
Z: [[ new THREE.Line( lineGeometry, matHelper.clone() ), [ 0, 0, - 1e3 ], [ 0, - Math.PI / 2, 0 ], [ 1e6, 1, 1 ], 'helper' ]]
|
|
874
|
-
};
|
|
825
|
+
};
|
|
826
|
+
|
|
827
|
+
// Creates an THREE.Object3D with gizmos described in custom hierarchy definition.
|
|
875
828
|
|
|
876
829
|
function setupGizmo( gizmoMap ) {
|
|
877
830
|
|
|
878
831
|
const gizmo = new THREE.Object3D();
|
|
879
|
-
|
|
880
832
|
for ( const name in gizmoMap ) {
|
|
881
833
|
|
|
882
834
|
for ( let i = gizmoMap[ name ].length; i --; ) {
|
|
@@ -885,11 +837,11 @@
|
|
|
885
837
|
const position = gizmoMap[ name ][ i ][ 1 ];
|
|
886
838
|
const rotation = gizmoMap[ name ][ i ][ 2 ];
|
|
887
839
|
const scale = gizmoMap[ name ][ i ][ 3 ];
|
|
888
|
-
const tag = gizmoMap[ name ][ i ][ 4 ];
|
|
840
|
+
const tag = gizmoMap[ name ][ i ][ 4 ];
|
|
889
841
|
|
|
842
|
+
// name and tag properties are essential for picking and updating logic.
|
|
890
843
|
object.name = name;
|
|
891
844
|
object.tag = tag;
|
|
892
|
-
|
|
893
845
|
if ( position ) {
|
|
894
846
|
|
|
895
847
|
object.position.set( position[ 0 ], position[ 1 ], position[ 2 ] );
|
|
@@ -924,8 +876,9 @@
|
|
|
924
876
|
|
|
925
877
|
return gizmo;
|
|
926
878
|
|
|
927
|
-
}
|
|
879
|
+
}
|
|
928
880
|
|
|
881
|
+
// Gizmo creation
|
|
929
882
|
|
|
930
883
|
this.gizmo = {};
|
|
931
884
|
this.picker = {};
|
|
@@ -938,20 +891,25 @@
|
|
|
938
891
|
this.add( this.picker[ 'scale' ] = setupGizmo( pickerScale ) );
|
|
939
892
|
this.add( this.helper[ 'translate' ] = setupGizmo( helperTranslate ) );
|
|
940
893
|
this.add( this.helper[ 'rotate' ] = setupGizmo( helperRotate ) );
|
|
941
|
-
this.add( this.helper[ 'scale' ] = setupGizmo( helperScale ) );
|
|
894
|
+
this.add( this.helper[ 'scale' ] = setupGizmo( helperScale ) );
|
|
895
|
+
|
|
896
|
+
// Pickers should be hidden always
|
|
942
897
|
|
|
943
898
|
this.picker[ 'translate' ].visible = false;
|
|
944
899
|
this.picker[ 'rotate' ].visible = false;
|
|
945
900
|
this.picker[ 'scale' ].visible = false;
|
|
946
901
|
|
|
947
|
-
}
|
|
902
|
+
}
|
|
948
903
|
|
|
904
|
+
// updateMatrixWorld will update transformations and appearance of individual handles
|
|
949
905
|
|
|
950
906
|
updateMatrixWorld( force ) {
|
|
951
907
|
|
|
952
908
|
const space = this.mode === 'scale' ? 'local' : this.space; // scale always oriented to local rotation
|
|
953
909
|
|
|
954
|
-
const quaternion = space === 'local' ? this.worldQuaternion : _identityQuaternion;
|
|
910
|
+
const quaternion = space === 'local' ? this.worldQuaternion : _identityQuaternion;
|
|
911
|
+
|
|
912
|
+
// Show only gizmos for current transform mode
|
|
955
913
|
|
|
956
914
|
this.gizmo[ 'translate' ].visible = this.mode === 'translate';
|
|
957
915
|
this.gizmo[ 'rotate' ].visible = this.mode === 'rotate';
|
|
@@ -963,16 +921,16 @@
|
|
|
963
921
|
handles = handles.concat( this.picker[ this.mode ].children );
|
|
964
922
|
handles = handles.concat( this.gizmo[ this.mode ].children );
|
|
965
923
|
handles = handles.concat( this.helper[ this.mode ].children );
|
|
966
|
-
|
|
967
924
|
for ( let i = 0; i < handles.length; i ++ ) {
|
|
968
925
|
|
|
969
|
-
const handle = handles[ i ];
|
|
926
|
+
const handle = handles[ i ];
|
|
927
|
+
|
|
928
|
+
// hide aligned to camera
|
|
970
929
|
|
|
971
930
|
handle.visible = true;
|
|
972
931
|
handle.rotation.set( 0, 0, 0 );
|
|
973
932
|
handle.position.copy( this.worldPosition );
|
|
974
933
|
let factor;
|
|
975
|
-
|
|
976
934
|
if ( this.camera.isOrthographicCamera ) {
|
|
977
935
|
|
|
978
936
|
factor = ( this.camera.top - this.camera.bottom ) / this.camera.zoom;
|
|
@@ -983,23 +941,21 @@
|
|
|
983
941
|
|
|
984
942
|
}
|
|
985
943
|
|
|
986
|
-
handle.scale.set( 1, 1, 1 ).multiplyScalar( factor * this.size / 4 );
|
|
944
|
+
handle.scale.set( 1, 1, 1 ).multiplyScalar( factor * this.size / 4 );
|
|
945
|
+
|
|
946
|
+
// TODO: simplify helpers and consider decoupling from gizmo
|
|
987
947
|
|
|
988
948
|
if ( handle.tag === 'helper' ) {
|
|
989
949
|
|
|
990
950
|
handle.visible = false;
|
|
991
|
-
|
|
992
951
|
if ( handle.name === 'AXIS' ) {
|
|
993
952
|
|
|
994
953
|
handle.position.copy( this.worldPositionStart );
|
|
995
954
|
handle.visible = !! this.axis;
|
|
996
|
-
|
|
997
955
|
if ( this.axis === 'X' ) {
|
|
998
956
|
|
|
999
957
|
_tempQuaternion.setFromEuler( _tempEuler.set( 0, 0, 0 ) );
|
|
1000
|
-
|
|
1001
958
|
handle.quaternion.copy( quaternion ).multiply( _tempQuaternion );
|
|
1002
|
-
|
|
1003
959
|
if ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) > 0.9 ) {
|
|
1004
960
|
|
|
1005
961
|
handle.visible = false;
|
|
@@ -1011,9 +967,7 @@
|
|
|
1011
967
|
if ( this.axis === 'Y' ) {
|
|
1012
968
|
|
|
1013
969
|
_tempQuaternion.setFromEuler( _tempEuler.set( 0, 0, Math.PI / 2 ) );
|
|
1014
|
-
|
|
1015
970
|
handle.quaternion.copy( quaternion ).multiply( _tempQuaternion );
|
|
1016
|
-
|
|
1017
971
|
if ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) > 0.9 ) {
|
|
1018
972
|
|
|
1019
973
|
handle.visible = false;
|
|
@@ -1025,9 +979,7 @@
|
|
|
1025
979
|
if ( this.axis === 'Z' ) {
|
|
1026
980
|
|
|
1027
981
|
_tempQuaternion.setFromEuler( _tempEuler.set( 0, Math.PI / 2, 0 ) );
|
|
1028
|
-
|
|
1029
982
|
handle.quaternion.copy( quaternion ).multiply( _tempQuaternion );
|
|
1030
|
-
|
|
1031
983
|
if ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) > 0.9 ) {
|
|
1032
984
|
|
|
1033
985
|
handle.visible = false;
|
|
@@ -1039,9 +991,7 @@
|
|
|
1039
991
|
if ( this.axis === 'XYZE' ) {
|
|
1040
992
|
|
|
1041
993
|
_tempQuaternion.setFromEuler( _tempEuler.set( 0, Math.PI / 2, 0 ) );
|
|
1042
|
-
|
|
1043
994
|
_alignVector.copy( this.rotationAxis );
|
|
1044
|
-
|
|
1045
995
|
handle.quaternion.setFromRotationMatrix( _lookAtMatrix.lookAt( _zeroVector, _alignVector, _unitY ) );
|
|
1046
996
|
handle.quaternion.multiply( _tempQuaternion );
|
|
1047
997
|
handle.visible = this.dragging;
|
|
@@ -1068,18 +1018,14 @@
|
|
|
1068
1018
|
|
|
1069
1019
|
handle.position.copy( this.worldPositionStart );
|
|
1070
1020
|
handle.quaternion.copy( this.worldQuaternionStart );
|
|
1071
|
-
|
|
1072
1021
|
_tempVector.set( 1e-10, 1e-10, 1e-10 ).add( this.worldPositionStart ).sub( this.worldPosition ).multiplyScalar( - 1 );
|
|
1073
|
-
|
|
1074
1022
|
_tempVector.applyQuaternion( this.worldQuaternionStart.clone().invert() );
|
|
1075
|
-
|
|
1076
1023
|
handle.scale.copy( _tempVector );
|
|
1077
1024
|
handle.visible = this.dragging;
|
|
1078
1025
|
|
|
1079
1026
|
} else {
|
|
1080
1027
|
|
|
1081
1028
|
handle.quaternion.copy( quaternion );
|
|
1082
|
-
|
|
1083
1029
|
if ( this.dragging ) {
|
|
1084
1030
|
|
|
1085
1031
|
handle.position.copy( this.worldPositionStart );
|
|
@@ -1096,25 +1042,25 @@
|
|
|
1096
1042
|
|
|
1097
1043
|
}
|
|
1098
1044
|
|
|
1099
|
-
}
|
|
1100
|
-
|
|
1045
|
+
}
|
|
1101
1046
|
|
|
1047
|
+
// If updating helper, skip rest of the loop
|
|
1102
1048
|
continue;
|
|
1103
1049
|
|
|
1104
|
-
}
|
|
1050
|
+
}
|
|
1105
1051
|
|
|
1052
|
+
// Align handles to current local or world rotation
|
|
1106
1053
|
|
|
1107
1054
|
handle.quaternion.copy( quaternion );
|
|
1108
|
-
|
|
1109
1055
|
if ( this.mode === 'translate' || this.mode === 'scale' ) {
|
|
1110
1056
|
|
|
1111
1057
|
// Hide translate and scale axis facing the camera
|
|
1112
|
-
const AXIS_HIDE_TRESHOLD = 0.99;
|
|
1113
|
-
const PLANE_HIDE_TRESHOLD = 0.2;
|
|
1114
1058
|
|
|
1059
|
+
const AXIS_HIDE_THRESHOLD = 0.99;
|
|
1060
|
+
const PLANE_HIDE_THRESHOLD = 0.2;
|
|
1115
1061
|
if ( handle.name === 'X' ) {
|
|
1116
1062
|
|
|
1117
|
-
if ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) >
|
|
1063
|
+
if ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {
|
|
1118
1064
|
|
|
1119
1065
|
handle.scale.set( 1e-10, 1e-10, 1e-10 );
|
|
1120
1066
|
handle.visible = false;
|
|
@@ -1125,7 +1071,7 @@
|
|
|
1125
1071
|
|
|
1126
1072
|
if ( handle.name === 'Y' ) {
|
|
1127
1073
|
|
|
1128
|
-
if ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) >
|
|
1074
|
+
if ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {
|
|
1129
1075
|
|
|
1130
1076
|
handle.scale.set( 1e-10, 1e-10, 1e-10 );
|
|
1131
1077
|
handle.visible = false;
|
|
@@ -1136,7 +1082,7 @@
|
|
|
1136
1082
|
|
|
1137
1083
|
if ( handle.name === 'Z' ) {
|
|
1138
1084
|
|
|
1139
|
-
if ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) >
|
|
1085
|
+
if ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) > AXIS_HIDE_THRESHOLD ) {
|
|
1140
1086
|
|
|
1141
1087
|
handle.scale.set( 1e-10, 1e-10, 1e-10 );
|
|
1142
1088
|
handle.visible = false;
|
|
@@ -1147,7 +1093,7 @@
|
|
|
1147
1093
|
|
|
1148
1094
|
if ( handle.name === 'XY' ) {
|
|
1149
1095
|
|
|
1150
|
-
if ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) <
|
|
1096
|
+
if ( Math.abs( _alignVector.copy( _unitZ ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {
|
|
1151
1097
|
|
|
1152
1098
|
handle.scale.set( 1e-10, 1e-10, 1e-10 );
|
|
1153
1099
|
handle.visible = false;
|
|
@@ -1158,7 +1104,7 @@
|
|
|
1158
1104
|
|
|
1159
1105
|
if ( handle.name === 'YZ' ) {
|
|
1160
1106
|
|
|
1161
|
-
if ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) <
|
|
1107
|
+
if ( Math.abs( _alignVector.copy( _unitX ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {
|
|
1162
1108
|
|
|
1163
1109
|
handle.scale.set( 1e-10, 1e-10, 1e-10 );
|
|
1164
1110
|
handle.visible = false;
|
|
@@ -1169,7 +1115,7 @@
|
|
|
1169
1115
|
|
|
1170
1116
|
if ( handle.name === 'XZ' ) {
|
|
1171
1117
|
|
|
1172
|
-
if ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) <
|
|
1118
|
+
if ( Math.abs( _alignVector.copy( _unitY ).applyQuaternion( quaternion ).dot( this.eye ) ) < PLANE_HIDE_THRESHOLD ) {
|
|
1173
1119
|
|
|
1174
1120
|
handle.scale.set( 1e-10, 1e-10, 1e-10 );
|
|
1175
1121
|
handle.visible = false;
|
|
@@ -1181,10 +1127,9 @@
|
|
|
1181
1127
|
} else if ( this.mode === 'rotate' ) {
|
|
1182
1128
|
|
|
1183
1129
|
// Align handles to current local or world rotation
|
|
1184
|
-
_tempQuaternion2.copy( quaternion );
|
|
1185
1130
|
|
|
1131
|
+
_tempQuaternion2.copy( quaternion );
|
|
1186
1132
|
_alignVector.copy( this.eye ).applyQuaternion( _tempQuaternion.copy( quaternion ).invert() );
|
|
1187
|
-
|
|
1188
1133
|
if ( handle.name.search( 'E' ) !== - 1 ) {
|
|
1189
1134
|
|
|
1190
1135
|
handle.quaternion.setFromRotationMatrix( _lookAtMatrix.lookAt( this.eye, _zeroVector, _unitY ) );
|
|
@@ -1194,9 +1139,7 @@
|
|
|
1194
1139
|
if ( handle.name === 'X' ) {
|
|
1195
1140
|
|
|
1196
1141
|
_tempQuaternion.setFromAxisAngle( _unitX, Math.atan2( - _alignVector.y, _alignVector.z ) );
|
|
1197
|
-
|
|
1198
1142
|
_tempQuaternion.multiplyQuaternions( _tempQuaternion2, _tempQuaternion );
|
|
1199
|
-
|
|
1200
1143
|
handle.quaternion.copy( _tempQuaternion );
|
|
1201
1144
|
|
|
1202
1145
|
}
|
|
@@ -1204,9 +1147,7 @@
|
|
|
1204
1147
|
if ( handle.name === 'Y' ) {
|
|
1205
1148
|
|
|
1206
1149
|
_tempQuaternion.setFromAxisAngle( _unitY, Math.atan2( _alignVector.x, _alignVector.z ) );
|
|
1207
|
-
|
|
1208
1150
|
_tempQuaternion.multiplyQuaternions( _tempQuaternion2, _tempQuaternion );
|
|
1209
|
-
|
|
1210
1151
|
handle.quaternion.copy( _tempQuaternion );
|
|
1211
1152
|
|
|
1212
1153
|
}
|
|
@@ -1214,26 +1155,25 @@
|
|
|
1214
1155
|
if ( handle.name === 'Z' ) {
|
|
1215
1156
|
|
|
1216
1157
|
_tempQuaternion.setFromAxisAngle( _unitZ, Math.atan2( _alignVector.y, _alignVector.x ) );
|
|
1217
|
-
|
|
1218
1158
|
_tempQuaternion.multiplyQuaternions( _tempQuaternion2, _tempQuaternion );
|
|
1219
|
-
|
|
1220
1159
|
handle.quaternion.copy( _tempQuaternion );
|
|
1221
1160
|
|
|
1222
1161
|
}
|
|
1223
1162
|
|
|
1224
|
-
}
|
|
1225
|
-
|
|
1163
|
+
}
|
|
1226
1164
|
|
|
1165
|
+
// Hide disabled axes
|
|
1227
1166
|
handle.visible = handle.visible && ( handle.name.indexOf( 'X' ) === - 1 || this.showX );
|
|
1228
1167
|
handle.visible = handle.visible && ( handle.name.indexOf( 'Y' ) === - 1 || this.showY );
|
|
1229
1168
|
handle.visible = handle.visible && ( handle.name.indexOf( 'Z' ) === - 1 || this.showZ );
|
|
1230
|
-
handle.visible = handle.visible && ( handle.name.indexOf( 'E' ) === - 1 || this.showX && this.showY && this.showZ );
|
|
1169
|
+
handle.visible = handle.visible && ( handle.name.indexOf( 'E' ) === - 1 || this.showX && this.showY && this.showZ );
|
|
1170
|
+
|
|
1171
|
+
// highlight selected axis
|
|
1231
1172
|
|
|
1232
1173
|
handle.material._color = handle.material._color || handle.material.color.clone();
|
|
1233
1174
|
handle.material._opacity = handle.material._opacity || handle.material.opacity;
|
|
1234
1175
|
handle.material.color.copy( handle.material._color );
|
|
1235
1176
|
handle.material.opacity = handle.material._opacity;
|
|
1236
|
-
|
|
1237
1177
|
if ( this.enabled && this.axis ) {
|
|
1238
1178
|
|
|
1239
1179
|
if ( handle.name === this.axis ) {
|
|
@@ -1260,8 +1200,9 @@
|
|
|
1260
1200
|
|
|
1261
1201
|
}
|
|
1262
1202
|
|
|
1263
|
-
}
|
|
1203
|
+
}
|
|
1264
1204
|
|
|
1205
|
+
//
|
|
1265
1206
|
|
|
1266
1207
|
class TransformControlsPlane extends THREE.Mesh {
|
|
1267
1208
|
|
|
@@ -1279,7 +1220,6 @@
|
|
|
1279
1220
|
this.type = 'TransformControlsPlane';
|
|
1280
1221
|
|
|
1281
1222
|
}
|
|
1282
|
-
|
|
1283
1223
|
updateMatrixWorld( force ) {
|
|
1284
1224
|
|
|
1285
1225
|
let space = this.space;
|
|
@@ -1287,14 +1227,12 @@
|
|
|
1287
1227
|
if ( this.mode === 'scale' ) space = 'local'; // scale always oriented to local rotation
|
|
1288
1228
|
|
|
1289
1229
|
_v1.copy( _unitX ).applyQuaternion( space === 'local' ? this.worldQuaternion : _identityQuaternion );
|
|
1290
|
-
|
|
1291
1230
|
_v2.copy( _unitY ).applyQuaternion( space === 'local' ? this.worldQuaternion : _identityQuaternion );
|
|
1231
|
+
_v3.copy( _unitZ ).applyQuaternion( space === 'local' ? this.worldQuaternion : _identityQuaternion );
|
|
1292
1232
|
|
|
1293
|
-
|
|
1294
|
-
|
|
1233
|
+
// Align the plane for current transform mode, axis and space.
|
|
1295
1234
|
|
|
1296
1235
|
_alignVector.copy( _v2 );
|
|
1297
|
-
|
|
1298
1236
|
switch ( this.mode ) {
|
|
1299
1237
|
|
|
1300
1238
|
case 'translate':
|
|
@@ -1303,52 +1241,34 @@
|
|
|
1303
1241
|
|
|
1304
1242
|
case 'X':
|
|
1305
1243
|
_alignVector.copy( this.eye ).cross( _v1 );
|
|
1306
|
-
|
|
1307
1244
|
_dirVector.copy( _v1 ).cross( _alignVector );
|
|
1308
|
-
|
|
1309
1245
|
break;
|
|
1310
|
-
|
|
1311
1246
|
case 'Y':
|
|
1312
1247
|
_alignVector.copy( this.eye ).cross( _v2 );
|
|
1313
|
-
|
|
1314
1248
|
_dirVector.copy( _v2 ).cross( _alignVector );
|
|
1315
|
-
|
|
1316
1249
|
break;
|
|
1317
|
-
|
|
1318
1250
|
case 'Z':
|
|
1319
1251
|
_alignVector.copy( this.eye ).cross( _v3 );
|
|
1320
|
-
|
|
1321
1252
|
_dirVector.copy( _v3 ).cross( _alignVector );
|
|
1322
|
-
|
|
1323
1253
|
break;
|
|
1324
|
-
|
|
1325
1254
|
case 'XY':
|
|
1326
1255
|
_dirVector.copy( _v3 );
|
|
1327
|
-
|
|
1328
1256
|
break;
|
|
1329
|
-
|
|
1330
1257
|
case 'YZ':
|
|
1331
1258
|
_dirVector.copy( _v1 );
|
|
1332
|
-
|
|
1333
1259
|
break;
|
|
1334
|
-
|
|
1335
1260
|
case 'XZ':
|
|
1336
1261
|
_alignVector.copy( _v3 );
|
|
1337
|
-
|
|
1338
1262
|
_dirVector.copy( _v2 );
|
|
1339
|
-
|
|
1340
1263
|
break;
|
|
1341
|
-
|
|
1342
1264
|
case 'XYZ':
|
|
1343
1265
|
case 'E':
|
|
1344
1266
|
_dirVector.set( 0, 0, 0 );
|
|
1345
|
-
|
|
1346
1267
|
break;
|
|
1347
1268
|
|
|
1348
1269
|
}
|
|
1349
1270
|
|
|
1350
1271
|
break;
|
|
1351
|
-
|
|
1352
1272
|
case 'rotate':
|
|
1353
1273
|
default:
|
|
1354
1274
|
// special case for rotate
|
|
@@ -1364,7 +1284,6 @@
|
|
|
1364
1284
|
} else {
|
|
1365
1285
|
|
|
1366
1286
|
_tempMatrix.lookAt( _tempVector.set( 0, 0, 0 ), _dirVector, _alignVector );
|
|
1367
|
-
|
|
1368
1287
|
this.quaternion.setFromRotationMatrix( _tempMatrix );
|
|
1369
1288
|
|
|
1370
1289
|
}
|