@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.
Files changed (748) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +36277 -24023
  4. package/build/three.core.js +48830 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +10175 -46743
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +550 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +44348 -50670
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +70301 -0
  13. package/build/three.webgpu.nodes.min.js +6 -0
  14. package/examples/jsm/Addons.js +3 -15
  15. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  16. package/examples/jsm/animation/CCDIKSolver.js +61 -11
  17. package/examples/jsm/capabilities/WebGL.js +27 -21
  18. package/examples/jsm/capabilities/WebGPU.js +1 -10
  19. package/examples/jsm/controls/ArcballControls.js +262 -231
  20. package/examples/jsm/controls/DragControls.js +1 -1
  21. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  22. package/examples/jsm/controls/FlyControls.js +194 -188
  23. package/examples/jsm/controls/OrbitControls.js +801 -777
  24. package/examples/jsm/controls/PointerLockControls.js +26 -20
  25. package/examples/jsm/controls/TrackballControls.js +469 -448
  26. package/examples/jsm/controls/TransformControls.js +119 -68
  27. package/examples/jsm/csm/CSM.js +2 -2
  28. package/examples/jsm/csm/CSMFrustum.js +7 -4
  29. package/examples/jsm/csm/CSMHelper.js +2 -0
  30. package/examples/jsm/csm/CSMShadowNode.js +442 -0
  31. package/examples/jsm/curves/NURBSCurve.js +33 -2
  32. package/examples/jsm/curves/NURBSUtils.js +3 -0
  33. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  34. package/examples/jsm/effects/OutlineEffect.js +1 -1
  35. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  36. package/examples/jsm/effects/StereoEffect.js +6 -1
  37. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  38. package/examples/jsm/exporters/EXRExporter.js +19 -11
  39. package/examples/jsm/exporters/GLTFExporter.js +181 -109
  40. package/examples/jsm/exporters/KTX2Exporter.js +54 -23
  41. package/examples/jsm/exporters/OBJExporter.js +5 -1
  42. package/examples/jsm/exporters/PLYExporter.js +11 -9
  43. package/examples/jsm/exporters/USDZExporter.js +50 -11
  44. package/examples/jsm/geometries/DecalGeometry.js +73 -21
  45. package/examples/jsm/geometries/TextGeometry.js +1 -12
  46. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  47. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  48. package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
  49. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  50. package/examples/jsm/interactive/HTMLMesh.js +1 -0
  51. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  52. package/examples/jsm/interactive/SelectionHelper.js +3 -1
  53. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  54. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  55. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  56. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  57. package/examples/jsm/lighting/TiledLighting.js +18 -0
  58. package/examples/jsm/lights/LightProbeGenerator.js +26 -12
  59. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  60. package/examples/jsm/lines/LineGeometry.js +25 -0
  61. package/examples/jsm/lines/LineMaterial.js +0 -1
  62. package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
  63. package/examples/jsm/lines/webgpu/Line2.js +2 -1
  64. package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
  65. package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
  66. package/examples/jsm/loaders/3DMLoader.js +1 -0
  67. package/examples/jsm/loaders/3MFLoader.js +104 -2
  68. package/examples/jsm/loaders/BVHLoader.js +1 -1
  69. package/examples/jsm/loaders/ColladaLoader.js +15 -12
  70. package/examples/jsm/loaders/DDSLoader.js +42 -0
  71. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  72. package/examples/jsm/loaders/FBXLoader.js +71 -22
  73. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  74. package/examples/jsm/loaders/GLTFLoader.js +29 -14
  75. package/examples/jsm/loaders/KTX2Loader.js +160 -58
  76. package/examples/jsm/loaders/KTXLoader.js +4 -4
  77. package/examples/jsm/loaders/LDrawLoader.js +22 -136
  78. package/examples/jsm/loaders/LottieLoader.js +2 -1
  79. package/examples/jsm/loaders/MTLLoader.js +27 -7
  80. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  81. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  82. package/examples/jsm/loaders/OBJLoader.js +5 -3
  83. package/examples/jsm/loaders/PCDLoader.js +14 -13
  84. package/examples/jsm/loaders/PDBLoader.js +3 -2
  85. package/examples/jsm/loaders/PLYLoader.js +15 -12
  86. package/examples/jsm/loaders/PVRLoader.js +1 -1
  87. package/examples/jsm/loaders/STLLoader.js +3 -2
  88. package/examples/jsm/loaders/SVGLoader.js +2 -2
  89. package/examples/jsm/loaders/TDSLoader.js +17 -18
  90. package/examples/jsm/loaders/VRMLLoader.js +17 -17
  91. package/examples/jsm/loaders/VTKLoader.js +4 -3
  92. package/examples/jsm/loaders/XYZLoader.js +3 -2
  93. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  94. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
  95. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
  96. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  97. package/examples/jsm/math/ColorSpaces.js +76 -0
  98. package/examples/jsm/math/ConvexHull.js +1 -1
  99. package/examples/jsm/math/OBB.js +17 -0
  100. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  101. package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
  102. package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
  103. package/examples/jsm/misc/Timer.js +27 -12
  104. package/examples/jsm/misc/Volume.js +28 -18
  105. package/examples/jsm/misc/VolumeSlice.js +19 -16
  106. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  107. package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
  108. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  109. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  110. package/examples/jsm/objects/LensflareMesh.js +324 -0
  111. package/examples/jsm/objects/Reflector.js +5 -2
  112. package/examples/jsm/objects/Sky.js +2 -2
  113. package/examples/jsm/objects/SkyMesh.js +14 -14
  114. package/examples/jsm/objects/Water2.js +1 -1
  115. package/examples/jsm/objects/Water2Mesh.js +11 -9
  116. package/examples/jsm/objects/WaterMesh.js +38 -33
  117. package/examples/jsm/physics/JoltPhysics.js +8 -8
  118. package/examples/jsm/physics/RapierPhysics.js +5 -5
  119. package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
  120. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  121. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  122. package/examples/jsm/postprocessing/OutlinePass.js +37 -51
  123. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  124. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  125. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  126. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  128. package/examples/jsm/postprocessing/SSRPass.js +8 -4
  129. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  130. package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
  131. package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
  132. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  133. package/examples/jsm/shaders/BokehShader2.js +1 -1
  134. package/examples/jsm/shaders/FXAAShader.js +225 -224
  135. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  136. package/examples/jsm/shaders/OutputShader.js +6 -2
  137. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  138. package/examples/jsm/transpiler/AST.js +12 -2
  139. package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
  140. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
  141. package/examples/jsm/transpiler/TSLEncoder.js +96 -21
  142. package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
  143. package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
  144. package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
  145. package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
  146. package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
  147. package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
  148. package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
  149. package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
  150. package/examples/jsm/tsl/display/FXAANode.js +364 -0
  151. package/examples/jsm/tsl/display/FilmNode.js +100 -0
  152. package/examples/jsm/tsl/display/GTAONode.js +521 -0
  153. package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
  154. package/examples/jsm/tsl/display/LensflareNode.js +278 -0
  155. package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
  156. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  157. package/examples/jsm/tsl/display/OutlineNode.js +750 -0
  158. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
  159. package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
  160. package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
  161. package/examples/jsm/tsl/display/SMAANode.js +767 -0
  162. package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
  163. package/examples/jsm/tsl/display/SSRNode.js +538 -0
  164. package/examples/jsm/tsl/display/Sepia.js +24 -0
  165. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
  166. package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
  167. package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
  168. package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
  169. package/examples/jsm/tsl/display/TransitionNode.js +140 -0
  170. package/examples/jsm/tsl/display/hashBlur.js +34 -0
  171. package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
  172. package/examples/jsm/tsl/math/Bayer.js +18 -0
  173. package/examples/jsm/tsl/utils/Raymarching.js +65 -0
  174. package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
  175. package/examples/jsm/utils/CameraUtils.js +4 -1
  176. package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
  177. package/examples/jsm/utils/GeometryUtils.js +22 -19
  178. package/examples/jsm/utils/SceneOptimizer.js +410 -0
  179. package/examples/jsm/utils/SceneUtils.js +2 -2
  180. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  181. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  182. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  183. package/examples/jsm/utils/UVsDebug.js +1 -1
  184. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
  185. package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
  186. package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
  187. package/examples/jsm/webxr/Text2D.js +6 -6
  188. package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
  189. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  190. package/package.json +14 -9
  191. package/src/Three.Core.js +182 -0
  192. package/src/Three.Legacy.js +0 -21
  193. package/src/Three.TSL.js +543 -0
  194. package/src/Three.WebGPU.Nodes.js +23 -0
  195. package/src/Three.WebGPU.js +13 -184
  196. package/src/Three.js +1 -176
  197. package/src/animation/AnimationClip.js +2 -2
  198. package/src/animation/AnimationObjectGroup.js +2 -2
  199. package/src/animation/AnimationUtils.js +1 -1
  200. package/src/animation/PropertyBinding.js +2 -2
  201. package/src/audio/Audio.js +379 -2
  202. package/src/audio/AudioAnalyser.js +58 -1
  203. package/src/audio/AudioContext.js +15 -0
  204. package/src/audio/AudioListener.js +76 -0
  205. package/src/audio/PositionalAudio.js +107 -0
  206. package/src/cameras/ArrayCamera.js +29 -0
  207. package/src/cameras/Camera.js +47 -0
  208. package/src/cameras/CubeCamera.js +66 -0
  209. package/src/cameras/OrthographicCamera.js +109 -0
  210. package/src/cameras/PerspectiveCamera.js +173 -34
  211. package/src/cameras/StereoCamera.js +48 -2
  212. package/src/constants.js +6 -6
  213. package/src/core/BufferAttribute.js +4 -9
  214. package/src/core/BufferGeometry.js +48 -8
  215. package/src/core/Clock.js +1 -1
  216. package/src/core/EventDispatcher.js +52 -8
  217. package/src/core/InterleavedBuffer.js +4 -13
  218. package/src/core/Object3D.js +573 -3
  219. package/src/core/RenderTarget.js +22 -4
  220. package/src/core/RenderTarget3D.js +22 -0
  221. package/src/core/RenderTargetArray.js +22 -0
  222. package/src/extras/Controls.js +104 -0
  223. package/src/extras/DataUtils.js +48 -8
  224. package/src/extras/Earcut.js +18 -7
  225. package/src/extras/ImageUtils.js +18 -11
  226. package/src/extras/PMREMGenerator.js +40 -9
  227. package/src/extras/ShapeUtils.js +24 -2
  228. package/src/extras/TextureUtils.js +96 -10
  229. package/src/extras/core/Curve.js +153 -53
  230. package/src/extras/core/CurvePath.js +63 -22
  231. package/src/extras/core/Interpolations.js +29 -3
  232. package/src/extras/core/Path.js +134 -1
  233. package/src/extras/core/Shape.js +66 -3
  234. package/src/extras/core/ShapePath.js +76 -0
  235. package/src/extras/curves/ArcCurve.js +22 -0
  236. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  237. package/src/extras/curves/CubicBezierCurve.js +67 -0
  238. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  239. package/src/extras/curves/EllipseCurve.js +102 -0
  240. package/src/extras/curves/LineCurve.js +36 -0
  241. package/src/extras/curves/LineCurve3.js +36 -0
  242. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  243. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  244. package/src/extras/curves/SplineCurve.js +48 -0
  245. package/src/geometries/BoxGeometry.js +38 -0
  246. package/src/geometries/CapsuleGeometry.js +34 -0
  247. package/src/geometries/CircleGeometry.js +40 -0
  248. package/src/geometries/ConeGeometry.js +38 -0
  249. package/src/geometries/CylinderGeometry.js +50 -4
  250. package/src/geometries/DodecahedronGeometry.js +32 -0
  251. package/src/geometries/EdgesGeometry.js +30 -2
  252. package/src/geometries/ExtrudeGeometry.js +52 -0
  253. package/src/geometries/IcosahedronGeometry.js +32 -0
  254. package/src/geometries/LatheGeometry.js +43 -3
  255. package/src/geometries/OctahedronGeometry.js +32 -0
  256. package/src/geometries/PlaneGeometry.js +34 -0
  257. package/src/geometries/PolyhedronGeometry.js +29 -0
  258. package/src/geometries/RingGeometry.js +36 -0
  259. package/src/geometries/ShapeGeometry.js +37 -0
  260. package/src/geometries/SphereGeometry.js +37 -0
  261. package/src/geometries/TetrahedronGeometry.js +32 -0
  262. package/src/geometries/TorusGeometry.js +35 -0
  263. package/src/geometries/TorusKnotGeometry.js +38 -0
  264. package/src/geometries/TubeGeometry.js +49 -0
  265. package/src/geometries/WireframeGeometry.js +32 -0
  266. package/src/helpers/ArrowHelper.js +60 -3
  267. package/src/helpers/AxesHelper.js +28 -0
  268. package/src/helpers/Box3Helper.js +28 -0
  269. package/src/helpers/BoxHelper.js +43 -7
  270. package/src/helpers/CameraHelper.js +61 -18
  271. package/src/helpers/DirectionalLightHelper.js +52 -0
  272. package/src/helpers/GridHelper.js +26 -0
  273. package/src/helpers/HemisphereLightHelper.js +39 -0
  274. package/src/helpers/PlaneHelper.js +33 -0
  275. package/src/helpers/PointLightHelper.js +43 -0
  276. package/src/helpers/PolarGridHelper.js +30 -0
  277. package/src/helpers/SkeletonHelper.js +39 -2
  278. package/src/helpers/SpotLightHelper.js +40 -0
  279. package/src/lights/AmbientLight.js +25 -0
  280. package/src/lights/DirectionalLight.js +57 -0
  281. package/src/lights/DirectionalLightShadow.js +15 -0
  282. package/src/lights/HemisphereLight.js +32 -0
  283. package/src/lights/Light.js +36 -0
  284. package/src/lights/LightProbe.js +43 -0
  285. package/src/lights/LightShadow.js +159 -0
  286. package/src/lights/PointLight.js +59 -0
  287. package/src/lights/PointLightShadow.js +21 -0
  288. package/src/lights/RectAreaLight.js +59 -0
  289. package/src/lights/SpotLight.js +102 -0
  290. package/src/lights/SpotLightShadow.js +24 -2
  291. package/src/lights/webgpu/IESSpotLight.js +21 -0
  292. package/src/loaders/Loader.js +132 -0
  293. package/src/loaders/MaterialLoader.js +7 -1
  294. package/src/loaders/nodes/NodeLoader.js +189 -0
  295. package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  296. package/src/loaders/nodes/NodeObjectLoader.js +151 -0
  297. package/src/materials/LineDashedMaterial.js +0 -1
  298. package/src/materials/Material.js +469 -7
  299. package/src/materials/MeshPhongMaterial.js +1 -1
  300. package/src/materials/MeshPhysicalMaterial.js +2 -2
  301. package/src/materials/MeshStandardMaterial.js +2 -2
  302. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
  303. package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  304. package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  305. package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
  306. package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  307. package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  308. package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  309. package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  310. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
  311. package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  312. package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  313. package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  314. package/src/materials/nodes/NodeMaterial.js +1180 -0
  315. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
  316. package/src/materials/nodes/PointsNodeMaterial.js +153 -0
  317. package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
  318. package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
  319. package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
  320. package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
  321. package/src/math/Box2.js +177 -0
  322. package/src/math/Box3.js +243 -0
  323. package/src/math/Color.js +343 -0
  324. package/src/math/ColorManagement.js +143 -102
  325. package/src/math/Cylindrical.js +65 -6
  326. package/src/math/Euler.js +137 -4
  327. package/src/math/Frustum.js +83 -0
  328. package/src/math/Interpolant.js +87 -8
  329. package/src/math/Line3.js +96 -2
  330. package/src/math/MathUtils.js +182 -19
  331. package/src/math/Matrix2.js +70 -0
  332. package/src/math/Matrix3.js +229 -4
  333. package/src/math/Matrix4.js +368 -3
  334. package/src/math/Plane.js +164 -2
  335. package/src/math/Quaternion.js +265 -9
  336. package/src/math/Ray.js +160 -0
  337. package/src/math/Sphere.js +147 -0
  338. package/src/math/Spherical.js +73 -11
  339. package/src/math/SphericalHarmonics3.js +112 -14
  340. package/src/math/Triangle.js +230 -2
  341. package/src/math/Vector2.js +396 -10
  342. package/src/math/Vector3.js +550 -13
  343. package/src/math/Vector4.js +415 -9
  344. package/src/math/interpolants/CubicInterpolant.js +10 -1
  345. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  346. package/src/math/interpolants/LinearInterpolant.js +13 -0
  347. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  348. package/src/nodes/Nodes.js +84 -166
  349. package/src/nodes/TSL.js +167 -0
  350. package/src/nodes/accessors/AccessorsUtils.js +39 -10
  351. package/src/nodes/accessors/Arrays.js +68 -0
  352. package/src/nodes/accessors/BatchNode.js +93 -26
  353. package/src/nodes/accessors/Bitangent.js +54 -0
  354. package/src/nodes/accessors/BufferAttributeNode.js +189 -11
  355. package/src/nodes/accessors/BufferNode.js +70 -5
  356. package/src/nodes/accessors/BuiltinNode.js +63 -0
  357. package/src/nodes/accessors/Camera.js +129 -0
  358. package/src/nodes/accessors/ClippingNode.js +152 -43
  359. package/src/nodes/accessors/CubeTextureNode.js +76 -13
  360. package/src/nodes/accessors/InstanceNode.js +118 -35
  361. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  362. package/src/nodes/accessors/Lights.js +129 -0
  363. package/src/nodes/accessors/MaterialNode.js +394 -58
  364. package/src/nodes/accessors/MaterialProperties.js +57 -1
  365. package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
  366. package/src/nodes/accessors/ModelNode.js +159 -12
  367. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
  368. package/src/nodes/accessors/MorphNode.js +60 -13
  369. package/src/nodes/accessors/Normal.js +156 -0
  370. package/src/nodes/accessors/Object3DNode.js +154 -35
  371. package/src/nodes/accessors/PointUVNode.js +35 -6
  372. package/src/nodes/accessors/Position.js +64 -0
  373. package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  374. package/src/nodes/accessors/ReferenceNode.js +243 -6
  375. package/src/nodes/accessors/ReflectVector.js +36 -0
  376. package/src/nodes/accessors/RendererReferenceNode.js +57 -7
  377. package/src/nodes/accessors/SceneNode.js +98 -6
  378. package/src/nodes/accessors/SkinningNode.js +214 -21
  379. package/src/nodes/accessors/StorageBufferNode.js +288 -28
  380. package/src/nodes/accessors/StorageTextureNode.js +139 -12
  381. package/src/nodes/accessors/Tangent.js +62 -0
  382. package/src/nodes/accessors/Texture3DNode.js +98 -12
  383. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
  384. package/src/nodes/accessors/TextureNode.js +347 -34
  385. package/src/nodes/accessors/TextureSizeNode.js +51 -9
  386. package/src/nodes/accessors/UV.js +11 -0
  387. package/src/nodes/accessors/UniformArrayNode.js +241 -32
  388. package/src/nodes/accessors/UserDataNode.js +55 -7
  389. package/src/nodes/accessors/VelocityNode.js +223 -0
  390. package/src/nodes/accessors/VertexColorNode.js +45 -6
  391. package/src/nodes/code/CodeNode.js +108 -8
  392. package/src/nodes/code/ExpressionNode.js +38 -7
  393. package/src/nodes/code/FunctionCallNode.js +62 -11
  394. package/src/nodes/code/FunctionNode.js +54 -24
  395. package/src/nodes/code/ScriptableNode.js +241 -17
  396. package/src/nodes/code/ScriptableValueNode.js +93 -8
  397. package/src/nodes/core/ArrayNode.js +142 -0
  398. package/src/nodes/core/AssignNode.js +60 -12
  399. package/src/nodes/core/AttributeNode.js +55 -22
  400. package/src/nodes/core/BypassNode.js +59 -11
  401. package/src/nodes/core/CacheNode.js +64 -10
  402. package/src/nodes/core/ConstNode.js +38 -3
  403. package/src/nodes/core/ContextNode.js +87 -12
  404. package/src/nodes/core/IndexNode.js +102 -10
  405. package/src/nodes/core/InputNode.js +55 -3
  406. package/src/nodes/core/LightingModel.js +65 -5
  407. package/src/nodes/core/MRTNode.js +81 -7
  408. package/src/nodes/core/Node.js +368 -50
  409. package/src/nodes/core/NodeAttribute.js +38 -0
  410. package/src/nodes/core/NodeBuilder.js +1317 -83
  411. package/src/nodes/core/NodeCache.js +41 -2
  412. package/src/nodes/core/NodeCode.js +31 -0
  413. package/src/nodes/core/NodeFrame.js +123 -2
  414. package/src/nodes/core/NodeFunction.js +46 -0
  415. package/src/nodes/core/NodeFunctionInput.js +44 -0
  416. package/src/nodes/core/NodeParser.js +11 -0
  417. package/src/nodes/core/NodeUniform.js +52 -0
  418. package/src/nodes/core/NodeUtils.js +226 -6
  419. package/src/nodes/core/NodeVar.js +47 -1
  420. package/src/nodes/core/NodeVarying.js +28 -0
  421. package/src/nodes/core/OutputStructNode.js +61 -17
  422. package/src/nodes/core/ParameterNode.js +34 -4
  423. package/src/nodes/core/PropertyNode.js +296 -32
  424. package/src/nodes/core/StackNode.js +108 -8
  425. package/src/nodes/core/StructNode.js +120 -0
  426. package/src/nodes/core/StructType.js +13 -0
  427. package/src/nodes/core/StructTypeNode.js +116 -9
  428. package/src/nodes/core/TempNode.js +37 -7
  429. package/src/nodes/core/UniformGroupNode.js +98 -17
  430. package/src/nodes/core/UniformNode.js +72 -4
  431. package/src/nodes/core/VarNode.js +170 -13
  432. package/src/nodes/core/VaryingNode.js +109 -8
  433. package/src/nodes/core/constants.js +40 -0
  434. package/src/nodes/display/BlendModes.js +193 -0
  435. package/src/nodes/display/BumpMapNode.js +47 -10
  436. package/src/nodes/display/ColorAdjustment.js +141 -0
  437. package/src/nodes/display/ColorSpaceFunctions.js +54 -0
  438. package/src/nodes/display/ColorSpaceNode.js +147 -68
  439. package/src/nodes/display/FrontFacingNode.js +39 -6
  440. package/src/nodes/display/NormalMapNode.js +55 -13
  441. package/src/nodes/display/PassNode.js +420 -19
  442. package/src/nodes/display/PosterizeNode.js +40 -7
  443. package/src/nodes/display/RenderOutputNode.js +81 -13
  444. package/src/nodes/display/ScreenNode.js +286 -0
  445. package/src/nodes/display/ToneMappingFunctions.js +242 -0
  446. package/src/nodes/display/ToneMappingNode.js +68 -175
  447. package/src/nodes/display/ToonOutlinePassNode.js +183 -0
  448. package/src/nodes/display/ViewportDepthNode.js +210 -36
  449. package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
  450. package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
  451. package/src/nodes/display/ViewportTextureNode.js +68 -11
  452. package/src/nodes/fog/Fog.js +113 -0
  453. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  454. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  455. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  456. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  457. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  458. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  459. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  460. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  461. package/src/nodes/functions/BSDF/LTC.js +50 -6
  462. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  463. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  464. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  465. package/src/nodes/functions/BasicLightingModel.js +27 -6
  466. package/src/nodes/functions/PhongLightingModel.js +38 -8
  467. package/src/nodes/functions/PhysicalLightingModel.js +215 -51
  468. package/src/nodes/functions/ShadowMaskModel.js +24 -1
  469. package/src/nodes/functions/ToonLightingModel.js +24 -5
  470. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  471. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  472. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  473. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  474. package/src/nodes/functions/material/getRoughness.js +2 -2
  475. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  476. package/src/nodes/geometry/RangeNode.js +62 -7
  477. package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
  478. package/src/nodes/gpgpu/BarrierNode.js +89 -0
  479. package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
  480. package/src/nodes/gpgpu/ComputeNode.js +124 -9
  481. package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
  482. package/src/nodes/lighting/AONode.js +24 -3
  483. package/src/nodes/lighting/AmbientLightNode.js +16 -8
  484. package/src/nodes/lighting/AnalyticLightNode.js +151 -231
  485. package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
  486. package/src/nodes/lighting/BasicLightMapNode.js +25 -5
  487. package/src/nodes/lighting/DirectionalLightNode.js +19 -20
  488. package/src/nodes/lighting/EnvironmentNode.js +34 -17
  489. package/src/nodes/lighting/HemisphereLightNode.js +42 -11
  490. package/src/nodes/lighting/IESSpotLightNode.js +18 -9
  491. package/src/nodes/lighting/IrradianceNode.js +23 -3
  492. package/src/nodes/lighting/LightProbeNode.js +29 -36
  493. package/src/nodes/lighting/LightUtils.js +12 -4
  494. package/src/nodes/lighting/LightingContextNode.js +70 -21
  495. package/src/nodes/lighting/LightingNode.js +22 -9
  496. package/src/nodes/lighting/LightsNode.js +309 -86
  497. package/src/nodes/lighting/PointLightNode.js +66 -32
  498. package/src/nodes/lighting/PointShadowNode.js +306 -0
  499. package/src/nodes/lighting/RectAreaLightNode.js +61 -25
  500. package/src/nodes/lighting/ShadowBaseNode.js +92 -0
  501. package/src/nodes/lighting/ShadowNode.js +812 -0
  502. package/src/nodes/lighting/SpotLightNode.js +73 -31
  503. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  504. package/src/nodes/materialx/lib/mx_hsv.js +27 -22
  505. package/src/nodes/materialx/lib/mx_noise.js +70 -70
  506. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  507. package/src/nodes/math/ConditionalNode.js +230 -0
  508. package/src/nodes/math/Hash.js +21 -0
  509. package/src/nodes/math/MathNode.js +812 -131
  510. package/src/nodes/math/MathUtils.js +47 -8
  511. package/src/nodes/math/OperatorNode.js +410 -66
  512. package/src/nodes/math/TriNoise3D.js +32 -32
  513. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  514. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  515. package/src/nodes/pmrem/PMREMNode.js +188 -28
  516. package/src/nodes/pmrem/PMREMUtils.js +24 -24
  517. package/src/nodes/procedural/Checker.js +22 -0
  518. package/src/nodes/shapes/Shapes.js +32 -0
  519. package/src/nodes/tsl/TSLBase.js +31 -0
  520. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
  521. package/src/nodes/utils/ArrayElementNode.js +45 -5
  522. package/src/nodes/utils/ConvertNode.js +39 -4
  523. package/src/nodes/utils/CubeMapNode.js +88 -8
  524. package/src/nodes/utils/Discard.js +24 -0
  525. package/src/nodes/utils/EquirectUVNode.js +39 -7
  526. package/src/nodes/utils/FlipNode.js +106 -0
  527. package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
  528. package/src/nodes/utils/JoinNode.js +31 -3
  529. package/src/nodes/utils/LoopNode.js +95 -9
  530. package/src/nodes/utils/MatcapUVNode.js +27 -8
  531. package/src/nodes/utils/MaxMipLevelNode.js +57 -6
  532. package/src/nodes/utils/MemberNode.js +68 -0
  533. package/src/nodes/utils/Oscillators.js +41 -0
  534. package/src/nodes/utils/Packing.js +21 -0
  535. package/src/nodes/utils/PostProcessingUtils.js +95 -0
  536. package/src/nodes/utils/RTTNode.js +141 -9
  537. package/src/nodes/utils/ReflectorNode.js +295 -21
  538. package/src/nodes/utils/RemapNode.js +93 -10
  539. package/src/nodes/utils/RotateNode.js +48 -13
  540. package/src/nodes/utils/SetNode.js +50 -4
  541. package/src/nodes/utils/SplitNode.js +62 -6
  542. package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
  543. package/src/nodes/utils/SpriteUtils.js +21 -5
  544. package/src/nodes/utils/StorageArrayElementNode.js +64 -12
  545. package/src/nodes/utils/Timer.js +73 -0
  546. package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
  547. package/src/nodes/utils/UVUtils.js +27 -9
  548. package/src/nodes/utils/ViewportUtils.js +16 -4
  549. package/src/objects/BatchedMesh.js +808 -281
  550. package/src/objects/Bone.js +24 -0
  551. package/src/objects/ClippingGroup.js +68 -0
  552. package/src/objects/Group.js +24 -0
  553. package/src/objects/InstancedMesh.js +120 -2
  554. package/src/objects/LOD.js +120 -5
  555. package/src/objects/Line.js +89 -6
  556. package/src/objects/LineLoop.js +20 -0
  557. package/src/objects/LineSegments.js +18 -0
  558. package/src/objects/Mesh.js +82 -23
  559. package/src/objects/Points.js +62 -0
  560. package/src/objects/Skeleton.js +107 -2
  561. package/src/objects/SkinnedMesh.js +99 -5
  562. package/src/objects/Sprite.js +54 -0
  563. package/src/renderers/WebGLRenderer.js +274 -157
  564. package/src/renderers/common/Animation.js +109 -12
  565. package/src/renderers/common/Attributes.js +40 -0
  566. package/src/renderers/common/Backend.js +504 -44
  567. package/src/renderers/common/Background.js +67 -9
  568. package/src/renderers/common/BindGroup.js +45 -1
  569. package/src/renderers/common/Binding.js +35 -0
  570. package/src/renderers/common/Bindings.js +136 -19
  571. package/src/renderers/common/Buffer.js +49 -0
  572. package/src/renderers/common/BufferUtils.js +25 -0
  573. package/src/renderers/common/BundleGroup.js +83 -0
  574. package/src/renderers/common/ChainMap.js +45 -6
  575. package/src/renderers/common/ClippingContext.js +175 -80
  576. package/src/renderers/common/Color4.js +40 -0
  577. package/src/renderers/common/ComputePipeline.js +24 -0
  578. package/src/renderers/common/Constants.js +2 -1
  579. package/src/renderers/common/CubeRenderTarget.js +22 -3
  580. package/src/renderers/common/DataMap.js +37 -1
  581. package/src/renderers/common/Geometries.js +111 -14
  582. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  583. package/src/renderers/common/Info.js +78 -35
  584. package/src/renderers/common/Lighting.js +73 -0
  585. package/src/renderers/common/Pipeline.js +22 -0
  586. package/src/renderers/common/Pipelines.js +148 -5
  587. package/src/renderers/common/PostProcessing.js +112 -11
  588. package/src/renderers/common/ProgrammableStage.js +60 -2
  589. package/src/renderers/common/QuadMesh.js +56 -5
  590. package/src/renderers/common/RenderBundle.js +14 -8
  591. package/src/renderers/common/RenderBundles.js +39 -10
  592. package/src/renderers/common/RenderContext.js +205 -7
  593. package/src/renderers/common/RenderContexts.js +59 -6
  594. package/src/renderers/common/RenderList.js +230 -21
  595. package/src/renderers/common/RenderLists.js +45 -6
  596. package/src/renderers/common/RenderObject.js +552 -41
  597. package/src/renderers/common/RenderObjects.js +118 -9
  598. package/src/renderers/common/RenderPipeline.js +24 -0
  599. package/src/renderers/common/Renderer.js +1537 -239
  600. package/src/renderers/common/RendererUtils.js +191 -0
  601. package/src/renderers/common/SampledTexture.js +132 -3
  602. package/src/renderers/common/Sampler.js +30 -0
  603. package/src/renderers/common/StorageBuffer.js +24 -0
  604. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  605. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  606. package/src/renderers/common/StorageTexture.js +38 -0
  607. package/src/renderers/common/Textures.js +142 -32
  608. package/src/renderers/common/TimestampQueryPool.js +98 -0
  609. package/src/renderers/common/Uniform.js +225 -3
  610. package/src/renderers/common/UniformBuffer.js +19 -0
  611. package/src/renderers/common/UniformsGroup.js +157 -6
  612. package/src/renderers/common/XRManager.js +1185 -0
  613. package/src/renderers/common/XRRenderTarget.js +74 -0
  614. package/src/renderers/common/extras/PMREMGenerator.js +211 -53
  615. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  616. package/src/renderers/common/nodes/NodeLibrary.js +194 -0
  617. package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
  618. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  619. package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
  620. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  621. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  622. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  623. package/src/renderers/common/nodes/Nodes.js +390 -70
  624. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  625. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  626. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  627. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  628. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  629. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  630. package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -0
  631. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  632. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  633. package/src/renderers/webgl/WebGLBackground.js +24 -1
  634. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  635. package/src/renderers/webgl/WebGLCapabilities.js +2 -0
  636. package/src/renderers/webgl/WebGLGeometries.js +0 -28
  637. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  638. package/src/renderers/webgl/WebGLProgram.js +27 -29
  639. package/src/renderers/webgl/WebGLPrograms.js +24 -16
  640. package/src/renderers/webgl/WebGLState.js +68 -11
  641. package/src/renderers/webgl/WebGLTextures.js +49 -10
  642. package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
  643. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  644. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
  645. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
  646. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  647. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  648. package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
  649. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
  650. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
  651. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  652. package/src/renderers/webgpu/WebGPUBackend.js +816 -236
  653. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
  654. package/src/renderers/webgpu/WebGPURenderer.js +45 -6
  655. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
  656. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
  657. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
  658. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
  659. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  660. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
  661. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
  662. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
  663. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
  664. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
  665. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
  666. package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
  667. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  668. package/src/renderers/webxr/WebXRManager.js +54 -32
  669. package/src/scenes/Fog.js +60 -0
  670. package/src/scenes/FogExp2.js +51 -0
  671. package/src/scenes/Scene.js +87 -0
  672. package/src/textures/Data3DTexture.js +2 -2
  673. package/src/textures/DepthTexture.js +2 -0
  674. package/src/textures/Source.js +2 -2
  675. package/src/textures/Texture.js +368 -5
  676. package/src/textures/VideoFrameTexture.js +35 -0
  677. package/src/utils.js +33 -1
  678. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  679. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  680. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  681. package/examples/jsm/controls/Controls.js +0 -32
  682. package/examples/jsm/exporters/MMDExporter.js +0 -217
  683. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  684. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  685. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  686. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  687. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  688. package/examples/jsm/loaders/TiltLoader.js +0 -520
  689. package/examples/jsm/objects/InstancedPoints.js +0 -21
  690. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  691. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  692. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  693. package/src/nodes/accessors/BitangentNode.js +0 -13
  694. package/src/nodes/accessors/CameraNode.js +0 -19
  695. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  696. package/src/nodes/accessors/NormalNode.js +0 -14
  697. package/src/nodes/accessors/PositionNode.js +0 -10
  698. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  699. package/src/nodes/accessors/TangentNode.js +0 -23
  700. package/src/nodes/accessors/UVNode.js +0 -3
  701. package/src/nodes/core/NodeKeywords.js +0 -80
  702. package/src/nodes/core/UniformGroup.js +0 -13
  703. package/src/nodes/display/AfterImageNode.js +0 -152
  704. package/src/nodes/display/AnamorphicNode.js +0 -145
  705. package/src/nodes/display/BlendModeNode.js +0 -128
  706. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  707. package/src/nodes/display/DenoiseNode.js +0 -198
  708. package/src/nodes/display/DotScreenNode.js +0 -75
  709. package/src/nodes/display/FXAANode.js +0 -327
  710. package/src/nodes/display/FilmNode.js +0 -52
  711. package/src/nodes/display/GTAONode.js +0 -324
  712. package/src/nodes/display/GaussianBlurNode.js +0 -207
  713. package/src/nodes/display/Lut3DNode.js +0 -53
  714. package/src/nodes/display/RGBShiftNode.js +0 -49
  715. package/src/nodes/display/SepiaNode.js +0 -18
  716. package/src/nodes/display/TransitionNode.js +0 -76
  717. package/src/nodes/display/ViewportNode.js +0 -137
  718. package/src/nodes/fog/FogExp2Node.js +0 -34
  719. package/src/nodes/fog/FogNode.js +0 -48
  720. package/src/nodes/fog/FogRangeNode.js +0 -35
  721. package/src/nodes/lighting/LightNode.js +0 -57
  722. package/src/nodes/loaders/NodeLoader.js +0 -110
  723. package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
  724. package/src/nodes/loaders/NodeObjectLoader.js +0 -71
  725. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  726. package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
  727. package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
  728. package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
  729. package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
  730. package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
  731. package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  732. package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
  733. package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
  734. package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  735. package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
  736. package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
  737. package/src/nodes/materials/NodeMaterial.js +0 -680
  738. package/src/nodes/materials/PointsNodeMaterial.js +0 -39
  739. package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
  740. package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
  741. package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
  742. package/src/nodes/math/CondNode.js +0 -139
  743. package/src/nodes/math/HashNode.js +0 -34
  744. package/src/nodes/procedural/CheckerNode.js +0 -42
  745. package/src/nodes/utils/DiscardNode.js +0 -28
  746. package/src/nodes/utils/OscNode.js +0 -81
  747. package/src/nodes/utils/PackingNode.js +0 -55
  748. 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
- * @param {Camera} camera Virtual camera used in the scene
76
- * @param {HTMLElement} domElement Renderer's dom element
77
- * @param {Scene} scene The scene to be rendered
78
- */
79
- class ArcballControls extends EventDispatcher {
80
-
81
- constructor( camera, domElement, scene = null ) {
82
-
83
- super();
84
- this.camera = null;
85
- this.domElement = domElement;
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.camera, _center.x, _center.y, this.domElement ) );
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.camera, _center.x, _center.y, this.domElement, this._tbRadius ) );
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.camera.isPerspectiveCamera || ! this.enableZoom ) {
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.camera, _center.x, _center.y, this.domElement ) );
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.camera, _center.x, _center.y, this.domElement ) );
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.camera, _center.x, _center.y, this.domElement, this._tbRadius ) );
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.camera, _center.x, _center.y, this.domElement, this._tbRadius ) );
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.camera.isPerspectiveCamera ) {
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.camera.position ).normalize().multiplyScalar( newDistance / x );
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.camera );
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.camera, _center.x, _center.y, this.domElement, true ) );
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.camera, _center.x, _center.y, this.domElement, true ) );
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.camera.getWorldDirection( this._rotationAxis ); //rotation axis
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.camera, _center.x, _center.y, this.domElement ).applyQuaternion( this.camera.quaternion ).multiplyScalar( 1 / this.camera.zoom ).add( this._v3_2 );
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.camera.isOrthographicCamera ) {
901
+ if ( this.object.isOrthographicCamera ) {
873
902
 
874
- scalePoint = this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement )
875
- .applyQuaternion( this.camera.quaternion )
876
- .multiplyScalar( 1 / this.camera.zoom )
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.camera.isPerspectiveCamera ) {
908
+ } else if ( this.object.isPerspectiveCamera ) {
880
909
 
881
- scalePoint = this.unprojectOnTbPlane( this.camera, _center.x, _center.y, this.domElement )
882
- .applyQuaternion( this.camera.quaternion )
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.camera.position ).normalize().multiplyScalar( newDistance / x );
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 {Number} clientX
1020
- * @param {Number} clientY
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 {Boolean} True if action1 and action 2 are the same mouse action, false otherwise
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 {String} operation The operation to be performed ('PAN', 'ROTATE', 'ZOOM', 'FOV)
1079
- * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches
1080
- * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed
1081
- * @returns {Boolean} True if the mouse action has been successfully added, false otherwise
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 {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches
1160
- * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed
1161
- * @returns {Boolean} True if the operation has been succesfully removed, false otherwise
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 {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches
1183
- * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed
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 {Number} mouse Mouse button
1223
- * @param {String} key Keyboard modifier
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 {Number} The angle between two pointers in degrees
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.camera.position, this.camera.quaternion, this.camera.scale );
1301
- this.camera.updateMatrix();
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.camera.up.copy( this._upState ).applyQuaternion( this.camera.quaternion );
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.camera );
1351
+ this._tbRadius = this.calculateTbRadius( this.object );
1323
1352
 
1324
1353
  if ( this.adjustNearFar ) {
1325
1354
 
1326
- const cameraDistance = this.camera.position.distanceTo( this._gizmos.position );
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.camera.near = cameraDistance - minNearPos;
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.camera.far = cameraDistance - minFarPos;
1373
+ this.object.far = cameraDistance - minFarPos;
1345
1374
 
1346
- this.camera.updateProjectionMatrix();
1375
+ this.object.updateProjectionMatrix();
1347
1376
 
1348
1377
  } else {
1349
1378
 
1350
1379
  let update = false;
1351
1380
 
1352
- if ( this.camera.near != this._initialNear ) {
1381
+ if ( this.object.near != this._initialNear ) {
1353
1382
 
1354
- this.camera.near = this._initialNear;
1383
+ this.object.near = this._initialNear;
1355
1384
  update = true;
1356
1385
 
1357
1386
  }
1358
1387
 
1359
- if ( this.camera.far != this._initialFar ) {
1388
+ if ( this.object.far != this._initialFar ) {
1360
1389
 
1361
- this.camera.far = this._initialFar;
1390
+ this.object.far = this._initialFar;
1362
1391
  update = true;
1363
1392
 
1364
1393
  }
1365
1394
 
1366
1395
  if ( update ) {
1367
1396
 
1368
- this.camera.updateProjectionMatrix();
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
- * @param {Number} p0 Position at t0
1381
- * @param {Number} p1 Position at t1
1382
- * @param {Number} t0 Initial time in milliseconds
1383
- * @param {Number} t1 Ending time in milliseconds
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 diamater will be 2/3 of the minimum side of the camera frustum
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 {Number} The trackball radius
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 {Number} size Scale factor
1454
- * @param {Number} amount Amount of operation to be completed (used for focus animations, default is complete full operation)
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.camera.position, this.camera.quaternion, this.camera.scale );
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.camera.isOrthographicCamera ) {
1524
+ if ( this.object.isOrthographicCamera ) {
1494
1525
 
1495
- const width = this.camera.right - this.camera.left;
1496
- const height = this.camera.bottom - this.camera.top;
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.camera.zoom * multiplier;
1502
- divisions = size / tick * this.camera.zoom;
1532
+ size = maxLength / this.object.zoom * multiplier;
1533
+ divisions = size / tick * this.object.zoom;
1503
1534
 
1504
- } else if ( this.camera.isPerspectiveCamera ) {
1535
+ } else if ( this.object.isPerspectiveCamera ) {
1505
1536
 
1506
- const distance = this.camera.position.distanceTo( this._gizmos.position );
1507
- const halfFovV = MathUtils.DEG2RAD * this.camera.fov * 0.5;
1508
- const halfFovH = Math.atan( ( this.camera.aspect ) * Math.tan( halfFovV ) );
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.camera.quaternion );
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.domElement.removeEventListener( 'pointerdown', this._onPointerDown );
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 {Number} t The absolute progress of the animation in the bound of 0 (beginning of the) and 1 (ending of animation)
1577
- * @returns {Number} Result of easing out cubic at time t
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 {Boolean} isActive If true, make gizmos more visible
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
- * @param {number} x Cursor horizontal coordinate within the canvas
1614
- * @param {number} y Cursor vertical coordinate within the canvas
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
- * @param {Number} x Cursor horizontal coordinate within the canvas
1630
- * @param {Number} y Cursor vertical coordinate within the canvas
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.camera.right - this.camera.left ) * 0.5;
1638
- this._v2_1.y *= ( this.camera.top - this.camera.bottom ) * 0.5;
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.camera = camera;
1678
- this.camera.updateProjectionMatrix();
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 {Boolean} value Value of gizmos visibility
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 {Float} value Value of radius factor
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.camera );
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.camera.zoom !== 1 ) {
1778
+ if ( this.object.zoom !== 1 ) {
1754
1779
 
1755
1780
  //adapt gizmos size to camera zoom
1756
- const size = 1 / this.camera.zoom;
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 {Number} time Instant in which this function is called as performance.now()
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 {Number} time Instant in which this function is called as performance.now()
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 {Boolean} adjust If movement should be adjusted considering camera distance (Perspective only)
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.camera.isOrthographicCamera ) {
1961
+ if ( this.object.isOrthographicCamera ) {
1935
1962
 
1936
1963
  //adjust movement amount
1937
- movement.multiplyScalar( 1 / this.camera.zoom );
1964
+ movement.multiplyScalar( 1 / this.object.zoom );
1938
1965
 
1939
- } else if ( this.camera.isPerspectiveCamera && adjust ) {
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.camera.position.distanceTo( this._gizmos.position );
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.camera.quaternion );
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.camera.zoom = this._zoom0;
1990
+ this.object.zoom = this._zoom0;
1964
1991
 
1965
- if ( this.camera.isPerspectiveCamera ) {
1992
+ if ( this.object.isPerspectiveCamera ) {
1966
1993
 
1967
- this.camera.fov = this._fov0;
1994
+ this.object.fov = this._fov0;
1968
1995
 
1969
1996
  }
1970
1997
 
1971
- this.camera.near = this._nearPos;
1972
- this.camera.far = this._farPos;
1998
+ this.object.near = this._nearPos;
1999
+ this.object.far = this._farPos;
1973
2000
  this._cameraMatrixState.copy( this._cameraMatrixState0 );
1974
- this._cameraMatrixState.decompose( this.camera.position, this.camera.quaternion, this.camera.scale );
1975
- this.camera.up.copy( this._up0 );
2001
+ this._cameraMatrixState.decompose( this.object.position, this.object.quaternion, this.object.scale );
2002
+ this.object.up.copy( this._up0 );
1976
2003
 
1977
- this.camera.updateMatrix();
1978
- this.camera.updateProjectionMatrix();
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.camera );
2011
+ this._tbRadius = this.calculateTbRadius( this.object );
1985
2012
  this.makeGizmos( this._gizmos.position, this._tbRadius );
1986
2013
 
1987
- this.camera.lookAt( this._gizmos.position );
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.camera.isOrthographicCamera ) {
2048
+ if ( this.object.isOrthographicCamera ) {
2022
2049
 
2023
- state = JSON.stringify( { arcballState: {
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
- cameraFar: this.camera.far,
2026
- cameraMatrix: this.camera.matrix,
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.camera.isPerspectiveCamera ) {
2062
+ } else if ( this.object.isPerspectiveCamera ) {
2035
2063
 
2036
- state = JSON.stringify( { arcballState: {
2037
- cameraFar: this.camera.far,
2038
- cameraFov: this.camera.fov,
2039
- cameraMatrix: this.camera.matrix,
2040
- cameraNear: this.camera.near,
2041
- cameraUp: this.camera.up,
2042
- cameraZoom: this.camera.zoom,
2043
- gizmoMatrix: this._gizmos.matrix
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.camera.matrix );
2099
+ this._cameraMatrixState0.copy( this.object.matrix );
2070
2100
  this._gizmoMatrixState0.copy( this._gizmos.matrix );
2071
- this._nearPos = this.camera.near;
2072
- this._farPos = this.camera.far;
2073
- this._zoom0 = this.camera.zoom;
2074
- this._up0.copy( this.camera.up );
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.camera.isPerspectiveCamera ) {
2106
+ if ( this.object.isPerspectiveCamera ) {
2077
2107
 
2078
- this._fov0 = this.camera.fov;
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 {Number} size Scale factor
2116
+ * @param {number} size Scale factor
2087
2117
  * @param {Vector3} point Point around which scale
2088
- * @param {Boolean} scaleGizmos If gizmos should be scaled (Perspective only)
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.camera.isOrthographicCamera ) {
2126
+ if ( this.object.isOrthographicCamera ) {
2097
2127
 
2098
2128
  //camera zoom
2099
- this.camera.zoom = this._zoomState;
2100
- this.camera.zoom *= size;
2129
+ this.object.zoom = this._zoomState;
2130
+ this.object.zoom *= size;
2101
2131
 
2102
2132
  //check min and max zoom
2103
- if ( this.camera.zoom > this.maxZoom ) {
2133
+ if ( this.object.zoom > this.maxZoom ) {
2104
2134
 
2105
- this.camera.zoom = this.maxZoom;
2135
+ this.object.zoom = this.maxZoom;
2106
2136
  sizeInverse = this._zoomState / this.maxZoom;
2107
2137
 
2108
- } else if ( this.camera.zoom < this.minZoom ) {
2138
+ } else if ( this.object.zoom < this.minZoom ) {
2109
2139
 
2110
- this.camera.zoom = this.minZoom;
2140
+ this.object.zoom = this.minZoom;
2111
2141
  sizeInverse = this._zoomState / this.minZoom;
2112
2142
 
2113
2143
  }
2114
2144
 
2115
- this.camera.updateProjectionMatrix();
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.camera.isPerspectiveCamera ) {
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 {Number} value fov to be setted
2232
+ * @param {number} value fov to be set
2203
2233
  */
2204
2234
  setFov( value ) {
2205
2235
 
2206
- if ( this.camera.isPerspectiveCamera ) {
2236
+ if ( this.object.isPerspectiveCamera ) {
2207
2237
 
2208
- this.camera.fov = MathUtils.clamp( value, this.minFov, this.maxFov );
2209
- this.camera.updateProjectionMatrix();
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
- * @param {Matrix4} camera Transformation to be applied to the camera
2218
- * @param {Matrix4} gizmos Transformation to be applied to gizmos
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
- setTransformationMatrices( camera = null, gizmos = null ) {
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 {Number} angle Angle in radians
2264
- * @returns The computed transormation matix
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 {Number} cursorX Cursor horizontal coordinate on screen
2327
- * @param {Number} cursorY Cursor vertical coordinate on screen
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 {Number} cursorX Cursor horizontal coordinate on screen
2457
- * @param {Number} cursorY Cursor vertical coordinate on screen
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 {Boolean} initialDistance If initial distance between camera and gizmos should be used for calculations instead of current (Perspective only)
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.camera.matrix );
2572
+ this._cameraMatrixState.copy( this.object.matrix );
2540
2573
  this._gizmoMatrixState.copy( this._gizmos.matrix );
2541
2574
 
2542
- if ( this.camera.isOrthographicCamera ) {
2575
+ if ( this.object.isOrthographicCamera ) {
2543
2576
 
2544
- this._cameraProjectionState.copy( this.camera.projectionMatrix );
2545
- this.camera.updateProjectionMatrix();
2546
- this._zoomState = this.camera.zoom;
2577
+ this._cameraProjectionState.copy( this.object.projectionMatrix );
2578
+ this.object.updateProjectionMatrix();
2579
+ this._zoomState = this.object.zoom;
2547
2580
 
2548
- } else if ( this.camera.isPerspectiveCamera ) {
2581
+ } else if ( this.object.isPerspectiveCamera ) {
2549
2582
 
2550
- this._fovState = this.camera.fov;
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 {Boolean} updateMatrices If matriices state should be updated
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.camera );
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.camera.isOrthographicCamera ) {
2617
+ if ( this.object.isOrthographicCamera ) {
2587
2618
 
2588
2619
  //check zoom
2589
- if ( this.camera.zoom > this.maxZoom || this.camera.zoom < this.minZoom ) {
2620
+ if ( this.object.zoom > this.maxZoom || this.object.zoom < this.minZoom ) {
2590
2621
 
2591
- const newZoom = MathUtils.clamp( this.camera.zoom, this.minZoom, this.maxZoom );
2592
- this.applyTransformMatrix( this.scale( newZoom / this.camera.zoom, this._gizmos.position, true ) );
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.camera.isPerspectiveCamera ) {
2627
+ } else if ( this.object.isPerspectiveCamera ) {
2597
2628
 
2598
2629
  //check distance
2599
- const distance = this.camera.position.distanceTo( this._gizmos.position );
2630
+ const distance = this.object.position.distanceTo( this._gizmos.position );
2600
2631
 
2601
- if ( distance > this.maxDistance + EPS || distance < this.minDistance - EPS ) {
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.camera.fov < this.minFov || this.camera.fov > this.maxFov ) {
2641
+ if ( this.object.fov < this.minFov || this.object.fov > this.maxFov ) {
2611
2642
 
2612
- this.camera.fov = MathUtils.clamp( this.camera.fov, this.minFov, this.maxFov );
2613
- this.camera.updateProjectionMatrix();
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.camera );
2649
+ this._tbRadius = this.calculateTbRadius( this.object );
2619
2650
 
2620
- if ( oldRadius < this._tbRadius - EPS || oldRadius > this._tbRadius + EPS ) {
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.camera.lookAt( this._gizmos.position );
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.camera.position, this.camera.quaternion, this.camera.scale );
2680
+ this._cameraMatrixState.decompose( this.object.position, this.object.quaternion, this.object.scale );
2650
2681
 
2651
- this.camera.up.copy( state.arcballState.cameraUp );
2652
- this.camera.near = state.arcballState.cameraNear;
2653
- this.camera.far = state.arcballState.cameraFar;
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.camera.zoom = state.arcballState.cameraZoom;
2686
+ this.object.zoom = state.arcballState.cameraZoom;
2656
2687
 
2657
- if ( this.camera.isPerspectiveCamera ) {
2688
+ if ( this.object.isPerspectiveCamera ) {
2658
2689
 
2659
- this.camera.fov = state.arcballState.cameraFov;
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.camera.updateMatrix();
2667
- this.camera.updateProjectionMatrix();
2697
+ this.object.updateMatrix();
2698
+ this.object.updateProjectionMatrix();
2668
2699
 
2669
2700
  this._gizmos.updateMatrix();
2670
2701
 
2671
- this._tbRadius = this.calculateTbRadius( this.camera );
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.camera.lookAt( this._gizmos.position );
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.camera );
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.camera.isOrthographicCamera ) {
3132
+ if ( this.object.isOrthographicCamera ) {
3102
3133
 
3103
- scalePoint = this.unprojectOnTbPlane( this.camera, event.clientX, event.clientY, this.domElement ).applyQuaternion( this.camera.quaternion ).multiplyScalar( 1 / this.camera.zoom ).add( this._gizmos.position );
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.camera.isPerspectiveCamera ) {
3136
+ } else if ( this.object.isPerspectiveCamera ) {
3106
3137
 
3107
- scalePoint = this.unprojectOnTbPlane( this.camera, event.clientX, event.clientY, this.domElement ).applyQuaternion( this.camera.quaternion ).add( this._gizmos.position );
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.camera.isPerspectiveCamera ) {
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.camera.fov * 0.5 );
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 );