@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
@@ -1,26 +1,20 @@
1
1
  ( function () {
2
2
 
3
- const _object_pattern = /^[og]\s*(.+)?/; // mtllib file_reference
4
-
5
- const _material_library_pattern = /^mtllib /; // usemtl material_name
6
-
7
- const _material_use_pattern = /^usemtl /; // usemap map_name
8
-
3
+ // o object_name | g group_name
4
+ const _object_pattern = /^[og]\s*(.+)?/;
5
+ // mtllib file_reference
6
+ const _material_library_pattern = /^mtllib /;
7
+ // usemtl material_name
8
+ const _material_use_pattern = /^usemtl /;
9
+ // usemap map_name
9
10
  const _map_use_pattern = /^usemap /;
10
11
  const _face_vertex_data_separator_pattern = /\s+/;
11
-
12
12
  const _vA = new THREE.Vector3();
13
-
14
13
  const _vB = new THREE.Vector3();
15
-
16
14
  const _vC = new THREE.Vector3();
17
-
18
15
  const _ab = new THREE.Vector3();
19
-
20
16
  const _cb = new THREE.Vector3();
21
-
22
17
  const _color = new THREE.Color();
23
-
24
18
  function ParserState() {
25
19
 
26
20
  const state = {
@@ -45,7 +39,6 @@
45
39
  }
46
40
 
47
41
  const previousMaterial = this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined;
48
-
49
42
  if ( this.object && typeof this.object._finalize === 'function' ) {
50
43
 
51
44
  this.object._finalize( true );
@@ -66,10 +59,10 @@
66
59
  smooth: true,
67
60
  startMaterial: function ( name, libraries ) {
68
61
 
69
- const previous = this._finalize( false ); // New usemtl declaration overwrites an inherited material, except if faces were declared
70
- // after the material, then it must be preserved for proper MultiMaterial continuation.
71
-
62
+ const previous = this._finalize( false );
72
63
 
64
+ // New usemtl declaration overwrites an inherited material, except if faces were declared
65
+ // after the material, then it must be preserved for proper MultiMaterial continuation.
73
66
  if ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {
74
67
 
75
68
  this.materials.splice( previous.index, 1 );
@@ -120,16 +113,15 @@
120
113
  _finalize: function ( end ) {
121
114
 
122
115
  const lastMultiMaterial = this.currentMaterial();
123
-
124
116
  if ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {
125
117
 
126
118
  lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;
127
119
  lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;
128
120
  lastMultiMaterial.inherited = false;
129
121
 
130
- } // Ignore objects tail materials if no face declarations followed them before a new o/g started.
131
-
122
+ }
132
123
 
124
+ // Ignore objects tail materials if no face declarations followed them before a new o/g started.
133
125
  if ( end && this.materials.length > 1 ) {
134
126
 
135
127
  for ( let mi = this.materials.length - 1; mi >= 0; mi -- ) {
@@ -142,9 +134,9 @@
142
134
 
143
135
  }
144
136
 
145
- } // Guarantee at least one empty material, this makes the creation later more straight forward.
146
-
137
+ }
147
138
 
139
+ // Guarantee at least one empty material, this makes the creation later more straight forward.
148
140
  if ( end && this.materials.length === 0 ) {
149
141
 
150
142
  this.materials.push( {
@@ -157,7 +149,9 @@
157
149
  return lastMultiMaterial;
158
150
 
159
151
  }
160
- }; // Inherit previous objects material.
152
+ };
153
+
154
+ // Inherit previous objects material.
161
155
  // Spec tells us that a declared material must be set to all objects until a new material is declared.
162
156
  // If a usemtl declaration is encountered while this new object is being parsed, it will
163
157
  // overwrite the inherited material. Exception being that there was already face declarations
@@ -237,21 +231,13 @@
237
231
 
238
232
  const src = this.vertices;
239
233
  const dst = this.object.geometry.normals;
240
-
241
234
  _vA.fromArray( src, a );
242
-
243
235
  _vB.fromArray( src, b );
244
-
245
236
  _vC.fromArray( src, c );
246
-
247
237
  _cb.subVectors( _vC, _vB );
248
-
249
238
  _ab.subVectors( _vA, _vB );
250
-
251
239
  _cb.cross( _ab );
252
-
253
240
  _cb.normalize();
254
-
255
241
  dst.push( _cb.x, _cb.y, _cb.z );
256
242
  dst.push( _cb.x, _cb.y, _cb.z );
257
243
  dst.push( _cb.x, _cb.y, _cb.z );
@@ -297,7 +283,9 @@
297
283
  let ib = this.parseVertexIndex( b, vLen );
298
284
  let ic = this.parseVertexIndex( c, vLen );
299
285
  this.addVertex( ia, ib, ic );
300
- this.addColor( ia, ib, ic ); // normals
286
+ this.addColor( ia, ib, ic );
287
+
288
+ // normals
301
289
 
302
290
  if ( na !== undefined && na !== '' ) {
303
291
 
@@ -311,8 +299,9 @@
311
299
 
312
300
  this.addFaceNormal( ia, ib, ic );
313
301
 
314
- } // uvs
302
+ }
315
303
 
304
+ // uvs
316
305
 
317
306
  if ( ua !== undefined && ua !== '' ) {
318
307
 
@@ -326,6 +315,7 @@
326
315
  } else {
327
316
 
328
317
  // add placeholder values (for inconsistent face definitions)
318
+
329
319
  this.addDefaultUV();
330
320
 
331
321
  }
@@ -335,7 +325,6 @@
335
325
 
336
326
  this.object.geometry.type = 'Points';
337
327
  const vLen = this.vertices.length;
338
-
339
328
  for ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {
340
329
 
341
330
  const index = this.parseVertexIndex( vertices[ vi ], vLen );
@@ -350,7 +339,6 @@
350
339
  this.object.geometry.type = 'Line';
351
340
  const vLen = this.vertices.length;
352
341
  const uvLen = this.uvs.length;
353
-
354
342
  for ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {
355
343
 
356
344
  this.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );
@@ -368,8 +356,9 @@
368
356
  state.startObject( '', false );
369
357
  return state;
370
358
 
371
- } //
359
+ }
372
360
 
361
+ //
373
362
 
374
363
  class OBJLoader extends THREE.Loader {
375
364
 
@@ -379,7 +368,6 @@
379
368
  this.materials = null;
380
369
 
381
370
  }
382
-
383
371
  load( url, onLoad, onProgress, onError ) {
384
372
 
385
373
  const scope = this;
@@ -412,18 +400,15 @@
412
400
  }, onProgress, onError );
413
401
 
414
402
  }
415
-
416
403
  setMaterials( materials ) {
417
404
 
418
405
  this.materials = materials;
419
406
  return this;
420
407
 
421
408
  }
422
-
423
409
  parse( text ) {
424
410
 
425
411
  const state = new ParserState();
426
-
427
412
  if ( text.indexOf( '\r\n' ) !== - 1 ) {
428
413
 
429
414
  // This is faster than String.split with regex that splits on both
@@ -440,43 +425,38 @@
440
425
 
441
426
  const lines = text.split( '\n' );
442
427
  let result = [];
443
-
444
428
  for ( let i = 0, l = lines.length; i < l; i ++ ) {
445
429
 
446
430
  const line = lines[ i ].trimStart();
447
431
  if ( line.length === 0 ) continue;
448
- const lineFirstChar = line.charAt( 0 ); // @todo invoke passed in handler if any
432
+ const lineFirstChar = line.charAt( 0 );
449
433
 
434
+ // @todo invoke passed in handler if any
450
435
  if ( lineFirstChar === '#' ) continue;
451
-
452
436
  if ( lineFirstChar === 'v' ) {
453
437
 
454
438
  const data = line.split( _face_vertex_data_separator_pattern );
455
-
456
439
  switch ( data[ 0 ] ) {
457
440
 
458
441
  case 'v':
459
442
  state.vertices.push( parseFloat( data[ 1 ] ), parseFloat( data[ 2 ] ), parseFloat( data[ 3 ] ) );
460
-
461
443
  if ( data.length >= 7 ) {
462
444
 
463
445
  _color.setRGB( parseFloat( data[ 4 ] ), parseFloat( data[ 5 ] ), parseFloat( data[ 6 ] ) ).convertSRGBToLinear();
464
-
465
446
  state.colors.push( _color.r, _color.g, _color.b );
466
447
 
467
448
  } else {
468
449
 
469
450
  // if no colors are defined, add placeholders so color and vertex indices match
451
+
470
452
  state.colors.push( undefined, undefined, undefined );
471
453
 
472
454
  }
473
455
 
474
456
  break;
475
-
476
457
  case 'vn':
477
458
  state.normals.push( parseFloat( data[ 1 ] ), parseFloat( data[ 2 ] ), parseFloat( data[ 3 ] ) );
478
459
  break;
479
-
480
460
  case 'vt':
481
461
  state.uvs.push( parseFloat( data[ 1 ] ), parseFloat( data[ 2 ] ) );
482
462
  break;
@@ -487,12 +467,13 @@
487
467
 
488
468
  const lineData = line.slice( 1 ).trim();
489
469
  const vertexData = lineData.split( _face_vertex_data_separator_pattern );
490
- const faceVertices = []; // Parse the face vertex data into an easy to work with format
470
+ const faceVertices = [];
471
+
472
+ // Parse the face vertex data into an easy to work with format
491
473
 
492
474
  for ( let j = 0, jl = vertexData.length; j < jl; j ++ ) {
493
475
 
494
476
  const vertex = vertexData[ j ];
495
-
496
477
  if ( vertex.length > 0 ) {
497
478
 
498
479
  const vertexParts = vertex.split( '/' );
@@ -500,11 +481,11 @@
500
481
 
501
482
  }
502
483
 
503
- } // Draw an edge between the first vertex and all subsequent vertices to form an n-gon
484
+ }
504
485
 
486
+ // Draw an edge between the first vertex and all subsequent vertices to form an n-gon
505
487
 
506
488
  const v1 = faceVertices[ 0 ];
507
-
508
489
  for ( let j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {
509
490
 
510
491
  const v2 = faceVertices[ j ];
@@ -518,7 +499,6 @@
518
499
  const lineParts = line.substring( 1 ).trim().split( ' ' );
519
500
  let lineVertices = [];
520
501
  const lineUVs = [];
521
-
522
502
  if ( line.indexOf( '/' ) === - 1 ) {
523
503
 
524
504
  lineVertices = lineParts;
@@ -548,6 +528,7 @@
548
528
  // o object_name
549
529
  // or
550
530
  // g group_name
531
+
551
532
  // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869
552
533
  // let name = result[ 0 ].slice( 1 ).trim();
553
534
  const name = ( ' ' + result[ 0 ].slice( 1 ).trim() ).slice( 1 );
@@ -556,22 +537,28 @@
556
537
  } else if ( _material_use_pattern.test( line ) ) {
557
538
 
558
539
  // material
540
+
559
541
  state.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );
560
542
 
561
543
  } else if ( _material_library_pattern.test( line ) ) {
562
544
 
563
545
  // mtl file
546
+
564
547
  state.materialLibraries.push( line.substring( 7 ).trim() );
565
548
 
566
549
  } else if ( _map_use_pattern.test( line ) ) {
567
550
 
568
551
  // the line is parsed but ignored since the loader assumes textures are defined MTL files
569
552
  // (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)
553
+
570
554
  console.warn( 'THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.' );
571
555
 
572
556
  } else if ( lineFirstChar === 's' ) {
573
557
 
574
- result = line.split( ' ' ); // smooth shading
558
+ result = line.split( ' ' );
559
+
560
+ // smooth shading
561
+
575
562
  // @todo Handle files that have varying smooth values for a set of faces inside one geometry,
576
563
  // but does not define a usemtl for each face set.
577
564
  // This should be detected and a dummy material created (later MultiMaterial and geometry groups).
@@ -588,7 +575,6 @@
588
575
  * surfaces, smoothing groups are either turned on or off; there is no difference between values greater
589
576
  * than 0."
590
577
  */
591
-
592
578
  if ( result.length > 1 ) {
593
579
 
594
580
  const value = result[ 1 ].trim().toLowerCase();
@@ -618,7 +604,6 @@
618
604
  const container = new THREE.Group();
619
605
  container.materialLibraries = [].concat( state.materialLibraries );
620
606
  const hasPrimitives = ! ( state.objects.length === 1 && state.objects[ 0 ].geometry.vertices.length === 0 );
621
-
622
607
  if ( hasPrimitives === true ) {
623
608
 
624
609
  for ( let i = 0, l = state.objects.length; i < l; i ++ ) {
@@ -628,12 +613,12 @@
628
613
  const materials = object.materials;
629
614
  const isLine = geometry.type === 'Line';
630
615
  const isPoints = geometry.type === 'Points';
631
- let hasVertexColors = false; // Skip o/g line declarations that did not follow with any faces
616
+ let hasVertexColors = false;
632
617
 
618
+ // Skip o/g line declarations that did not follow with any faces
633
619
  if ( geometry.vertices.length === 0 ) continue;
634
620
  const buffergeometry = new THREE.BufferGeometry();
635
621
  buffergeometry.setAttribute( 'position', new THREE.Float32BufferAttribute( geometry.vertices, 3 ) );
636
-
637
622
  if ( geometry.normals.length > 0 ) {
638
623
 
639
624
  buffergeometry.setAttribute( 'normal', new THREE.Float32BufferAttribute( geometry.normals, 3 ) );
@@ -651,21 +636,21 @@
651
636
 
652
637
  buffergeometry.setAttribute( 'uv', new THREE.Float32BufferAttribute( geometry.uvs, 2 ) );
653
638
 
654
- } // Create materials
639
+ }
655
640
 
641
+ // Create materials
656
642
 
657
643
  const createdMaterials = [];
658
-
659
644
  for ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {
660
645
 
661
646
  const sourceMaterial = materials[ mi ];
662
647
  const materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;
663
648
  let material = state.materials[ materialHash ];
664
-
665
649
  if ( this.materials !== null ) {
666
650
 
667
- material = this.materials.create( sourceMaterial.name ); // mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.
651
+ material = this.materials.create( sourceMaterial.name );
668
652
 
653
+ // mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.
669
654
  if ( isLine && material && ! ( material instanceof THREE.LineBasicMaterial ) ) {
670
655
 
671
656
  const materialLine = new THREE.LineBasicMaterial();
@@ -716,11 +701,11 @@
716
701
 
717
702
  createdMaterials.push( material );
718
703
 
719
- } // Create mesh
704
+ }
720
705
 
706
+ // Create mesh
721
707
 
722
708
  let mesh;
723
-
724
709
  if ( createdMaterials.length > 1 ) {
725
710
 
726
711
  for ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {
@@ -770,6 +755,7 @@
770
755
  } else {
771
756
 
772
757
  // if there is only the default parser state object with no geometry data, interpret data as point cloud
758
+
773
759
  if ( state.vertices.length > 0 ) {
774
760
 
775
761
  const material = new THREE.PointsMaterial( {
@@ -778,7 +764,6 @@
778
764
  } );
779
765
  const buffergeometry = new THREE.BufferGeometry();
780
766
  buffergeometry.setAttribute( 'position', new THREE.Float32BufferAttribute( state.vertices, 3 ) );
781
-
782
767
  if ( state.colors.length > 0 && state.colors[ 0 ] !== undefined ) {
783
768
 
784
769
  buffergeometry.setAttribute( 'color', new THREE.Float32BufferAttribute( state.colors, 3 ) );
@@ -8,7 +8,6 @@
8
8
  this.littleEndian = true;
9
9
 
10
10
  }
11
-
12
11
  load( url, onLoad, onProgress, onError ) {
13
12
 
14
13
  const scope = this;
@@ -42,10 +41,10 @@
42
41
  }, onProgress, onError );
43
42
 
44
43
  }
45
-
46
44
  parse( data ) {
47
45
 
48
46
  // from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js
47
+
49
48
  function decompressLZF( inData, outLength ) {
50
49
 
51
50
  const inLength = inData.length;
@@ -55,17 +54,14 @@
55
54
  let ctrl;
56
55
  let len;
57
56
  let ref;
58
-
59
57
  do {
60
58
 
61
59
  ctrl = inData[ inPtr ++ ];
62
-
63
60
  if ( ctrl < 1 << 5 ) {
64
61
 
65
62
  ctrl ++;
66
63
  if ( outPtr + ctrl > outLength ) throw new Error( 'Output buffer is not large enough' );
67
64
  if ( inPtr + ctrl > inLength ) throw new Error( 'Invalid compressed data' );
68
-
69
65
  do {
70
66
 
71
67
  outData[ outPtr ++ ] = inData[ inPtr ++ ];
@@ -77,7 +73,6 @@
77
73
  len = ctrl >> 5;
78
74
  ref = outPtr - ( ( ctrl & 0x1f ) << 8 ) - 1;
79
75
  if ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );
80
-
81
76
  if ( len === 7 ) {
82
77
 
83
78
  len += inData[ inPtr ++ ];
@@ -89,7 +84,6 @@
89
84
  if ( outPtr + len + 2 > outLength ) throw new Error( 'Output buffer is not large enough' );
90
85
  if ( ref < 0 ) throw new Error( 'Invalid compressed data' );
91
86
  if ( ref >= outPtr ) throw new Error( 'Invalid compressed data' );
92
-
93
87
  do {
94
88
 
95
89
  outData[ outPtr ++ ] = outData[ ref ++ ];
@@ -111,9 +105,13 @@
111
105
  const result2 = /[\r\n]DATA\s(\S*)\s/i.exec( data.slice( result1 - 1 ) );
112
106
  PCDheader.data = result2[ 1 ];
113
107
  PCDheader.headerLen = result2[ 0 ].length + result1;
114
- PCDheader.str = data.slice( 0, PCDheader.headerLen ); // remove comments
108
+ PCDheader.str = data.slice( 0, PCDheader.headerLen );
115
109
 
116
- PCDheader.str = PCDheader.str.replace( /\#.*/gi, '' ); // parse
110
+ // remove comments
111
+
112
+ PCDheader.str = PCDheader.str.replace( /\#.*/gi, '' );
113
+
114
+ // parse
117
115
 
118
116
  PCDheader.version = /VERSION (.*)/i.exec( PCDheader.str );
119
117
  PCDheader.fields = /FIELDS (.*)/i.exec( PCDheader.str );
@@ -123,7 +121,9 @@
123
121
  PCDheader.width = /WIDTH (.*)/i.exec( PCDheader.str );
124
122
  PCDheader.height = /HEIGHT (.*)/i.exec( PCDheader.str );
125
123
  PCDheader.viewpoint = /VIEWPOINT (.*)/i.exec( PCDheader.str );
126
- PCDheader.points = /POINTS (.*)/i.exec( PCDheader.str ); // evaluate
124
+ PCDheader.points = /POINTS (.*)/i.exec( PCDheader.str );
125
+
126
+ // evaluate
127
127
 
128
128
  if ( PCDheader.version !== null ) PCDheader.version = parseFloat( PCDheader.version[ 1 ] );
129
129
  PCDheader.fields = PCDheader.fields !== null ? PCDheader.fields[ 1 ].split( ' ' ) : [];
@@ -133,7 +133,6 @@
133
133
  if ( PCDheader.viewpoint !== null ) PCDheader.viewpoint = PCDheader.viewpoint[ 1 ];
134
134
  if ( PCDheader.points !== null ) PCDheader.points = parseInt( PCDheader.points[ 1 ], 10 );
135
135
  if ( PCDheader.points === null ) PCDheader.points = PCDheader.width * PCDheader.height;
136
-
137
136
  if ( PCDheader.size !== null ) {
138
137
 
139
138
  PCDheader.size = PCDheader.size[ 1 ].split( ' ' ).map( function ( x ) {
@@ -155,7 +154,6 @@
155
154
  } else {
156
155
 
157
156
  PCDheader.count = [];
158
-
159
157
  for ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {
160
158
 
161
159
  PCDheader.count.push( 1 );
@@ -166,7 +164,6 @@
166
164
 
167
165
  PCDheader.offset = {};
168
166
  let sizeSum = 0;
169
-
170
167
  for ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {
171
168
 
172
169
  if ( PCDheader.data === 'ascii' ) {
@@ -180,35 +177,40 @@
180
177
 
181
178
  }
182
179
 
183
- } // for binary only
180
+ }
184
181
 
182
+ // for binary only
185
183
 
186
184
  PCDheader.rowSize = sizeSum;
187
185
  return PCDheader;
188
186
 
189
187
  }
190
188
 
191
- const textData = THREE.LoaderUtils.decodeText( new Uint8Array( data ) ); // parse header (always ascii format)
189
+ const textData = THREE.LoaderUtils.decodeText( new Uint8Array( data ) );
190
+
191
+ // parse header (always ascii format)
192
192
 
193
- const PCDheader = parseHeader( textData ); // parse data
193
+ const PCDheader = parseHeader( textData );
194
+
195
+ // parse data
194
196
 
195
197
  const position = [];
196
198
  const normal = [];
197
199
  const color = [];
198
200
  const intensity = [];
199
- const label = []; // ascii
201
+ const label = [];
202
+
203
+ // ascii
200
204
 
201
205
  if ( PCDheader.data === 'ascii' ) {
202
206
 
203
207
  const offset = PCDheader.offset;
204
208
  const pcdData = textData.slice( PCDheader.headerLen );
205
209
  const lines = pcdData.split( '\n' );
206
-
207
210
  for ( let i = 0, l = lines.length; i < l; i ++ ) {
208
211
 
209
212
  if ( lines[ i ] === '' ) continue;
210
213
  const line = lines[ i ].split( ' ' );
211
-
212
214
  if ( offset.x !== undefined ) {
213
215
 
214
216
  position.push( parseFloat( line[ offset.x ] ) );
@@ -223,7 +225,6 @@
223
225
  const rgb_type = PCDheader.type[ rgb_field_index ];
224
226
  const float = parseFloat( line[ offset.rgb ] );
225
227
  let rgb = float;
226
-
227
228
  if ( rgb_type === 'F' ) {
228
229
 
229
230
  // treat float values as int
@@ -263,12 +264,14 @@
263
264
 
264
265
  }
265
266
 
266
- } // binary-compressed
267
+ }
268
+
269
+ // binary-compressed
270
+
267
271
  // normally data in PCD files are organized as array of structures: XYZRGBXYZRGB
268
272
  // binary compressed PCD files organize their data as structure of arrays: XXYYZZRGBRGB
269
273
  // that requires a totally different parsing approach compared to non-compressed data
270
274
 
271
-
272
275
  if ( PCDheader.data === 'binary_compressed' ) {
273
276
 
274
277
  const sizes = new Uint32Array( data.slice( PCDheader.headerLen, PCDheader.headerLen + 8 ) );
@@ -277,7 +280,6 @@
277
280
  const decompressed = decompressLZF( new Uint8Array( data, PCDheader.headerLen + 8, compressedSize ), decompressedSize );
278
281
  const dataview = new DataView( decompressed.buffer );
279
282
  const offset = PCDheader.offset;
280
-
281
283
  for ( let i = 0; i < PCDheader.points; i ++ ) {
282
284
 
283
285
  if ( offset.x !== undefined ) {
@@ -327,14 +329,14 @@
327
329
 
328
330
  }
329
331
 
330
- } // binary
332
+ }
331
333
 
334
+ // binary
332
335
 
333
336
  if ( PCDheader.data === 'binary' ) {
334
337
 
335
338
  const dataview = new DataView( data, PCDheader.headerLen );
336
339
  const offset = PCDheader.offset;
337
-
338
340
  for ( let i = 0, row = 0; i < PCDheader.points; i ++, row += PCDheader.rowSize ) {
339
341
 
340
342
  if ( offset.x !== undefined ) {
@@ -375,8 +377,9 @@
375
377
 
376
378
  }
377
379
 
378
- } // build geometry
380
+ }
379
381
 
382
+ // build geometry
380
383
 
381
384
  const geometry = new THREE.BufferGeometry();
382
385
  if ( position.length > 0 ) geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( position, 3 ) );
@@ -384,18 +387,20 @@
384
387
  if ( color.length > 0 ) geometry.setAttribute( 'color', new THREE.Float32BufferAttribute( color, 3 ) );
385
388
  if ( intensity.length > 0 ) geometry.setAttribute( 'intensity', new THREE.Float32BufferAttribute( intensity, 1 ) );
386
389
  if ( label.length > 0 ) geometry.setAttribute( 'label', new THREE.Int32BufferAttribute( label, 1 ) );
387
- geometry.computeBoundingSphere(); // build material
390
+ geometry.computeBoundingSphere();
391
+
392
+ // build material
388
393
 
389
394
  const material = new THREE.PointsMaterial( {
390
395
  size: 0.005
391
396
  } );
392
-
393
397
  if ( color.length > 0 ) {
394
398
 
395
399
  material.vertexColors = true;
396
400
 
397
- } // build point cloud
401
+ }
398
402
 
403
+ // build point cloud
399
404
 
400
405
  return new THREE.Points( geometry, material );
401
406