@needle-tools/three 0.145.4 → 0.146.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 (393) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +32586 -35951
  3. package/build/three.js +32600 -35965
  4. package/build/three.min.js +6 -7
  5. package/build/three.module.js +1547 -1154
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +49 -66
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +70 -134
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +138 -405
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -54
  14. package/examples/js/controls/FlyControls.js +29 -55
  15. package/examples/js/controls/OrbitControls.js +85 -95
  16. package/examples/js/controls/PointerLockControls.js +5 -14
  17. package/examples/js/controls/TrackballControls.js +33 -86
  18. package/examples/js/controls/TransformControls.js +84 -169
  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 +4 -18
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +26 -30
  30. package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
  31. package/examples/js/effects/PeppersGhostEffect.js +12 -39
  32. package/examples/js/effects/StereoEffect.js +0 -4
  33. package/examples/js/environments/RoomEnvironment.js +12 -10
  34. package/examples/js/exporters/ColladaExporter.js +48 -65
  35. package/examples/js/exporters/DRACOExporter.js +22 -22
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +143 -261
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +42 -33
  40. package/examples/js/exporters/PLYExporter.js +38 -33
  41. package/examples/js/exporters/STLExporter.js +5 -7
  42. package/examples/js/exporters/USDZExporter.js +110 -25
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +11 -6
  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 +25 -12
  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 +22 -33
  60. package/examples/js/interactive/InteractiveGroup.js +6 -12
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +0 -8
  63. package/examples/js/lights/LightProbeGenerator.js +32 -39
  64. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  65. package/examples/js/lines/LineGeometry.js +3 -5
  66. package/examples/js/lines/LineMaterial.js +4 -11
  67. package/examples/js/lines/LineSegments2.js +38 -89
  68. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  69. package/examples/js/lines/Wireframe.js +2 -7
  70. package/examples/js/lines/WireframeGeometry2.js +3 -1
  71. package/examples/js/loaders/3DMLoader.js +58 -155
  72. package/examples/js/loaders/3MFLoader.js +72 -106
  73. package/examples/js/loaders/AMFLoader.js +0 -25
  74. package/examples/js/loaders/BVHLoader.js +44 -43
  75. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  76. package/examples/js/loaders/ColladaLoader.js +201 -359
  77. package/examples/js/loaders/DDSLoader.js +24 -25
  78. package/examples/js/loaders/DRACOLoader.js +29 -66
  79. package/examples/js/loaders/EXRLoader.js +67 -164
  80. package/examples/js/loaders/FBXLoader.js +286 -441
  81. package/examples/js/loaders/FontLoader.js +6 -15
  82. package/examples/js/loaders/GCodeLoader.js +15 -16
  83. package/examples/js/loaders/GLTFLoader.js +354 -405
  84. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
  85. package/examples/js/loaders/KMZLoader.js +3 -7
  86. package/examples/js/loaders/KTXLoader.js +12 -30
  87. package/examples/js/loaders/LDrawLoader.js +178 -289
  88. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  89. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  90. package/examples/js/loaders/LWOLoader.js +59 -124
  91. package/examples/js/loaders/LogLuvLoader.js +27 -77
  92. package/examples/js/loaders/LottieLoader.js +4 -4
  93. package/examples/js/loaders/MD2Loader.js +26 -27
  94. package/examples/js/loaders/MDDLoader.js +6 -10
  95. package/examples/js/loaders/MMDLoader.js +180 -189
  96. package/examples/js/loaders/MTLLoader.js +18 -47
  97. package/examples/js/loaders/MaterialXLoader.js +392 -0
  98. package/examples/js/loaders/NRRDLoader.js +44 -84
  99. package/examples/js/loaders/OBJLoader.js +50 -65
  100. package/examples/js/loaders/PCDLoader.js +34 -29
  101. package/examples/js/loaders/PDBLoader.js +17 -13
  102. package/examples/js/loaders/PLYLoader.js +9 -39
  103. package/examples/js/loaders/PRWMLoader.js +11 -22
  104. package/examples/js/loaders/PVRLoader.js +7 -16
  105. package/examples/js/loaders/RGBELoader.js +36 -61
  106. package/examples/js/loaders/RGBMLoader.js +26 -87
  107. package/examples/js/loaders/STLLoader.js +20 -27
  108. package/examples/js/loaders/SVGLoader.js +361 -233
  109. package/examples/js/loaders/TDSLoader.js +81 -118
  110. package/examples/js/loaders/TGALoader.js +39 -41
  111. package/examples/js/loaders/TIFFLoader.js +0 -1
  112. package/examples/js/loaders/TTFLoader.js +0 -8
  113. package/examples/js/loaders/TiltLoader.js +14 -15
  114. package/examples/js/loaders/VOXLoader.js +8 -16
  115. package/examples/js/loaders/VRMLLoader.js +243 -340
  116. package/examples/js/loaders/VTKLoader.js +101 -118
  117. package/examples/js/loaders/XYZLoader.js +2 -4
  118. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  119. package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
  120. package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
  121. package/examples/js/materials/MeshGouraudMaterial.js +15 -13
  122. package/examples/js/math/Capsule.js +0 -17
  123. package/examples/js/math/ColorConverter.js +3 -3
  124. package/examples/js/math/ConvexHull.js +183 -139
  125. package/examples/js/math/ImprovedNoise.js +1 -1
  126. package/examples/js/math/Lut.js +8 -15
  127. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  128. package/examples/js/math/OBB.js +90 -49
  129. package/examples/js/math/Octree.js +2 -57
  130. package/examples/js/math/SimplexNoise.js +74 -88
  131. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  132. package/examples/js/misc/GPUComputationRenderer.js +14 -18
  133. package/examples/js/misc/Gyroscope.js +5 -9
  134. package/examples/js/misc/MD2Character.js +14 -23
  135. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  136. package/examples/js/misc/MorphAnimMesh.js +0 -6
  137. package/examples/js/misc/MorphBlendMesh.js +3 -30
  138. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  139. package/examples/js/misc/RollerCoaster.js +17 -24
  140. package/examples/js/misc/TubePainter.js +18 -12
  141. package/examples/js/misc/Volume.js +16 -45
  142. package/examples/js/misc/VolumeSlice.js +14 -24
  143. package/examples/js/modifiers/CurveModifier.js +19 -21
  144. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  145. package/examples/js/modifiers/SimplifyModifier.js +56 -59
  146. package/examples/js/modifiers/TessellateModifier.js +2 -9
  147. package/examples/js/objects/GroundProjectedEnv.js +2 -14
  148. package/examples/js/objects/Lensflare.js +47 -38
  149. package/examples/js/objects/LightningStorm.js +10 -13
  150. package/examples/js/objects/MarchingCubes.js +80 -59
  151. package/examples/js/objects/Reflector.js +22 -20
  152. package/examples/js/objects/ReflectorForSSRPass.js +19 -23
  153. package/examples/js/objects/Refractor.js +52 -30
  154. package/examples/js/objects/ShadowMesh.js +1 -2
  155. package/examples/js/objects/Sky.js +2 -7
  156. package/examples/js/objects/Water.js +23 -18
  157. package/examples/js/objects/Water2.js +20 -19
  158. package/examples/js/physics/AmmoPhysics.js +23 -20
  159. package/examples/js/physics/OimoPhysics.js +19 -17
  160. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  161. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  162. package/examples/js/postprocessing/BloomPass.js +38 -17
  163. package/examples/js/postprocessing/BokehPass.js +29 -12
  164. package/examples/js/postprocessing/ClearPass.js +1 -6
  165. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  166. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  167. package/examples/js/postprocessing/EffectComposer.js +25 -32
  168. package/examples/js/postprocessing/FilmPass.js +7 -5
  169. package/examples/js/postprocessing/GlitchPass.js +10 -11
  170. package/examples/js/postprocessing/HalftonePass.js +9 -9
  171. package/examples/js/postprocessing/LUTPass.js +2 -15
  172. package/examples/js/postprocessing/MaskPass.js +20 -17
  173. package/examples/js/postprocessing/OutlinePass.js +45 -36
  174. package/examples/js/postprocessing/Pass.js +11 -14
  175. package/examples/js/postprocessing/RenderPass.js +3 -7
  176. package/examples/js/postprocessing/SAOPass.js +40 -32
  177. package/examples/js/postprocessing/SMAAPass.js +34 -17
  178. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  179. package/examples/js/postprocessing/SSAOPass.js +56 -42
  180. package/examples/js/postprocessing/SSRPass.js +78 -61
  181. package/examples/js/postprocessing/SavePass.js +14 -6
  182. package/examples/js/postprocessing/ShaderPass.js +9 -8
  183. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  184. package/examples/js/postprocessing/TexturePass.js +7 -4
  185. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  186. package/examples/js/renderers/CSS2DRenderer.js +2 -21
  187. package/examples/js/renderers/CSS3DRenderer.js +3 -24
  188. package/examples/js/renderers/Projector.js +29 -85
  189. package/examples/js/renderers/SVGRenderer.js +4 -50
  190. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  191. package/examples/js/shaders/AfterimageShader.js +3 -6
  192. package/examples/js/shaders/BasicShader.js +3 -6
  193. package/examples/js/shaders/BleachBypassShader.js +3 -6
  194. package/examples/js/shaders/BlendShader.js +3 -6
  195. package/examples/js/shaders/BokehShader.js +3 -6
  196. package/examples/js/shaders/BokehShader2.js +4 -13
  197. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  198. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  199. package/examples/js/shaders/ColorifyShader.js +2 -6
  200. package/examples/js/shaders/ConvolutionShader.js +5 -10
  201. package/examples/js/shaders/CopyShader.js +3 -6
  202. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  203. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  204. package/examples/js/shaders/DigitalGlitch.js +3 -6
  205. package/examples/js/shaders/DotScreenShader.js +2 -6
  206. package/examples/js/shaders/FXAAShader.js +1 -3
  207. package/examples/js/shaders/FilmShader.js +3 -6
  208. package/examples/js/shaders/FocusShader.js +3 -6
  209. package/examples/js/shaders/FreiChenShader.js +2 -6
  210. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  211. package/examples/js/shaders/GodRaysShader.js +11 -24
  212. package/examples/js/shaders/HalftoneShader.js +3 -6
  213. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  214. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  215. package/examples/js/shaders/HueSaturationShader.js +3 -6
  216. package/examples/js/shaders/KaleidoShader.js +3 -6
  217. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  218. package/examples/js/shaders/LuminosityShader.js +3 -6
  219. package/examples/js/shaders/MMDToonShader.js +2 -6
  220. package/examples/js/shaders/MirrorShader.js +3 -6
  221. package/examples/js/shaders/NormalMapShader.js +2 -6
  222. package/examples/js/shaders/RGBShiftShader.js +3 -6
  223. package/examples/js/shaders/SAOShader.js +2 -6
  224. package/examples/js/shaders/SMAAShader.js +6 -18
  225. package/examples/js/shaders/SSAOShader.js +2 -6
  226. package/examples/js/shaders/SSRShader.js +6 -18
  227. package/examples/js/shaders/SepiaShader.js +3 -6
  228. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  229. package/examples/js/shaders/TechnicolorShader.js +3 -6
  230. package/examples/js/shaders/ToneMapShader.js +3 -6
  231. package/examples/js/shaders/ToonShader.js +8 -24
  232. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  233. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  234. package/examples/js/shaders/VelocityShader.js +126 -0
  235. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  236. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  237. package/examples/js/shaders/VignetteShader.js +3 -6
  238. package/examples/js/shaders/VolumeShader.js +2 -6
  239. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  240. package/examples/js/textures/FlakesTexture.js +0 -1
  241. package/examples/js/utils/BufferGeometryUtils.js +234 -168
  242. package/examples/js/utils/CameraUtils.js +5 -20
  243. package/examples/js/utils/GPUStatsPanel.js +3 -12
  244. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  245. package/examples/js/utils/GeometryUtils.js +13 -18
  246. package/examples/js/utils/LDrawUtils.js +8 -11
  247. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  248. package/examples/js/utils/SceneUtils.js +117 -6
  249. package/examples/js/utils/ShadowMapViewer.js +17 -14
  250. package/examples/js/utils/SkeletonUtils.js +13 -27
  251. package/examples/js/utils/UVsDebug.js +20 -12
  252. package/examples/js/utils/WorkerPool.js +1 -11
  253. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  254. package/examples/jsm/capabilities/WebGPU.js +3 -1
  255. package/examples/jsm/controls/OrbitControls.js +44 -4
  256. package/examples/jsm/exporters/GLTFExporter.js +17 -131
  257. package/examples/jsm/exporters/USDZExporter.js +75 -19
  258. package/examples/jsm/interactive/HTMLMesh.js +2 -0
  259. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  260. package/examples/jsm/loaders/3DMLoader.js +1 -2
  261. package/examples/jsm/loaders/ColladaLoader.js +28 -0
  262. package/examples/jsm/loaders/FBXLoader.js +16 -2
  263. package/examples/jsm/loaders/GLTFLoader.js +204 -377
  264. package/examples/jsm/loaders/KTX2Loader.js +68 -29
  265. package/examples/jsm/loaders/LDrawLoader.js +14 -13
  266. package/examples/jsm/loaders/LottieLoader.js +4 -2
  267. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  268. package/examples/jsm/loaders/PCDLoader.js +1 -1
  269. package/examples/jsm/loaders/PLYLoader.js +68 -16
  270. package/examples/jsm/loaders/SVGLoader.js +227 -14
  271. package/examples/jsm/loaders/USDZLoader.js +31 -16
  272. package/examples/jsm/nodes/Nodes.js +14 -2
  273. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  274. package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
  275. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  276. package/examples/jsm/nodes/accessors/SkinningNode.js +1 -1
  277. package/examples/jsm/nodes/core/Node.js +1 -1
  278. package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
  279. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  280. package/examples/jsm/nodes/core/NodeVarying.js +7 -4
  281. package/examples/jsm/nodes/core/VaryingNode.js +6 -4
  282. package/examples/jsm/nodes/core/constants.js +13 -13
  283. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  284. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  285. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  286. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  287. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
  288. package/examples/jsm/nodes/materials/Materials.js +9 -7
  289. package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
  290. package/examples/jsm/nodes/materialx/MaterialXNodes.js +6 -2
  291. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  292. package/examples/jsm/nodes/math/MathNode.js +5 -0
  293. package/examples/jsm/nodes/math/OperatorNode.js +6 -1
  294. package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
  295. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
  296. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
  297. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  298. package/examples/jsm/nodes/utils/JoinNode.js +8 -2
  299. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  300. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  301. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  302. package/examples/jsm/nodes/utils/TimerNode.js +1 -1
  303. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  304. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  305. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  306. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  307. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  308. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  309. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  310. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  311. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  312. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  313. package/examples/jsm/postprocessing/OutlinePass.js +10 -0
  314. package/examples/jsm/postprocessing/Pass.js +2 -0
  315. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  316. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  317. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  318. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  319. package/examples/jsm/postprocessing/SavePass.js +17 -1
  320. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  321. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  322. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  323. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  324. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +39 -16
  325. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  326. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  327. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
  328. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
  329. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +35 -5
  330. package/examples/jsm/shaders/MMDToonShader.js +0 -2
  331. package/examples/jsm/shaders/VelocityShader.js +128 -0
  332. package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
  333. package/examples/jsm/utils/SceneUtils.js +129 -4
  334. package/examples/jsm/utils/TextureUtils.js +85 -0
  335. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  336. package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
  337. package/package.json +11 -12
  338. package/src/Three.js +1 -0
  339. package/src/audio/AudioContext.js +5 -5
  340. package/src/cameras/CubeCamera.js +14 -14
  341. package/src/constants.js +1 -1
  342. package/src/core/InstancedBufferGeometry.js +1 -7
  343. package/src/extras/Earcut.js +67 -67
  344. package/src/helpers/DirectionalLightHelper.js +5 -1
  345. package/src/helpers/HemisphereLightHelper.js +4 -1
  346. package/src/helpers/PointLightHelper.js +2 -1
  347. package/src/helpers/SpotLightHelper.js +4 -2
  348. package/src/lights/PointLight.js +2 -2
  349. package/src/lights/SpotLight.js +2 -2
  350. package/src/loaders/FileLoader.js +4 -1
  351. package/src/loaders/ObjectLoader.js +5 -1
  352. package/src/materials/Material.js +1 -1
  353. package/src/math/Color.js +5 -5
  354. package/src/math/Matrix3.js +53 -18
  355. package/src/math/Ray.js +2 -5
  356. package/src/math/Sphere.js +19 -26
  357. package/src/objects/InstancedMesh.js +7 -0
  358. package/src/objects/LOD.js +25 -6
  359. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  360. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  361. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  362. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  363. package/src/renderers/WebGLRenderTarget.js +1 -1
  364. package/src/renderers/WebGLRenderer.js +36 -62
  365. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  366. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
  367. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  369. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  370. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  371. package/src/renderers/shaders/ShaderChunk.js +3 -0
  372. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  373. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  374. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  375. package/src/renderers/shaders/ShaderLib.js +20 -6
  376. package/src/renderers/shaders/UniformsLib.js +1 -1
  377. package/src/renderers/shaders/UniformsUtils.js +15 -0
  378. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  379. package/src/renderers/webgl/WebGLBackground.js +15 -7
  380. package/src/renderers/webgl/WebGLLights.js +0 -4
  381. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  382. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  383. package/src/renderers/webgl/WebGLState.js +31 -1
  384. package/src/renderers/webgl/WebGLTextures.js +71 -18
  385. package/src/renderers/webgl/WebGLUniforms.js +116 -20
  386. package/src/renderers/webgl/WebGLUtils.js +1 -1
  387. package/src/renderers/webxr/WebXRController.js +46 -13
  388. package/src/renderers/webxr/WebXRManager.js +85 -3
  389. package/src/scenes/Scene.js +8 -0
  390. package/src/textures/CompressedArrayTexture.js +18 -0
  391. package/examples/js/libs/lottie_canvas.js +0 -12751
  392. package/examples/js/shaders/PixelShader.js +0 -51
  393. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -7,7 +7,6 @@
7
7
  this.IFF = IFFParser;
8
8
 
9
9
  }
10
-
11
10
  parseBlock() {
12
11
 
13
12
  this.IFF.debugger.offset = this.IFF.reader.offset;
@@ -16,35 +15,34 @@
16
15
  const length = this.IFF.reader.getUint32(); // size of data in bytes
17
16
 
18
17
  this.IFF.debugger.dataOffset = this.IFF.reader.offset;
19
- this.IFF.debugger.length = length; // Data types may be found in either LWO2 OR LWO3 spec
18
+ this.IFF.debugger.length = length;
20
19
 
20
+ // Data types may be found in either LWO2 OR LWO3 spec
21
21
  switch ( blockID ) {
22
22
 
23
23
  case 'FORM':
24
24
  // form blocks may consist of sub -chunks or sub-forms
25
25
  this.IFF.parseForm( length );
26
26
  break;
27
+
27
28
  // SKIPPED CHUNKS
28
29
  // MISC skipped
29
-
30
30
  case 'ICON': // Thumbnail Icon Image
31
-
32
31
  case 'VMPA': // Vertex Map Parameter
33
-
34
32
  case 'BBOX': // bounding box
35
33
  // case 'VMMD':
36
34
  // case 'VTYP':
37
- // normal maps can be specified, normally on models imported from other applications. Currently ignored
38
35
 
39
- case 'NORM': // ENVL FORM skipped
36
+ // normal maps can be specified, normally on models imported from other applications. Currently ignored
37
+ case 'NORM':
40
38
 
39
+ // ENVL FORM skipped
41
40
  case 'PRE ': // Pre-loop behavior for the keyframe
42
-
43
41
  case 'POST': // Post-loop behavior for the keyframe
44
-
45
42
  case 'KEY ':
46
- case 'SPAN': // CLIP FORM skipped
43
+ case 'SPAN':
47
44
 
45
+ // CLIP FORM skipped
48
46
  case 'TIME':
49
47
  case 'CLRS':
50
48
  case 'CLRA':
@@ -57,32 +55,36 @@
57
55
  case 'GAMM':
58
56
  case 'NEGA':
59
57
  case 'IFLT':
60
- case 'PFLT': // Image Map Layer skipped
58
+ case 'PFLT':
61
59
 
60
+ // Image Map Layer skipped
62
61
  case 'PROJ':
63
62
  case 'AXIS':
64
63
  case 'AAST':
65
64
  case 'PIXB':
66
- case 'STCK': // Procedural Textures skipped
65
+ case 'STCK':
67
66
 
68
- case 'VALU': // Gradient Textures skipped
67
+ // Procedural Textures skipped
68
+ case 'VALU':
69
69
 
70
+ // Gradient Textures skipped
70
71
  case 'PNAM':
71
72
  case 'INAM':
72
73
  case 'GRST':
73
74
  case 'GREN':
74
75
  case 'GRPT':
75
76
  case 'FKEY':
76
- case 'IKEY': // Texture Mapping Form skipped
77
+ case 'IKEY':
77
78
 
78
- case 'CSYS': // Surface CHUNKs skipped
79
+ // Texture Mapping Form skipped
80
+ case 'CSYS':
79
81
 
82
+ // Surface CHUNKs skipped
80
83
  case 'OPAQ': // top level 'opacity' checkbox
81
-
82
84
  case 'CMAP': // clip map
85
+
83
86
  // Surface node CHUNKS skipped
84
87
  // These mainly specify the node editor setup in LW
85
-
86
88
  case 'NLOC':
87
89
  case 'NZOM':
88
90
  case 'NVER':
@@ -94,8 +96,9 @@
94
96
  case 'NPLA':
95
97
  case 'VERS':
96
98
  case 'ENUM':
97
- case 'TAG ': // Car Material CHUNKS
99
+ case 'TAG ':
98
100
 
101
+ // Car Material CHUNKS
99
102
  case 'CGMD':
100
103
  case 'CGTY':
101
104
  case 'CGST':
@@ -124,26 +127,17 @@
124
127
  this.IFF.debugger.skipped = true;
125
128
  this.IFF.reader.skip( length );
126
129
  break;
127
- // Texture node chunks (not in spec)
128
130
 
131
+ // Texture node chunks (not in spec)
129
132
  case 'IPIX': // usePixelBlending
130
-
131
133
  case 'IMIP': // useMipMaps
132
-
133
134
  case 'IMOD': // imageBlendingMode
134
-
135
135
  case 'AMOD': // unknown
136
-
137
136
  case 'IINV': // imageInvertAlpha
138
-
139
137
  case 'INCR': // imageInvertColor
140
-
141
138
  case 'IAXS': // imageAxis ( for non-UV maps)
142
-
143
139
  case 'IFOT': // imageFallofType
144
-
145
140
  case 'ITIM': // timing for animated textures
146
-
147
141
  case 'IWRL':
148
142
  case 'IUTI':
149
143
  case 'IINX':
@@ -153,227 +147,191 @@
153
147
  // possibly a VX for reused texture nodes
154
148
  if ( length === 4 ) this.IFF.currentNode[ blockID ] = this.IFF.reader.getInt32(); else this.IFF.reader.skip( length );
155
149
  break;
156
-
157
150
  case 'OTAG':
158
151
  this.IFF.parseObjectTag();
159
152
  break;
160
-
161
153
  case 'LAYR':
162
154
  this.IFF.parseLayer( length );
163
155
  break;
164
-
165
156
  case 'PNTS':
166
157
  this.IFF.parsePoints( length );
167
158
  break;
168
-
169
159
  case 'VMAP':
170
160
  this.IFF.parseVertexMapping( length );
171
161
  break;
172
-
173
162
  case 'POLS':
174
163
  this.IFF.parsePolygonList( length );
175
164
  break;
176
-
177
165
  case 'TAGS':
178
166
  this.IFF.parseTagStrings( length );
179
167
  break;
180
-
181
168
  case 'PTAG':
182
169
  this.IFF.parsePolygonTagMapping( length );
183
170
  break;
184
-
185
171
  case 'VMAD':
186
172
  this.IFF.parseVertexMapping( length, true );
187
173
  break;
188
- // Misc CHUNKS
189
174
 
175
+ // Misc CHUNKS
190
176
  case 'DESC':
191
177
  // Description Line
192
178
  this.IFF.currentForm.description = this.IFF.reader.getString();
193
179
  break;
194
-
195
180
  case 'TEXT':
196
181
  case 'CMNT':
197
182
  case 'NCOM':
198
183
  this.IFF.currentForm.comment = this.IFF.reader.getString();
199
184
  break;
200
- // Envelope Form
201
185
 
186
+ // Envelope Form
202
187
  case 'NAME':
203
188
  this.IFF.currentForm.channelName = this.IFF.reader.getString();
204
189
  break;
205
- // Image Map Layer
206
190
 
191
+ // Image Map Layer
207
192
  case 'WRAP':
208
193
  this.IFF.currentForm.wrap = {
209
194
  w: this.IFF.reader.getUint16(),
210
195
  h: this.IFF.reader.getUint16()
211
196
  };
212
197
  break;
213
-
214
198
  case 'IMAG':
215
199
  const index = this.IFF.reader.getVariableLengthIndex();
216
200
  this.IFF.currentForm.imageIndex = index;
217
201
  break;
218
- // Texture Mapping Form
219
202
 
203
+ // Texture Mapping Form
220
204
  case 'OREF':
221
205
  this.IFF.currentForm.referenceObject = this.IFF.reader.getString();
222
206
  break;
223
-
224
207
  case 'ROID':
225
208
  this.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32();
226
209
  break;
227
- // Surface Blocks
228
210
 
211
+ // Surface Blocks
229
212
  case 'SSHN':
230
213
  this.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString();
231
214
  break;
232
-
233
215
  case 'AOVN':
234
216
  this.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString();
235
217
  break;
236
- // Nodal Blocks
237
218
 
219
+ // Nodal Blocks
238
220
  case 'NSTA':
239
221
  this.IFF.currentForm.disabled = this.IFF.reader.getUint16();
240
222
  break;
241
-
242
223
  case 'NRNM':
243
224
  this.IFF.currentForm.realName = this.IFF.reader.getString();
244
225
  break;
245
-
246
226
  case 'NNME':
247
227
  this.IFF.currentForm.refName = this.IFF.reader.getString();
248
228
  this.IFF.currentSurface.nodes[ this.IFF.currentForm.refName ] = this.IFF.currentForm;
249
229
  break;
250
- // Nodal Blocks : connections
251
230
 
231
+ // Nodal Blocks : connections
252
232
  case 'INME':
253
233
  if ( ! this.IFF.currentForm.nodeName ) this.IFF.currentForm.nodeName = [];
254
234
  this.IFF.currentForm.nodeName.push( this.IFF.reader.getString() );
255
235
  break;
256
-
257
236
  case 'IINN':
258
237
  if ( ! this.IFF.currentForm.inputNodeName ) this.IFF.currentForm.inputNodeName = [];
259
238
  this.IFF.currentForm.inputNodeName.push( this.IFF.reader.getString() );
260
239
  break;
261
-
262
240
  case 'IINM':
263
241
  if ( ! this.IFF.currentForm.inputName ) this.IFF.currentForm.inputName = [];
264
242
  this.IFF.currentForm.inputName.push( this.IFF.reader.getString() );
265
243
  break;
266
-
267
244
  case 'IONM':
268
245
  if ( ! this.IFF.currentForm.inputOutputName ) this.IFF.currentForm.inputOutputName = [];
269
246
  this.IFF.currentForm.inputOutputName.push( this.IFF.reader.getString() );
270
247
  break;
271
-
272
248
  case 'FNAM':
273
249
  this.IFF.currentForm.fileName = this.IFF.reader.getString();
274
250
  break;
275
-
276
251
  case 'CHAN':
277
252
  // NOTE: ENVL Forms may also have CHAN chunk, however ENVL is currently ignored
278
253
  if ( length === 4 ) this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag(); else this.IFF.reader.skip( length );
279
254
  break;
280
- // LWO2 Spec chunks: these are needed since the SURF FORMs are often in LWO2 format
281
255
 
256
+ // LWO2 Spec chunks: these are needed since the SURF FORMs are often in LWO2 format
282
257
  case 'SMAN':
283
258
  const maxSmoothingAngle = this.IFF.reader.getFloat32();
284
259
  this.IFF.currentSurface.attributes.smooth = maxSmoothingAngle < 0 ? false : true;
285
260
  break;
286
- // LWO2: Basic Surface Parameters
287
261
 
262
+ // LWO2: Basic Surface Parameters
288
263
  case 'COLR':
289
264
  this.IFF.currentSurface.attributes.Color = {
290
265
  value: this.IFF.reader.getFloat32Array( 3 )
291
266
  };
292
267
  this.IFF.reader.skip( 2 ); // VX: envelope
293
-
294
268
  break;
295
-
296
269
  case 'LUMI':
297
270
  this.IFF.currentSurface.attributes.Luminosity = {
298
271
  value: this.IFF.reader.getFloat32()
299
272
  };
300
273
  this.IFF.reader.skip( 2 );
301
274
  break;
302
-
303
275
  case 'SPEC':
304
276
  this.IFF.currentSurface.attributes.Specular = {
305
277
  value: this.IFF.reader.getFloat32()
306
278
  };
307
279
  this.IFF.reader.skip( 2 );
308
280
  break;
309
-
310
281
  case 'DIFF':
311
282
  this.IFF.currentSurface.attributes.Diffuse = {
312
283
  value: this.IFF.reader.getFloat32()
313
284
  };
314
285
  this.IFF.reader.skip( 2 );
315
286
  break;
316
-
317
287
  case 'REFL':
318
288
  this.IFF.currentSurface.attributes.Reflection = {
319
289
  value: this.IFF.reader.getFloat32()
320
290
  };
321
291
  this.IFF.reader.skip( 2 );
322
292
  break;
323
-
324
293
  case 'GLOS':
325
294
  this.IFF.currentSurface.attributes.Glossiness = {
326
295
  value: this.IFF.reader.getFloat32()
327
296
  };
328
297
  this.IFF.reader.skip( 2 );
329
298
  break;
330
-
331
299
  case 'TRAN':
332
300
  this.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32();
333
301
  this.IFF.reader.skip( 2 );
334
302
  break;
335
-
336
303
  case 'BUMP':
337
304
  this.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32();
338
305
  this.IFF.reader.skip( 2 );
339
306
  break;
340
-
341
307
  case 'SIDE':
342
308
  this.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16();
343
309
  break;
344
-
345
310
  case 'RIMG':
346
311
  this.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex();
347
312
  break;
348
-
349
313
  case 'RIND':
350
314
  this.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32();
351
315
  this.IFF.reader.skip( 2 );
352
316
  break;
353
-
354
317
  case 'TIMG':
355
318
  this.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex();
356
319
  break;
357
-
358
320
  case 'IMAP':
359
321
  this.IFF.currentSurface.attributes.imageMapIndex = this.IFF.reader.getUint32();
360
322
  break;
361
-
362
323
  case 'IUVI':
363
324
  // uv channel name
364
325
  this.IFF.currentNode.UVChannel = this.IFF.reader.getString( length );
365
326
  break;
366
-
367
327
  case 'IUTL':
368
328
  // widthWrappingMode: 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge
369
329
  this.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32();
370
330
  break;
371
-
372
331
  case 'IVTL':
373
332
  // heightWrappingMode
374
333
  this.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32();
375
334
  break;
376
-
377
335
  default:
378
336
  this.IFF.parseUnknownCHUNK( blockID, length );
379
337
 
@@ -12,9 +12,7 @@
12
12
  value: new THREE.Color( 0x000000 )
13
13
  }
14
14
  } ] ),
15
- vertexShader:
16
- /* glsl */
17
- `
15
+ vertexShader: /* glsl */`
18
16
 
19
17
  #define GOURAUD
20
18
 
@@ -190,9 +188,7 @@
190
188
  #include <fog_vertex>
191
189
 
192
190
  }`,
193
- fragmentShader:
194
- /* glsl */
195
- `
191
+ fragmentShader: /* glsl */`
196
192
 
197
193
  #define GOURAUD
198
194
 
@@ -291,7 +287,9 @@
291
287
  #include <dithering_fragment>
292
288
 
293
289
  }`
294
- }; //
290
+ };
291
+
292
+ //
295
293
 
296
294
  class MeshGouraudMaterial extends THREE.ShaderMaterial {
297
295
 
@@ -299,27 +297,33 @@
299
297
 
300
298
  super();
301
299
  this.isMeshGouraudMaterial = true;
302
- this.type = 'MeshGouraudMaterial'; //this.color = new THREE.Color( 0xffffff ); // diffuse
300
+ this.type = 'MeshGouraudMaterial';
301
+
302
+ //this.color = new THREE.Color( 0xffffff ); // diffuse
303
+
303
304
  //this.map = null;
305
+
304
306
  //this.lightMap = null;
305
307
  //this.lightMapIntensity = 1.0;
308
+
306
309
  //this.aoMap = null;
307
310
  //this.aoMapIntensity = 1.0;
311
+
308
312
  //this.emissive = new THREE.Color( 0x000000 );
309
313
  //this.emissiveIntensity = 1.0;
310
314
  //this.emissiveMap = null;
315
+
311
316
  //this.specularMap = null;
317
+
312
318
  //this.alphaMap = null;
313
- //this.envMap = null;
314
319
 
320
+ //this.envMap = null;
315
321
  this.combine = THREE.MultiplyOperation; // combine has no uniform
316
322
  //this.reflectivity = 1;
317
323
  //this.refractionRatio = 0.98;
318
324
 
319
325
  this.fog = false; // set to use scene fog
320
-
321
326
  this.lights = true; // set to use scene lights
322
-
323
327
  this.clipping = false; // set to use user-defined clipping planes
324
328
 
325
329
  const shader = GouraudShader;
@@ -328,7 +332,6 @@
328
332
  this.vertexShader = shader.vertexShader;
329
333
  this.fragmentShader = shader.fragmentShader;
330
334
  const exposePropertyNames = [ 'map', 'lightMap', 'lightMapIntensity', 'aoMap', 'aoMapIntensity', 'emissive', 'emissiveIntensity', 'emissiveMap', 'specularMap', 'alphaMap', 'envMap', 'reflectivity', 'refractionRatio', 'opacity', 'diffuse' ];
331
-
332
335
  for ( const propertyName of exposePropertyNames ) {
333
336
 
334
337
  Object.defineProperty( this, propertyName, {
@@ -350,7 +353,6 @@
350
353
  this.setValues( parameters );
351
354
 
352
355
  }
353
-
354
356
  copy( source ) {
355
357
 
356
358
  super.copy( source );
@@ -1,13 +1,9 @@
1
1
  ( function () {
2
2
 
3
3
  const _v1 = new THREE.Vector3();
4
-
5
4
  const _v2 = new THREE.Vector3();
6
-
7
5
  const _v3 = new THREE.Vector3();
8
-
9
6
  const EPS = 1e-10;
10
-
11
7
  class Capsule {
12
8
 
13
9
  constructor( start = new THREE.Vector3( 0, 0, 0 ), end = new THREE.Vector3( 0, 1, 0 ), radius = 1 ) {
@@ -17,13 +13,11 @@
17
13
  this.radius = radius;
18
14
 
19
15
  }
20
-
21
16
  clone() {
22
17
 
23
18
  return new Capsule( this.start.clone(), this.end.clone(), this.radius );
24
19
 
25
20
  }
26
-
27
21
  set( start, end, radius ) {
28
22
 
29
23
  this.start.copy( start );
@@ -31,7 +25,6 @@
31
25
  this.radius = radius;
32
26
 
33
27
  }
34
-
35
28
  copy( capsule ) {
36
29
 
37
30
  this.start.copy( capsule.start );
@@ -39,40 +32,32 @@
39
32
  this.radius = capsule.radius;
40
33
 
41
34
  }
42
-
43
35
  getCenter( target ) {
44
36
 
45
37
  return target.copy( this.end ).add( this.start ).multiplyScalar( 0.5 );
46
38
 
47
39
  }
48
-
49
40
  translate( v ) {
50
41
 
51
42
  this.start.add( v );
52
43
  this.end.add( v );
53
44
 
54
45
  }
55
-
56
46
  checkAABBAxis( p1x, p1y, p2x, p2y, minx, maxx, miny, maxy, radius ) {
57
47
 
58
48
  return ( minx - p1x < radius || minx - p2x < radius ) && ( p1x - maxx < radius || p2x - maxx < radius ) && ( miny - p1y < radius || miny - p2y < radius ) && ( p1y - maxy < radius || p2y - maxy < radius );
59
49
 
60
50
  }
61
-
62
51
  intersectsBox( box ) {
63
52
 
64
53
  return this.checkAABBAxis( this.start.x, this.start.y, this.end.x, this.end.y, box.min.x, box.max.x, box.min.y, box.max.y, this.radius ) && this.checkAABBAxis( this.start.x, this.start.z, this.end.x, this.end.z, box.min.x, box.max.x, box.min.z, box.max.z, this.radius ) && this.checkAABBAxis( this.start.y, this.start.z, this.end.y, this.end.z, box.min.y, box.max.y, box.min.z, box.max.z, this.radius );
65
54
 
66
55
  }
67
-
68
56
  lineLineMinimumPoints( line1, line2 ) {
69
57
 
70
58
  const r = _v1.copy( line1.end ).sub( line1.start );
71
-
72
59
  const s = _v2.copy( line2.end ).sub( line2.start );
73
-
74
60
  const w = _v3.copy( line2.start ).sub( line1.start );
75
-
76
61
  const a = r.dot( s ),
77
62
  b = r.dot( r ),
78
63
  c = s.dot( s ),
@@ -80,12 +65,10 @@
80
65
  e = r.dot( w );
81
66
  let t1, t2;
82
67
  const divisor = b * c - a * a;
83
-
84
68
  if ( Math.abs( divisor ) < EPS ) {
85
69
 
86
70
  const d1 = - d / c;
87
71
  const d2 = ( a - d ) / c;
88
-
89
72
  if ( Math.abs( d1 - 0.5 ) < Math.abs( d2 - 0.5 ) ) {
90
73
 
91
74
  t1 = 0;
@@ -1,23 +1,23 @@
1
1
  ( function () {
2
2
 
3
3
  const _hsl = {};
4
-
5
4
  class ColorConverter {
6
5
 
7
6
  static setHSV( color, h, s, v ) {
8
7
 
9
8
  // https://gist.github.com/xpansive/1337890#file-index-js
9
+
10
10
  h = THREE.MathUtils.euclideanModulo( h, 1 );
11
11
  s = THREE.MathUtils.clamp( s, 0, 1 );
12
12
  v = THREE.MathUtils.clamp( v, 0, 1 );
13
13
  return color.setHSL( h, s * v / ( ( h = ( 2 - s ) * v ) < 1 ? h : 2 - h ), h * 0.5 );
14
14
 
15
15
  }
16
-
17
16
  static getHSV( color, target ) {
18
17
 
19
- color.getHSL( _hsl ); // based on https://gist.github.com/xpansive/1337890#file-index-js
18
+ color.getHSL( _hsl );
20
19
 
20
+ // based on https://gist.github.com/xpansive/1337890#file-index-js
21
21
  _hsl.s *= _hsl.l < 0.5 ? _hsl.l : 1 - _hsl.l;
22
22
  target.h = _hsl.h;
23
23
  target.s = 2 * _hsl.s / ( _hsl.l + _hsl.s );