super-three 0.141.0 → 0.147.0

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