@plastic-software/three 0.167.3 → 0.174.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +36277 -24023
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46743
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50670
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
Controls,
|
|
2
3
|
GridHelper,
|
|
3
4
|
EllipseCurve,
|
|
4
5
|
BufferGeometry,
|
|
@@ -12,8 +13,7 @@ import {
|
|
|
12
13
|
Vector2,
|
|
13
14
|
Vector3,
|
|
14
15
|
Matrix4,
|
|
15
|
-
MathUtils
|
|
16
|
-
EventDispatcher
|
|
16
|
+
MathUtils
|
|
17
17
|
} from 'three';
|
|
18
18
|
|
|
19
19
|
//trackball state
|
|
@@ -70,19 +70,22 @@ const _offset = new Vector3();
|
|
|
70
70
|
const _gizmoMatrixStateTemp = new Matrix4();
|
|
71
71
|
const _cameraMatrixStateTemp = new Matrix4();
|
|
72
72
|
const _scalePointTemp = new Vector3();
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
73
|
+
|
|
74
|
+
const _EPS = 0.000001;
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class ArcballControls extends Controls {
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
*
|
|
81
|
+
* @param {Camera} camera Virtual camera used in the scene
|
|
82
|
+
* @param {?HTMLElement} [domElement=null] Renderer's dom element
|
|
83
|
+
* @param {?Scene} [scene=null] The scene to be rendered
|
|
84
|
+
*/
|
|
85
|
+
constructor( camera, domElement = null, scene = null ) {
|
|
86
|
+
|
|
87
|
+
super( camera, domElement );
|
|
88
|
+
|
|
86
89
|
this.scene = scene;
|
|
87
90
|
this.target = new Vector3();
|
|
88
91
|
this._currentTarget = new Vector3();
|
|
@@ -201,11 +204,11 @@ class ArcballControls extends EventDispatcher {
|
|
|
201
204
|
this.maxFov = 90;
|
|
202
205
|
this.rotateSpeed = 1;
|
|
203
206
|
|
|
204
|
-
this.enabled = true;
|
|
205
207
|
this.enablePan = true;
|
|
206
208
|
this.enableRotate = true;
|
|
207
209
|
this.enableZoom = true;
|
|
208
210
|
this.enableGizmos = true;
|
|
211
|
+
this.enableFocus = true;
|
|
209
212
|
|
|
210
213
|
this.minDistance = 0;
|
|
211
214
|
this.maxDistance = Infinity;
|
|
@@ -226,11 +229,10 @@ class ArcballControls extends EventDispatcher {
|
|
|
226
229
|
|
|
227
230
|
}
|
|
228
231
|
|
|
229
|
-
this.domElement.style.touchAction = 'none';
|
|
230
|
-
this._devPxRatio = window.devicePixelRatio;
|
|
231
|
-
|
|
232
232
|
this.initializeMouseActions();
|
|
233
233
|
|
|
234
|
+
// event listeners
|
|
235
|
+
|
|
234
236
|
this._onContextMenu = onContextMenu.bind( this );
|
|
235
237
|
this._onWheel = onWheel.bind( this );
|
|
236
238
|
this._onPointerUp = onPointerUp.bind( this );
|
|
@@ -239,6 +241,19 @@ class ArcballControls extends EventDispatcher {
|
|
|
239
241
|
this._onPointerCancel = onPointerCancel.bind( this );
|
|
240
242
|
this._onWindowResize = onWindowResize.bind( this );
|
|
241
243
|
|
|
244
|
+
if ( domElement !== null ) {
|
|
245
|
+
|
|
246
|
+
this.connect();
|
|
247
|
+
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
connect() {
|
|
253
|
+
|
|
254
|
+
this.domElement.style.touchAction = 'none';
|
|
255
|
+
this._devPxRatio = window.devicePixelRatio;
|
|
256
|
+
|
|
242
257
|
this.domElement.addEventListener( 'contextmenu', this._onContextMenu );
|
|
243
258
|
this.domElement.addEventListener( 'wheel', this._onWheel );
|
|
244
259
|
this.domElement.addEventListener( 'pointerdown', this._onPointerDown );
|
|
@@ -248,6 +263,20 @@ class ArcballControls extends EventDispatcher {
|
|
|
248
263
|
|
|
249
264
|
}
|
|
250
265
|
|
|
266
|
+
disconnect() {
|
|
267
|
+
|
|
268
|
+
this.domElement.removeEventListener( 'pointerdown', this._onPointerDown );
|
|
269
|
+
this.domElement.removeEventListener( 'pointercancel', this._onPointerCancel );
|
|
270
|
+
this.domElement.removeEventListener( 'wheel', this._onWheel );
|
|
271
|
+
this.domElement.removeEventListener( 'contextmenu', this._onContextMenu );
|
|
272
|
+
|
|
273
|
+
window.removeEventListener( 'pointermove', this._onPointerMove );
|
|
274
|
+
window.removeEventListener( 'pointerup', this._onPointerUp );
|
|
275
|
+
|
|
276
|
+
window.removeEventListener( 'resize', this._onWindowResize );
|
|
277
|
+
|
|
278
|
+
}
|
|
279
|
+
|
|
251
280
|
onSinglePanStart( event, operation ) {
|
|
252
281
|
|
|
253
282
|
if ( this.enabled ) {
|
|
@@ -278,7 +307,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
278
307
|
}
|
|
279
308
|
|
|
280
309
|
this.updateTbState( STATE.PAN, true );
|
|
281
|
-
this._startCursorPosition.copy( this.unprojectOnTbPlane( this.
|
|
310
|
+
this._startCursorPosition.copy( this.unprojectOnTbPlane( this.object, _center.x, _center.y, this.domElement ) );
|
|
282
311
|
if ( this.enableGrid ) {
|
|
283
312
|
|
|
284
313
|
this.drawGrid();
|
|
@@ -305,7 +334,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
305
334
|
}
|
|
306
335
|
|
|
307
336
|
this.updateTbState( STATE.ROTATE, true );
|
|
308
|
-
this._startCursorPosition.copy( this.unprojectOnTbSurface( this.
|
|
337
|
+
this._startCursorPosition.copy( this.unprojectOnTbSurface( this.object, _center.x, _center.y, this.domElement, this._tbRadius ) );
|
|
309
338
|
this.activateGizmos( true );
|
|
310
339
|
if ( this.enableAnimations ) {
|
|
311
340
|
|
|
@@ -323,7 +352,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
323
352
|
|
|
324
353
|
case 'FOV':
|
|
325
354
|
|
|
326
|
-
if ( ! this.
|
|
355
|
+
if ( ! this.object.isPerspectiveCamera || ! this.enableZoom ) {
|
|
327
356
|
|
|
328
357
|
return;
|
|
329
358
|
|
|
@@ -396,7 +425,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
396
425
|
this.dispatchEvent( _startEvent );
|
|
397
426
|
|
|
398
427
|
this.updateTbState( opState, true );
|
|
399
|
-
this._startCursorPosition.copy( this.unprojectOnTbPlane( this.
|
|
428
|
+
this._startCursorPosition.copy( this.unprojectOnTbPlane( this.object, _center.x, _center.y, this.domElement ) );
|
|
400
429
|
if ( this.enableGrid ) {
|
|
401
430
|
|
|
402
431
|
this.drawGrid();
|
|
@@ -408,7 +437,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
408
437
|
} else {
|
|
409
438
|
|
|
410
439
|
//continue with pan operation
|
|
411
|
-
this._currentCursorPosition.copy( this.unprojectOnTbPlane( this.
|
|
440
|
+
this._currentCursorPosition.copy( this.unprojectOnTbPlane( this.object, _center.x, _center.y, this.domElement ) );
|
|
412
441
|
this.applyTransformMatrix( this.pan( this._startCursorPosition, this._currentCursorPosition ) );
|
|
413
442
|
|
|
414
443
|
}
|
|
@@ -429,7 +458,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
429
458
|
this.dispatchEvent( _startEvent );
|
|
430
459
|
|
|
431
460
|
this.updateTbState( opState, true );
|
|
432
|
-
this._startCursorPosition.copy( this.unprojectOnTbSurface( this.
|
|
461
|
+
this._startCursorPosition.copy( this.unprojectOnTbSurface( this.object, _center.x, _center.y, this.domElement, this._tbRadius ) );
|
|
433
462
|
|
|
434
463
|
if ( this.enableGrid ) {
|
|
435
464
|
|
|
@@ -442,7 +471,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
442
471
|
} else {
|
|
443
472
|
|
|
444
473
|
//continue with rotate operation
|
|
445
|
-
this._currentCursorPosition.copy( this.unprojectOnTbSurface( this.
|
|
474
|
+
this._currentCursorPosition.copy( this.unprojectOnTbSurface( this.object, _center.x, _center.y, this.domElement, this._tbRadius ) );
|
|
446
475
|
|
|
447
476
|
const distance = this._startCursorPosition.distanceTo( this._currentCursorPosition );
|
|
448
477
|
const angle = this._startCursorPosition.angleTo( this._currentCursorPosition );
|
|
@@ -524,7 +553,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
524
553
|
|
|
525
554
|
case STATE.FOV:
|
|
526
555
|
|
|
527
|
-
if ( this.enableZoom && this.
|
|
556
|
+
if ( this.enableZoom && this.object.isPerspectiveCamera ) {
|
|
528
557
|
|
|
529
558
|
if ( restart ) {
|
|
530
559
|
|
|
@@ -588,7 +617,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
588
617
|
this.applyTransformMatrix( this.scale( size, this._v3_2, false ) );
|
|
589
618
|
|
|
590
619
|
//adjusting distance
|
|
591
|
-
_offset.copy( this._gizmos.position ).sub( this.
|
|
620
|
+
_offset.copy( this._gizmos.position ).sub( this.object.position ).normalize().multiplyScalar( newDistance / x );
|
|
592
621
|
this._m4_1.makeTranslation( _offset.x, _offset.y, _offset.z );
|
|
593
622
|
|
|
594
623
|
}
|
|
@@ -673,12 +702,12 @@ class ArcballControls extends EventDispatcher {
|
|
|
673
702
|
|
|
674
703
|
onDoubleTap( event ) {
|
|
675
704
|
|
|
676
|
-
if ( this.enabled && this.enablePan && this.scene != null ) {
|
|
705
|
+
if ( this.enabled && this.enablePan && this.enableFocus && this.scene != null ) {
|
|
677
706
|
|
|
678
707
|
this.dispatchEvent( _startEvent );
|
|
679
708
|
|
|
680
709
|
this.setCenter( event.clientX, event.clientY );
|
|
681
|
-
const hitP = this.unprojectOnObj( this.getCursorNDC( _center.x, _center.y, this.domElement ), this.
|
|
710
|
+
const hitP = this.unprojectOnObj( this.getCursorNDC( _center.x, _center.y, this.domElement ), this.object );
|
|
682
711
|
|
|
683
712
|
if ( hitP != null && this.enableAnimations ) {
|
|
684
713
|
|
|
@@ -721,7 +750,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
721
750
|
this.updateTbState( STATE.PAN, true );
|
|
722
751
|
|
|
723
752
|
this.setCenter( ( this._touchCurrent[ 0 ].clientX + this._touchCurrent[ 1 ].clientX ) / 2, ( this._touchCurrent[ 0 ].clientY + this._touchCurrent[ 1 ].clientY ) / 2 );
|
|
724
|
-
this._startCursorPosition.copy( this.unprojectOnTbPlane( this.
|
|
753
|
+
this._startCursorPosition.copy( this.unprojectOnTbPlane( this.object, _center.x, _center.y, this.domElement, true ) );
|
|
725
754
|
this._currentCursorPosition.copy( this._startCursorPosition );
|
|
726
755
|
|
|
727
756
|
this.activateGizmos( false );
|
|
@@ -743,7 +772,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
743
772
|
|
|
744
773
|
}
|
|
745
774
|
|
|
746
|
-
this._currentCursorPosition.copy( this.unprojectOnTbPlane( this.
|
|
775
|
+
this._currentCursorPosition.copy( this.unprojectOnTbPlane( this.object, _center.x, _center.y, this.domElement, true ) );
|
|
747
776
|
this.applyTransformMatrix( this.pan( this._startCursorPosition, this._currentCursorPosition, true ) );
|
|
748
777
|
this.dispatchEvent( _changeEvent );
|
|
749
778
|
|
|
@@ -771,7 +800,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
771
800
|
this._startFingerRotation = this.getAngle( this._touchCurrent[ 1 ], this._touchCurrent[ 0 ] ) + this.getAngle( this._touchStart[ 1 ], this._touchStart[ 0 ] );
|
|
772
801
|
this._currentFingerRotation = this._startFingerRotation;
|
|
773
802
|
|
|
774
|
-
this.
|
|
803
|
+
this.object.getWorldDirection( this._rotationAxis ); //rotation axis
|
|
775
804
|
|
|
776
805
|
if ( ! this.enablePan && ! this.enableZoom ) {
|
|
777
806
|
|
|
@@ -807,7 +836,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
807
836
|
} else {
|
|
808
837
|
|
|
809
838
|
this._v3_2.setFromMatrixPosition( this._gizmoMatrixState );
|
|
810
|
-
rotationPoint = this.unprojectOnTbPlane( this.
|
|
839
|
+
rotationPoint = this.unprojectOnTbPlane( this.object, _center.x, _center.y, this.domElement ).applyQuaternion( this.object.quaternion ).multiplyScalar( 1 / this.object.zoom ).add( this._v3_2 );
|
|
811
840
|
|
|
812
841
|
}
|
|
813
842
|
|
|
@@ -869,17 +898,17 @@ class ArcballControls extends EventDispatcher {
|
|
|
869
898
|
|
|
870
899
|
} else {
|
|
871
900
|
|
|
872
|
-
if ( this.
|
|
901
|
+
if ( this.object.isOrthographicCamera ) {
|
|
873
902
|
|
|
874
|
-
scalePoint = this.unprojectOnTbPlane( this.
|
|
875
|
-
.applyQuaternion( this.
|
|
876
|
-
.multiplyScalar( 1 / this.
|
|
903
|
+
scalePoint = this.unprojectOnTbPlane( this.object, _center.x, _center.y, this.domElement )
|
|
904
|
+
.applyQuaternion( this.object.quaternion )
|
|
905
|
+
.multiplyScalar( 1 / this.object.zoom )
|
|
877
906
|
.add( this._gizmos.position );
|
|
878
907
|
|
|
879
|
-
} else if ( this.
|
|
908
|
+
} else if ( this.object.isPerspectiveCamera ) {
|
|
880
909
|
|
|
881
|
-
scalePoint = this.unprojectOnTbPlane( this.
|
|
882
|
-
.applyQuaternion( this.
|
|
910
|
+
scalePoint = this.unprojectOnTbPlane( this.object, _center.x, _center.y, this.domElement )
|
|
911
|
+
.applyQuaternion( this.object.quaternion )
|
|
883
912
|
.add( this._gizmos.position );
|
|
884
913
|
|
|
885
914
|
}
|
|
@@ -997,7 +1026,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
997
1026
|
this.applyTransformMatrix( this.scale( size, this._v3_2, false ) );
|
|
998
1027
|
|
|
999
1028
|
//adjusting distance
|
|
1000
|
-
_offset.copy( this._gizmos.position ).sub( this.
|
|
1029
|
+
_offset.copy( this._gizmos.position ).sub( this.object.position ).normalize().multiplyScalar( newDistance / x );
|
|
1001
1030
|
this._m4_1.makeTranslation( _offset.x, _offset.y, _offset.z );
|
|
1002
1031
|
|
|
1003
1032
|
this.dispatchEvent( _changeEvent );
|
|
@@ -1016,8 +1045,8 @@ class ArcballControls extends EventDispatcher {
|
|
|
1016
1045
|
|
|
1017
1046
|
/**
|
|
1018
1047
|
* Set _center's x/y coordinates
|
|
1019
|
-
* @param {
|
|
1020
|
-
* @param {
|
|
1048
|
+
* @param {number} clientX
|
|
1049
|
+
* @param {number} clientY
|
|
1021
1050
|
*/
|
|
1022
1051
|
setCenter( clientX, clientY ) {
|
|
1023
1052
|
|
|
@@ -1049,7 +1078,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
1049
1078
|
* Compare two mouse actions
|
|
1050
1079
|
* @param {Object} action1
|
|
1051
1080
|
* @param {Object} action2
|
|
1052
|
-
* @returns {
|
|
1081
|
+
* @returns {boolean} True if action1 and action 2 are the same mouse action, false otherwise
|
|
1053
1082
|
*/
|
|
1054
1083
|
compareMouseAction( action1, action2 ) {
|
|
1055
1084
|
|
|
@@ -1075,10 +1104,10 @@ class ArcballControls extends EventDispatcher {
|
|
|
1075
1104
|
|
|
1076
1105
|
/**
|
|
1077
1106
|
* Set a new mouse action by specifying the operation to be performed and a mouse/key combination. In case of conflict, replaces the existing one
|
|
1078
|
-
* @param {
|
|
1079
|
-
* @param {
|
|
1080
|
-
* @param {
|
|
1081
|
-
* @returns {
|
|
1107
|
+
* @param {'PAN'|'ROTATE'|'ZOOM'|'FOV'} operation The operation to be performed ('PAN', 'ROTATE', 'ZOOM', 'FOV')
|
|
1108
|
+
* @param {0|1|2|'WHEEL'} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches
|
|
1109
|
+
* @param {'CTRL'|'SHIFT'|null} [key=null] The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed
|
|
1110
|
+
* @returns {boolean} True if the mouse action has been successfully added, false otherwise
|
|
1082
1111
|
*/
|
|
1083
1112
|
setMouseAction( operation, mouse, key = null ) {
|
|
1084
1113
|
|
|
@@ -1156,9 +1185,9 @@ class ArcballControls extends EventDispatcher {
|
|
|
1156
1185
|
|
|
1157
1186
|
/**
|
|
1158
1187
|
* Remove a mouse action by specifying its mouse/key combination
|
|
1159
|
-
* @param {
|
|
1160
|
-
* @param {
|
|
1161
|
-
* @returns {
|
|
1188
|
+
* @param {0|1|2|'WHEEL'} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches
|
|
1189
|
+
* @param {'CTRL'|'SHIFT'|null} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed
|
|
1190
|
+
* @returns {boolean} True if the operation has been successfully removed, false otherwise
|
|
1162
1191
|
*/
|
|
1163
1192
|
unsetMouseAction( mouse, key = null ) {
|
|
1164
1193
|
|
|
@@ -1179,9 +1208,9 @@ class ArcballControls extends EventDispatcher {
|
|
|
1179
1208
|
|
|
1180
1209
|
/**
|
|
1181
1210
|
* Return the operation associated to a mouse/keyboard combination
|
|
1182
|
-
* @param {
|
|
1183
|
-
* @param {
|
|
1184
|
-
* @returns The operation if it has been found, null otherwise
|
|
1211
|
+
* @param {0|1|2|'WHEEL'} mouse Mouse button index (0, 1, 2) or 'WHEEL' for wheel notches
|
|
1212
|
+
* @param {'CTRL'|'SHIFT'|null} key Keyboard modifier
|
|
1213
|
+
* @returns {'PAN'|'ROTATE'|'ZOOM'|'FOV'|null} The operation if it has been found, null otherwise
|
|
1185
1214
|
*/
|
|
1186
1215
|
getOpFromAction( mouse, key ) {
|
|
1187
1216
|
|
|
@@ -1219,9 +1248,9 @@ class ArcballControls extends EventDispatcher {
|
|
|
1219
1248
|
|
|
1220
1249
|
/**
|
|
1221
1250
|
* Get the operation associated to mouse and key combination and returns the corresponding FSA state
|
|
1222
|
-
* @param {
|
|
1223
|
-
* @param {
|
|
1224
|
-
* @returns The FSA state obtained from the operation associated to mouse/keyboard combination
|
|
1251
|
+
* @param {0|1|2} mouse Mouse button index (0, 1, 2)
|
|
1252
|
+
* @param {'CTRL'|'SHIFT'|null} key Keyboard modifier
|
|
1253
|
+
* @returns {?STATE} The FSA state obtained from the operation associated to mouse/keyboard combination
|
|
1225
1254
|
*/
|
|
1226
1255
|
getOpStateFromAction( mouse, key ) {
|
|
1227
1256
|
|
|
@@ -1261,7 +1290,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
1261
1290
|
* Calculate the angle between two pointers
|
|
1262
1291
|
* @param {PointerEvent} p1
|
|
1263
1292
|
* @param {PointerEvent} p2
|
|
1264
|
-
* @returns {
|
|
1293
|
+
* @returns {number} The angle between two pointers in degrees
|
|
1265
1294
|
*/
|
|
1266
1295
|
getAngle( p1, p2 ) {
|
|
1267
1296
|
|
|
@@ -1297,13 +1326,13 @@ class ArcballControls extends EventDispatcher {
|
|
|
1297
1326
|
if ( transformation.camera != null ) {
|
|
1298
1327
|
|
|
1299
1328
|
this._m4_1.copy( this._cameraMatrixState ).premultiply( transformation.camera );
|
|
1300
|
-
this._m4_1.decompose( this.
|
|
1301
|
-
this.
|
|
1329
|
+
this._m4_1.decompose( this.object.position, this.object.quaternion, this.object.scale );
|
|
1330
|
+
this.object.updateMatrix();
|
|
1302
1331
|
|
|
1303
1332
|
//update camera up vector
|
|
1304
1333
|
if ( this._state == STATE.ROTATE || this._state == STATE.ZROTATE || this._state == STATE.ANIMATION_ROTATE ) {
|
|
1305
1334
|
|
|
1306
|
-
this.
|
|
1335
|
+
this.object.up.copy( this._upState ).applyQuaternion( this.object.quaternion );
|
|
1307
1336
|
|
|
1308
1337
|
}
|
|
1309
1338
|
|
|
@@ -1319,11 +1348,11 @@ class ArcballControls extends EventDispatcher {
|
|
|
1319
1348
|
|
|
1320
1349
|
if ( this._state == STATE.SCALE || this._state == STATE.FOCUS || this._state == STATE.ANIMATION_FOCUS ) {
|
|
1321
1350
|
|
|
1322
|
-
this._tbRadius = this.calculateTbRadius( this.
|
|
1351
|
+
this._tbRadius = this.calculateTbRadius( this.object );
|
|
1323
1352
|
|
|
1324
1353
|
if ( this.adjustNearFar ) {
|
|
1325
1354
|
|
|
1326
|
-
const cameraDistance = this.
|
|
1355
|
+
const cameraDistance = this.object.position.distanceTo( this._gizmos.position );
|
|
1327
1356
|
|
|
1328
1357
|
const bb = new Box3();
|
|
1329
1358
|
bb.setFromObject( this._gizmos );
|
|
@@ -1334,38 +1363,38 @@ class ArcballControls extends EventDispatcher {
|
|
|
1334
1363
|
const regularNearPosition = cameraDistance - this._initialNear;
|
|
1335
1364
|
|
|
1336
1365
|
const minNearPos = Math.min( adjustedNearPosition, regularNearPosition );
|
|
1337
|
-
this.
|
|
1366
|
+
this.object.near = cameraDistance - minNearPos;
|
|
1338
1367
|
|
|
1339
1368
|
|
|
1340
1369
|
const adjustedFarPosition = Math.min( this._farPos0, - sphere.radius + sphere.center.length() );
|
|
1341
1370
|
const regularFarPosition = cameraDistance - this._initialFar;
|
|
1342
1371
|
|
|
1343
1372
|
const minFarPos = Math.min( adjustedFarPosition, regularFarPosition );
|
|
1344
|
-
this.
|
|
1373
|
+
this.object.far = cameraDistance - minFarPos;
|
|
1345
1374
|
|
|
1346
|
-
this.
|
|
1375
|
+
this.object.updateProjectionMatrix();
|
|
1347
1376
|
|
|
1348
1377
|
} else {
|
|
1349
1378
|
|
|
1350
1379
|
let update = false;
|
|
1351
1380
|
|
|
1352
|
-
if ( this.
|
|
1381
|
+
if ( this.object.near != this._initialNear ) {
|
|
1353
1382
|
|
|
1354
|
-
this.
|
|
1383
|
+
this.object.near = this._initialNear;
|
|
1355
1384
|
update = true;
|
|
1356
1385
|
|
|
1357
1386
|
}
|
|
1358
1387
|
|
|
1359
|
-
if ( this.
|
|
1388
|
+
if ( this.object.far != this._initialFar ) {
|
|
1360
1389
|
|
|
1361
|
-
this.
|
|
1390
|
+
this.object.far = this._initialFar;
|
|
1362
1391
|
update = true;
|
|
1363
1392
|
|
|
1364
1393
|
}
|
|
1365
1394
|
|
|
1366
1395
|
if ( update ) {
|
|
1367
1396
|
|
|
1368
|
-
this.
|
|
1397
|
+
this.object.updateProjectionMatrix();
|
|
1369
1398
|
|
|
1370
1399
|
}
|
|
1371
1400
|
|
|
@@ -1377,10 +1406,12 @@ class ArcballControls extends EventDispatcher {
|
|
|
1377
1406
|
|
|
1378
1407
|
/**
|
|
1379
1408
|
* Calculate the angular speed
|
|
1380
|
-
*
|
|
1381
|
-
* @param {
|
|
1382
|
-
* @param {
|
|
1383
|
-
* @param {
|
|
1409
|
+
*
|
|
1410
|
+
* @param {number} p0 Position at t0
|
|
1411
|
+
* @param {number} p1 Position at t1
|
|
1412
|
+
* @param {number} t0 Initial time in milliseconds
|
|
1413
|
+
* @param {number} t1 Ending time in milliseconds
|
|
1414
|
+
* @returns {number}
|
|
1384
1415
|
*/
|
|
1385
1416
|
calculateAngularSpeed( p0, p1, t0, t1 ) {
|
|
1386
1417
|
|
|
@@ -1425,9 +1456,9 @@ class ArcballControls extends EventDispatcher {
|
|
|
1425
1456
|
}
|
|
1426
1457
|
|
|
1427
1458
|
/**
|
|
1428
|
-
* Calculate the trackball radius so that gizmo's
|
|
1459
|
+
* Calculate the trackball radius so that gizmo's diameter will be 2/3 of the minimum side of the camera frustum
|
|
1429
1460
|
* @param {Camera} camera
|
|
1430
|
-
* @returns {
|
|
1461
|
+
* @returns {number} The trackball radius
|
|
1431
1462
|
*/
|
|
1432
1463
|
calculateTbRadius( camera ) {
|
|
1433
1464
|
|
|
@@ -1450,8 +1481,8 @@ class ArcballControls extends EventDispatcher {
|
|
|
1450
1481
|
/**
|
|
1451
1482
|
* Focus operation consist of positioning the point of interest in front of the camera and a slightly zoom in
|
|
1452
1483
|
* @param {Vector3} point The point of interest
|
|
1453
|
-
* @param {
|
|
1454
|
-
* @param {
|
|
1484
|
+
* @param {number} size Scale factor
|
|
1485
|
+
* @param {number} [amount=1] Amount of operation to be completed (used for focus animations, default is complete full operation)
|
|
1455
1486
|
*/
|
|
1456
1487
|
focus( point, size, amount = 1 ) {
|
|
1457
1488
|
|
|
@@ -1465,7 +1496,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
1465
1496
|
|
|
1466
1497
|
_cameraMatrixStateTemp.copy( this._cameraMatrixState );
|
|
1467
1498
|
this._cameraMatrixState.premultiply( this._translationMatrix );
|
|
1468
|
-
this._cameraMatrixState.decompose( this.
|
|
1499
|
+
this._cameraMatrixState.decompose( this.object.position, this.object.quaternion, this.object.scale );
|
|
1469
1500
|
|
|
1470
1501
|
//apply zoom
|
|
1471
1502
|
if ( this.enableZoom ) {
|
|
@@ -1490,22 +1521,22 @@ class ArcballControls extends EventDispatcher {
|
|
|
1490
1521
|
const multiplier = 3;
|
|
1491
1522
|
let size, divisions, maxLength, tick;
|
|
1492
1523
|
|
|
1493
|
-
if ( this.
|
|
1524
|
+
if ( this.object.isOrthographicCamera ) {
|
|
1494
1525
|
|
|
1495
|
-
const width = this.
|
|
1496
|
-
const height = this.
|
|
1526
|
+
const width = this.object.right - this.object.left;
|
|
1527
|
+
const height = this.object.bottom - this.object.top;
|
|
1497
1528
|
|
|
1498
1529
|
maxLength = Math.max( width, height );
|
|
1499
1530
|
tick = maxLength / 20;
|
|
1500
1531
|
|
|
1501
|
-
size = maxLength / this.
|
|
1502
|
-
divisions = size / tick * this.
|
|
1532
|
+
size = maxLength / this.object.zoom * multiplier;
|
|
1533
|
+
divisions = size / tick * this.object.zoom;
|
|
1503
1534
|
|
|
1504
|
-
} else if ( this.
|
|
1535
|
+
} else if ( this.object.isPerspectiveCamera ) {
|
|
1505
1536
|
|
|
1506
|
-
const distance = this.
|
|
1507
|
-
const halfFovV = MathUtils.DEG2RAD * this.
|
|
1508
|
-
const halfFovH = Math.atan( ( this.
|
|
1537
|
+
const distance = this.object.position.distanceTo( this._gizmos.position );
|
|
1538
|
+
const halfFovV = MathUtils.DEG2RAD * this.object.fov * 0.5;
|
|
1539
|
+
const halfFovH = Math.atan( ( this.object.aspect ) * Math.tan( halfFovV ) );
|
|
1509
1540
|
|
|
1510
1541
|
maxLength = Math.tan( Math.max( halfFovV, halfFovH ) ) * distance * 2;
|
|
1511
1542
|
tick = maxLength / 20;
|
|
@@ -1520,7 +1551,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
1520
1551
|
this._grid = new GridHelper( size, divisions, color, color );
|
|
1521
1552
|
this._grid.position.copy( this._gizmos.position );
|
|
1522
1553
|
this._gridPosition.copy( this._grid.position );
|
|
1523
|
-
this._grid.quaternion.copy( this.
|
|
1554
|
+
this._grid.quaternion.copy( this.object.quaternion );
|
|
1524
1555
|
this._grid.rotateX( Math.PI * 0.5 );
|
|
1525
1556
|
|
|
1526
1557
|
this.scene.add( this._grid );
|
|
@@ -1542,15 +1573,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
1542
1573
|
|
|
1543
1574
|
}
|
|
1544
1575
|
|
|
1545
|
-
this.
|
|
1546
|
-
this.domElement.removeEventListener( 'pointercancel', this._onPointerCancel );
|
|
1547
|
-
this.domElement.removeEventListener( 'wheel', this._onWheel );
|
|
1548
|
-
this.domElement.removeEventListener( 'contextmenu', this._onContextMenu );
|
|
1549
|
-
|
|
1550
|
-
window.removeEventListener( 'pointermove', this._onPointerMove );
|
|
1551
|
-
window.removeEventListener( 'pointerup', this._onPointerUp );
|
|
1552
|
-
|
|
1553
|
-
window.removeEventListener( 'resize', this._onWindowResize );
|
|
1576
|
+
this.disconnect();
|
|
1554
1577
|
|
|
1555
1578
|
if ( this.scene !== null ) this.scene.remove( this._gizmos );
|
|
1556
1579
|
this.disposeGrid();
|
|
@@ -1573,8 +1596,8 @@ class ArcballControls extends EventDispatcher {
|
|
|
1573
1596
|
|
|
1574
1597
|
/**
|
|
1575
1598
|
* Compute the easing out cubic function for ease out effect in animation
|
|
1576
|
-
* @param {
|
|
1577
|
-
* @returns {
|
|
1599
|
+
* @param {number} t The absolute progress of the animation in the bound of 0 (beginning of the) and 1 (ending of animation)
|
|
1600
|
+
* @returns {number} Result of easing out cubic at time t
|
|
1578
1601
|
*/
|
|
1579
1602
|
easeOutCubic( t ) {
|
|
1580
1603
|
|
|
@@ -1584,7 +1607,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
1584
1607
|
|
|
1585
1608
|
/**
|
|
1586
1609
|
* Make rotation gizmos more or less visible
|
|
1587
|
-
* @param {
|
|
1610
|
+
* @param {boolean} isActive If true, make gizmos more visible
|
|
1588
1611
|
*/
|
|
1589
1612
|
activateGizmos( isActive ) {
|
|
1590
1613
|
|
|
@@ -1610,8 +1633,9 @@ class ArcballControls extends EventDispatcher {
|
|
|
1610
1633
|
|
|
1611
1634
|
/**
|
|
1612
1635
|
* Calculate the cursor position in NDC
|
|
1613
|
-
*
|
|
1614
|
-
* @param {number}
|
|
1636
|
+
*
|
|
1637
|
+
* @param {number} cursorX Cursor horizontal coordinate within the canvas
|
|
1638
|
+
* @param {number} cursorY Cursor vertical coordinate within the canvas
|
|
1615
1639
|
* @param {HTMLElement} canvas The canvas where the renderer draws its output
|
|
1616
1640
|
* @returns {Vector2} Cursor normalized position inside the canvas
|
|
1617
1641
|
*/
|
|
@@ -1626,16 +1650,17 @@ class ArcballControls extends EventDispatcher {
|
|
|
1626
1650
|
|
|
1627
1651
|
/**
|
|
1628
1652
|
* Calculate the cursor position inside the canvas x/y coordinates with the origin being in the center of the canvas
|
|
1629
|
-
*
|
|
1630
|
-
* @param {
|
|
1653
|
+
*
|
|
1654
|
+
* @param {number} cursorX Cursor horizontal coordinate within the canvas
|
|
1655
|
+
* @param {number} cursorY Cursor vertical coordinate within the canvas
|
|
1631
1656
|
* @param {HTMLElement} canvas The canvas where the renderer draws its output
|
|
1632
1657
|
* @returns {Vector2} Cursor position inside the canvas
|
|
1633
1658
|
*/
|
|
1634
1659
|
getCursorPosition( cursorX, cursorY, canvas ) {
|
|
1635
1660
|
|
|
1636
1661
|
this._v2_1.copy( this.getCursorNDC( cursorX, cursorY, canvas ) );
|
|
1637
|
-
this._v2_1.x *= ( this.
|
|
1638
|
-
this._v2_1.y *= ( this.
|
|
1662
|
+
this._v2_1.x *= ( this.object.right - this.object.left ) * 0.5;
|
|
1663
|
+
this._v2_1.y *= ( this.object.top - this.object.bottom ) * 0.5;
|
|
1639
1664
|
return this._v2_1.clone();
|
|
1640
1665
|
|
|
1641
1666
|
}
|
|
@@ -1674,8 +1699,8 @@ class ArcballControls extends EventDispatcher {
|
|
|
1674
1699
|
this._up0.copy( camera.up );
|
|
1675
1700
|
this._upState.copy( camera.up );
|
|
1676
1701
|
|
|
1677
|
-
this.
|
|
1678
|
-
this.
|
|
1702
|
+
this.object = camera;
|
|
1703
|
+
this.object.updateProjectionMatrix();
|
|
1679
1704
|
|
|
1680
1705
|
//making gizmos
|
|
1681
1706
|
this._tbRadius = this.calculateTbRadius( camera );
|
|
@@ -1685,7 +1710,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
1685
1710
|
|
|
1686
1711
|
/**
|
|
1687
1712
|
* Set gizmos visibility
|
|
1688
|
-
* @param {
|
|
1713
|
+
* @param {boolean} value Value of gizmos visibility
|
|
1689
1714
|
*/
|
|
1690
1715
|
setGizmosVisible( value ) {
|
|
1691
1716
|
|
|
@@ -1696,12 +1721,12 @@ class ArcballControls extends EventDispatcher {
|
|
|
1696
1721
|
|
|
1697
1722
|
/**
|
|
1698
1723
|
* Set gizmos radius factor and redraws gizmos
|
|
1699
|
-
* @param {
|
|
1724
|
+
* @param {number} value Value of radius factor
|
|
1700
1725
|
*/
|
|
1701
1726
|
setTbRadius( value ) {
|
|
1702
1727
|
|
|
1703
1728
|
this.radiusFactor = value;
|
|
1704
|
-
this._tbRadius = this.calculateTbRadius( this.
|
|
1729
|
+
this._tbRadius = this.calculateTbRadius( this.object );
|
|
1705
1730
|
|
|
1706
1731
|
const curve = new EllipseCurve( 0, 0, this._tbRadius, this._tbRadius );
|
|
1707
1732
|
const points = curve.getPoints( this._curvePts );
|
|
@@ -1750,10 +1775,10 @@ class ArcballControls extends EventDispatcher {
|
|
|
1750
1775
|
this._gizmoMatrixState0.identity().setPosition( tbCenter );
|
|
1751
1776
|
this._gizmoMatrixState.copy( this._gizmoMatrixState0 );
|
|
1752
1777
|
|
|
1753
|
-
if ( this.
|
|
1778
|
+
if ( this.object.zoom !== 1 ) {
|
|
1754
1779
|
|
|
1755
1780
|
//adapt gizmos size to camera zoom
|
|
1756
|
-
const size = 1 / this.
|
|
1781
|
+
const size = 1 / this.object.zoom;
|
|
1757
1782
|
this._scaleMatrix.makeScale( size, size, size );
|
|
1758
1783
|
this._translationMatrix.makeTranslation( - tbCenter.x, - tbCenter.y, - tbCenter.z );
|
|
1759
1784
|
|
|
@@ -1790,7 +1815,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
1790
1815
|
|
|
1791
1816
|
/**
|
|
1792
1817
|
* Perform animation for focus operation
|
|
1793
|
-
* @param {
|
|
1818
|
+
* @param {number} time Instant in which this function is called as performance.now()
|
|
1794
1819
|
* @param {Vector3} point Point of interest for focus operation
|
|
1795
1820
|
* @param {Matrix4} cameraMatrix Camera matrix
|
|
1796
1821
|
* @param {Matrix4} gizmoMatrix Gizmos matrix
|
|
@@ -1856,7 +1881,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
1856
1881
|
|
|
1857
1882
|
/**
|
|
1858
1883
|
* Perform animation for rotation operation
|
|
1859
|
-
* @param {
|
|
1884
|
+
* @param {number} time Instant in which this function is called as performance.now()
|
|
1860
1885
|
* @param {Vector3} rotationAxis Rotation axis
|
|
1861
1886
|
* @param {number} w0 Initial angular velocity
|
|
1862
1887
|
*/
|
|
@@ -1923,30 +1948,32 @@ class ArcballControls extends EventDispatcher {
|
|
|
1923
1948
|
|
|
1924
1949
|
/**
|
|
1925
1950
|
* Perform pan operation moving camera between two points
|
|
1951
|
+
*
|
|
1926
1952
|
* @param {Vector3} p0 Initial point
|
|
1927
1953
|
* @param {Vector3} p1 Ending point
|
|
1928
|
-
* @param {
|
|
1954
|
+
* @param {boolean} [adjust=false] If movement should be adjusted considering camera distance (Perspective only)
|
|
1955
|
+
* @returns {Object}
|
|
1929
1956
|
*/
|
|
1930
1957
|
pan( p0, p1, adjust = false ) {
|
|
1931
1958
|
|
|
1932
1959
|
const movement = p0.clone().sub( p1 );
|
|
1933
1960
|
|
|
1934
|
-
if ( this.
|
|
1961
|
+
if ( this.object.isOrthographicCamera ) {
|
|
1935
1962
|
|
|
1936
1963
|
//adjust movement amount
|
|
1937
|
-
movement.multiplyScalar( 1 / this.
|
|
1964
|
+
movement.multiplyScalar( 1 / this.object.zoom );
|
|
1938
1965
|
|
|
1939
|
-
} else if ( this.
|
|
1966
|
+
} else if ( this.object.isPerspectiveCamera && adjust ) {
|
|
1940
1967
|
|
|
1941
1968
|
//adjust movement amount
|
|
1942
1969
|
this._v3_1.setFromMatrixPosition( this._cameraMatrixState0 ); //camera's initial position
|
|
1943
1970
|
this._v3_2.setFromMatrixPosition( this._gizmoMatrixState0 ); //gizmo's initial position
|
|
1944
|
-
const distanceFactor = this._v3_1.distanceTo( this._v3_2 ) / this.
|
|
1971
|
+
const distanceFactor = this._v3_1.distanceTo( this._v3_2 ) / this.object.position.distanceTo( this._gizmos.position );
|
|
1945
1972
|
movement.multiplyScalar( 1 / distanceFactor );
|
|
1946
1973
|
|
|
1947
1974
|
}
|
|
1948
1975
|
|
|
1949
|
-
this._v3_1.set( movement.x, movement.y, 0 ).applyQuaternion( this.
|
|
1976
|
+
this._v3_1.set( movement.x, movement.y, 0 ).applyQuaternion( this.object.quaternion );
|
|
1950
1977
|
|
|
1951
1978
|
this._m4_1.makeTranslation( this._v3_1.x, this._v3_1.y, this._v3_1.z );
|
|
1952
1979
|
|
|
@@ -1960,31 +1987,31 @@ class ArcballControls extends EventDispatcher {
|
|
|
1960
1987
|
*/
|
|
1961
1988
|
reset() {
|
|
1962
1989
|
|
|
1963
|
-
this.
|
|
1990
|
+
this.object.zoom = this._zoom0;
|
|
1964
1991
|
|
|
1965
|
-
if ( this.
|
|
1992
|
+
if ( this.object.isPerspectiveCamera ) {
|
|
1966
1993
|
|
|
1967
|
-
this.
|
|
1994
|
+
this.object.fov = this._fov0;
|
|
1968
1995
|
|
|
1969
1996
|
}
|
|
1970
1997
|
|
|
1971
|
-
this.
|
|
1972
|
-
this.
|
|
1998
|
+
this.object.near = this._nearPos;
|
|
1999
|
+
this.object.far = this._farPos;
|
|
1973
2000
|
this._cameraMatrixState.copy( this._cameraMatrixState0 );
|
|
1974
|
-
this._cameraMatrixState.decompose( this.
|
|
1975
|
-
this.
|
|
2001
|
+
this._cameraMatrixState.decompose( this.object.position, this.object.quaternion, this.object.scale );
|
|
2002
|
+
this.object.up.copy( this._up0 );
|
|
1976
2003
|
|
|
1977
|
-
this.
|
|
1978
|
-
this.
|
|
2004
|
+
this.object.updateMatrix();
|
|
2005
|
+
this.object.updateProjectionMatrix();
|
|
1979
2006
|
|
|
1980
2007
|
this._gizmoMatrixState.copy( this._gizmoMatrixState0 );
|
|
1981
2008
|
this._gizmoMatrixState0.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );
|
|
1982
2009
|
this._gizmos.updateMatrix();
|
|
1983
2010
|
|
|
1984
|
-
this._tbRadius = this.calculateTbRadius( this.
|
|
2011
|
+
this._tbRadius = this.calculateTbRadius( this.object );
|
|
1985
2012
|
this.makeGizmos( this._gizmos.position, this._tbRadius );
|
|
1986
2013
|
|
|
1987
|
-
this.
|
|
2014
|
+
this.object.lookAt( this._gizmos.position );
|
|
1988
2015
|
|
|
1989
2016
|
this.updateTbState( STATE.IDLE, false );
|
|
1990
2017
|
|
|
@@ -2018,31 +2045,34 @@ class ArcballControls extends EventDispatcher {
|
|
|
2018
2045
|
copyState() {
|
|
2019
2046
|
|
|
2020
2047
|
let state;
|
|
2021
|
-
if ( this.
|
|
2048
|
+
if ( this.object.isOrthographicCamera ) {
|
|
2022
2049
|
|
|
2023
|
-
state = JSON.stringify( {
|
|
2050
|
+
state = JSON.stringify( {
|
|
2051
|
+
arcballState: {
|
|
2052
|
+
cameraFar: this.object.far,
|
|
2053
|
+
cameraMatrix: this.object.matrix,
|
|
2054
|
+
cameraNear: this.object.near,
|
|
2055
|
+
cameraUp: this.object.up,
|
|
2056
|
+
cameraZoom: this.object.zoom,
|
|
2057
|
+
gizmoMatrix: this._gizmos.matrix
|
|
2024
2058
|
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
cameraNear: this.camera.near,
|
|
2028
|
-
cameraUp: this.camera.up,
|
|
2029
|
-
cameraZoom: this.camera.zoom,
|
|
2030
|
-
gizmoMatrix: this._gizmos.matrix
|
|
2031
|
-
|
|
2032
|
-
} } );
|
|
2059
|
+
}
|
|
2060
|
+
} );
|
|
2033
2061
|
|
|
2034
|
-
} else if ( this.
|
|
2062
|
+
} else if ( this.object.isPerspectiveCamera ) {
|
|
2035
2063
|
|
|
2036
|
-
state = JSON.stringify( {
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2064
|
+
state = JSON.stringify( {
|
|
2065
|
+
arcballState: {
|
|
2066
|
+
cameraFar: this.object.far,
|
|
2067
|
+
cameraFov: this.object.fov,
|
|
2068
|
+
cameraMatrix: this.object.matrix,
|
|
2069
|
+
cameraNear: this.object.near,
|
|
2070
|
+
cameraUp: this.object.up,
|
|
2071
|
+
cameraZoom: this.object.zoom,
|
|
2072
|
+
gizmoMatrix: this._gizmos.matrix
|
|
2044
2073
|
|
|
2045
|
-
|
|
2074
|
+
}
|
|
2075
|
+
} );
|
|
2046
2076
|
|
|
2047
2077
|
}
|
|
2048
2078
|
|
|
@@ -2066,16 +2096,16 @@ class ArcballControls extends EventDispatcher {
|
|
|
2066
2096
|
*/
|
|
2067
2097
|
saveState() {
|
|
2068
2098
|
|
|
2069
|
-
this._cameraMatrixState0.copy( this.
|
|
2099
|
+
this._cameraMatrixState0.copy( this.object.matrix );
|
|
2070
2100
|
this._gizmoMatrixState0.copy( this._gizmos.matrix );
|
|
2071
|
-
this._nearPos = this.
|
|
2072
|
-
this._farPos = this.
|
|
2073
|
-
this._zoom0 = this.
|
|
2074
|
-
this._up0.copy( this.
|
|
2101
|
+
this._nearPos = this.object.near;
|
|
2102
|
+
this._farPos = this.object.far;
|
|
2103
|
+
this._zoom0 = this.object.zoom;
|
|
2104
|
+
this._up0.copy( this.object.up );
|
|
2075
2105
|
|
|
2076
|
-
if ( this.
|
|
2106
|
+
if ( this.object.isPerspectiveCamera ) {
|
|
2077
2107
|
|
|
2078
|
-
this._fov0 = this.
|
|
2108
|
+
this._fov0 = this.object.fov;
|
|
2079
2109
|
|
|
2080
2110
|
}
|
|
2081
2111
|
|
|
@@ -2083,9 +2113,9 @@ class ArcballControls extends EventDispatcher {
|
|
|
2083
2113
|
|
|
2084
2114
|
/**
|
|
2085
2115
|
* Perform uniform scale operation around a given point
|
|
2086
|
-
* @param {
|
|
2116
|
+
* @param {number} size Scale factor
|
|
2087
2117
|
* @param {Vector3} point Point around which scale
|
|
2088
|
-
* @param {
|
|
2118
|
+
* @param {boolean} scaleGizmos If gizmos should be scaled (Perspective only)
|
|
2089
2119
|
* @returns {Object} Object with 'camera' and 'gizmo' fields containing transformation matrices resulting from the operation to be applied to the camera and gizmos
|
|
2090
2120
|
*/
|
|
2091
2121
|
scale( size, point, scaleGizmos = true ) {
|
|
@@ -2093,26 +2123,26 @@ class ArcballControls extends EventDispatcher {
|
|
|
2093
2123
|
_scalePointTemp.copy( point );
|
|
2094
2124
|
let sizeInverse = 1 / size;
|
|
2095
2125
|
|
|
2096
|
-
if ( this.
|
|
2126
|
+
if ( this.object.isOrthographicCamera ) {
|
|
2097
2127
|
|
|
2098
2128
|
//camera zoom
|
|
2099
|
-
this.
|
|
2100
|
-
this.
|
|
2129
|
+
this.object.zoom = this._zoomState;
|
|
2130
|
+
this.object.zoom *= size;
|
|
2101
2131
|
|
|
2102
2132
|
//check min and max zoom
|
|
2103
|
-
if ( this.
|
|
2133
|
+
if ( this.object.zoom > this.maxZoom ) {
|
|
2104
2134
|
|
|
2105
|
-
this.
|
|
2135
|
+
this.object.zoom = this.maxZoom;
|
|
2106
2136
|
sizeInverse = this._zoomState / this.maxZoom;
|
|
2107
2137
|
|
|
2108
|
-
} else if ( this.
|
|
2138
|
+
} else if ( this.object.zoom < this.minZoom ) {
|
|
2109
2139
|
|
|
2110
|
-
this.
|
|
2140
|
+
this.object.zoom = this.minZoom;
|
|
2111
2141
|
sizeInverse = this._zoomState / this.minZoom;
|
|
2112
2142
|
|
|
2113
2143
|
}
|
|
2114
2144
|
|
|
2115
|
-
this.
|
|
2145
|
+
this.object.updateProjectionMatrix();
|
|
2116
2146
|
|
|
2117
2147
|
this._v3_1.setFromMatrixPosition( this._gizmoMatrixState ); //gizmos position
|
|
2118
2148
|
|
|
@@ -2136,7 +2166,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
2136
2166
|
this.setTransformationMatrices( this._m4_1, this._m4_2 );
|
|
2137
2167
|
return _transformation;
|
|
2138
2168
|
|
|
2139
|
-
} else if ( this.
|
|
2169
|
+
} else if ( this.object.isPerspectiveCamera ) {
|
|
2140
2170
|
|
|
2141
2171
|
this._v3_1.setFromMatrixPosition( this._cameraMatrixState );
|
|
2142
2172
|
this._v3_2.setFromMatrixPosition( this._gizmoMatrixState );
|
|
@@ -2199,14 +2229,14 @@ class ArcballControls extends EventDispatcher {
|
|
|
2199
2229
|
|
|
2200
2230
|
/**
|
|
2201
2231
|
* Set camera fov
|
|
2202
|
-
* @param {
|
|
2232
|
+
* @param {number} value fov to be set
|
|
2203
2233
|
*/
|
|
2204
2234
|
setFov( value ) {
|
|
2205
2235
|
|
|
2206
|
-
if ( this.
|
|
2236
|
+
if ( this.object.isPerspectiveCamera ) {
|
|
2207
2237
|
|
|
2208
|
-
this.
|
|
2209
|
-
this.
|
|
2238
|
+
this.object.fov = MathUtils.clamp( value, this.minFov, this.maxFov );
|
|
2239
|
+
this.object.updateProjectionMatrix();
|
|
2210
2240
|
|
|
2211
2241
|
}
|
|
2212
2242
|
|
|
@@ -2214,10 +2244,11 @@ class ArcballControls extends EventDispatcher {
|
|
|
2214
2244
|
|
|
2215
2245
|
/**
|
|
2216
2246
|
* Set values in transformation object
|
|
2217
|
-
*
|
|
2218
|
-
* @param {Matrix4}
|
|
2247
|
+
*
|
|
2248
|
+
* @param {Matrix4} [camera=null] Transformation to be applied to the camera
|
|
2249
|
+
* @param {Matrix4} [gizmos=null] Transformation to be applied to gizmos
|
|
2219
2250
|
*/
|
|
2220
|
-
|
|
2251
|
+
setTransformationMatrices( camera = null, gizmos = null ) {
|
|
2221
2252
|
|
|
2222
2253
|
if ( camera != null ) {
|
|
2223
2254
|
|
|
@@ -2259,9 +2290,10 @@ class ArcballControls extends EventDispatcher {
|
|
|
2259
2290
|
|
|
2260
2291
|
/**
|
|
2261
2292
|
* Rotate camera around its direction axis passing by a given point by a given angle
|
|
2293
|
+
*
|
|
2262
2294
|
* @param {Vector3} point The point where the rotation axis is passing trough
|
|
2263
|
-
* @param {
|
|
2264
|
-
* @returns The computed
|
|
2295
|
+
* @param {number} angle Angle in radians
|
|
2296
|
+
* @returns {Object} The computed transformation matrix
|
|
2265
2297
|
*/
|
|
2266
2298
|
zRotate( point, angle ) {
|
|
2267
2299
|
|
|
@@ -2293,9 +2325,10 @@ class ArcballControls extends EventDispatcher {
|
|
|
2293
2325
|
|
|
2294
2326
|
/**
|
|
2295
2327
|
* Unproject the cursor on the 3D object surface
|
|
2328
|
+
*
|
|
2296
2329
|
* @param {Vector2} cursor Cursor coordinates in NDC
|
|
2297
2330
|
* @param {Camera} camera Virtual camera
|
|
2298
|
-
* @returns {Vector3} The point of intersection with the model, if exist, null otherwise
|
|
2331
|
+
* @returns {?Vector3} The point of intersection with the model, if exist, null otherwise
|
|
2299
2332
|
*/
|
|
2300
2333
|
unprojectOnObj( cursor, camera ) {
|
|
2301
2334
|
|
|
@@ -2323,8 +2356,8 @@ class ArcballControls extends EventDispatcher {
|
|
|
2323
2356
|
/**
|
|
2324
2357
|
* Unproject the cursor on the trackball surface
|
|
2325
2358
|
* @param {Camera} camera The virtual camera
|
|
2326
|
-
* @param {
|
|
2327
|
-
* @param {
|
|
2359
|
+
* @param {number} cursorX Cursor horizontal coordinate on screen
|
|
2360
|
+
* @param {number} cursorY Cursor vertical coordinate on screen
|
|
2328
2361
|
* @param {HTMLElement} canvas The canvas where the renderer draws its output
|
|
2329
2362
|
* @param {number} tbRadius The trackball radius
|
|
2330
2363
|
* @returns {Vector3} The unprojected point on the trackball surface
|
|
@@ -2453,10 +2486,10 @@ class ArcballControls extends EventDispatcher {
|
|
|
2453
2486
|
/**
|
|
2454
2487
|
* Unproject the cursor on the plane passing through the center of the trackball orthogonal to the camera
|
|
2455
2488
|
* @param {Camera} camera The virtual camera
|
|
2456
|
-
* @param {
|
|
2457
|
-
* @param {
|
|
2489
|
+
* @param {number} cursorX Cursor horizontal coordinate on screen
|
|
2490
|
+
* @param {number} cursorY Cursor vertical coordinate on screen
|
|
2458
2491
|
* @param {HTMLElement} canvas The canvas where the renderer draws its output
|
|
2459
|
-
* @param {
|
|
2492
|
+
* @param {boolean} [initialDistance=false] If initial distance between camera and gizmos should be used for calculations instead of current (Perspective only)
|
|
2460
2493
|
* @returns {Vector3} The unprojected point on the trackball plane
|
|
2461
2494
|
*/
|
|
2462
2495
|
unprojectOnTbPlane( camera, cursorX, cursorY, canvas, initialDistance = false ) {
|
|
@@ -2536,18 +2569,18 @@ class ArcballControls extends EventDispatcher {
|
|
|
2536
2569
|
updateMatrixState() {
|
|
2537
2570
|
|
|
2538
2571
|
//update camera and gizmos state
|
|
2539
|
-
this._cameraMatrixState.copy( this.
|
|
2572
|
+
this._cameraMatrixState.copy( this.object.matrix );
|
|
2540
2573
|
this._gizmoMatrixState.copy( this._gizmos.matrix );
|
|
2541
2574
|
|
|
2542
|
-
if ( this.
|
|
2575
|
+
if ( this.object.isOrthographicCamera ) {
|
|
2543
2576
|
|
|
2544
|
-
this._cameraProjectionState.copy( this.
|
|
2545
|
-
this.
|
|
2546
|
-
this._zoomState = this.
|
|
2577
|
+
this._cameraProjectionState.copy( this.object.projectionMatrix );
|
|
2578
|
+
this.object.updateProjectionMatrix();
|
|
2579
|
+
this._zoomState = this.object.zoom;
|
|
2547
2580
|
|
|
2548
|
-
} else if ( this.
|
|
2581
|
+
} else if ( this.object.isPerspectiveCamera ) {
|
|
2549
2582
|
|
|
2550
|
-
this._fovState = this.
|
|
2583
|
+
this._fovState = this.object.fov;
|
|
2551
2584
|
|
|
2552
2585
|
}
|
|
2553
2586
|
|
|
@@ -2556,7 +2589,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
2556
2589
|
/**
|
|
2557
2590
|
* Update the trackball FSA
|
|
2558
2591
|
* @param {STATE} newState New state of the FSA
|
|
2559
|
-
* @param {
|
|
2592
|
+
* @param {boolean} updateMatrices If matrices state should be updated
|
|
2560
2593
|
*/
|
|
2561
2594
|
updateTbState( newState, updateMatrices ) {
|
|
2562
2595
|
|
|
@@ -2571,53 +2604,51 @@ class ArcballControls extends EventDispatcher {
|
|
|
2571
2604
|
|
|
2572
2605
|
update() {
|
|
2573
2606
|
|
|
2574
|
-
const EPS = 0.000001;
|
|
2575
|
-
|
|
2576
2607
|
if ( this.target.equals( this._currentTarget ) === false ) {
|
|
2577
2608
|
|
|
2578
2609
|
this._gizmos.position.copy( this.target ); //for correct radius calculation
|
|
2579
|
-
this._tbRadius = this.calculateTbRadius( this.
|
|
2610
|
+
this._tbRadius = this.calculateTbRadius( this.object );
|
|
2580
2611
|
this.makeGizmos( this.target, this._tbRadius );
|
|
2581
2612
|
this._currentTarget.copy( this.target );
|
|
2582
2613
|
|
|
2583
2614
|
}
|
|
2584
2615
|
|
|
2585
2616
|
//check min/max parameters
|
|
2586
|
-
if ( this.
|
|
2617
|
+
if ( this.object.isOrthographicCamera ) {
|
|
2587
2618
|
|
|
2588
2619
|
//check zoom
|
|
2589
|
-
if ( this.
|
|
2620
|
+
if ( this.object.zoom > this.maxZoom || this.object.zoom < this.minZoom ) {
|
|
2590
2621
|
|
|
2591
|
-
const newZoom = MathUtils.clamp( this.
|
|
2592
|
-
this.applyTransformMatrix( this.scale( newZoom / this.
|
|
2622
|
+
const newZoom = MathUtils.clamp( this.object.zoom, this.minZoom, this.maxZoom );
|
|
2623
|
+
this.applyTransformMatrix( this.scale( newZoom / this.object.zoom, this._gizmos.position, true ) );
|
|
2593
2624
|
|
|
2594
2625
|
}
|
|
2595
2626
|
|
|
2596
|
-
} else if ( this.
|
|
2627
|
+
} else if ( this.object.isPerspectiveCamera ) {
|
|
2597
2628
|
|
|
2598
2629
|
//check distance
|
|
2599
|
-
const distance = this.
|
|
2630
|
+
const distance = this.object.position.distanceTo( this._gizmos.position );
|
|
2600
2631
|
|
|
2601
|
-
if ( distance > this.maxDistance +
|
|
2632
|
+
if ( distance > this.maxDistance + _EPS || distance < this.minDistance - _EPS ) {
|
|
2602
2633
|
|
|
2603
2634
|
const newDistance = MathUtils.clamp( distance, this.minDistance, this.maxDistance );
|
|
2604
2635
|
this.applyTransformMatrix( this.scale( newDistance / distance, this._gizmos.position ) );
|
|
2605
2636
|
this.updateMatrixState();
|
|
2606
2637
|
|
|
2607
|
-
|
|
2638
|
+
}
|
|
2608
2639
|
|
|
2609
2640
|
//check fov
|
|
2610
|
-
if ( this.
|
|
2641
|
+
if ( this.object.fov < this.minFov || this.object.fov > this.maxFov ) {
|
|
2611
2642
|
|
|
2612
|
-
this.
|
|
2613
|
-
this.
|
|
2643
|
+
this.object.fov = MathUtils.clamp( this.object.fov, this.minFov, this.maxFov );
|
|
2644
|
+
this.object.updateProjectionMatrix();
|
|
2614
2645
|
|
|
2615
2646
|
}
|
|
2616
2647
|
|
|
2617
2648
|
const oldRadius = this._tbRadius;
|
|
2618
|
-
this._tbRadius = this.calculateTbRadius( this.
|
|
2649
|
+
this._tbRadius = this.calculateTbRadius( this.object );
|
|
2619
2650
|
|
|
2620
|
-
if ( oldRadius < this._tbRadius -
|
|
2651
|
+
if ( oldRadius < this._tbRadius - _EPS || oldRadius > this._tbRadius + _EPS ) {
|
|
2621
2652
|
|
|
2622
2653
|
const scale = ( this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z ) / 3;
|
|
2623
2654
|
const newRadius = this._tbRadius / scale;
|
|
@@ -2635,7 +2666,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
2635
2666
|
|
|
2636
2667
|
}
|
|
2637
2668
|
|
|
2638
|
-
this.
|
|
2669
|
+
this.object.lookAt( this._gizmos.position );
|
|
2639
2670
|
|
|
2640
2671
|
}
|
|
2641
2672
|
|
|
@@ -2646,34 +2677,34 @@ class ArcballControls extends EventDispatcher {
|
|
|
2646
2677
|
if ( state.arcballState != undefined ) {
|
|
2647
2678
|
|
|
2648
2679
|
this._cameraMatrixState.fromArray( state.arcballState.cameraMatrix.elements );
|
|
2649
|
-
this._cameraMatrixState.decompose( this.
|
|
2680
|
+
this._cameraMatrixState.decompose( this.object.position, this.object.quaternion, this.object.scale );
|
|
2650
2681
|
|
|
2651
|
-
this.
|
|
2652
|
-
this.
|
|
2653
|
-
this.
|
|
2682
|
+
this.object.up.copy( state.arcballState.cameraUp );
|
|
2683
|
+
this.object.near = state.arcballState.cameraNear;
|
|
2684
|
+
this.object.far = state.arcballState.cameraFar;
|
|
2654
2685
|
|
|
2655
|
-
this.
|
|
2686
|
+
this.object.zoom = state.arcballState.cameraZoom;
|
|
2656
2687
|
|
|
2657
|
-
if ( this.
|
|
2688
|
+
if ( this.object.isPerspectiveCamera ) {
|
|
2658
2689
|
|
|
2659
|
-
this.
|
|
2690
|
+
this.object.fov = state.arcballState.cameraFov;
|
|
2660
2691
|
|
|
2661
2692
|
}
|
|
2662
2693
|
|
|
2663
2694
|
this._gizmoMatrixState.fromArray( state.arcballState.gizmoMatrix.elements );
|
|
2664
2695
|
this._gizmoMatrixState.decompose( this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale );
|
|
2665
2696
|
|
|
2666
|
-
this.
|
|
2667
|
-
this.
|
|
2697
|
+
this.object.updateMatrix();
|
|
2698
|
+
this.object.updateProjectionMatrix();
|
|
2668
2699
|
|
|
2669
2700
|
this._gizmos.updateMatrix();
|
|
2670
2701
|
|
|
2671
|
-
this._tbRadius = this.calculateTbRadius( this.
|
|
2702
|
+
this._tbRadius = this.calculateTbRadius( this.object );
|
|
2672
2703
|
const gizmoTmp = new Matrix4().copy( this._gizmoMatrixState0 );
|
|
2673
2704
|
this.makeGizmos( this._gizmos.position, this._tbRadius );
|
|
2674
2705
|
this._gizmoMatrixState0.copy( gizmoTmp );
|
|
2675
2706
|
|
|
2676
|
-
this.
|
|
2707
|
+
this.object.lookAt( this._gizmos.position );
|
|
2677
2708
|
this.updateTbState( STATE.IDLE, false );
|
|
2678
2709
|
|
|
2679
2710
|
this.dispatchEvent( _changeEvent );
|
|
@@ -2689,7 +2720,7 @@ class ArcballControls extends EventDispatcher {
|
|
|
2689
2720
|
function onWindowResize() {
|
|
2690
2721
|
|
|
2691
2722
|
const scale = ( this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z ) / 3;
|
|
2692
|
-
this._tbRadius = this.calculateTbRadius( this.
|
|
2723
|
+
this._tbRadius = this.calculateTbRadius( this.object );
|
|
2693
2724
|
|
|
2694
2725
|
const newRadius = this._tbRadius / scale;
|
|
2695
2726
|
const curve = new EllipseCurve( 0, 0, newRadius, newRadius );
|
|
@@ -3098,13 +3129,13 @@ function onWheel( event ) {
|
|
|
3098
3129
|
|
|
3099
3130
|
let scalePoint;
|
|
3100
3131
|
|
|
3101
|
-
if ( this.
|
|
3132
|
+
if ( this.object.isOrthographicCamera ) {
|
|
3102
3133
|
|
|
3103
|
-
scalePoint = this.unprojectOnTbPlane( this.
|
|
3134
|
+
scalePoint = this.unprojectOnTbPlane( this.object, event.clientX, event.clientY, this.domElement ).applyQuaternion( this.object.quaternion ).multiplyScalar( 1 / this.object.zoom ).add( this._gizmos.position );
|
|
3104
3135
|
|
|
3105
|
-
} else if ( this.
|
|
3136
|
+
} else if ( this.object.isPerspectiveCamera ) {
|
|
3106
3137
|
|
|
3107
|
-
scalePoint = this.unprojectOnTbPlane( this.
|
|
3138
|
+
scalePoint = this.unprojectOnTbPlane( this.object, event.clientX, event.clientY, this.domElement ).applyQuaternion( this.object.quaternion ).add( this._gizmos.position );
|
|
3108
3139
|
|
|
3109
3140
|
}
|
|
3110
3141
|
|
|
@@ -3132,7 +3163,7 @@ function onWheel( event ) {
|
|
|
3132
3163
|
|
|
3133
3164
|
case 'FOV':
|
|
3134
3165
|
|
|
3135
|
-
if ( this.
|
|
3166
|
+
if ( this.object.isPerspectiveCamera ) {
|
|
3136
3167
|
|
|
3137
3168
|
this.updateTbState( STATE.FOV, true );
|
|
3138
3169
|
|
|
@@ -3175,7 +3206,7 @@ function onWheel( event ) {
|
|
|
3175
3206
|
//check min and max distance
|
|
3176
3207
|
xNew = MathUtils.clamp( xNew, this.minDistance, this.maxDistance );
|
|
3177
3208
|
|
|
3178
|
-
const y = x * Math.tan( MathUtils.DEG2RAD * this.
|
|
3209
|
+
const y = x * Math.tan( MathUtils.DEG2RAD * this.object.fov * 0.5 );
|
|
3179
3210
|
|
|
3180
3211
|
//calculate new fov
|
|
3181
3212
|
let newFov = MathUtils.RAD2DEG * ( Math.atan( y / xNew ) * 2 );
|