@needle-tools/three 0.162.12 → 0.169.2

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 (635) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +29789 -1941
  3. package/build/three.module.js +29095 -1933
  4. package/build/three.module.min.js +2 -2
  5. package/build/three.webgpu.js +80003 -0
  6. package/build/three.webgpu.min.js +6 -0
  7. package/build/three.webgpu.nodes.js +79951 -0
  8. package/build/three.webgpu.nodes.min.js +6 -0
  9. package/examples/jsm/Addons.js +2 -5
  10. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  11. package/examples/jsm/animation/CCDIKSolver.js +4 -2
  12. package/examples/jsm/capabilities/WebGL.js +27 -21
  13. package/examples/jsm/controls/ArcballControls.js +174 -158
  14. package/examples/jsm/controls/DragControls.js +260 -132
  15. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  16. package/examples/jsm/controls/FlyControls.js +194 -188
  17. package/examples/jsm/controls/OrbitControls.js +790 -797
  18. package/examples/jsm/controls/PointerLockControls.js +24 -15
  19. package/examples/jsm/controls/TrackballControls.js +469 -448
  20. package/examples/jsm/controls/TransformControls.js +98 -63
  21. package/examples/jsm/csm/CSMShader.js +4 -4
  22. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  23. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  24. package/examples/jsm/effects/StereoEffect.js +6 -1
  25. package/examples/jsm/environments/RoomEnvironment.js +2 -6
  26. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  27. package/examples/jsm/exporters/EXRExporter.js +19 -11
  28. package/examples/jsm/exporters/GLTFExporter.js +77 -8
  29. package/examples/jsm/exporters/KTX2Exporter.js +21 -13
  30. package/examples/jsm/exporters/OBJExporter.js +5 -1
  31. package/examples/jsm/exporters/PLYExporter.js +9 -7
  32. package/examples/jsm/exporters/USDZExporter.js +55 -11
  33. package/examples/jsm/geometries/DecalGeometry.js +4 -1
  34. package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
  35. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  36. package/examples/jsm/geometries/TextGeometry.js +10 -2
  37. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  38. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  39. package/examples/jsm/helpers/ViewHelper.js +75 -61
  40. package/examples/jsm/interactive/HTMLMesh.js +7 -9
  41. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  42. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  43. package/examples/jsm/libs/draco/README.md +2 -2
  44. package/examples/jsm/libs/fflate.module.js +694 -496
  45. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  46. package/examples/jsm/lights/LightProbeGenerator.js +24 -10
  47. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  48. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  49. package/examples/jsm/lines/LineMaterial.js +1 -17
  50. package/examples/jsm/lines/LineSegments2.js +15 -0
  51. package/examples/jsm/lines/Wireframe.js +16 -1
  52. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  53. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  54. package/examples/jsm/loaders/3MFLoader.js +2 -0
  55. package/examples/jsm/loaders/ColladaLoader.js +9 -6
  56. package/examples/jsm/loaders/DRACOLoader.js +4 -2
  57. package/examples/jsm/loaders/EXRLoader.js +351 -97
  58. package/examples/jsm/loaders/FBXLoader.js +77 -78
  59. package/examples/jsm/loaders/GLTFLoader.js +76 -14
  60. package/examples/jsm/loaders/KTX2Loader.js +30 -22
  61. package/examples/jsm/loaders/LDrawLoader.js +3 -2
  62. package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
  63. package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
  64. package/examples/jsm/loaders/LUTImageLoader.js +0 -14
  65. package/examples/jsm/loaders/MMDLoader.js +31 -12
  66. package/examples/jsm/loaders/MTLLoader.js +4 -3
  67. package/examples/jsm/loaders/MaterialXLoader.js +45 -21
  68. package/examples/jsm/loaders/OBJLoader.js +5 -3
  69. package/examples/jsm/loaders/PCDLoader.js +14 -13
  70. package/examples/jsm/loaders/PDBLoader.js +3 -2
  71. package/examples/jsm/loaders/PLYLoader.js +8 -5
  72. package/examples/jsm/loaders/RGBMLoader.js +16 -0
  73. package/examples/jsm/loaders/STLLoader.js +3 -2
  74. package/examples/jsm/loaders/USDZLoader.js +124 -76
  75. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  76. package/examples/jsm/loaders/VRMLLoader.js +11 -11
  77. package/examples/jsm/loaders/VTKLoader.js +80 -6
  78. package/examples/jsm/loaders/XYZLoader.js +3 -2
  79. package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
  80. package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
  81. package/examples/jsm/math/Octree.js +26 -20
  82. package/examples/jsm/misc/GPUComputationRenderer.js +9 -25
  83. package/examples/jsm/misc/Timer.js +1 -1
  84. package/examples/jsm/modifiers/CurveModifier.js +11 -9
  85. package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
  86. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  87. package/examples/jsm/objects/InstancedPoints.js +2 -2
  88. package/examples/jsm/objects/Lensflare.js +2 -2
  89. package/examples/jsm/objects/LensflareMesh.js +322 -0
  90. package/examples/jsm/objects/SkyMesh.js +187 -0
  91. package/examples/jsm/objects/Water2Mesh.js +158 -0
  92. package/examples/jsm/objects/WaterMesh.js +101 -0
  93. package/examples/jsm/physics/JoltPhysics.js +281 -0
  94. package/examples/jsm/physics/RapierPhysics.js +25 -5
  95. package/examples/jsm/postprocessing/GlitchPass.js +0 -3
  96. package/examples/jsm/postprocessing/LUTPass.js +5 -71
  97. package/examples/jsm/postprocessing/OutlinePass.js +31 -46
  98. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  99. package/examples/jsm/postprocessing/RenderTransitionPass.js +168 -0
  100. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  101. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  102. package/examples/jsm/postprocessing/SSAOPass.js +6 -12
  103. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  104. package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
  105. package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
  106. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +1 -3
  107. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  108. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +7 -4
  109. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +19 -5
  110. package/examples/jsm/shaders/BleachBypassShader.js +1 -2
  111. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  112. package/examples/jsm/shaders/FXAAShader.js +0 -2
  113. package/examples/jsm/shaders/GTAOShader.js +1 -1
  114. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  115. package/examples/jsm/shaders/OutputShader.js +1 -1
  116. package/examples/jsm/transpiler/GLSLDecoder.js +47 -5
  117. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
  118. package/examples/jsm/transpiler/TSLEncoder.js +24 -22
  119. package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
  120. package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
  121. package/examples/jsm/utils/SceneUtils.js +60 -1
  122. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  123. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  124. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  125. package/examples/jsm/utils/SortUtils.js +8 -5
  126. package/examples/jsm/utils/TextureUtils.js +3 -2
  127. package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
  128. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  129. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  130. package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
  131. package/package.json +11 -8
  132. package/src/Three.WebGPU.Nodes.js +200 -0
  133. package/src/Three.WebGPU.js +201 -0
  134. package/src/Three.js +23 -1
  135. package/src/animation/AnimationClip.js +1 -1
  136. package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
  137. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
  138. package/src/animation/tracks/StringKeyframeTrack.js +10 -1
  139. package/src/audio/Audio.js +2 -2
  140. package/src/constants.js +6 -7
  141. package/src/core/BufferAttribute.js +0 -9
  142. package/src/core/Clock.js +1 -1
  143. package/src/core/InterleavedBuffer.js +0 -9
  144. package/src/core/Object3D.js +34 -29
  145. package/src/core/Raycaster.js +6 -2
  146. package/src/core/RenderTarget.js +8 -0
  147. package/src/extras/Controls.js +32 -0
  148. package/src/extras/PMREMGenerator.js +12 -11
  149. package/src/extras/TextureUtils.js +210 -0
  150. package/src/geometries/CylinderGeometry.js +11 -4
  151. package/src/lights/Light.js +1 -0
  152. package/src/lights/LightShadow.js +5 -0
  153. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  154. package/src/loaders/FileLoader.js +5 -1
  155. package/src/loaders/LoaderUtils.js +3 -1
  156. package/src/loaders/MaterialLoader.js +8 -1
  157. package/src/loaders/ObjectLoader.js +36 -2
  158. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeLoader.js +27 -5
  159. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeMaterialLoader.js +22 -18
  160. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeObjectLoader.js +21 -1
  161. package/src/materials/Material.js +4 -0
  162. package/src/materials/MeshPhysicalMaterial.js +20 -0
  163. package/src/materials/ShaderMaterial.js +0 -4
  164. package/src/materials/nodes/InstancedPointsNodeMaterial.js +156 -0
  165. package/{examples/jsm/nodes/materials → src/materials/nodes}/Line2NodeMaterial.js +69 -68
  166. package/src/materials/nodes/LineBasicNodeMaterial.js +31 -0
  167. package/{examples/jsm/nodes/materials → src/materials/nodes}/LineDashedNodeMaterial.js +15 -12
  168. package/src/materials/nodes/MeshBasicNodeMaterial.js +77 -0
  169. package/src/materials/nodes/MeshLambertNodeMaterial.js +47 -0
  170. package/src/materials/nodes/MeshMatcapNodeMaterial.js +57 -0
  171. package/src/materials/nodes/MeshNormalNodeMaterial.js +44 -0
  172. package/src/materials/nodes/MeshPhongNodeMaterial.js +78 -0
  173. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +248 -0
  174. package/{examples/jsm/nodes/materials → src/materials/nodes}/MeshSSSNodeMaterial.js +10 -7
  175. package/src/materials/nodes/MeshStandardNodeMaterial.js +108 -0
  176. package/src/materials/nodes/MeshToonNodeMaterial.js +38 -0
  177. package/{examples/jsm/nodes/materials → src/materials/nodes}/NodeMaterial.js +198 -157
  178. package/{examples/jsm/nodes/materials/Materials.js → src/materials/nodes/NodeMaterials.js} +7 -1
  179. package/{examples/jsm/nodes/materials → src/materials/nodes}/PointsNodeMaterial.js +10 -7
  180. package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
  181. package/src/materials/nodes/SpriteNodeMaterial.js +123 -0
  182. package/src/materials/nodes/VolumeNodeMaterial.js +108 -0
  183. package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
  184. package/src/math/Box2.js +4 -4
  185. package/src/math/Box3.js +6 -6
  186. package/src/math/ColorManagement.js +10 -0
  187. package/src/math/Matrix2.js +54 -0
  188. package/src/math/Spherical.js +4 -5
  189. package/src/math/Triangle.js +24 -0
  190. package/src/math/Vector4.js +13 -0
  191. package/src/nodes/Nodes.js +164 -0
  192. package/src/nodes/TSL.js +179 -0
  193. package/src/nodes/accessors/AccessorsUtils.js +25 -0
  194. package/src/nodes/accessors/BatchNode.js +128 -0
  195. package/src/nodes/accessors/Bitangent.js +13 -0
  196. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +44 -6
  197. package/{examples/jsm → src}/nodes/accessors/BufferNode.js +13 -4
  198. package/src/nodes/accessors/Camera.js +13 -0
  199. package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +22 -15
  200. package/src/nodes/accessors/CubeTextureNode.js +79 -0
  201. package/src/nodes/accessors/InstanceNode.js +144 -0
  202. package/src/nodes/accessors/InstancedPointsMaterialNode.js +24 -0
  203. package/src/nodes/accessors/Lights.js +51 -0
  204. package/src/nodes/accessors/MaterialNode.js +441 -0
  205. package/src/nodes/accessors/MaterialProperties.js +3 -0
  206. package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +10 -5
  207. package/src/nodes/accessors/ModelNode.js +72 -0
  208. package/src/nodes/accessors/ModelViewProjectionNode.js +42 -0
  209. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +51 -33
  210. package/src/nodes/accessors/Normal.js +88 -0
  211. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +18 -34
  212. package/src/nodes/accessors/PointUVNode.js +30 -0
  213. package/src/nodes/accessors/Position.js +10 -0
  214. package/src/nodes/accessors/ReferenceBaseNode.js +171 -0
  215. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +58 -9
  216. package/src/nodes/accessors/ReflectVector.js +10 -0
  217. package/src/nodes/accessors/RendererReferenceNode.js +35 -0
  218. package/{examples/jsm → src}/nodes/accessors/SceneNode.js +9 -6
  219. package/src/nodes/accessors/SkinningNode.js +191 -0
  220. package/src/nodes/accessors/StorageBufferNode.js +147 -0
  221. package/{examples/jsm/nodes/accessors/TextureStoreNode.js → src/nodes/accessors/StorageTextureNode.js} +35 -10
  222. package/src/nodes/accessors/Tangent.js +22 -0
  223. package/src/nodes/accessors/Texture3DNode.js +103 -0
  224. package/{examples/jsm/nodes/accessors/TextureBicubicNode.js → src/nodes/accessors/TextureBicubic.js} +3 -32
  225. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +123 -39
  226. package/src/nodes/accessors/TextureSizeNode.js +36 -0
  227. package/src/nodes/accessors/UV.js +3 -0
  228. package/{examples/jsm/nodes/accessors/UniformsNode.js → src/nodes/accessors/UniformArrayNode.js} +33 -15
  229. package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +10 -7
  230. package/src/nodes/accessors/VelocityNode.js +134 -0
  231. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +9 -5
  232. package/{examples/jsm → src}/nodes/code/CodeNode.js +9 -5
  233. package/{examples/jsm → src}/nodes/code/ExpressionNode.js +10 -6
  234. package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +8 -5
  235. package/{examples/jsm → src}/nodes/code/FunctionNode.js +8 -31
  236. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +24 -7
  237. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +11 -8
  238. package/{examples/jsm → src}/nodes/core/AssignNode.js +12 -9
  239. package/{examples/jsm → src}/nodes/core/AttributeNode.js +29 -12
  240. package/{examples/jsm → src}/nodes/core/BypassNode.js +11 -7
  241. package/src/nodes/core/CacheNode.js +50 -0
  242. package/{examples/jsm → src}/nodes/core/ConstNode.js +6 -3
  243. package/{examples/jsm → src}/nodes/core/ContextNode.js +27 -11
  244. package/src/nodes/core/IndexNode.js +99 -0
  245. package/{examples/jsm → src}/nodes/core/InputNode.js +7 -3
  246. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  247. package/src/nodes/core/MRTNode.js +85 -0
  248. package/{examples/jsm → src}/nodes/core/Node.js +114 -57
  249. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +327 -90
  250. package/src/nodes/core/NodeCache.js +36 -0
  251. package/{examples/jsm → src}/nodes/core/NodeFrame.js +52 -10
  252. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  253. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  254. package/{examples/jsm → src}/nodes/core/NodeUtils.js +56 -8
  255. package/{examples/jsm → src}/nodes/core/OutputStructNode.js +13 -12
  256. package/{examples/jsm → src}/nodes/core/ParameterNode.js +7 -4
  257. package/src/nodes/core/PropertyNode.js +88 -0
  258. package/{examples/jsm → src}/nodes/core/StackNode.js +31 -11
  259. package/{examples/jsm → src}/nodes/core/StructTypeNode.js +7 -3
  260. package/{examples/jsm → src}/nodes/core/TempNode.js +10 -6
  261. package/src/nodes/core/UniformGroupNode.js +59 -0
  262. package/{examples/jsm → src}/nodes/core/UniformNode.js +37 -5
  263. package/{examples/jsm → src}/nodes/core/VarNode.js +14 -14
  264. package/src/nodes/core/VaryingNode.js +108 -0
  265. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +38 -28
  266. package/src/nodes/display/AnaglyphPassNode.js +67 -0
  267. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +33 -30
  268. package/src/nodes/display/BleachBypass.js +26 -0
  269. package/src/nodes/display/BlendMode.js +54 -0
  270. package/src/nodes/display/BloomNode.js +341 -0
  271. package/{examples/jsm → src}/nodes/display/BumpMapNode.js +20 -38
  272. package/src/nodes/display/ColorAdjustment.js +46 -0
  273. package/src/nodes/display/ColorSpaceFunctions.js +38 -0
  274. package/src/nodes/display/ColorSpaceNode.js +114 -0
  275. package/src/nodes/display/DenoiseNode.js +204 -0
  276. package/src/nodes/display/DepthOfFieldNode.js +124 -0
  277. package/src/nodes/display/DotScreenNode.js +66 -0
  278. package/src/nodes/display/FXAANode.js +332 -0
  279. package/src/nodes/display/FilmNode.js +56 -0
  280. package/src/nodes/display/FrontFacingNode.js +45 -0
  281. package/src/nodes/display/GTAONode.js +331 -0
  282. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +47 -24
  283. package/src/nodes/display/Lut3DNode.js +57 -0
  284. package/src/nodes/display/MotionBlur.js +25 -0
  285. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +14 -14
  286. package/src/nodes/display/ParallaxBarrierPassNode.js +58 -0
  287. package/src/nodes/display/PassNode.js +378 -0
  288. package/src/nodes/display/PixelationPassNode.js +213 -0
  289. package/{examples/jsm → src}/nodes/display/PosterizeNode.js +8 -7
  290. package/src/nodes/display/RGBShiftNode.js +53 -0
  291. package/src/nodes/display/RenderOutputNode.js +60 -0
  292. package/src/nodes/display/SSAAPassNode.js +287 -0
  293. package/src/nodes/display/ScreenNode.js +181 -0
  294. package/src/nodes/display/Sepia.js +17 -0
  295. package/src/nodes/display/SobelOperatorNode.js +126 -0
  296. package/src/nodes/display/StereoCompositePassNode.js +110 -0
  297. package/src/nodes/display/StereoPassNode.js +83 -0
  298. package/src/nodes/display/ToneMappingFunctions.js +190 -0
  299. package/src/nodes/display/ToneMappingNode.js +67 -0
  300. package/src/nodes/display/ToonOutlinePassNode.js +111 -0
  301. package/src/nodes/display/TransitionNode.js +80 -0
  302. package/src/nodes/display/ViewportDepthNode.js +125 -0
  303. package/src/nodes/display/ViewportDepthTextureNode.js +33 -0
  304. package/src/nodes/display/ViewportSharedTextureNode.js +39 -0
  305. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +20 -14
  306. package/src/nodes/fog/FogExp2Node.js +35 -0
  307. package/src/nodes/fog/FogNode.js +50 -0
  308. package/src/nodes/fog/FogRangeNode.js +36 -0
  309. package/src/nodes/functions/BSDF/BRDF_GGX.js +59 -0
  310. package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  311. package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  312. package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +2 -2
  313. package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +2 -2
  314. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  315. package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  316. package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +2 -2
  317. package/src/nodes/functions/BSDF/LTC.js +131 -0
  318. package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  319. package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -4
  320. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  321. package/src/nodes/functions/BasicLightingModel.js +78 -0
  322. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +11 -9
  323. package/src/nodes/functions/PhysicalLightingModel.js +633 -0
  324. package/src/nodes/functions/ShadowMaskModel.js +31 -0
  325. package/src/nodes/functions/ToonLightingModel.js +51 -0
  326. package/src/nodes/functions/material/getGeometryRoughness.js +13 -0
  327. package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +2 -2
  328. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  329. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +28 -11
  330. package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
  331. package/src/nodes/gpgpu/BarrierNode.js +40 -0
  332. package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
  333. package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +10 -6
  334. package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
  335. package/src/nodes/lighting/AONode.js +27 -0
  336. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +6 -8
  337. package/src/nodes/lighting/AnalyticLightNode.js +522 -0
  338. package/src/nodes/lighting/BasicEnvironmentNode.js +30 -0
  339. package/src/nodes/lighting/BasicLightMapNode.js +32 -0
  340. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +7 -9
  341. package/src/nodes/lighting/EnvironmentNode.js +138 -0
  342. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +12 -11
  343. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +7 -9
  344. package/src/nodes/lighting/IrradianceNode.js +27 -0
  345. package/src/nodes/lighting/LightProbeNode.js +53 -0
  346. package/{examples/jsm → src}/nodes/lighting/LightUtils.js +3 -3
  347. package/src/nodes/lighting/LightingContextNode.js +67 -0
  348. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +9 -3
  349. package/src/nodes/lighting/LightsNode.js +250 -0
  350. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +12 -13
  351. package/src/nodes/lighting/RectAreaLightNode.js +97 -0
  352. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +14 -16
  353. package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +2 -2
  354. package/src/nodes/materialx/lib/mx_hsv.js +127 -0
  355. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +500 -603
  356. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +3 -9
  357. package/{examples/jsm/nodes/math/CondNode.js → src/nodes/math/ConditionalNode.js} +48 -13
  358. package/src/nodes/math/Hash.js +13 -0
  359. package/src/nodes/math/MathNode.js +407 -0
  360. package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -7
  361. package/src/nodes/math/OperatorNode.js +319 -0
  362. package/{examples/jsm → src}/nodes/math/TriNoise3D.js +19 -29
  363. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  364. package/src/nodes/pmrem/PMREMNode.js +240 -0
  365. package/src/nodes/pmrem/PMREMUtils.js +288 -0
  366. package/src/nodes/procedural/Checker.js +14 -0
  367. package/src/nodes/tsl/TSLBase.js +30 -0
  368. package/{examples/jsm/nodes/shadernode/ShaderNode.js → src/nodes/tsl/TSLCore.js} +122 -96
  369. package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +9 -5
  370. package/{examples/jsm → src}/nodes/utils/ConvertNode.js +7 -3
  371. package/src/nodes/utils/CubeMapNode.js +160 -0
  372. package/src/nodes/utils/Discard.js +8 -0
  373. package/src/nodes/utils/EquirectUVNode.js +36 -0
  374. package/src/nodes/utils/FlipNode.js +68 -0
  375. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +11 -5
  376. package/{examples/jsm → src}/nodes/utils/JoinNode.js +6 -3
  377. package/{examples/jsm → src}/nodes/utils/LoopNode.js +23 -12
  378. package/src/nodes/utils/MatcapUVNode.js +33 -0
  379. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +16 -7
  380. package/{examples/jsm → src}/nodes/utils/OscNode.js +12 -8
  381. package/src/nodes/utils/Packing.js +4 -0
  382. package/src/nodes/utils/RTTNode.js +133 -0
  383. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +21 -5
  384. package/{examples/jsm → src}/nodes/utils/RemapNode.js +12 -8
  385. package/{examples/jsm → src}/nodes/utils/RotateNode.js +8 -13
  386. package/{examples/jsm → src}/nodes/utils/SetNode.js +7 -4
  387. package/{examples/jsm → src}/nodes/utils/SplitNode.js +7 -3
  388. package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +10 -6
  389. package/src/nodes/utils/SpriteUtils.js +47 -0
  390. package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +11 -12
  391. package/{examples/jsm → src}/nodes/utils/TimerNode.js +8 -5
  392. package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +11 -9
  393. package/src/nodes/utils/UVUtils.js +19 -0
  394. package/src/nodes/utils/ViewportUtils.js +14 -0
  395. package/src/objects/BatchedMesh.js +302 -144
  396. package/src/objects/InstancedMesh.js +11 -1
  397. package/src/objects/LOD.js +21 -0
  398. package/src/objects/Line.js +67 -43
  399. package/src/objects/Mesh.js +7 -23
  400. package/src/objects/Points.js +2 -0
  401. package/src/renderers/WebGLRenderer.js +473 -224
  402. package/{examples/jsm → src}/renderers/common/Animation.js +3 -0
  403. package/{examples/jsm → src}/renderers/common/Attributes.js +4 -1
  404. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  405. package/{examples/jsm → src}/renderers/common/Background.js +18 -10
  406. package/src/renderers/common/BindGroup.js +18 -0
  407. package/src/renderers/common/Bindings.js +203 -0
  408. package/src/renderers/common/BundleGroup.js +26 -0
  409. package/src/renderers/common/ChainMap.js +59 -0
  410. package/{examples/jsm → src}/renderers/common/ClippingContext.js +24 -12
  411. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  412. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +16 -4
  413. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  414. package/{examples/jsm → src}/renderers/common/Info.js +35 -15
  415. package/{examples/jsm → src}/renderers/common/Pipelines.js +2 -2
  416. package/src/renderers/common/PostProcessing.js +90 -0
  417. package/src/renderers/common/QuadMesh.js +55 -0
  418. package/src/renderers/common/RenderBundle.js +18 -0
  419. package/src/renderers/common/RenderBundles.js +38 -0
  420. package/{examples/jsm → src}/renderers/common/RenderContext.js +25 -2
  421. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  422. package/{examples/jsm → src}/renderers/common/RenderList.js +11 -2
  423. package/src/renderers/common/RenderObject.js +413 -0
  424. package/{examples/jsm → src}/renderers/common/RenderObjects.js +9 -2
  425. package/{examples/jsm → src}/renderers/common/Renderer.js +431 -83
  426. package/{examples/jsm → src}/renderers/common/SampledTexture.js +14 -5
  427. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  428. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  429. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  430. package/{examples/jsm → src}/renderers/common/Textures.js +15 -15
  431. package/{examples/jsm → src}/renderers/common/Uniform.js +10 -5
  432. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  433. package/src/renderers/common/extras/PMREMGenerator.js +771 -0
  434. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  435. package/src/renderers/common/nodes/NodeLibrary.js +118 -0
  436. package/src/renderers/common/nodes/NodeSampledTexture.js +64 -0
  437. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +8 -1
  438. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  439. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  440. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  441. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  442. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +106 -68
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
  444. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  445. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
  446. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
  447. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  448. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  449. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  450. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
  451. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  452. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
  454. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  455. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
  456. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
  457. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
  458. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
  459. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
  460. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
  461. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
  462. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  463. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +38 -25
  464. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  465. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  466. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +19 -11
  467. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  468. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
  469. package/src/renderers/shaders/ShaderChunk.js +0 -2
  470. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  472. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  473. package/src/renderers/shaders/ShaderLib.js +2 -1
  474. package/src/renderers/shaders/UniformsLib.js +3 -0
  475. package/src/renderers/shaders/UniformsUtils.js +10 -1
  476. package/src/renderers/webgl/WebGLAttributes.js +42 -38
  477. package/src/renderers/webgl/WebGLBackground.js +24 -3
  478. package/src/renderers/webgl/WebGLBindingStates.js +14 -51
  479. package/src/renderers/webgl/WebGLBufferRenderer.js +23 -22
  480. package/src/renderers/webgl/WebGLCapabilities.js +44 -13
  481. package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
  482. package/src/renderers/webgl/WebGLExtensions.js +7 -20
  483. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +23 -21
  484. package/src/renderers/webgl/WebGLLights.js +21 -44
  485. package/src/renderers/webgl/WebGLMaterials.js +9 -8
  486. package/src/renderers/webgl/WebGLMorphtargets.js +78 -217
  487. package/src/renderers/webgl/WebGLProgram.js +46 -78
  488. package/src/renderers/webgl/WebGLPrograms.js +37 -40
  489. package/src/renderers/webgl/WebGLProperties.js +7 -0
  490. package/src/renderers/webgl/WebGLRenderStates.js +15 -9
  491. package/src/renderers/webgl/WebGLShadowMap.js +25 -25
  492. package/src/renderers/webgl/WebGLState.js +35 -58
  493. package/src/renderers/webgl/WebGLTextures.js +313 -358
  494. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  495. package/src/renderers/webgl/WebGLUniformsGroups.js +8 -8
  496. package/src/renderers/webgl/WebGLUtils.js +9 -78
  497. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +389 -152
  498. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +145 -0
  499. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +245 -44
  500. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +7 -1
  501. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +2 -0
  502. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  503. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +21 -3
  504. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +271 -43
  505. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +6 -23
  506. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +318 -141
  507. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
  508. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +10 -7
  509. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
  510. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +105 -0
  511. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +424 -95
  512. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  513. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +37 -18
  514. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +86 -32
  515. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +10 -1
  516. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +68 -27
  517. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
  518. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +235 -68
  519. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +43 -5
  520. package/src/renderers/webxr/WebXRDepthSensing.js +11 -6
  521. package/src/renderers/webxr/WebXRManager.js +53 -38
  522. package/src/scenes/Scene.js +7 -1
  523. package/src/textures/CompressedArrayTexture.js +14 -0
  524. package/src/textures/DataArrayTexture.js +14 -0
  525. package/src/textures/DepthTexture.js +1 -3
  526. package/src/textures/Texture.js +12 -2
  527. package/src/utils.js +62 -1
  528. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  529. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  530. package/examples/jsm/loaders/TiltLoader.js +0 -520
  531. package/examples/jsm/nodes/Nodes.js +0 -195
  532. package/examples/jsm/nodes/accessors/AccessorsUtils.js +0 -10
  533. package/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
  534. package/examples/jsm/nodes/accessors/CameraNode.js +0 -119
  535. package/examples/jsm/nodes/accessors/CubeTextureNode.js +0 -61
  536. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -71
  537. package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  538. package/examples/jsm/nodes/accessors/MaterialNode.js +0 -314
  539. package/examples/jsm/nodes/accessors/ModelNode.js +0 -33
  540. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +0 -39
  541. package/examples/jsm/nodes/accessors/NormalNode.js +0 -96
  542. package/examples/jsm/nodes/accessors/PointUVNode.js +0 -26
  543. package/examples/jsm/nodes/accessors/PositionNode.js +0 -104
  544. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
  545. package/examples/jsm/nodes/accessors/SkinningNode.js +0 -124
  546. package/examples/jsm/nodes/accessors/StorageBufferNode.js +0 -72
  547. package/examples/jsm/nodes/accessors/TangentNode.js +0 -109
  548. package/examples/jsm/nodes/accessors/TextureSizeNode.js +0 -35
  549. package/examples/jsm/nodes/accessors/UVNode.js +0 -47
  550. package/examples/jsm/nodes/core/CacheNode.js +0 -49
  551. package/examples/jsm/nodes/core/IndexNode.js +0 -66
  552. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  553. package/examples/jsm/nodes/core/NodeKeywords.js +0 -80
  554. package/examples/jsm/nodes/core/PropertyNode.js +0 -72
  555. package/examples/jsm/nodes/core/UniformGroupNode.js +0 -36
  556. package/examples/jsm/nodes/core/VaryingNode.js +0 -65
  557. package/examples/jsm/nodes/display/BlendModeNode.js +0 -128
  558. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +0 -99
  559. package/examples/jsm/nodes/display/ColorSpaceNode.js +0 -108
  560. package/examples/jsm/nodes/display/FrontFacingNode.js +0 -27
  561. package/examples/jsm/nodes/display/PassNode.js +0 -183
  562. package/examples/jsm/nodes/display/ToneMappingNode.js +0 -184
  563. package/examples/jsm/nodes/display/ViewportDepthNode.js +0 -97
  564. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +0 -31
  565. package/examples/jsm/nodes/display/ViewportNode.js +0 -134
  566. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +0 -31
  567. package/examples/jsm/nodes/fog/FogExp2Node.js +0 -35
  568. package/examples/jsm/nodes/fog/FogNode.js +0 -38
  569. package/examples/jsm/nodes/fog/FogRangeNode.js +0 -34
  570. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +0 -40
  571. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +0 -393
  572. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +0 -13
  573. package/examples/jsm/nodes/lighting/AONode.js +0 -27
  574. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -241
  575. package/examples/jsm/nodes/lighting/EnvironmentNode.js +0 -181
  576. package/examples/jsm/nodes/lighting/LightNode.js +0 -57
  577. package/examples/jsm/nodes/lighting/LightingContextNode.js +0 -66
  578. package/examples/jsm/nodes/lighting/LightsNode.js +0 -188
  579. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  580. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -28
  581. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  582. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +0 -34
  583. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  584. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -65
  585. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +0 -155
  586. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +0 -80
  587. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -90
  588. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +0 -130
  589. package/examples/jsm/nodes/math/HashNode.js +0 -34
  590. package/examples/jsm/nodes/math/MathNode.js +0 -391
  591. package/examples/jsm/nodes/math/OperatorNode.js +0 -274
  592. package/examples/jsm/nodes/procedural/CheckerNode.js +0 -42
  593. package/examples/jsm/nodes/utils/DiscardNode.js +0 -27
  594. package/examples/jsm/nodes/utils/EquirectUVNode.js +0 -33
  595. package/examples/jsm/nodes/utils/MatcapUVNode.js +0 -30
  596. package/examples/jsm/nodes/utils/PackingNode.js +0 -55
  597. package/examples/jsm/nodes/utils/RotateUVNode.js +0 -35
  598. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
  599. package/examples/jsm/objects/QuadMesh.js +0 -66
  600. package/examples/jsm/renderers/common/Bindings.js +0 -173
  601. package/examples/jsm/renderers/common/ChainMap.js +0 -89
  602. package/examples/jsm/renderers/common/PostProcessing.js +0 -25
  603. package/examples/jsm/renderers/common/RenderObject.js +0 -221
  604. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  605. package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +0 -49
  606. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  607. package/examples/jsm/utils/GPUStatsPanel.js +0 -128
  608. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  609. package/src/renderers/WebGL1Renderer.js +0 -7
  610. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
  611. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  612. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  613. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  614. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  615. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  616. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  617. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  618. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  619. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  620. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  621. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  622. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  623. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  624. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  625. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  626. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  627. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  628. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  629. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  630. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  631. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  632. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  633. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  634. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  635. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
@@ -1,5 +1,5 @@
1
1
  import {
2
- EventDispatcher,
2
+ Controls,
3
3
  MathUtils,
4
4
  MOUSE,
5
5
  Quaternion,
@@ -11,18 +11,25 @@ const _changeEvent = { type: 'change' };
11
11
  const _startEvent = { type: 'start' };
12
12
  const _endEvent = { type: 'end' };
13
13
 
14
- class TrackballControls extends EventDispatcher {
14
+ const _EPS = 0.000001;
15
+ const _STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 };
15
16
 
16
- constructor( object, domElement ) {
17
+ const _v2 = new Vector2();
18
+ const _mouseChange = new Vector2();
19
+ const _objectUp = new Vector3();
20
+ const _pan = new Vector3();
21
+ const _axis = new Vector3();
22
+ const _quaternion = new Quaternion();
23
+ const _eyeDirection = new Vector3();
24
+ const _objectUpDirection = new Vector3();
25
+ const _objectSidewaysDirection = new Vector3();
26
+ const _moveDirection = new Vector3();
17
27
 
18
- super();
28
+ class TrackballControls extends Controls {
19
29
 
20
- const scope = this;
21
- const STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 };
30
+ constructor( object, domElement = null ) {
22
31
 
23
- this.object = object;
24
- this.domElement = domElement;
25
- this.domElement.style.touchAction = 'none'; // disable touch scroll
32
+ super( object, domElement );
26
33
 
27
34
  // API
28
35
 
@@ -50,779 +57,793 @@ class TrackballControls extends EventDispatcher {
50
57
  this.keys = [ 'KeyA' /*A*/, 'KeyS' /*S*/, 'KeyD' /*D*/ ];
51
58
 
52
59
  this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };
53
-
54
- // internals
60
+ this.state = _STATE.NONE;
61
+ this.keyState = _STATE.NONE;
55
62
 
56
63
  this.target = new Vector3();
57
64
 
58
- const EPS = 0.000001;
65
+ // internals
66
+
67
+ this._lastPosition = new Vector3();
68
+ this._lastZoom = 1;
69
+ this._touchZoomDistanceStart = 0;
70
+ this._touchZoomDistanceEnd = 0;
71
+ this._lastAngle = 0;
59
72
 
60
- const lastPosition = new Vector3();
61
- let lastZoom = 1;
73
+ this._eye = new Vector3();
62
74
 
63
- let _state = STATE.NONE,
64
- _keyState = STATE.NONE,
75
+ this._movePrev = new Vector2();
76
+ this._moveCurr = new Vector2();
65
77
 
66
- _touchZoomDistanceStart = 0,
67
- _touchZoomDistanceEnd = 0,
78
+ this._lastAxis = new Vector3();
68
79
 
69
- _lastAngle = 0;
80
+ this._zoomStart = new Vector2();
81
+ this._zoomEnd = new Vector2();
70
82
 
71
- const _eye = new Vector3(),
83
+ this._panStart = new Vector2();
84
+ this._panEnd = new Vector2();
72
85
 
73
- _movePrev = new Vector2(),
74
- _moveCurr = new Vector2(),
86
+ this._pointers = [];
87
+ this._pointerPositions = {};
75
88
 
76
- _lastAxis = new Vector3(),
89
+ // event listeners
77
90
 
78
- _zoomStart = new Vector2(),
79
- _zoomEnd = new Vector2(),
91
+ this._onPointerMove = onPointerMove.bind( this );
92
+ this._onPointerDown = onPointerDown.bind( this );
93
+ this._onPointerUp = onPointerUp.bind( this );
94
+ this._onPointerCancel = onPointerCancel.bind( this );
95
+ this._onContextMenu = onContextMenu.bind( this );
96
+ this._onMouseWheel = onMouseWheel.bind( this );
97
+ this._onKeyDown = onKeyDown.bind( this );
98
+ this._onKeyUp = onKeyUp.bind( this );
80
99
 
81
- _panStart = new Vector2(),
82
- _panEnd = new Vector2(),
100
+ this._onTouchStart = onTouchStart.bind( this );
101
+ this._onTouchMove = onTouchMove.bind( this );
102
+ this._onTouchEnd = onTouchEnd.bind( this );
83
103
 
84
- _pointers = [],
85
- _pointerPositions = {};
104
+ this._onMouseDown = onMouseDown.bind( this );
105
+ this._onMouseMove = onMouseMove.bind( this );
106
+ this._onMouseUp = onMouseUp.bind( this );
86
107
 
87
108
  // for reset
88
109
 
89
- this.target0 = this.target.clone();
90
- this.position0 = this.object.position.clone();
91
- this.up0 = this.object.up.clone();
92
- this.zoom0 = this.object.zoom;
110
+ this._target0 = this.target.clone();
111
+ this._position0 = this.object.position.clone();
112
+ this._up0 = this.object.up.clone();
113
+ this._zoom0 = this.object.zoom;
93
114
 
94
- // methods
115
+ if ( domElement !== null ) {
95
116
 
96
- this.handleResize = function () {
117
+ this.connect();
97
118
 
98
- const box = scope.domElement.getBoundingClientRect();
99
- // adjustments come from similar code in the jquery offset() function
100
- const d = scope.domElement.ownerDocument.documentElement;
101
- scope.screen.left = box.left + window.pageXOffset - d.clientLeft;
102
- scope.screen.top = box.top + window.pageYOffset - d.clientTop;
103
- scope.screen.width = box.width;
104
- scope.screen.height = box.height;
119
+ this.handleResize();
105
120
 
106
- };
121
+ }
107
122
 
108
- const getMouseOnScreen = ( function () {
123
+ // force an update at start
124
+ this.update();
109
125
 
110
- const vector = new Vector2();
126
+ }
111
127
 
112
- return function getMouseOnScreen( pageX, pageY ) {
128
+ connect() {
113
129
 
114
- vector.set(
115
- ( pageX - scope.screen.left ) / scope.screen.width,
116
- ( pageY - scope.screen.top ) / scope.screen.height
117
- );
130
+ window.addEventListener( 'keydown', this._onKeyDown );
131
+ window.addEventListener( 'keyup', this._onKeyUp );
118
132
 
119
- return vector;
133
+ this.domElement.addEventListener( 'pointerdown', this._onPointerDown );
134
+ this.domElement.addEventListener( 'pointercancel', this._onPointerCancel );
135
+ this.domElement.addEventListener( 'wheel', this._onMouseWheel, { passive: false } );
136
+ this.domElement.addEventListener( 'contextmenu', this._onContextMenu );
120
137
 
121
- };
138
+ this.domElement.style.touchAction = 'none'; // disable touch scroll
122
139
 
123
- }() );
140
+ }
124
141
 
125
- const getMouseOnCircle = ( function () {
142
+ disconnect() {
126
143
 
127
- const vector = new Vector2();
144
+ window.removeEventListener( 'keydown', this._onKeyDown );
145
+ window.removeEventListener( 'keyup', this._onKeyUp );
128
146
 
129
- return function getMouseOnCircle( pageX, pageY ) {
147
+ this.domElement.removeEventListener( 'pointerdown', this._onPointerDown );
148
+ this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
149
+ this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
150
+ this.domElement.removeEventListener( 'pointercancel', this._onPointerCancel );
151
+ this.domElement.removeEventListener( 'wheel', this._onMouseWheel );
152
+ this.domElement.removeEventListener( 'contextmenu', this._onContextMenu );
130
153
 
131
- vector.set(
132
- ( ( pageX - scope.screen.width * 0.5 - scope.screen.left ) / ( scope.screen.width * 0.5 ) ),
133
- ( ( scope.screen.height + 2 * ( scope.screen.top - pageY ) ) / scope.screen.width ) // screen.width intentional
134
- );
154
+ this.domElement.style.touchAction = 'auto'; // disable touch scroll
135
155
 
136
- return vector;
156
+ }
137
157
 
138
- };
158
+ dispose() {
139
159
 
140
- }() );
160
+ this.disconnect();
141
161
 
142
- this.rotateCamera = ( function () {
162
+ }
143
163
 
144
- const axis = new Vector3(),
145
- quaternion = new Quaternion(),
146
- eyeDirection = new Vector3(),
147
- objectUpDirection = new Vector3(),
148
- objectSidewaysDirection = new Vector3(),
149
- moveDirection = new Vector3();
164
+ handleResize() {
150
165
 
151
- return function rotateCamera() {
166
+ const box = this.domElement.getBoundingClientRect();
167
+ // adjustments come from similar code in the jquery offset() function
168
+ const d = this.domElement.ownerDocument.documentElement;
152
169
 
153
- moveDirection.set( _moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0 );
154
- let angle = moveDirection.length();
170
+ this.screen.left = box.left + window.pageXOffset - d.clientLeft;
171
+ this.screen.top = box.top + window.pageYOffset - d.clientTop;
172
+ this.screen.width = box.width;
173
+ this.screen.height = box.height;
155
174
 
156
- if ( angle ) {
175
+ }
157
176
 
158
- _eye.copy( scope.object.position ).sub( scope.target );
177
+ update() {
159
178
 
160
- eyeDirection.copy( _eye ).normalize();
161
- objectUpDirection.copy( scope.object.up ).normalize();
162
- objectSidewaysDirection.crossVectors( objectUpDirection, eyeDirection ).normalize();
179
+ this._eye.subVectors( this.object.position, this.target );
163
180
 
164
- objectUpDirection.setLength( _moveCurr.y - _movePrev.y );
165
- objectSidewaysDirection.setLength( _moveCurr.x - _movePrev.x );
181
+ if ( ! this.noRotate ) {
166
182
 
167
- moveDirection.copy( objectUpDirection.add( objectSidewaysDirection ) );
183
+ this._rotateCamera();
168
184
 
169
- axis.crossVectors( moveDirection, _eye ).normalize();
185
+ }
170
186
 
171
- angle *= scope.rotateSpeed;
172
- quaternion.setFromAxisAngle( axis, angle );
187
+ if ( ! this.noZoom ) {
173
188
 
174
- _eye.applyQuaternion( quaternion );
175
- scope.object.up.applyQuaternion( quaternion );
189
+ this._zoomCamera();
176
190
 
177
- _lastAxis.copy( axis );
178
- _lastAngle = angle;
191
+ }
179
192
 
180
- } else if ( ! scope.staticMoving && _lastAngle ) {
193
+ if ( ! this.noPan ) {
181
194
 
182
- _lastAngle *= Math.sqrt( 1.0 - scope.dynamicDampingFactor );
183
- _eye.copy( scope.object.position ).sub( scope.target );
184
- quaternion.setFromAxisAngle( _lastAxis, _lastAngle );
185
- _eye.applyQuaternion( quaternion );
186
- scope.object.up.applyQuaternion( quaternion );
195
+ this._panCamera();
187
196
 
188
- }
197
+ }
189
198
 
190
- _movePrev.copy( _moveCurr );
199
+ this.object.position.addVectors( this.target, this._eye );
191
200
 
192
- };
201
+ if ( this.object.isPerspectiveCamera ) {
193
202
 
194
- }() );
203
+ this._checkDistances();
195
204
 
205
+ this.object.lookAt( this.target );
196
206
 
197
- this.zoomCamera = function () {
207
+ if ( this._lastPosition.distanceToSquared( this.object.position ) > _EPS ) {
198
208
 
199
- let factor;
209
+ this.dispatchEvent( _changeEvent );
200
210
 
201
- if ( _state === STATE.TOUCH_ZOOM_PAN ) {
211
+ this._lastPosition.copy( this.object.position );
202
212
 
203
- factor = _touchZoomDistanceStart / _touchZoomDistanceEnd;
204
- _touchZoomDistanceStart = _touchZoomDistanceEnd;
213
+ }
205
214
 
206
- if ( scope.object.isPerspectiveCamera ) {
215
+ } else if ( this.object.isOrthographicCamera ) {
207
216
 
208
- _eye.multiplyScalar( factor );
217
+ this.object.lookAt( this.target );
209
218
 
210
- } else if ( scope.object.isOrthographicCamera ) {
219
+ if ( this._lastPosition.distanceToSquared( this.object.position ) > _EPS || this._lastZoom !== this.object.zoom ) {
211
220
 
212
- scope.object.zoom = MathUtils.clamp( scope.object.zoom / factor, scope.minZoom, scope.maxZoom );
221
+ this.dispatchEvent( _changeEvent );
213
222
 
214
- if ( lastZoom !== scope.object.zoom ) {
223
+ this._lastPosition.copy( this.object.position );
224
+ this._lastZoom = this.object.zoom;
215
225
 
216
- scope.object.updateProjectionMatrix();
226
+ }
217
227
 
218
- }
228
+ } else {
219
229
 
220
- } else {
230
+ console.warn( 'THREE.TrackballControls: Unsupported camera type.' );
221
231
 
222
- console.warn( 'THREE.TrackballControls: Unsupported camera type' );
232
+ }
223
233
 
224
- }
234
+ }
225
235
 
226
- } else {
236
+ reset() {
227
237
 
228
- factor = 1.0 + ( _zoomEnd.y - _zoomStart.y ) * scope.zoomSpeed;
238
+ this.state = _STATE.NONE;
239
+ this.keyState = _STATE.NONE;
229
240
 
230
- if ( factor !== 1.0 && factor > 0.0 ) {
241
+ this.target.copy( this._target0 );
242
+ this.object.position.copy( this._position0 );
243
+ this.object.up.copy( this._up0 );
244
+ this.object.zoom = this._zoom0;
231
245
 
232
- if ( scope.object.isPerspectiveCamera ) {
246
+ this.object.updateProjectionMatrix();
233
247
 
234
- _eye.multiplyScalar( factor );
248
+ this._eye.subVectors( this.object.position, this.target );
235
249
 
236
- } else if ( scope.object.isOrthographicCamera ) {
250
+ this.object.lookAt( this.target );
237
251
 
238
- scope.object.zoom = MathUtils.clamp( scope.object.zoom / factor, scope.minZoom, scope.maxZoom );
252
+ this.dispatchEvent( _changeEvent );
239
253
 
240
- if ( lastZoom !== scope.object.zoom ) {
254
+ this._lastPosition.copy( this.object.position );
255
+ this._lastZoom = this.object.zoom;
241
256
 
242
- scope.object.updateProjectionMatrix();
257
+ }
243
258
 
244
- }
259
+ _panCamera() {
245
260
 
246
- } else {
261
+ _mouseChange.copy( this._panEnd ).sub( this._panStart );
247
262
 
248
- console.warn( 'THREE.TrackballControls: Unsupported camera type' );
263
+ if ( _mouseChange.lengthSq() ) {
249
264
 
250
- }
265
+ if ( this.object.isOrthographicCamera ) {
251
266
 
252
- }
267
+ const scale_x = ( this.object.right - this.object.left ) / this.object.zoom / this.domElement.clientWidth;
268
+ const scale_y = ( this.object.top - this.object.bottom ) / this.object.zoom / this.domElement.clientWidth;
253
269
 
254
- if ( scope.staticMoving ) {
270
+ _mouseChange.x *= scale_x;
271
+ _mouseChange.y *= scale_y;
255
272
 
256
- _zoomStart.copy( _zoomEnd );
273
+ }
257
274
 
258
- } else {
275
+ _mouseChange.multiplyScalar( this._eye.length() * this.panSpeed );
259
276
 
260
- _zoomStart.y += ( _zoomEnd.y - _zoomStart.y ) * this.dynamicDampingFactor;
277
+ _pan.copy( this._eye ).cross( this.object.up ).setLength( _mouseChange.x );
278
+ _pan.add( _objectUp.copy( this.object.up ).setLength( _mouseChange.y ) );
261
279
 
262
- }
280
+ this.object.position.add( _pan );
281
+ this.target.add( _pan );
263
282
 
264
- }
283
+ if ( this.staticMoving ) {
265
284
 
266
- };
285
+ this._panStart.copy( this._panEnd );
267
286
 
268
- this.panCamera = ( function () {
287
+ } else {
269
288
 
270
- const mouseChange = new Vector2(),
271
- objectUp = new Vector3(),
272
- pan = new Vector3();
289
+ this._panStart.add( _mouseChange.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.dynamicDampingFactor ) );
273
290
 
274
- return function panCamera() {
291
+ }
275
292
 
276
- mouseChange.copy( _panEnd ).sub( _panStart );
293
+ }
277
294
 
278
- if ( mouseChange.lengthSq() ) {
295
+ }
279
296
 
280
- if ( scope.object.isOrthographicCamera ) {
297
+ _rotateCamera() {
281
298
 
282
- const scale_x = ( scope.object.right - scope.object.left ) / scope.object.zoom / scope.domElement.clientWidth;
283
- const scale_y = ( scope.object.top - scope.object.bottom ) / scope.object.zoom / scope.domElement.clientWidth;
299
+ _moveDirection.set( this._moveCurr.x - this._movePrev.x, this._moveCurr.y - this._movePrev.y, 0 );
300
+ let angle = _moveDirection.length();
284
301
 
285
- mouseChange.x *= scale_x;
286
- mouseChange.y *= scale_y;
302
+ if ( angle ) {
287
303
 
288
- }
304
+ this._eye.copy( this.object.position ).sub( this.target );
289
305
 
290
- mouseChange.multiplyScalar( _eye.length() * scope.panSpeed );
306
+ _eyeDirection.copy( this._eye ).normalize();
307
+ _objectUpDirection.copy( this.object.up ).normalize();
308
+ _objectSidewaysDirection.crossVectors( _objectUpDirection, _eyeDirection ).normalize();
291
309
 
292
- pan.copy( _eye ).cross( scope.object.up ).setLength( mouseChange.x );
293
- pan.add( objectUp.copy( scope.object.up ).setLength( mouseChange.y ) );
310
+ _objectUpDirection.setLength( this._moveCurr.y - this._movePrev.y );
311
+ _objectSidewaysDirection.setLength( this._moveCurr.x - this._movePrev.x );
294
312
 
295
- scope.object.position.add( pan );
296
- scope.target.add( pan );
313
+ _moveDirection.copy( _objectUpDirection.add( _objectSidewaysDirection ) );
297
314
 
298
- if ( scope.staticMoving ) {
315
+ _axis.crossVectors( _moveDirection, this._eye ).normalize();
299
316
 
300
- _panStart.copy( _panEnd );
317
+ angle *= this.rotateSpeed;
318
+ _quaternion.setFromAxisAngle( _axis, angle );
301
319
 
302
- } else {
320
+ this._eye.applyQuaternion( _quaternion );
321
+ this.object.up.applyQuaternion( _quaternion );
303
322
 
304
- _panStart.add( mouseChange.subVectors( _panEnd, _panStart ).multiplyScalar( scope.dynamicDampingFactor ) );
323
+ this._lastAxis.copy( _axis );
324
+ this._lastAngle = angle;
305
325
 
306
- }
326
+ } else if ( ! this.staticMoving && this._lastAngle ) {
307
327
 
308
- }
328
+ this._lastAngle *= Math.sqrt( 1.0 - this.dynamicDampingFactor );
329
+ this._eye.copy( this.object.position ).sub( this.target );
330
+ _quaternion.setFromAxisAngle( this._lastAxis, this._lastAngle );
331
+ this._eye.applyQuaternion( _quaternion );
332
+ this.object.up.applyQuaternion( _quaternion );
309
333
 
310
- };
334
+ }
311
335
 
312
- }() );
336
+ this._movePrev.copy( this._moveCurr );
313
337
 
314
- this.checkDistances = function () {
338
+ }
315
339
 
316
- if ( ! scope.noZoom || ! scope.noPan ) {
340
+ _zoomCamera() {
317
341
 
318
- if ( _eye.lengthSq() > scope.maxDistance * scope.maxDistance ) {
342
+ let factor;
319
343
 
320
- scope.object.position.addVectors( scope.target, _eye.setLength( scope.maxDistance ) );
321
- _zoomStart.copy( _zoomEnd );
344
+ if ( this.state === _STATE.TOUCH_ZOOM_PAN ) {
322
345
 
323
- }
346
+ factor = this._touchZoomDistanceStart / this._touchZoomDistanceEnd;
347
+ this._touchZoomDistanceStart = this._touchZoomDistanceEnd;
324
348
 
325
- if ( _eye.lengthSq() < scope.minDistance * scope.minDistance ) {
349
+ if ( this.object.isPerspectiveCamera ) {
326
350
 
327
- scope.object.position.addVectors( scope.target, _eye.setLength( scope.minDistance ) );
328
- _zoomStart.copy( _zoomEnd );
351
+ this._eye.multiplyScalar( factor );
329
352
 
330
- }
353
+ } else if ( this.object.isOrthographicCamera ) {
331
354
 
332
- }
355
+ this.object.zoom = MathUtils.clamp( this.object.zoom / factor, this.minZoom, this.maxZoom );
333
356
 
334
- };
357
+ if ( this._lastZoom !== this.object.zoom ) {
335
358
 
336
- this.update = function () {
359
+ this.object.updateProjectionMatrix();
337
360
 
338
- _eye.subVectors( scope.object.position, scope.target );
361
+ }
339
362
 
340
- if ( ! scope.noRotate ) {
363
+ } else {
341
364
 
342
- scope.rotateCamera();
365
+ console.warn( 'THREE.TrackballControls: Unsupported camera type' );
343
366
 
344
367
  }
345
368
 
346
- if ( ! scope.noZoom ) {
347
-
348
- scope.zoomCamera();
369
+ } else {
349
370
 
350
- }
371
+ factor = 1.0 + ( this._zoomEnd.y - this._zoomStart.y ) * this.zoomSpeed;
351
372
 
352
- if ( ! scope.noPan ) {
373
+ if ( factor !== 1.0 && factor > 0.0 ) {
353
374
 
354
- scope.panCamera();
375
+ if ( this.object.isPerspectiveCamera ) {
355
376
 
356
- }
377
+ this._eye.multiplyScalar( factor );
357
378
 
358
- scope.object.position.addVectors( scope.target, _eye );
379
+ } else if ( this.object.isOrthographicCamera ) {
359
380
 
360
- if ( scope.object.isPerspectiveCamera ) {
381
+ this.object.zoom = MathUtils.clamp( this.object.zoom / factor, this.minZoom, this.maxZoom );
361
382
 
362
- scope.checkDistances();
383
+ if ( this._lastZoom !== this.object.zoom ) {
363
384
 
364
- scope.object.lookAt( scope.target );
385
+ this.object.updateProjectionMatrix();
365
386
 
366
- if ( lastPosition.distanceToSquared( scope.object.position ) > EPS ) {
387
+ }
367
388
 
368
- scope.dispatchEvent( _changeEvent );
389
+ } else {
369
390
 
370
- lastPosition.copy( scope.object.position );
391
+ console.warn( 'THREE.TrackballControls: Unsupported camera type' );
371
392
 
372
393
  }
373
394
 
374
- } else if ( scope.object.isOrthographicCamera ) {
375
-
376
- scope.object.lookAt( scope.target );
377
-
378
- if ( lastPosition.distanceToSquared( scope.object.position ) > EPS || lastZoom !== scope.object.zoom ) {
379
-
380
- scope.dispatchEvent( _changeEvent );
395
+ }
381
396
 
382
- lastPosition.copy( scope.object.position );
383
- lastZoom = scope.object.zoom;
397
+ if ( this.staticMoving ) {
384
398
 
385
- }
399
+ this._zoomStart.copy( this._zoomEnd );
386
400
 
387
401
  } else {
388
402
 
389
- console.warn( 'THREE.TrackballControls: Unsupported camera type' );
403
+ this._zoomStart.y += ( this._zoomEnd.y - this._zoomStart.y ) * this.dynamicDampingFactor;
390
404
 
391
405
  }
392
406
 
393
- };
407
+ }
394
408
 
395
- this.reset = function () {
409
+ }
396
410
 
397
- _state = STATE.NONE;
398
- _keyState = STATE.NONE;
411
+ _getMouseOnScreen( pageX, pageY ) {
399
412
 
400
- scope.target.copy( scope.target0 );
401
- scope.object.position.copy( scope.position0 );
402
- scope.object.up.copy( scope.up0 );
403
- scope.object.zoom = scope.zoom0;
413
+ _v2.set(
414
+ ( pageX - this.screen.left ) / this.screen.width,
415
+ ( pageY - this.screen.top ) / this.screen.height
416
+ );
404
417
 
405
- scope.object.updateProjectionMatrix();
418
+ return _v2;
406
419
 
407
- _eye.subVectors( scope.object.position, scope.target );
420
+ }
408
421
 
409
- scope.object.lookAt( scope.target );
422
+ _getMouseOnCircle( pageX, pageY ) {
410
423
 
411
- scope.dispatchEvent( _changeEvent );
424
+ _v2.set(
425
+ ( ( pageX - this.screen.width * 0.5 - this.screen.left ) / ( this.screen.width * 0.5 ) ),
426
+ ( ( this.screen.height + 2 * ( this.screen.top - pageY ) ) / this.screen.width ) // screen.width intentional
427
+ );
412
428
 
413
- lastPosition.copy( scope.object.position );
414
- lastZoom = scope.object.zoom;
429
+ return _v2;
415
430
 
416
- };
431
+ }
417
432
 
418
- // listeners
433
+ _addPointer( event ) {
419
434
 
420
- function onPointerDown( event ) {
435
+ this._pointers.push( event );
421
436
 
422
- if ( scope.enabled === false ) return;
437
+ }
423
438
 
424
- if ( _pointers.length === 0 ) {
439
+ _removePointer( event ) {
425
440
 
426
- scope.domElement.setPointerCapture( event.pointerId );
441
+ delete this._pointerPositions[ event.pointerId ];
427
442
 
428
- scope.domElement.addEventListener( 'pointermove', onPointerMove );
429
- scope.domElement.addEventListener( 'pointerup', onPointerUp );
443
+ for ( let i = 0; i < this._pointers.length; i ++ ) {
430
444
 
431
- }
445
+ if ( this._pointers[ i ].pointerId == event.pointerId ) {
432
446
 
433
- //
447
+ this._pointers.splice( i, 1 );
448
+ return;
434
449
 
435
- addPointer( event );
450
+ }
436
451
 
437
- if ( event.pointerType === 'touch' ) {
452
+ }
438
453
 
439
- onTouchStart( event );
454
+ }
440
455
 
441
- } else {
456
+ _trackPointer( event ) {
442
457
 
443
- onMouseDown( event );
458
+ let position = this._pointerPositions[ event.pointerId ];
444
459
 
445
- }
460
+ if ( position === undefined ) {
446
461
 
447
- }
462
+ position = new Vector2();
463
+ this._pointerPositions[ event.pointerId ] = position;
448
464
 
449
- function onPointerMove( event ) {
465
+ }
450
466
 
451
- if ( scope.enabled === false ) return;
467
+ position.set( event.pageX, event.pageY );
452
468
 
453
- if ( event.pointerType === 'touch' ) {
469
+ }
454
470
 
455
- onTouchMove( event );
471
+ _getSecondPointerPosition( event ) {
456
472
 
457
- } else {
473
+ const pointer = ( event.pointerId === this._pointers[ 0 ].pointerId ) ? this._pointers[ 1 ] : this._pointers[ 0 ];
458
474
 
459
- onMouseMove( event );
475
+ return this._pointerPositions[ pointer.pointerId ];
460
476
 
461
- }
477
+ }
462
478
 
463
- }
479
+ _checkDistances() {
464
480
 
465
- function onPointerUp( event ) {
481
+ if ( ! this.noZoom || ! this.noPan ) {
466
482
 
467
- if ( scope.enabled === false ) return;
483
+ if ( this._eye.lengthSq() > this.maxDistance * this.maxDistance ) {
468
484
 
469
- if ( event.pointerType === 'touch' ) {
485
+ this.object.position.addVectors( this.target, this._eye.setLength( this.maxDistance ) );
486
+ this._zoomStart.copy( this._zoomEnd );
470
487
 
471
- onTouchEnd( event );
488
+ }
472
489
 
473
- } else {
490
+ if ( this._eye.lengthSq() < this.minDistance * this.minDistance ) {
474
491
 
475
- onMouseUp();
492
+ this.object.position.addVectors( this.target, this._eye.setLength( this.minDistance ) );
493
+ this._zoomStart.copy( this._zoomEnd );
476
494
 
477
495
  }
478
496
 
479
- //
497
+ }
480
498
 
481
- removePointer( event );
499
+ }
482
500
 
483
- if ( _pointers.length === 0 ) {
501
+ }
484
502
 
485
- scope.domElement.releasePointerCapture( event.pointerId );
503
+ function onPointerDown( event ) {
486
504
 
487
- scope.domElement.removeEventListener( 'pointermove', onPointerMove );
488
- scope.domElement.removeEventListener( 'pointerup', onPointerUp );
505
+ if ( this.enabled === false ) return;
489
506
 
490
- }
507
+ if ( this._pointers.length === 0 ) {
491
508
 
509
+ this.domElement.setPointerCapture( event.pointerId );
492
510
 
493
- }
511
+ this.domElement.addEventListener( 'pointermove', this._onPointerMove );
512
+ this.domElement.addEventListener( 'pointerup', this._onPointerUp );
494
513
 
495
- function onPointerCancel( event ) {
514
+ }
496
515
 
497
- removePointer( event );
516
+ //
498
517
 
499
- }
518
+ this._addPointer( event );
500
519
 
501
- function keydown( event ) {
520
+ if ( event.pointerType === 'touch' ) {
502
521
 
503
- if ( scope.enabled === false ) return;
522
+ this._onTouchStart( event );
504
523
 
505
- window.removeEventListener( 'keydown', keydown );
524
+ } else {
506
525
 
507
- if ( _keyState !== STATE.NONE ) {
526
+ this._onMouseDown( event );
508
527
 
509
- return;
528
+ }
510
529
 
511
- } else if ( event.code === scope.keys[ STATE.ROTATE ] && ! scope.noRotate ) {
530
+ }
512
531
 
513
- _keyState = STATE.ROTATE;
532
+ function onPointerMove( event ) {
514
533
 
515
- } else if ( event.code === scope.keys[ STATE.ZOOM ] && ! scope.noZoom ) {
534
+ if ( this.enabled === false ) return;
516
535
 
517
- _keyState = STATE.ZOOM;
536
+ if ( event.pointerType === 'touch' ) {
518
537
 
519
- } else if ( event.code === scope.keys[ STATE.PAN ] && ! scope.noPan ) {
538
+ this._onTouchMove( event );
520
539
 
521
- _keyState = STATE.PAN;
540
+ } else {
522
541
 
523
- }
542
+ this._onMouseMove( event );
524
543
 
525
- }
544
+ }
526
545
 
527
- function keyup() {
546
+ }
528
547
 
529
- if ( scope.enabled === false ) return;
548
+ function onPointerUp( event ) {
530
549
 
531
- _keyState = STATE.NONE;
550
+ if ( this.enabled === false ) return;
532
551
 
533
- window.addEventListener( 'keydown', keydown );
552
+ if ( event.pointerType === 'touch' ) {
534
553
 
535
- }
554
+ this._onTouchEnd( event );
536
555
 
537
- function onMouseDown( event ) {
556
+ } else {
538
557
 
539
- if ( _state === STATE.NONE ) {
558
+ this._onMouseUp();
540
559
 
541
- switch ( event.button ) {
560
+ }
542
561
 
543
- case scope.mouseButtons.LEFT:
544
- _state = STATE.ROTATE;
545
- break;
562
+ //
546
563
 
547
- case scope.mouseButtons.MIDDLE:
548
- _state = STATE.ZOOM;
549
- break;
564
+ this._removePointer( event );
550
565
 
551
- case scope.mouseButtons.RIGHT:
552
- _state = STATE.PAN;
553
- break;
566
+ if ( this._pointers.length === 0 ) {
554
567
 
555
- }
568
+ this.domElement.releasePointerCapture( event.pointerId );
556
569
 
557
- }
570
+ this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
571
+ this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
558
572
 
559
- const state = ( _keyState !== STATE.NONE ) ? _keyState : _state;
573
+ }
560
574
 
561
- if ( state === STATE.ROTATE && ! scope.noRotate ) {
575
+ }
562
576
 
563
- _moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );
564
- _movePrev.copy( _moveCurr );
577
+ function onPointerCancel( event ) {
565
578
 
566
- } else if ( state === STATE.ZOOM && ! scope.noZoom ) {
579
+ this._removePointer( event );
567
580
 
568
- _zoomStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );
569
- _zoomEnd.copy( _zoomStart );
581
+ }
570
582
 
571
- } else if ( state === STATE.PAN && ! scope.noPan ) {
583
+ function onKeyUp() {
572
584
 
573
- _panStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );
574
- _panEnd.copy( _panStart );
585
+ if ( this.enabled === false ) return;
575
586
 
576
- }
587
+ this.keyState = _STATE.NONE;
577
588
 
578
- scope.dispatchEvent( _startEvent );
589
+ window.addEventListener( 'keydown', this._onKeyDown );
579
590
 
580
- }
591
+ }
581
592
 
582
- function onMouseMove( event ) {
593
+ function onKeyDown( event ) {
583
594
 
584
- const state = ( _keyState !== STATE.NONE ) ? _keyState : _state;
595
+ if ( this.enabled === false ) return;
585
596
 
586
- if ( state === STATE.ROTATE && ! scope.noRotate ) {
597
+ window.removeEventListener( 'keydown', this._onKeyDown );
587
598
 
588
- _movePrev.copy( _moveCurr );
589
- _moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );
599
+ if ( this.keyState !== _STATE.NONE ) {
590
600
 
591
- } else if ( state === STATE.ZOOM && ! scope.noZoom ) {
601
+ return;
592
602
 
593
- _zoomEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );
603
+ } else if ( event.code === this.keys[ _STATE.ROTATE ] && ! this.noRotate ) {
594
604
 
595
- } else if ( state === STATE.PAN && ! scope.noPan ) {
605
+ this.keyState = _STATE.ROTATE;
596
606
 
597
- _panEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );
607
+ } else if ( event.code === this.keys[ _STATE.ZOOM ] && ! this.noZoom ) {
598
608
 
599
- }
609
+ this.keyState = _STATE.ZOOM;
600
610
 
601
- }
611
+ } else if ( event.code === this.keys[ _STATE.PAN ] && ! this.noPan ) {
602
612
 
603
- function onMouseUp() {
613
+ this.keyState = _STATE.PAN;
604
614
 
605
- _state = STATE.NONE;
615
+ }
606
616
 
607
- scope.dispatchEvent( _endEvent );
617
+ }
608
618
 
609
- }
619
+ function onMouseDown( event ) {
610
620
 
611
- function onMouseWheel( event ) {
621
+ let mouseAction;
612
622
 
613
- if ( scope.enabled === false ) return;
623
+ switch ( event.button ) {
614
624
 
615
- if ( scope.noZoom === true ) return;
625
+ case 0:
626
+ mouseAction = this.mouseButtons.LEFT;
627
+ break;
616
628
 
617
- event.preventDefault();
629
+ case 1:
630
+ mouseAction = this.mouseButtons.MIDDLE;
631
+ break;
618
632
 
619
- switch ( event.deltaMode ) {
633
+ case 2:
634
+ mouseAction = this.mouseButtons.RIGHT;
635
+ break;
620
636
 
621
- case 2:
622
- // Zoom in pages
623
- _zoomStart.y -= event.deltaY * 0.025;
624
- break;
637
+ default:
638
+ mouseAction = - 1;
625
639
 
626
- case 1:
627
- // Zoom in lines
628
- _zoomStart.y -= event.deltaY * 0.01;
629
- break;
640
+ }
630
641
 
631
- default:
632
- // undefined, 0, assume pixels
633
- _zoomStart.y -= event.deltaY * 0.00025;
634
- break;
642
+ switch ( mouseAction ) {
635
643
 
636
- }
644
+ case MOUSE.DOLLY:
645
+ this.state = _STATE.ZOOM;
646
+ break;
637
647
 
638
- scope.dispatchEvent( _startEvent );
639
- scope.dispatchEvent( _endEvent );
648
+ case MOUSE.ROTATE:
649
+ this.state = _STATE.ROTATE;
650
+ break;
640
651
 
641
- }
652
+ case MOUSE.PAN:
653
+ this.state = _STATE.PAN;
654
+ break;
642
655
 
643
- function onTouchStart( event ) {
656
+ default:
657
+ this.state = _STATE.NONE;
644
658
 
645
- trackPointer( event );
659
+ }
646
660
 
647
- switch ( _pointers.length ) {
661
+ const state = ( this.keyState !== _STATE.NONE ) ? this.keyState : this.state;
648
662
 
649
- case 1:
650
- _state = STATE.TOUCH_ROTATE;
651
- _moveCurr.copy( getMouseOnCircle( _pointers[ 0 ].pageX, _pointers[ 0 ].pageY ) );
652
- _movePrev.copy( _moveCurr );
653
- break;
663
+ if ( state === _STATE.ROTATE && ! this.noRotate ) {
654
664
 
655
- default: // 2 or more
656
- _state = STATE.TOUCH_ZOOM_PAN;
657
- const dx = _pointers[ 0 ].pageX - _pointers[ 1 ].pageX;
658
- const dy = _pointers[ 0 ].pageY - _pointers[ 1 ].pageY;
659
- _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );
665
+ this._moveCurr.copy( this._getMouseOnCircle( event.pageX, event.pageY ) );
666
+ this._movePrev.copy( this._moveCurr );
660
667
 
661
- const x = ( _pointers[ 0 ].pageX + _pointers[ 1 ].pageX ) / 2;
662
- const y = ( _pointers[ 0 ].pageY + _pointers[ 1 ].pageY ) / 2;
663
- _panStart.copy( getMouseOnScreen( x, y ) );
664
- _panEnd.copy( _panStart );
665
- break;
668
+ } else if ( state === _STATE.ZOOM && ! this.noZoom ) {
666
669
 
667
- }
670
+ this._zoomStart.copy( this._getMouseOnScreen( event.pageX, event.pageY ) );
671
+ this._zoomEnd.copy( this._zoomStart );
668
672
 
669
- scope.dispatchEvent( _startEvent );
673
+ } else if ( state === _STATE.PAN && ! this.noPan ) {
670
674
 
671
- }
675
+ this._panStart.copy( this._getMouseOnScreen( event.pageX, event.pageY ) );
676
+ this._panEnd.copy( this._panStart );
672
677
 
673
- function onTouchMove( event ) {
678
+ }
674
679
 
675
- trackPointer( event );
680
+ this.dispatchEvent( _startEvent );
676
681
 
677
- switch ( _pointers.length ) {
682
+ }
678
683
 
679
- case 1:
680
- _movePrev.copy( _moveCurr );
681
- _moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );
682
- break;
684
+ function onMouseMove( event ) {
683
685
 
684
- default: // 2 or more
686
+ const state = ( this.keyState !== _STATE.NONE ) ? this.keyState : this.state;
685
687
 
686
- const position = getSecondPointerPosition( event );
688
+ if ( state === _STATE.ROTATE && ! this.noRotate ) {
687
689
 
688
- const dx = event.pageX - position.x;
689
- const dy = event.pageY - position.y;
690
- _touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );
690
+ this._movePrev.copy( this._moveCurr );
691
+ this._moveCurr.copy( this._getMouseOnCircle( event.pageX, event.pageY ) );
691
692
 
692
- const x = ( event.pageX + position.x ) / 2;
693
- const y = ( event.pageY + position.y ) / 2;
694
- _panEnd.copy( getMouseOnScreen( x, y ) );
695
- break;
693
+ } else if ( state === _STATE.ZOOM && ! this.noZoom ) {
696
694
 
697
- }
695
+ this._zoomEnd.copy( this._getMouseOnScreen( event.pageX, event.pageY ) );
698
696
 
699
- }
697
+ } else if ( state === _STATE.PAN && ! this.noPan ) {
700
698
 
701
- function onTouchEnd( event ) {
699
+ this._panEnd.copy( this._getMouseOnScreen( event.pageX, event.pageY ) );
702
700
 
703
- switch ( _pointers.length ) {
701
+ }
704
702
 
705
- case 0:
706
- _state = STATE.NONE;
707
- break;
703
+ }
708
704
 
709
- case 1:
710
- _state = STATE.TOUCH_ROTATE;
711
- _moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );
712
- _movePrev.copy( _moveCurr );
713
- break;
705
+ function onMouseUp() {
714
706
 
715
- case 2:
716
- _state = STATE.TOUCH_ZOOM_PAN;
707
+ this.state = _STATE.NONE;
717
708
 
718
- for ( let i = 0; i < _pointers.length; i ++ ) {
709
+ this.dispatchEvent( _endEvent );
719
710
 
720
- if ( _pointers[ i ].pointerId !== event.pointerId ) {
711
+ }
721
712
 
722
- const position = _pointerPositions[ _pointers[ i ].pointerId ];
723
- _moveCurr.copy( getMouseOnCircle( position.x, position.y ) );
724
- _movePrev.copy( _moveCurr );
725
- break;
713
+ function onMouseWheel( event ) {
726
714
 
727
- }
715
+ if ( this.enabled === false ) return;
728
716
 
729
- }
717
+ if ( this.noZoom === true ) return;
730
718
 
731
- break;
719
+ event.preventDefault();
732
720
 
733
- }
721
+ switch ( event.deltaMode ) {
734
722
 
735
- scope.dispatchEvent( _endEvent );
723
+ case 2:
724
+ // Zoom in pages
725
+ this._zoomStart.y -= event.deltaY * 0.025;
726
+ break;
736
727
 
737
- }
728
+ case 1:
729
+ // Zoom in lines
730
+ this._zoomStart.y -= event.deltaY * 0.01;
731
+ break;
738
732
 
739
- function contextmenu( event ) {
733
+ default:
734
+ // undefined, 0, assume pixels
735
+ this._zoomStart.y -= event.deltaY * 0.00025;
736
+ break;
740
737
 
741
- if ( scope.enabled === false ) return;
738
+ }
742
739
 
743
- event.preventDefault();
740
+ this.dispatchEvent( _startEvent );
741
+ this.dispatchEvent( _endEvent );
744
742
 
745
- }
743
+ }
746
744
 
747
- function addPointer( event ) {
745
+ function onContextMenu( event ) {
748
746
 
749
- _pointers.push( event );
747
+ if ( this.enabled === false ) return;
750
748
 
751
- }
749
+ event.preventDefault();
752
750
 
753
- function removePointer( event ) {
751
+ }
754
752
 
755
- delete _pointerPositions[ event.pointerId ];
753
+ function onTouchStart( event ) {
756
754
 
757
- for ( let i = 0; i < _pointers.length; i ++ ) {
755
+ this._trackPointer( event );
758
756
 
759
- if ( _pointers[ i ].pointerId == event.pointerId ) {
757
+ switch ( this._pointers.length ) {
760
758
 
761
- _pointers.splice( i, 1 );
762
- return;
759
+ case 1:
760
+ this.state = _STATE.TOUCH_ROTATE;
761
+ this._moveCurr.copy( this._getMouseOnCircle( this._pointers[ 0 ].pageX, this._pointers[ 0 ].pageY ) );
762
+ this._movePrev.copy( this._moveCurr );
763
+ break;
763
764
 
764
- }
765
+ default: // 2 or more
766
+ this.state = _STATE.TOUCH_ZOOM_PAN;
767
+ const dx = this._pointers[ 0 ].pageX - this._pointers[ 1 ].pageX;
768
+ const dy = this._pointers[ 0 ].pageY - this._pointers[ 1 ].pageY;
769
+ this._touchZoomDistanceEnd = this._touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );
765
770
 
766
- }
771
+ const x = ( this._pointers[ 0 ].pageX + this._pointers[ 1 ].pageX ) / 2;
772
+ const y = ( this._pointers[ 0 ].pageY + this._pointers[ 1 ].pageY ) / 2;
773
+ this._panStart.copy( this._getMouseOnScreen( x, y ) );
774
+ this._panEnd.copy( this._panStart );
775
+ break;
767
776
 
768
- }
777
+ }
769
778
 
770
- function trackPointer( event ) {
779
+ this.dispatchEvent( _startEvent );
771
780
 
772
- let position = _pointerPositions[ event.pointerId ];
781
+ }
773
782
 
774
- if ( position === undefined ) {
783
+ function onTouchMove( event ) {
775
784
 
776
- position = new Vector2();
777
- _pointerPositions[ event.pointerId ] = position;
785
+ this._trackPointer( event );
778
786
 
779
- }
787
+ switch ( this._pointers.length ) {
780
788
 
781
- position.set( event.pageX, event.pageY );
789
+ case 1:
790
+ this._movePrev.copy( this._moveCurr );
791
+ this._moveCurr.copy( this._getMouseOnCircle( event.pageX, event.pageY ) );
792
+ break;
782
793
 
783
- }
794
+ default: // 2 or more
784
795
 
785
- function getSecondPointerPosition( event ) {
796
+ const position = this._getSecondPointerPosition( event );
786
797
 
787
- const pointer = ( event.pointerId === _pointers[ 0 ].pointerId ) ? _pointers[ 1 ] : _pointers[ 0 ];
798
+ const dx = event.pageX - position.x;
799
+ const dy = event.pageY - position.y;
800
+ this._touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );
788
801
 
789
- return _pointerPositions[ pointer.pointerId ];
802
+ const x = ( event.pageX + position.x ) / 2;
803
+ const y = ( event.pageY + position.y ) / 2;
804
+ this._panEnd.copy( this._getMouseOnScreen( x, y ) );
805
+ break;
790
806
 
791
- }
807
+ }
792
808
 
793
- this.dispose = function () {
809
+ }
794
810
 
795
- scope.domElement.removeEventListener( 'contextmenu', contextmenu );
811
+ function onTouchEnd( event ) {
796
812
 
797
- scope.domElement.removeEventListener( 'pointerdown', onPointerDown );
798
- scope.domElement.removeEventListener( 'pointercancel', onPointerCancel );
799
- scope.domElement.removeEventListener( 'wheel', onMouseWheel );
813
+ switch ( this._pointers.length ) {
800
814
 
801
- scope.domElement.removeEventListener( 'pointermove', onPointerMove );
802
- scope.domElement.removeEventListener( 'pointerup', onPointerUp );
815
+ case 0:
816
+ this.state = _STATE.NONE;
817
+ break;
803
818
 
804
- window.removeEventListener( 'keydown', keydown );
805
- window.removeEventListener( 'keyup', keyup );
819
+ case 1:
820
+ this.state = _STATE.TOUCH_ROTATE;
821
+ this._moveCurr.copy( this._getMouseOnCircle( event.pageX, event.pageY ) );
822
+ this._movePrev.copy( this._moveCurr );
823
+ break;
806
824
 
807
- };
825
+ case 2:
826
+ this.state = _STATE.TOUCH_ZOOM_PAN;
808
827
 
809
- this.domElement.addEventListener( 'contextmenu', contextmenu );
828
+ for ( let i = 0; i < this._pointers.length; i ++ ) {
810
829
 
811
- this.domElement.addEventListener( 'pointerdown', onPointerDown );
812
- this.domElement.addEventListener( 'pointercancel', onPointerCancel );
813
- this.domElement.addEventListener( 'wheel', onMouseWheel, { passive: false } );
830
+ if ( this._pointers[ i ].pointerId !== event.pointerId ) {
814
831
 
832
+ const position = this._pointerPositions[ this._pointers[ i ].pointerId ];
833
+ this._moveCurr.copy( this._getMouseOnCircle( position.x, position.y ) );
834
+ this._movePrev.copy( this._moveCurr );
835
+ break;
815
836
 
816
- window.addEventListener( 'keydown', keydown );
817
- window.addEventListener( 'keyup', keyup );
837
+ }
818
838
 
819
- this.handleResize();
839
+ }
820
840
 
821
- // force an update at start
822
- this.update();
841
+ break;
823
842
 
824
843
  }
825
844
 
845
+ this.dispatchEvent( _endEvent );
846
+
826
847
  }
827
848
 
828
849
  export { TrackballControls };