@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
@@ -33,10 +33,10 @@
33
33
  * - The entire file is contained in one top level FORM
34
34
  *
35
35
  **/
36
-
37
36
  function IFFParser() {
38
37
 
39
- this.debugger = new Debugger(); // this.debugger.enable(); // un-comment to log IFF hierarchy.
38
+ this.debugger = new Debugger();
39
+ // this.debugger.enable(); // un-comment to log IFF hierarchy.
40
40
 
41
41
  }
42
42
 
@@ -50,23 +50,21 @@
50
50
  layers: [],
51
51
  tags: [],
52
52
  textures: []
53
- }; // start out at the top level to add any data before first layer is encountered
53
+ };
54
54
 
55
+ // start out at the top level to add any data before first layer is encountered
55
56
  this.currentLayer = this.tree;
56
57
  this.currentForm = this.tree;
57
58
  this.parseTopForm();
58
59
  if ( this.tree.format === undefined ) return;
59
-
60
60
  if ( this.tree.format === 'LWO2' ) {
61
61
 
62
62
  this.parser = new THREE.LWO2Parser( this );
63
-
64
63
  while ( ! this.reader.endOfFile() ) this.parser.parseBlock();
65
64
 
66
65
  } else if ( this.tree.format === 'LWO3' ) {
67
66
 
68
67
  this.parser = new THREE.LWO3Parser( this );
69
-
70
68
  while ( ! this.reader.endOfFile() ) this.parser.parseBlock();
71
69
 
72
70
  }
@@ -76,12 +74,10 @@
76
74
  return this.tree;
77
75
 
78
76
  },
79
-
80
77
  parseTopForm() {
81
78
 
82
79
  this.debugger.offset = this.reader.offset;
83
80
  var topForm = this.reader.getIDTag();
84
-
85
81
  if ( topForm !== 'FORM' ) {
86
82
 
87
83
  console.warn( 'LWOLoader: Top-level FORM missing.' );
@@ -93,7 +89,6 @@
93
89
  this.debugger.dataOffset = this.reader.offset;
94
90
  this.debugger.length = length;
95
91
  var type = this.reader.getIDTag();
96
-
97
92
  if ( type === 'LWO2' ) {
98
93
 
99
94
  this.tree.format = type;
@@ -110,42 +105,37 @@
110
105
  return;
111
106
 
112
107
  },
113
-
114
108
  ///
115
109
  // FORM PARSING METHODS
116
110
  ///
111
+
117
112
  // Forms are organisational and can contain any number of sub chunks and sub forms
118
113
  // FORM ::= 'FORM'[ID4], length[U4], type[ID4], ( chunk[CHUNK] | form[FORM] ) * }
119
114
  parseForm( length ) {
120
115
 
121
116
  var type = this.reader.getIDTag();
122
-
123
117
  switch ( type ) {
124
118
 
125
119
  // SKIPPED FORMS
126
120
  // if skipForm( length ) is called, the entire form and any sub forms and chunks are skipped
127
- case 'ISEQ': // Image sequence
128
121
 
122
+ case 'ISEQ': // Image sequence
129
123
  case 'ANIM': // plug in animation
130
-
131
124
  case 'STCC': // Color-cycling Still
132
-
133
125
  case 'VPVL':
134
126
  case 'VPRM':
135
127
  case 'NROT':
136
128
  case 'WRPW': // image wrap w ( for cylindrical and spherical projections)
137
-
138
129
  case 'WRPH': // image wrap h
139
-
140
130
  case 'FUNC':
141
131
  case 'FALL':
142
132
  case 'OPAC':
143
133
  case 'GRAD': // gradient texture
144
-
145
134
  case 'ENVS':
146
135
  case 'VMOP':
147
- case 'VMBG': // Car Material FORMS
136
+ case 'VMBG':
148
137
 
138
+ // Car Material FORMS
149
139
  case 'OMAX':
150
140
  case 'STEX':
151
141
  case 'CKBG':
@@ -154,48 +144,40 @@
154
144
  case 'VMLB':
155
145
  this.debugger.skipped = true;
156
146
  this.skipForm( length ); // not currently supported
157
-
158
147
  break;
148
+
159
149
  // if break; is called directly, the position in the lwoTree is not created
160
150
  // any sub chunks and forms are added to the parent form instead
161
-
162
151
  case 'META':
163
152
  case 'NNDS':
164
153
  case 'NODS':
165
154
  case 'NDTA':
166
155
  case 'ADAT':
167
156
  case 'AOVS':
168
- case 'BLOK': // used by texture nodes
157
+ case 'BLOK':
169
158
 
159
+ // used by texture nodes
170
160
  case 'IBGC': // imageBackgroundColor
171
-
172
161
  case 'IOPC': // imageOpacity
173
-
174
162
  case 'IIMG': // hold reference to image path
175
-
176
163
  case 'TXTR':
177
164
  // this.setupForm( type, length );
178
165
  this.debugger.length = 4;
179
166
  this.debugger.skipped = true;
180
167
  break;
181
-
182
168
  case 'IFAL': // imageFallof
183
-
184
169
  case 'ISCL': // imageScale
185
-
186
170
  case 'IPOS': // imagePosition
187
-
188
171
  case 'IROT': // imageRotation
189
-
190
172
  case 'IBMP':
191
173
  case 'IUTD':
192
174
  case 'IVTD':
193
175
  this.parseTextureNodeAttribute( type );
194
176
  break;
195
-
196
177
  case 'ENVL':
197
178
  this.parseEnvelope( length );
198
179
  break;
180
+
199
181
  // CLIP FORM AND SUB FORMS
200
182
 
201
183
  case 'CLIP':
@@ -210,93 +192,81 @@
210
192
  }
211
193
 
212
194
  break;
213
-
214
195
  case 'STIL':
215
196
  this.parseImage();
216
197
  break;
217
-
218
198
  case 'XREF':
219
199
  // clone of another STIL
220
200
  this.reader.skip( 8 ); // unknown
221
-
222
201
  this.currentForm.referenceTexture = {
223
202
  index: this.reader.getUint32(),
224
203
  refName: this.reader.getString() // internal unique ref
225
-
226
204
  };
205
+
227
206
  break;
207
+
228
208
  // Not in spec, used by texture nodes
229
209
 
230
210
  case 'IMST':
231
211
  this.parseImageStateForm( length );
232
212
  break;
213
+
233
214
  // SURF FORM AND SUB FORMS
234
215
 
235
216
  case 'SURF':
236
217
  this.parseSurfaceForm( length );
237
218
  break;
238
-
239
219
  case 'VALU':
240
220
  // Not in spec
241
221
  this.parseValueForm( length );
242
222
  break;
243
-
244
223
  case 'NTAG':
245
224
  this.parseSubNode( length );
246
225
  break;
247
-
248
226
  case 'ATTR': // BSDF Node Attributes
249
-
250
227
  case 'SATR':
251
228
  // Standard Node Attributes
252
229
  this.setupForm( 'attributes', length );
253
230
  break;
254
-
255
231
  case 'NCON':
256
232
  this.parseConnections( length );
257
233
  break;
258
-
259
234
  case 'SSHA':
260
235
  this.parentForm = this.currentForm;
261
236
  this.currentForm = this.currentSurface;
262
237
  this.setupForm( 'surfaceShader', length );
263
238
  break;
264
-
265
239
  case 'SSHD':
266
240
  this.setupForm( 'surfaceShaderData', length );
267
241
  break;
268
-
269
242
  case 'ENTR':
270
243
  // Not in spec
271
244
  this.parseEntryForm( length );
272
245
  break;
246
+
273
247
  // Image Map Layer
274
248
 
275
249
  case 'IMAP':
276
250
  this.parseImageMap( length );
277
251
  break;
278
-
279
252
  case 'TAMP':
280
253
  this.parseXVAL( 'amplitude', length );
281
254
  break;
255
+
282
256
  //Texture Mapping Form
283
257
 
284
258
  case 'TMAP':
285
259
  this.setupForm( 'textureMap', length );
286
260
  break;
287
-
288
261
  case 'CNTR':
289
262
  this.parseXVAL3( 'center', length );
290
263
  break;
291
-
292
264
  case 'SIZE':
293
265
  this.parseXVAL3( 'scale', length );
294
266
  break;
295
-
296
267
  case 'ROTA':
297
268
  this.parseXVAL3( 'rotation', length );
298
269
  break;
299
-
300
270
  default:
301
271
  this.parseUnknownForm( type, length );
302
272
 
@@ -307,13 +277,11 @@
307
277
  this.debugger.log();
308
278
 
309
279
  },
310
-
311
280
  setupForm( type, length ) {
312
281
 
313
282
  if ( ! this.currentForm ) this.currentForm = this.currentNode;
314
283
  this.currentFormEnd = this.reader.offset + length;
315
284
  this.parentForm = this.currentForm;
316
-
317
285
  if ( ! this.currentForm[ type ] ) {
318
286
 
319
287
  this.currentForm[ type ] = {};
@@ -328,13 +296,11 @@
328
296
  }
329
297
 
330
298
  },
331
-
332
299
  skipForm( length ) {
333
300
 
334
301
  this.reader.skip( length - 4 );
335
302
 
336
303
  },
337
-
338
304
  parseUnknownForm( type, length ) {
339
305
 
340
306
  console.warn( 'LWOLoader: unknown FORM encountered: ' + type, length );
@@ -342,7 +308,6 @@
342
308
  this.reader.skip( length - 4 );
343
309
 
344
310
  },
345
-
346
311
  parseSurfaceForm( length ) {
347
312
 
348
313
  this.reader.skip( 8 ); // unknown Uint32 x2
@@ -364,7 +329,6 @@
364
329
  this.currentFormEnd = this.reader.offset + length;
365
330
 
366
331
  },
367
-
368
332
  parseSurfaceLwo2( length ) {
369
333
 
370
334
  var name = this.reader.getString();
@@ -383,14 +347,13 @@
383
347
  this.currentFormEnd = this.reader.offset + length;
384
348
 
385
349
  },
386
-
387
350
  parseSubNode( length ) {
388
351
 
389
352
  // parse the NRNM CHUNK of the subnode FORM to get
390
353
  // a meaningful name for the subNode
391
354
  // some subnodes can be renamed, but Input and Surface cannot
392
- this.reader.skip( 8 ); // NRNM + length
393
355
 
356
+ this.reader.skip( 8 ); // NRNM + length
394
357
  var name = this.reader.getString();
395
358
  var node = {
396
359
  name: name
@@ -400,7 +363,6 @@
400
363
  this.currentFormEnd = this.reader.offset + length;
401
364
 
402
365
  },
403
-
404
366
  // collect attributes from all nodes at the top level of a surface
405
367
  parseConnections( length ) {
406
368
 
@@ -409,18 +371,15 @@
409
371
  this.currentForm = this.currentSurface.connections;
410
372
 
411
373
  },
412
-
413
374
  // surface node attribute data, e.g. specular, roughness etc
414
375
  parseEntryForm( length ) {
415
376
 
416
377
  this.reader.skip( 8 ); // NAME + length
417
-
418
378
  var name = this.reader.getString();
419
379
  this.currentForm = this.currentNode.attributes;
420
380
  this.setupForm( name, length );
421
381
 
422
382
  },
423
-
424
383
  // parse values from material - doesn't match up to other LWO3 data types
425
384
  // sub form of entry form
426
385
  parseValueForm() {
@@ -428,7 +387,6 @@
428
387
  this.reader.skip( 8 ); // unknown + length
429
388
 
430
389
  var valueType = this.reader.getString();
431
-
432
390
  if ( valueType === 'double' ) {
433
391
 
434
392
  this.currentForm.value = this.reader.getUint64();
@@ -450,7 +408,6 @@
450
408
  }
451
409
 
452
410
  },
453
-
454
411
  // holds various data about texture node image state
455
412
  // Data other thanmipMapLevel unknown
456
413
  parseImageStateForm() {
@@ -460,7 +417,6 @@
460
417
  this.currentForm.mipMapLevel = this.reader.getFloat32();
461
418
 
462
419
  },
463
-
464
420
  // LWO2 style image data node OR LWO3 textures defined at top level in editor (not as SURF node)
465
421
  parseImageMap( length ) {
466
422
 
@@ -485,27 +441,21 @@
485
441
  case 'ISCL':
486
442
  this.currentNode.scale = this.reader.getFloat32Array( 3 );
487
443
  break;
488
-
489
444
  case 'IPOS':
490
445
  this.currentNode.position = this.reader.getFloat32Array( 3 );
491
446
  break;
492
-
493
447
  case 'IROT':
494
448
  this.currentNode.rotation = this.reader.getFloat32Array( 3 );
495
449
  break;
496
-
497
450
  case 'IFAL':
498
451
  this.currentNode.falloff = this.reader.getFloat32Array( 3 );
499
452
  break;
500
-
501
453
  case 'IBMP':
502
454
  this.currentNode.amplitude = this.reader.getFloat32();
503
455
  break;
504
-
505
456
  case 'IUTD':
506
457
  this.currentNode.uTiles = this.reader.getFloat32();
507
458
  break;
508
-
509
459
  case 'IVTD':
510
460
  this.currentNode.vTiles = this.reader.getFloat32();
511
461
  break;
@@ -526,21 +476,23 @@
526
476
  ///
527
477
  // CHUNK PARSING METHODS
528
478
  ///
479
+
529
480
  // clips can either be defined inside a surface node, or at the top
530
481
  // level and they have a different format in each case
531
482
  parseClip( length ) {
532
483
 
533
- var tag = this.reader.getIDTag(); // inside surface node
484
+ var tag = this.reader.getIDTag();
534
485
 
486
+ // inside surface node
535
487
  if ( tag === 'FORM' ) {
536
488
 
537
489
  this.reader.skip( 16 );
538
490
  this.currentNode.fileName = this.reader.getString();
539
491
  return;
540
492
 
541
- } // otherwise top level
542
-
493
+ }
543
494
 
495
+ // otherwise top level
544
496
  this.reader.setOffset( this.reader.offset - 4 );
545
497
  this.currentFormEnd = this.reader.offset + length;
546
498
  this.parentForm = this.currentForm;
@@ -553,19 +505,18 @@
553
505
  this.currentForm = texture;
554
506
 
555
507
  },
556
-
557
508
  parseClipLwo2( length ) {
558
509
 
559
510
  var texture = {
560
511
  index: this.reader.getUint32(),
561
512
  fileName: ''
562
- }; // seach STIL block
513
+ };
563
514
 
515
+ // seach STIL block
564
516
  while ( true ) {
565
517
 
566
518
  var tag = this.reader.getIDTag();
567
519
  var n_length = this.reader.getUint16();
568
-
569
520
  if ( tag === 'STIL' ) {
570
521
 
571
522
  texture.fileName = this.reader.getString();
@@ -585,15 +536,12 @@
585
536
  this.currentForm = texture;
586
537
 
587
538
  },
588
-
589
539
  parseImage() {
590
540
 
591
541
  this.reader.skip( 8 ); // unknown
592
-
593
542
  this.currentForm.fileName = this.reader.getString();
594
543
 
595
544
  },
596
-
597
545
  parseXVAL( type, length ) {
598
546
 
599
547
  var endOffset = this.reader.offset + length - 4;
@@ -615,7 +563,6 @@
615
563
  this.reader.setOffset( endOffset );
616
564
 
617
565
  },
618
-
619
566
  // Tags associated with an object
620
567
  // OTAG { type[ID4], tag-string[S0] }
621
568
  parseObjectTag() {
@@ -626,7 +573,6 @@
626
573
  };
627
574
 
628
575
  },
629
-
630
576
  // Signals the start of a new layer. All the data chunks which follow will be included in this layer until another layer chunk is encountered.
631
577
  // LAYR: number[U2], flags[U2], pivot[VEC12], name[S0], parent[U2]
632
578
  parseLayer( length ) {
@@ -642,8 +588,8 @@
642
588
  this.tree.layers.push( layer );
643
589
  this.currentLayer = layer;
644
590
  var parsedLength = 16 + stringOffset( this.currentLayer.name ); // index ( 2 ) + flags( 2 ) + pivot( 12 ) + stringlength
645
- // if we have not reached then end of the layer block, there must be a parent defined
646
591
 
592
+ // if we have not reached then end of the layer block, there must be a parent defined
647
593
  this.currentLayer.parent = parsedLength < length ? this.reader.getUint16() : - 1; // omitted or -1 for no parent
648
594
 
649
595
  },
@@ -654,7 +600,6 @@
654
600
  parsePoints( length ) {
655
601
 
656
602
  this.currentPoints = [];
657
-
658
603
  for ( var i = 0; i < length / 4; i += 3 ) {
659
604
 
660
605
  // z -> -z to match three.js right handed coords
@@ -663,10 +608,10 @@
663
608
  }
664
609
 
665
610
  },
666
-
667
611
  // parse VMAP or VMAD
668
612
  // Associates a set of floating-point vectors with a set of points.
669
613
  // VMAP: { type[ID4], dimension[U2], name[S0], ( vert[VX], value[F4] # dimension ) * }
614
+
670
615
  // VMAD Associates a set of floating-point vectors with the vertices of specific polygons.
671
616
  // Similar to VMAP UVs, but associates with polygon vertices rather than points
672
617
  // to solve to problem of UV seams: VMAD chunks are paired with VMAPs of the same name,
@@ -677,36 +622,30 @@
677
622
 
678
623
  var finalOffset = this.reader.offset + length;
679
624
  var channelName = this.reader.getString();
680
-
681
625
  if ( this.reader.offset === finalOffset ) {
682
626
 
683
627
  // then we are in a texture node and the VMAP chunk is just a reference to a UV channel name
684
628
  this.currentForm.UVChannel = channelName;
685
629
  return;
686
630
 
687
- } // otherwise reset to initial length and parse normal VMAP CHUNK
688
-
631
+ }
689
632
 
633
+ // otherwise reset to initial length and parse normal VMAP CHUNK
690
634
  this.reader.setOffset( this.reader.offset - stringOffset( channelName ) );
691
635
  var type = this.reader.getIDTag();
692
636
  this.reader.getUint16(); // dimension
693
-
694
637
  var name = this.reader.getString();
695
638
  var remainingLength = length - 6 - stringOffset( name );
696
-
697
639
  switch ( type ) {
698
640
 
699
641
  case 'TXUV':
700
642
  this.parseUVMapping( name, finalOffset, discontinuous );
701
643
  break;
702
-
703
644
  case 'MORF':
704
645
  case 'SPOT':
705
646
  this.parseMorphTargets( name, finalOffset, type ); // can't be discontinuous
706
-
707
647
  break;
708
648
  // unsupported VMAPs
709
-
710
649
  case 'APSL':
711
650
  case 'NORM':
712
651
  case 'WGHT':
@@ -716,7 +655,6 @@
716
655
  case 'RGBA':
717
656
  this.reader.skip( remainingLength );
718
657
  break;
719
-
720
658
  default:
721
659
  console.warn( 'LWOLoader: unknown vertex map type: ' + type );
722
660
  this.reader.skip( remainingLength );
@@ -724,13 +662,11 @@
724
662
  }
725
663
 
726
664
  },
727
-
728
665
  parseUVMapping( name, finalOffset, discontinuous ) {
729
666
 
730
667
  var uvIndices = [];
731
668
  var polyIndices = [];
732
669
  var uvs = [];
733
-
734
670
  while ( this.reader.offset < finalOffset ) {
735
671
 
736
672
  uvIndices.push( this.reader.getVariableLengthIndex() );
@@ -759,17 +695,15 @@
759
695
  }
760
696
 
761
697
  },
762
-
763
698
  parseMorphTargets( name, finalOffset, type ) {
764
699
 
765
700
  var indices = [];
766
701
  var points = [];
767
702
  type = type === 'MORF' ? 'relative' : 'absolute';
768
-
769
703
  while ( this.reader.offset < finalOffset ) {
770
704
 
771
- indices.push( this.reader.getVariableLengthIndex() ); // z -> -z to match three.js right handed coords
772
-
705
+ indices.push( this.reader.getVariableLengthIndex() );
706
+ // z -> -z to match three.js right handed coords
773
707
  points.push( this.reader.getFloat32(), this.reader.getFloat32(), - this.reader.getFloat32() );
774
708
 
775
709
  }
@@ -782,25 +716,23 @@
782
716
  };
783
717
 
784
718
  },
785
-
786
719
  // A list of polygons for the current layer.
787
720
  // POLS { type[ID4], ( numvert+flags[U2], vert[VX] # numvert ) * }
788
721
  parsePolygonList( length ) {
789
722
 
790
723
  var finalOffset = this.reader.offset + length;
791
724
  var type = this.reader.getIDTag();
792
- var indices = []; // hold a list of polygon sizes, to be split up later
725
+ var indices = [];
793
726
 
727
+ // hold a list of polygon sizes, to be split up later
794
728
  var polygonDimensions = [];
795
-
796
729
  while ( this.reader.offset < finalOffset ) {
797
730
 
798
- var numverts = this.reader.getUint16(); //var flags = numverts & 64512; // 6 high order bits are flags - ignoring for now
731
+ var numverts = this.reader.getUint16();
799
732
 
733
+ //var flags = numverts & 64512; // 6 high order bits are flags - ignoring for now
800
734
  numverts = numverts & 1023; // remaining ten low order bits are vertex num
801
-
802
735
  polygonDimensions.push( numverts );
803
-
804
736
  for ( var j = 0; j < numverts; j ++ ) indices.push( this.reader.getVariableLengthIndex() );
805
737
 
806
738
  }
@@ -810,13 +742,13 @@
810
742
  vertexIndices: indices,
811
743
  polygonDimensions: polygonDimensions,
812
744
  points: this.currentPoints
813
- }; // Note: assuming that all polys will be lines or points if the first is
745
+ };
814
746
 
747
+ // Note: assuming that all polys will be lines or points if the first is
815
748
  if ( polygonDimensions[ 0 ] === 1 ) geometryData.type = 'points'; else if ( polygonDimensions[ 0 ] === 2 ) geometryData.type = 'lines';
816
749
  this.currentLayer.geometry = geometryData;
817
750
 
818
751
  },
819
-
820
752
  // Lists the tag strings that can be associated with polygons by the PTAG chunk.
821
753
  // TAGS { tag-string[S0] * }
822
754
  parseTagStrings( length ) {
@@ -824,7 +756,6 @@
824
756
  this.tree.tags = this.reader.getStringArray( length );
825
757
 
826
758
  },
827
-
828
759
  // Associates tags of a given type with polygons in the most recent POLS chunk.
829
760
  // PTAG { type[ID4], ( poly[VX], tag[U2] ) * }
830
761
  parsePolygonTagMapping( length ) {
@@ -834,17 +765,16 @@
834
765
  if ( type === 'SURF' ) this.parseMaterialIndices( finalOffset ); else {
835
766
 
836
767
  //PART, SMGP, COLR not supported
768
+
837
769
  this.reader.skip( length - 4 );
838
770
 
839
771
  }
840
772
 
841
773
  },
842
-
843
774
  parseMaterialIndices( finalOffset ) {
844
775
 
845
776
  // array holds polygon index followed by material index
846
777
  this.currentLayer.geometry.materialIndices = [];
847
-
848
778
  while ( this.reader.offset < finalOffset ) {
849
779
 
850
780
  var polygonIndex = this.reader.getVariableLengthIndex();
@@ -854,19 +784,18 @@
854
784
  }
855
785
 
856
786
  },
857
-
858
787
  parseUnknownCHUNK( blockID, length ) {
859
788
 
860
- console.warn( 'LWOLoader: unknown chunk type: ' + blockID + ' length: ' + length ); // print the chunk plus some bytes padding either side
789
+ console.warn( 'LWOLoader: unknown chunk type: ' + blockID + ' length: ' + length );
790
+
791
+ // print the chunk plus some bytes padding either side
861
792
  // printBuffer( this.reader.dv.buffer, this.reader.offset - 20, length + 40 );
862
793
 
863
794
  var data = this.reader.getString( length );
864
795
  this.currentForm[ blockID ] = data;
865
796
 
866
797
  }
867
-
868
798
  };
869
-
870
799
  function DataViewReader( buffer ) {
871
800
 
872
801
  this.dv = new DataView( buffer );
@@ -881,7 +810,6 @@
881
810
  return this.dv.buffer.byteLength;
882
811
 
883
812
  },
884
-
885
813
  setOffset( offset ) {
886
814
 
887
815
  if ( offset > 0 && offset < this.dv.buffer.byteLength ) {
@@ -895,7 +823,6 @@
895
823
  }
896
824
 
897
825
  },
898
-
899
826
  endOfFile: function () {
900
827
 
901
828
  if ( this.offset >= this.size() ) return true;
@@ -953,7 +880,6 @@
953
880
  getFloat32Array: function ( size ) {
954
881
 
955
882
  var a = [];
956
-
957
883
  for ( var i = 0; i < size; i ++ ) {
958
884
 
959
885
  a.push( this.getFloat32() );
@@ -973,7 +899,6 @@
973
899
  getFloat64Array: function ( size ) {
974
900
 
975
901
  var a = [];
976
-
977
902
  for ( var i = 0; i < size; i ++ ) {
978
903
 
979
904
  a.push( this.getFloat64() );
@@ -983,7 +908,6 @@
983
908
  return a;
984
909
 
985
910
  },
986
-
987
911
  // get variable-length index data type
988
912
  // VX ::= index[U2] | (index + 0xFF000000)[U4]
989
913
  // If the index value is less than 65,280 (0xFF00),then VX === U2
@@ -993,7 +917,6 @@
993
917
  getVariableLengthIndex() {
994
918
 
995
919
  var firstByte = this.getUint8();
996
-
997
920
  if ( firstByte === 255 ) {
998
921
 
999
922
  return this.getUint8() * 65536 + this.getUint8() * 256 + this.getUint8();
@@ -1003,20 +926,18 @@
1003
926
  return firstByte * 256 + this.getUint8();
1004
927
 
1005
928
  },
1006
-
1007
929
  // An ID tag is a sequence of 4 bytes containing 7-bit ASCII values
1008
930
  getIDTag() {
1009
931
 
1010
932
  return this.getString( 4 );
1011
933
 
1012
934
  },
1013
-
1014
935
  getString: function ( size ) {
1015
936
 
1016
- if ( size === 0 ) return; // note: safari 9 doesn't support Uint8Array.indexOf; create intermediate array instead
937
+ if ( size === 0 ) return;
1017
938
 
939
+ // note: safari 9 doesn't support Uint8Array.indexOf; create intermediate array instead
1018
940
  var a = [];
1019
-
1020
941
  if ( size ) {
1021
942
 
1022
943
  for ( var i = 0; i < size; i ++ ) {
@@ -1029,7 +950,6 @@
1029
950
 
1030
951
  var currentChar;
1031
952
  var len = 0;
1032
-
1033
953
  while ( currentChar !== 0 ) {
1034
954
 
1035
955
  currentChar = this.getUint8();
@@ -1052,7 +972,9 @@
1052
972
  return a.filter( Boolean ); // return array with any empty strings removed
1053
973
 
1054
974
  }
1055
- }; // ************** DEBUGGER **************
975
+ };
976
+
977
+ // ************** DEBUGGER **************
1056
978
 
1057
979
  function Debugger() {
1058
980
 
@@ -1073,17 +995,14 @@
1073
995
 
1074
996
  if ( ! this.active ) return;
1075
997
  var nodeType;
1076
-
1077
998
  switch ( this.node ) {
1078
999
 
1079
1000
  case 0:
1080
1001
  nodeType = 'FORM';
1081
1002
  break;
1082
-
1083
1003
  case 1:
1084
1004
  nodeType = 'CHK';
1085
1005
  break;
1086
-
1087
1006
  case 2:
1088
1007
  nodeType = 'S-CHK';
1089
1008
  break;
@@ -1091,7 +1010,6 @@
1091
1010
  }
1092
1011
 
1093
1012
  console.log( '| '.repeat( this.depth ) + nodeType, this.nodeID, `( ${this.offset} ) -> ( ${this.dataOffset + this.length} )`, this.node == 0 ? ' {' : '', this.skipped ? 'SKIPPED' : '', this.node == 0 && this.skipped ? '}' : '' );
1094
-
1095
1013
  if ( this.node == 0 && ! this.skipped ) {
1096
1014
 
1097
1015
  this.depth += 1;
@@ -1105,7 +1023,6 @@
1105
1023
  closeForms: function () {
1106
1024
 
1107
1025
  if ( ! this.active ) return;
1108
-
1109
1026
  for ( var i = this.formList.length - 1; i >= 0; i -- ) {
1110
1027
 
1111
1028
  if ( this.offset >= this.formList[ i ] ) {
@@ -1119,24 +1036,26 @@
1119
1036
  }
1120
1037
 
1121
1038
  }
1122
- }; // ************** UTILITY FUNCTIONS **************
1039
+ };
1040
+
1041
+ // ************** UTILITY FUNCTIONS **************
1123
1042
 
1124
1043
  function isEven( num ) {
1125
1044
 
1126
1045
  return num % 2;
1127
1046
 
1128
- } // calculate the length of the string in the buffer
1129
- // this will be string.length + nullbyte + optional padbyte to make the length even
1130
-
1047
+ }
1131
1048
 
1049
+ // calculate the length of the string in the buffer
1050
+ // this will be string.length + nullbyte + optional padbyte to make the length even
1132
1051
  function stringOffset( string ) {
1133
1052
 
1134
1053
  return string.length + 1 + ( isEven( string.length + 1 ) ? 1 : 0 );
1135
1054
 
1136
- } // for testing purposes, dump buffer to console
1137
- // printBuffer( this.reader.dv.buffer, this.reader.offset, length );
1138
-
1055
+ }
1139
1056
 
1057
+ // for testing purposes, dump buffer to console
1058
+ // printBuffer( this.reader.dv.buffer, this.reader.offset, length );
1140
1059
  function printBuffer( buffer, from, to ) {
1141
1060
 
1142
1061
  console.log( THREE.LoaderUtils.decodeText( new Uint8Array( buffer, from, to ) ) );