three-stdlib 2.15.0 → 2.15.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1222) hide show
  1. package/animation/AnimationClipCreator.js +32 -52
  2. package/animation/AnimationClipCreator.mjs +57 -0
  3. package/animation/CCDIKSolver.js +66 -161
  4. package/animation/CCDIKSolver.mjs +234 -0
  5. package/animation/MMDAnimationHelper.js +150 -341
  6. package/animation/MMDAnimationHelper.mjs +514 -0
  7. package/animation/MMDPhysics.js +154 -361
  8. package/animation/MMDPhysics.mjs +769 -0
  9. package/cameras/CinematicCamera.js +67 -77
  10. package/cameras/CinematicCamera.mjs +129 -0
  11. package/controls/ArcballControls.js +544 -1449
  12. package/controls/ArcballControls.mjs +1737 -0
  13. package/controls/DeviceOrientationControls.js +52 -97
  14. package/controls/DeviceOrientationControls.mjs +74 -0
  15. package/controls/DragControls.js +85 -187
  16. package/controls/DragControls.mjs +172 -0
  17. package/controls/FirstPersonControls.js +123 -193
  18. package/controls/FirstPersonControls.mjs +220 -0
  19. package/controls/FlyControls.js +82 -152
  20. package/controls/FlyControls.mjs +239 -0
  21. package/controls/OrbitControls.js +232 -481
  22. package/controls/OrbitControls.mjs +731 -0
  23. package/controls/PointerLockControls.js +63 -99
  24. package/controls/PointerLockControls.mjs +88 -0
  25. package/controls/TrackballControls.js +211 -383
  26. package/controls/TrackballControls.mjs +481 -0
  27. package/controls/TransformControls.js +575 -782
  28. package/controls/TransformControls.mjs +1068 -0
  29. package/controls/experimental/CameraControls.js +329 -609
  30. package/controls/experimental/CameraControls.mjs +673 -0
  31. package/csm/CSM.js +47 -108
  32. package/csm/CSM.mjs +244 -0
  33. package/csm/CSMFrustum.js +14 -29
  34. package/csm/CSMFrustum.mjs +75 -0
  35. package/csm/CSMHelper.js +20 -34
  36. package/csm/CSMHelper.mjs +114 -0
  37. package/csm/CSMShader.js +7 -11
  38. package/csm/CSMShader.mjs +251 -0
  39. package/curves/CurveExtras.js +73 -115
  40. package/curves/CurveExtras.mjs +224 -0
  41. package/curves/NURBSCurve.js +15 -43
  42. package/curves/NURBSCurve.mjs +35 -0
  43. package/curves/NURBSSurface.js +11 -27
  44. package/curves/NURBSSurface.mjs +28 -0
  45. package/curves/NURBSUtils.js +54 -203
  46. package/curves/NURBSUtils.mjs +226 -0
  47. package/deprecated/Geometry.js +191 -486
  48. package/deprecated/Geometry.mjs +966 -0
  49. package/effects/AnaglyphEffect.js +95 -60
  50. package/effects/AnaglyphEffect.mjs +120 -0
  51. package/effects/AsciiEffect.js +80 -110
  52. package/effects/AsciiEffect.mjs +173 -0
  53. package/effects/OutlineEffect.js +121 -204
  54. package/effects/OutlineEffect.mjs +295 -0
  55. package/effects/ParallaxBarrierEffect.js +39 -38
  56. package/effects/ParallaxBarrierEffect.mjs +64 -0
  57. package/effects/PeppersGhostEffect.js +19 -68
  58. package/effects/PeppersGhostEffect.mjs +85 -0
  59. package/effects/StereoEffect.js +12 -16
  60. package/effects/StereoEffect.mjs +32 -0
  61. package/environments/RoomEnvironment.js +52 -47
  62. package/environments/RoomEnvironment.mjs +78 -0
  63. package/exporters/ColladaExporter.js +115 -241
  64. package/exporters/ColladaExporter.mjs +299 -0
  65. package/exporters/DRACOExporter.js +67 -121
  66. package/exporters/DRACOExporter.mjs +132 -0
  67. package/exporters/GLTFExporter.js +463 -1014
  68. package/exporters/GLTFExporter.mjs +1381 -0
  69. package/exporters/MMDExporter.js +44 -102
  70. package/exporters/MMDExporter.mjs +102 -0
  71. package/exporters/OBJExporter.js +78 -140
  72. package/exporters/OBJExporter.mjs +166 -0
  73. package/exporters/PLYExporter.js +93 -154
  74. package/exporters/PLYExporter.mjs +278 -0
  75. package/exporters/STLExporter.js +30 -81
  76. package/exporters/STLExporter.mjs +129 -0
  77. package/exporters/USDZExporter.js +84 -144
  78. package/exporters/USDZExporter.mjs +328 -0
  79. package/geometries/BoxLineGeometry.js +7 -14
  80. package/geometries/BoxLineGeometry.mjs +45 -0
  81. package/geometries/ConvexGeometry.js +15 -24
  82. package/geometries/ConvexGeometry.mjs +29 -0
  83. package/geometries/DecalGeometry.js +108 -162
  84. package/geometries/DecalGeometry.mjs +184 -0
  85. package/geometries/LightningStrike.js +101 -294
  86. package/geometries/LightningStrike.mjs +547 -0
  87. package/geometries/ParametricGeometries.js +26 -76
  88. package/geometries/ParametricGeometries.mjs +129 -0
  89. package/geometries/ParametricGeometry.js +24 -48
  90. package/geometries/ParametricGeometry.mjs +63 -0
  91. package/geometries/RoundedBoxGeometry.js +33 -64
  92. package/geometries/RoundedBoxGeometry.mjs +91 -0
  93. package/geometries/TeapotGeometry.js +1434 -174
  94. package/geometries/TeapotGeometry.mjs +1557 -0
  95. package/geometries/TextGeometry.js +9 -17
  96. package/geometries/TextGeometry.mjs +23 -0
  97. package/helpers/LightProbeHelper.js +53 -21
  98. package/helpers/LightProbeHelper.mjs +72 -0
  99. package/helpers/PositionalAudioHelper.js +23 -30
  100. package/helpers/PositionalAudioHelper.mjs +68 -0
  101. package/helpers/RectAreaLightHelper.js +17 -33
  102. package/helpers/RectAreaLightHelper.mjs +44 -0
  103. package/helpers/VertexNormalsHelper.js +20 -41
  104. package/helpers/VertexNormalsHelper.mjs +54 -0
  105. package/helpers/VertexTangentsHelper.js +18 -36
  106. package/helpers/VertexTangentsHelper.mjs +45 -0
  107. package/index.d.ts +54 -0
  108. package/index.js +968 -333
  109. package/index.mjs +968 -0
  110. package/interactive/SelectionBox.js +31 -46
  111. package/interactive/SelectionBox.mjs +137 -0
  112. package/interactive/SelectionHelper.js +16 -21
  113. package/interactive/SelectionHelper.mjs +54 -0
  114. package/libs/MeshoptDecoder.js +147 -58
  115. package/libs/MeshoptDecoder.mjs +210 -0
  116. package/libs/MotionControllers.js +66 -208
  117. package/libs/MotionControllers.mjs +261 -0
  118. package/lights/LightProbeGenerator.js +40 -96
  119. package/lights/LightProbeGenerator.mjs +145 -0
  120. package/lights/RectAreaLightUniformsLib.js +32842 -9
  121. package/lights/RectAreaLightUniformsLib.mjs +32842 -0
  122. package/lines/Line2.js +9 -12
  123. package/lines/Line2.mjs +13 -0
  124. package/lines/LineGeometry.js +7 -19
  125. package/lines/LineGeometry.mjs +44 -0
  126. package/lines/LineMaterial.js +51 -89
  127. package/lines/LineMaterial.mjs +539 -0
  128. package/lines/LineSegments2.js +56 -165
  129. package/lines/LineSegments2.mjs +202 -0
  130. package/lines/LineSegmentsGeometry.js +29 -71
  131. package/lines/LineSegmentsGeometry.mjs +124 -0
  132. package/lines/Wireframe.js +15 -29
  133. package/lines/Wireframe.mjs +31 -0
  134. package/lines/WireframeGeometry2.js +8 -9
  135. package/lines/WireframeGeometry2.mjs +13 -0
  136. package/loaders/3DMLoader.js +234 -469
  137. package/loaders/3DMLoader.mjs +802 -0
  138. package/loaders/3MFLoader.js +340 -555
  139. package/loaders/3MFLoader.mjs +837 -0
  140. package/loaders/AMFLoader.js +114 -219
  141. package/loaders/AMFLoader.mjs +284 -0
  142. package/loaders/AssimpLoader.js +328 -725
  143. package/loaders/AssimpLoader.mjs +1396 -0
  144. package/loaders/BVHLoader.js +94 -200
  145. package/loaders/BVHLoader.mjs +207 -0
  146. package/loaders/BasisTextureLoader.js +229 -357
  147. package/loaders/BasisTextureLoader.mjs +474 -0
  148. package/loaders/ColladaLoader.js +932 -1522
  149. package/loaders/ColladaLoader.mjs +2403 -0
  150. package/loaders/DDSLoader.js +42 -108
  151. package/loaders/DDSLoader.mjs +148 -0
  152. package/loaders/DRACOLoader.js +103 -210
  153. package/loaders/DRACOLoader.mjs +340 -0
  154. package/loaders/EXRLoader.js +461 -809
  155. package/loaders/EXRLoader.mjs +1351 -0
  156. package/loaders/FBXLoader.js +842 -1397
  157. package/loaders/FBXLoader.mjs +2362 -0
  158. package/loaders/FontLoader.js +33 -66
  159. package/loaders/FontLoader.mjs +111 -0
  160. package/loaders/GCodeLoader.js +63 -111
  161. package/loaders/GCodeLoader.mjs +141 -0
  162. package/loaders/GLTFLoader.js +771 -1484
  163. package/loaders/GLTFLoader.mjs +2316 -0
  164. package/loaders/HDRCubeTextureLoader.js +45 -50
  165. package/loaders/HDRCubeTextureLoader.mjs +77 -0
  166. package/loaders/KMZLoader.js +42 -55
  167. package/loaders/KMZLoader.mjs +75 -0
  168. package/loaders/KTX2Loader.js +229 -362
  169. package/loaders/KTX2Loader.mjs +427 -0
  170. package/loaders/KTXLoader.js +37 -99
  171. package/loaders/KTXLoader.mjs +87 -0
  172. package/loaders/LDrawLoader.js +313 -746
  173. package/loaders/LDrawLoader.mjs +1409 -0
  174. package/loaders/LUT3dlLoader.js +50 -62
  175. package/loaders/LUT3dlLoader.mjs +100 -0
  176. package/loaders/LUTCubeLoader.js +45 -56
  177. package/loaders/LUTCubeLoader.mjs +104 -0
  178. package/loaders/LWOLoader.js +227 -339
  179. package/loaders/LWOLoader.mjs +625 -0
  180. package/loaders/LottieLoader.js +36 -38
  181. package/loaders/LottieLoader.mjs +47 -0
  182. package/loaders/MD2Loader.js +248 -91
  183. package/loaders/MD2Loader.mjs +359 -0
  184. package/loaders/MDDLoader.js +25 -45
  185. package/loaders/MDDLoader.mjs +58 -0
  186. package/loaders/MMDLoader.js +359 -795
  187. package/loaders/MMDLoader.mjs +998 -0
  188. package/loaders/MTLLoader.js +91 -201
  189. package/loaders/MTLLoader.mjs +280 -0
  190. package/loaders/NRRDLoader.js +182 -263
  191. package/loaders/NRRDLoader.mjs +401 -0
  192. package/loaders/NodeMaterialLoader.js +121 -14
  193. package/loaders/NodeMaterialLoader.mjs +146 -0
  194. package/loaders/OBJLoader.js +161 -283
  195. package/loaders/OBJLoader.mjs +487 -0
  196. package/loaders/PCDLoader.js +145 -164
  197. package/loaders/PCDLoader.mjs +248 -0
  198. package/loaders/PDBLoader.js +45 -63
  199. package/loaders/PDBLoader.mjs +246 -0
  200. package/loaders/PLYLoader.js +106 -203
  201. package/loaders/PLYLoader.mjs +317 -0
  202. package/loaders/PRWMLoader.js +73 -110
  203. package/loaders/PRWMLoader.mjs +160 -0
  204. package/loaders/PVRLoader.js +32 -93
  205. package/loaders/PVRLoader.mjs +131 -0
  206. package/loaders/RGBELoader.js +96 -233
  207. package/loaders/RGBELoader.mjs +244 -0
  208. package/loaders/RGBMLoader.js +344 -514
  209. package/loaders/RGBMLoader.mjs +998 -0
  210. package/loaders/STLLoader.js +59 -165
  211. package/loaders/STLLoader.mjs +190 -0
  212. package/loaders/SVGLoader.js +481 -851
  213. package/loaders/SVGLoader.mjs +1709 -0
  214. package/loaders/TDSLoader.js +137 -527
  215. package/loaders/TDSLoader.mjs +480 -0
  216. package/loaders/TGALoader.js +94 -205
  217. package/loaders/TGALoader.mjs +285 -0
  218. package/loaders/TTFLoader.js +58 -79
  219. package/loaders/TTFLoader.mjs +131 -0
  220. package/loaders/TiltLoader.js +129 -167
  221. package/loaders/TiltLoader.mjs +373 -0
  222. package/loaders/VOXLoader.js +320 -84
  223. package/loaders/VOXLoader.mjs +431 -0
  224. package/loaders/VRMLLoader.js +786 -1268
  225. package/loaders/VRMLLoader.mjs +2093 -0
  226. package/loaders/VRMLoader.js +23 -31
  227. package/loaders/VRMLoader.mjs +38 -0
  228. package/loaders/VTKLoader.js +219 -407
  229. package/loaders/VTKLoader.mjs +646 -0
  230. package/loaders/XLoader.js +1083 -1259
  231. package/loaders/XLoader.mjs +1258 -0
  232. package/loaders/XYZLoader.js +28 -34
  233. package/loaders/XYZLoader.mjs +60 -0
  234. package/loaders/lwo/IFFParser.js +238 -492
  235. package/loaders/lwo/IFFParser.mjs +697 -0
  236. package/loaders/lwo/LWO2Parser.js +176 -279
  237. package/loaders/lwo/LWO2Parser.mjs +327 -0
  238. package/loaders/lwo/LWO3Parser.js +160 -247
  239. package/loaders/lwo/LWO3Parser.mjs +298 -0
  240. package/math/Capsule.js +56 -43
  241. package/math/Capsule.mjs +100 -0
  242. package/math/ColorConverter.js +18 -32
  243. package/math/ColorConverter.mjs +51 -0
  244. package/math/ConvexHull.js +515 -739
  245. package/math/ConvexHull.mjs +574 -0
  246. package/math/ImprovedNoise.js +282 -32
  247. package/math/ImprovedNoise.mjs +302 -0
  248. package/math/Lut.js +51 -35
  249. package/math/Lut.mjs +135 -0
  250. package/math/MeshSurfaceSampler.js +25 -68
  251. package/math/MeshSurfaceSampler.mjs +107 -0
  252. package/math/OBB.js +91 -152
  253. package/math/OBB.mjs +235 -0
  254. package/math/Octree.js +76 -139
  255. package/math/Octree.mjs +278 -0
  256. package/math/SimplexNoise.js +217 -238
  257. package/math/SimplexNoise.mjs +425 -0
  258. package/misc/ConvexObjectBreaker.js +79 -185
  259. package/misc/ConvexObjectBreaker.mjs +292 -0
  260. package/misc/GPUComputationRenderer.js +69 -194
  261. package/misc/GPUComputationRenderer.mjs +171 -0
  262. package/misc/Gyroscope.js +16 -22
  263. package/misc/Gyroscope.mjs +35 -0
  264. package/misc/MD2Character.js +52 -74
  265. package/misc/MD2Character.mjs +162 -0
  266. package/misc/MD2CharacterComplex.js +112 -163
  267. package/misc/MD2CharacterComplex.mjs +328 -0
  268. package/misc/MorphAnimMesh.js +20 -28
  269. package/misc/MorphAnimMesh.mjs +40 -0
  270. package/misc/MorphBlendMesh.js +45 -69
  271. package/misc/MorphBlendMesh.mjs +179 -0
  272. package/misc/ProgressiveLightmap.js +70 -187
  273. package/misc/ProgressiveLightmap.mjs +166 -0
  274. package/misc/RollerCoaster.js +106 -135
  275. package/misc/RollerCoaster.mjs +346 -0
  276. package/misc/TubePainter.js +74 -92
  277. package/misc/TubePainter.mjs +123 -0
  278. package/misc/Volume.js +108 -270
  279. package/misc/Volume.mjs +244 -0
  280. package/misc/VolumeSlice.js +34 -122
  281. package/misc/VolumeSlice.mjs +106 -0
  282. package/misc/WebGL.js +37 -34
  283. package/misc/WebGL.mjs +74 -0
  284. package/modifiers/CurveModifier.js +46 -151
  285. package/modifiers/CurveModifier.mjs +182 -0
  286. package/modifiers/EdgeSplitModifier.js +46 -90
  287. package/modifiers/EdgeSplitModifier.mjs +162 -0
  288. package/modifiers/SimplifyModifier.js +77 -202
  289. package/modifiers/SimplifyModifier.mjs +282 -0
  290. package/modifiers/TessellateModifier.js +65 -90
  291. package/modifiers/TessellateModifier.mjs +206 -0
  292. package/nodes/Nodes.js +274 -140
  293. package/nodes/Nodes.mjs +400 -0
  294. package/nodes/ShaderNode.js +296 -196
  295. package/nodes/ShaderNode.mjs +408 -0
  296. package/nodes/accessors/BufferNode.js +4 -8
  297. package/nodes/accessors/BufferNode.mjs +15 -0
  298. package/nodes/accessors/CameraNode.js +20 -25
  299. package/nodes/accessors/CameraNode.mjs +44 -0
  300. package/nodes/accessors/CubeTextureNode.js +14 -26
  301. package/nodes/accessors/CubeTextureNode.mjs +42 -0
  302. package/nodes/accessors/MaterialNode.js +43 -53
  303. package/nodes/accessors/MaterialNode.mjs +71 -0
  304. package/nodes/accessors/MaterialReferenceNode.js +3 -6
  305. package/nodes/accessors/MaterialReferenceNode.mjs +14 -0
  306. package/nodes/accessors/ModelNode.js +3 -5
  307. package/nodes/accessors/ModelNode.mjs +9 -0
  308. package/nodes/accessors/ModelViewProjectionNode.js +14 -13
  309. package/nodes/accessors/ModelViewProjectionNode.mjs +24 -0
  310. package/nodes/accessors/NormalNode.js +40 -39
  311. package/nodes/accessors/NormalNode.mjs +62 -0
  312. package/nodes/accessors/Object3DNode.js +40 -50
  313. package/nodes/accessors/Object3DNode.mjs +76 -0
  314. package/nodes/accessors/PointUVNode.js +5 -9
  315. package/nodes/accessors/PointUVNode.mjs +13 -0
  316. package/nodes/accessors/PositionNode.js +42 -41
  317. package/nodes/accessors/PositionNode.mjs +65 -0
  318. package/nodes/accessors/ReferenceNode.js +10 -17
  319. package/nodes/accessors/ReferenceNode.mjs +37 -0
  320. package/nodes/accessors/ReflectNode.js +23 -26
  321. package/nodes/accessors/ReflectNode.mjs +43 -0
  322. package/nodes/accessors/SkinningNode.js +46 -48
  323. package/nodes/accessors/SkinningNode.mjs +58 -0
  324. package/nodes/accessors/TextureNode.js +14 -29
  325. package/nodes/accessors/TextureNode.mjs +54 -0
  326. package/nodes/accessors/UVNode.js +5 -11
  327. package/nodes/accessors/UVNode.mjs +23 -0
  328. package/nodes/core/ArrayUniformNode.js +3 -7
  329. package/nodes/core/ArrayUniformNode.mjs +14 -0
  330. package/nodes/core/AttributeNode.js +5 -12
  331. package/nodes/core/AttributeNode.mjs +30 -0
  332. package/nodes/core/BypassNode.js +5 -12
  333. package/nodes/core/BypassNode.mjs +22 -0
  334. package/nodes/core/CodeNode.js +4 -12
  335. package/nodes/core/CodeNode.mjs +28 -0
  336. package/nodes/core/ConstNode.js +3 -7
  337. package/nodes/core/ConstNode.mjs +14 -0
  338. package/nodes/core/ContextNode.js +3 -8
  339. package/nodes/core/ContextNode.mjs +22 -0
  340. package/nodes/core/ExpressionNode.js +5 -9
  341. package/nodes/core/ExpressionNode.mjs +19 -0
  342. package/nodes/core/FunctionCallNode.js +6 -15
  343. package/nodes/core/FunctionCallNode.mjs +37 -0
  344. package/nodes/core/FunctionNode.js +10 -25
  345. package/nodes/core/FunctionNode.mjs +56 -0
  346. package/nodes/core/InputNode.js +12 -23
  347. package/nodes/core/InputNode.mjs +38 -0
  348. package/nodes/core/Node.js +35 -75
  349. package/nodes/core/Node.mjs +139 -0
  350. package/nodes/core/NodeAttribute.js +2 -4
  351. package/nodes/core/NodeAttribute.mjs +10 -0
  352. package/nodes/core/NodeBuilder.js +110 -224
  353. package/nodes/core/NodeBuilder.mjs +395 -0
  354. package/nodes/core/NodeCode.js +4 -7
  355. package/nodes/core/NodeCode.mjs +11 -0
  356. package/nodes/core/NodeFrame.js +9 -12
  357. package/nodes/core/NodeFrame.mjs +35 -0
  358. package/nodes/core/NodeFunctionInput.js +3 -5
  359. package/nodes/core/NodeFunctionInput.mjs +13 -0
  360. package/nodes/core/NodeKeywords.js +5 -16
  361. package/nodes/core/NodeKeywords.mjs +44 -0
  362. package/nodes/core/NodeUniform.js +3 -7
  363. package/nodes/core/NodeUniform.mjs +18 -0
  364. package/nodes/core/NodeUtils.js +39 -43
  365. package/nodes/core/NodeUtils.mjs +57 -0
  366. package/nodes/core/NodeVar.js +2 -4
  367. package/nodes/core/NodeVar.mjs +10 -0
  368. package/nodes/core/NodeVary.js +2 -4
  369. package/nodes/core/NodeVary.mjs +10 -0
  370. package/nodes/core/PropertyNode.js +4 -10
  371. package/nodes/core/PropertyNode.mjs +21 -0
  372. package/nodes/core/TempNode.js +5 -11
  373. package/nodes/core/TempNode.mjs +25 -0
  374. package/nodes/core/UniformNode.js +4 -10
  375. package/nodes/core/UniformNode.mjs +23 -0
  376. package/nodes/core/VarNode.js +3 -11
  377. package/nodes/core/VarNode.mjs +31 -0
  378. package/nodes/core/VaryNode.js +6 -15
  379. package/nodes/core/VaryNode.mjs +30 -0
  380. package/nodes/core/constants.js +20 -7
  381. package/nodes/core/constants.mjs +24 -0
  382. package/nodes/display/ColorSpaceNode.js +34 -38
  383. package/nodes/display/ColorSpaceNode.mjs +63 -0
  384. package/nodes/display/NormalMapNode.js +35 -53
  385. package/nodes/display/NormalMapNode.mjs +54 -0
  386. package/nodes/fog/FogNode.js +5 -9
  387. package/nodes/fog/FogNode.mjs +15 -0
  388. package/nodes/fog/FogRangeNode.js +5 -9
  389. package/nodes/fog/FogRangeNode.mjs +17 -0
  390. package/nodes/functions/BSDFs.js +61 -118
  391. package/nodes/functions/BSDFs.mjs +64 -0
  392. package/nodes/lights/LightContextNode.js +14 -23
  393. package/nodes/lights/LightContextNode.mjs +35 -0
  394. package/nodes/lights/LightNode.js +27 -31
  395. package/nodes/lights/LightNode.mjs +58 -0
  396. package/nodes/lights/LightsNode.js +9 -28
  397. package/nodes/lights/LightsNode.mjs +59 -0
  398. package/nodes/loaders/NodeLoader.js +27 -42
  399. package/nodes/loaders/NodeLoader.mjs +66 -0
  400. package/nodes/loaders/NodeMaterialLoader.js +4 -10
  401. package/nodes/loaders/NodeMaterialLoader.mjs +24 -0
  402. package/nodes/loaders/NodeObjectLoader.js +9 -19
  403. package/nodes/loaders/NodeObjectLoader.mjs +40 -0
  404. package/nodes/materials/LineBasicNodeMaterial.js +5 -10
  405. package/nodes/materials/LineBasicNodeMaterial.mjs +27 -0
  406. package/nodes/materials/Materials.js +14 -17
  407. package/nodes/materials/Materials.mjs +28 -0
  408. package/nodes/materials/MeshBasicNodeMaterial.js +5 -10
  409. package/nodes/materials/MeshBasicNodeMaterial.mjs +28 -0
  410. package/nodes/materials/MeshStandardNodeMaterial.js +5 -8
  411. package/nodes/materials/MeshStandardNodeMaterial.mjs +41 -0
  412. package/nodes/materials/NodeMaterial.js +20 -36
  413. package/nodes/materials/NodeMaterial.mjs +64 -0
  414. package/nodes/materials/PointsNodeMaterial.js +5 -10
  415. package/nodes/materials/PointsNodeMaterial.mjs +30 -0
  416. package/nodes/math/CondNode.js +11 -23
  417. package/nodes/math/CondNode.mjs +38 -0
  418. package/nodes/math/MathNode.js +98 -142
  419. package/nodes/math/MathNode.mjs +163 -0
  420. package/nodes/math/OperatorNode.js +24 -46
  421. package/nodes/math/OperatorNode.mjs +103 -0
  422. package/nodes/procedural/CheckerNode.js +13 -19
  423. package/nodes/procedural/CheckerNode.mjs +21 -0
  424. package/nodes/utils/ArrayElementNode.js +4 -8
  425. package/nodes/utils/ArrayElementNode.mjs +19 -0
  426. package/nodes/utils/ConvertNode.js +3 -8
  427. package/nodes/utils/ConvertNode.mjs +25 -0
  428. package/nodes/utils/JoinNode.js +7 -11
  429. package/nodes/utils/JoinNode.mjs +26 -0
  430. package/nodes/utils/MatcapUVNode.js +8 -11
  431. package/nodes/utils/MatcapUVNode.mjs +16 -0
  432. package/nodes/utils/OscNode.js +27 -33
  433. package/nodes/utils/OscNode.mjs +50 -0
  434. package/nodes/utils/SplitNode.js +6 -20
  435. package/nodes/utils/SplitNode.mjs +45 -0
  436. package/nodes/utils/SpriteSheetUVNode.js +23 -23
  437. package/nodes/utils/SpriteSheetUVNode.mjs +40 -0
  438. package/nodes/utils/TimerNode.js +20 -24
  439. package/nodes/utils/TimerNode.mjs +44 -0
  440. package/objects/GroundProjectedEnv.js +22 -37
  441. package/objects/GroundProjectedEnv.mjs +130 -0
  442. package/objects/Lensflare.js +86 -156
  443. package/objects/Lensflare.mjs +262 -0
  444. package/objects/LightningStorm.js +38 -102
  445. package/objects/LightningStorm.mjs +110 -0
  446. package/objects/MarchingCubes.js +150 -303
  447. package/objects/MarchingCubes.mjs +457 -0
  448. package/objects/Reflector.js +50 -72
  449. package/objects/Reflector.mjs +166 -0
  450. package/objects/ReflectorForSSRPass.js +80 -131
  451. package/objects/ReflectorForSSRPass.mjs +247 -0
  452. package/objects/ReflectorRTT.js +6 -7
  453. package/objects/ReflectorRTT.mjs +10 -0
  454. package/objects/Refractor.js +64 -106
  455. package/objects/Refractor.mjs +178 -0
  456. package/objects/ShadowMesh.js +8 -17
  457. package/objects/ShadowMesh.mjs +41 -0
  458. package/objects/Sky.js +119 -80
  459. package/objects/Sky.mjs +124 -0
  460. package/objects/Water.js +83 -127
  461. package/objects/Water.mjs +235 -0
  462. package/objects/Water2.js +72 -108
  463. package/objects/Water2.mjs +252 -0
  464. package/offscreen/jank.js +10 -14
  465. package/offscreen/jank.mjs +27 -0
  466. package/offscreen/offscreen.js +4 -5
  467. package/offscreen/offscreen.mjs +5 -0
  468. package/offscreen/scene.js +45 -48
  469. package/offscreen/scene.mjs +52 -0
  470. package/package.json +3 -3
  471. package/physics/AmmoPhysics.js +30 -71
  472. package/physics/AmmoPhysics.mjs +165 -0
  473. package/postprocessing/AdaptiveToneMappingPass.js +97 -123
  474. package/postprocessing/AdaptiveToneMappingPass.mjs +221 -0
  475. package/postprocessing/AfterimagePass.js +28 -49
  476. package/postprocessing/AfterimagePass.mjs +55 -0
  477. package/postprocessing/BloomPass.js +43 -69
  478. package/postprocessing/BloomPass.mjs +90 -0
  479. package/postprocessing/BokehPass.js +39 -69
  480. package/postprocessing/BokehPass.mjs +76 -0
  481. package/postprocessing/ClearPass.js +10 -25
  482. package/postprocessing/ClearPass.mjs +27 -0
  483. package/postprocessing/CubeTexturePass.js +28 -27
  484. package/postprocessing/CubeTexturePass.mjs +49 -0
  485. package/postprocessing/DotScreenPass.js +24 -32
  486. package/postprocessing/DotScreenPass.mjs +40 -0
  487. package/postprocessing/EffectComposer.js +39 -86
  488. package/postprocessing/EffectComposer.mjs +139 -0
  489. package/postprocessing/FilmPass.js +25 -30
  490. package/postprocessing/FilmPass.mjs +42 -0
  491. package/postprocessing/GlitchPass.js +38 -61
  492. package/postprocessing/GlitchPass.mjs +75 -0
  493. package/postprocessing/HalftonePass.js +19 -39
  494. package/postprocessing/HalftonePass.mjs +44 -0
  495. package/postprocessing/LUTPass.js +13 -38
  496. package/postprocessing/LUTPass.mjs +136 -0
  497. package/postprocessing/MaskPass.js +19 -38
  498. package/postprocessing/MaskPass.mjs +60 -0
  499. package/postprocessing/OutlinePass.js +135 -277
  500. package/postprocessing/OutlinePass.mjs +438 -0
  501. package/postprocessing/Pass.js +20 -44
  502. package/postprocessing/Pass.mjs +37 -0
  503. package/postprocessing/RenderPass.js +13 -36
  504. package/postprocessing/RenderPass.mjs +48 -0
  505. package/postprocessing/RenderPixelatedPass.js +44 -58
  506. package/postprocessing/RenderPixelatedPass.mjs +199 -0
  507. package/postprocessing/SAOPass.js +154 -189
  508. package/postprocessing/SAOPass.mjs +282 -0
  509. package/postprocessing/SMAAPass.js +64 -84
  510. package/postprocessing/SMAAPass.mjs +112 -0
  511. package/postprocessing/SSAARenderPass.js +121 -69
  512. package/postprocessing/SSAARenderPass.mjs +170 -0
  513. package/postprocessing/SSAOPass.js +123 -172
  514. package/postprocessing/SSAOPass.mjs +265 -0
  515. package/postprocessing/SSRPass.js +211 -280
  516. package/postprocessing/SSRPass.mjs +432 -0
  517. package/postprocessing/SavePass.js +20 -25
  518. package/postprocessing/SavePass.mjs +37 -0
  519. package/postprocessing/ShaderPass.js +14 -30
  520. package/postprocessing/ShaderPass.mjs +39 -0
  521. package/postprocessing/TAARenderPass.js +42 -61
  522. package/postprocessing/TAARenderPass.mjs +88 -0
  523. package/postprocessing/TexturePass.js +21 -22
  524. package/postprocessing/TexturePass.mjs +39 -0
  525. package/postprocessing/UnrealBloomPass.js +105 -213
  526. package/postprocessing/UnrealBloomPass.mjs +220 -0
  527. package/renderers/CSS2DRenderer.js +44 -56
  528. package/renderers/CSS2DRenderer.mjs +112 -0
  529. package/renderers/CSS3DRenderer.js +53 -86
  530. package/renderers/CSS3DRenderer.mjs +133 -0
  531. package/renderers/Projector.js +107 -274
  532. package/renderers/Projector.mjs +511 -0
  533. package/renderers/SVGRenderer.js +72 -182
  534. package/renderers/SVGRenderer.mjs +306 -0
  535. package/renderers/nodes/accessors/CameraNode.js +29 -40
  536. package/renderers/nodes/accessors/CameraNode.mjs +63 -0
  537. package/renderers/nodes/accessors/ModelNode.js +28 -37
  538. package/renderers/nodes/accessors/ModelNode.mjs +61 -0
  539. package/renderers/nodes/accessors/ModelViewProjectionNode.js +10 -23
  540. package/renderers/nodes/accessors/ModelViewProjectionNode.mjs +21 -0
  541. package/renderers/nodes/accessors/NormalNode.js +35 -45
  542. package/renderers/nodes/accessors/NormalNode.mjs +61 -0
  543. package/renderers/nodes/accessors/PositionNode.js +18 -19
  544. package/renderers/nodes/accessors/PositionNode.mjs +30 -0
  545. package/renderers/nodes/accessors/UVNode.js +5 -10
  546. package/renderers/nodes/accessors/UVNode.mjs +13 -0
  547. package/renderers/nodes/core/AttributeNode.js +5 -14
  548. package/renderers/nodes/core/AttributeNode.mjs +35 -0
  549. package/renderers/nodes/core/InputNode.js +4 -14
  550. package/renderers/nodes/core/InputNode.mjs +31 -0
  551. package/renderers/nodes/core/Node.js +7 -17
  552. package/renderers/nodes/core/Node.mjs +34 -0
  553. package/renderers/nodes/core/NodeAttribute.js +3 -6
  554. package/renderers/nodes/core/NodeAttribute.mjs +10 -0
  555. package/renderers/nodes/core/NodeBuilder.js +87 -154
  556. package/renderers/nodes/core/NodeBuilder.mjs +243 -0
  557. package/renderers/nodes/core/NodeFrame.js +9 -12
  558. package/renderers/nodes/core/NodeFrame.mjs +35 -0
  559. package/renderers/nodes/core/NodeSlot.js +2 -3
  560. package/renderers/nodes/core/NodeSlot.mjs +10 -0
  561. package/renderers/nodes/core/NodeUniform.js +4 -9
  562. package/renderers/nodes/core/NodeUniform.mjs +18 -0
  563. package/renderers/nodes/core/NodeVary.js +4 -7
  564. package/renderers/nodes/core/NodeVary.mjs +11 -0
  565. package/renderers/nodes/core/VaryNode.js +6 -12
  566. package/renderers/nodes/core/VaryNode.mjs +22 -0
  567. package/renderers/nodes/core/constants.js +16 -13
  568. package/renderers/nodes/core/constants.mjs +22 -0
  569. package/renderers/nodes/inputs/ColorNode.js +5 -11
  570. package/renderers/nodes/inputs/ColorNode.mjs +11 -0
  571. package/renderers/nodes/inputs/FloatNode.js +5 -11
  572. package/renderers/nodes/inputs/FloatNode.mjs +11 -0
  573. package/renderers/nodes/inputs/Matrix3Node.js +7 -13
  574. package/renderers/nodes/inputs/Matrix3Node.mjs +12 -0
  575. package/renderers/nodes/inputs/Matrix4Node.js +7 -13
  576. package/renderers/nodes/inputs/Matrix4Node.mjs +12 -0
  577. package/renderers/nodes/inputs/TextureNode.js +7 -15
  578. package/renderers/nodes/inputs/TextureNode.mjs +20 -0
  579. package/renderers/nodes/inputs/Vector2Node.js +5 -11
  580. package/renderers/nodes/inputs/Vector2Node.mjs +11 -0
  581. package/renderers/nodes/inputs/Vector3Node.js +7 -13
  582. package/renderers/nodes/inputs/Vector3Node.mjs +12 -0
  583. package/renderers/nodes/inputs/Vector4Node.js +7 -13
  584. package/renderers/nodes/inputs/Vector4Node.mjs +12 -0
  585. package/renderers/nodes/math/MathNode.js +20 -30
  586. package/renderers/nodes/math/MathNode.mjs +55 -0
  587. package/renderers/nodes/math/OperatorNode.js +4 -20
  588. package/renderers/nodes/math/OperatorNode.mjs +42 -0
  589. package/renderers/nodes/utils/SwitchNode.js +4 -9
  590. package/renderers/nodes/utils/SwitchNode.mjs +20 -0
  591. package/renderers/nodes/utils/TimerNode.js +5 -10
  592. package/renderers/nodes/utils/TimerNode.mjs +14 -0
  593. package/renderers/webgpu/WebGPU.js +14 -16
  594. package/renderers/webgpu/WebGPU.mjs +24 -0
  595. package/renderers/webgpu/WebGPUAttributes.js +16 -23
  596. package/renderers/webgpu/WebGPUAttributes.mjs +69 -0
  597. package/renderers/webgpu/WebGPUBackground.js +13 -30
  598. package/renderers/webgpu/WebGPUBackground.mjs +61 -0
  599. package/renderers/webgpu/WebGPUBinding.js +4 -7
  600. package/renderers/webgpu/WebGPUBinding.mjs +14 -0
  601. package/renderers/webgpu/WebGPUBindings.js +21 -57
  602. package/renderers/webgpu/WebGPUBindings.mjs +155 -0
  603. package/renderers/webgpu/WebGPUComputePipelines.js +14 -25
  604. package/renderers/webgpu/WebGPUComputePipelines.mjs +44 -0
  605. package/renderers/webgpu/WebGPUGeometries.js +5 -15
  606. package/renderers/webgpu/WebGPUGeometries.mjs +41 -0
  607. package/renderers/webgpu/WebGPUInfo.js +3 -8
  608. package/renderers/webgpu/WebGPUInfo.mjs +46 -0
  609. package/renderers/webgpu/WebGPUObjects.js +5 -10
  610. package/renderers/webgpu/WebGPUObjects.mjs +25 -0
  611. package/renderers/webgpu/WebGPUProperties.js +5 -11
  612. package/renderers/webgpu/WebGPUProperties.mjs +22 -0
  613. package/renderers/webgpu/WebGPURenderLists.js +20 -36
  614. package/renderers/webgpu/WebGPURenderLists.mjs +119 -0
  615. package/renderers/webgpu/WebGPURenderPipelines.js +260 -387
  616. package/renderers/webgpu/WebGPURenderPipelines.mjs +545 -0
  617. package/renderers/webgpu/WebGPURenderer.js +124 -262
  618. package/renderers/webgpu/WebGPURenderer.mjs +574 -0
  619. package/renderers/webgpu/WebGPUSampledTexture.js +18 -31
  620. package/renderers/webgpu/WebGPUSampledTexture.mjs +40 -0
  621. package/renderers/webgpu/WebGPUSampler.js +7 -12
  622. package/renderers/webgpu/WebGPUSampler.mjs +15 -0
  623. package/renderers/webgpu/WebGPUStorageBuffer.js +7 -12
  624. package/renderers/webgpu/WebGPUStorageBuffer.mjs +15 -0
  625. package/renderers/webgpu/WebGPUTextureRenderer.js +5 -11
  626. package/renderers/webgpu/WebGPUTextureRenderer.mjs +23 -0
  627. package/renderers/webgpu/WebGPUTextureUtils.js +29 -40
  628. package/renderers/webgpu/WebGPUTextureUtils.mjs +98 -0
  629. package/renderers/webgpu/WebGPUTextures.js +186 -333
  630. package/renderers/webgpu/WebGPUTextures.mjs +484 -0
  631. package/renderers/webgpu/WebGPUUniform.js +25 -51
  632. package/renderers/webgpu/WebGPUUniform.mjs +81 -0
  633. package/renderers/webgpu/WebGPUUniformsGroup.js +32 -72
  634. package/renderers/webgpu/WebGPUUniformsGroup.mjs +176 -0
  635. package/renderers/webgpu/constants.js +190 -181
  636. package/renderers/webgpu/constants.mjs +230 -0
  637. package/renderers/webgpu/nodes/ShaderLib.js +2 -2
  638. package/renderers/webgpu/nodes/ShaderLib.mjs +42 -0
  639. package/renderers/webgpu/nodes/WebGPUNodeBuilder.js +53 -124
  640. package/renderers/webgpu/nodes/WebGPUNodeBuilder.mjs +165 -0
  641. package/renderers/webgpu/nodes/WebGPUNodeUniform.js +17 -31
  642. package/renderers/webgpu/nodes/WebGPUNodeUniform.mjs +73 -0
  643. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +8 -9
  644. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.mjs +15 -0
  645. package/renderers/webgpu/nodes/WebGPUNodes.js +7 -45
  646. package/renderers/webgpu/nodes/WebGPUNodes.mjs +40 -0
  647. package/shaders/ACESFilmicToneMappingShader.js +44 -24
  648. package/shaders/ACESFilmicToneMappingShader.mjs +48 -0
  649. package/shaders/AfterimageShader.js +28 -18
  650. package/shaders/AfterimageShader.mjs +32 -0
  651. package/shaders/BasicShader.js +9 -7
  652. package/shaders/BasicShader.mjs +12 -0
  653. package/shaders/BleachBypassShader.js +31 -15
  654. package/shaders/BleachBypassShader.mjs +35 -0
  655. package/shaders/BlendShader.js +26 -19
  656. package/shaders/BlendShader.mjs +30 -0
  657. package/shaders/BokehShader.js +98 -36
  658. package/shaders/BokehShader.mjs +106 -0
  659. package/shaders/BokehShader2.js +261 -90
  660. package/shaders/BokehShader2.mjs +269 -0
  661. package/shaders/BrightnessContrastShader.js +28 -19
  662. package/shaders/BrightnessContrastShader.mjs +32 -0
  663. package/shaders/ColorCorrectionShader.js +26 -22
  664. package/shaders/ColorCorrectionShader.mjs +30 -0
  665. package/shaders/ColorifyShader.js +24 -16
  666. package/shaders/ColorifyShader.mjs +28 -0
  667. package/shaders/ConvolutionShader.js +40 -36
  668. package/shaders/ConvolutionShader.mjs +55 -0
  669. package/shaders/CopyShader.js +21 -13
  670. package/shaders/CopyShader.mjs +25 -0
  671. package/shaders/DOFMipMapShader.js +28 -21
  672. package/shaders/DOFMipMapShader.mjs +32 -0
  673. package/shaders/DepthLimitedBlurShader.js +85 -40
  674. package/shaders/DepthLimitedBlurShader.mjs +114 -0
  675. package/shaders/DigitalGlitch.js +74 -46
  676. package/shaders/DigitalGlitch.mjs +78 -0
  677. package/shaders/DotScreenShader.js +35 -27
  678. package/shaders/DotScreenShader.mjs +39 -0
  679. package/shaders/FXAAShader.js +1094 -19
  680. package/shaders/FXAAShader.mjs +1098 -0
  681. package/shaders/FilmShader.js +38 -52
  682. package/shaders/FilmShader.mjs +42 -0
  683. package/shaders/FocusShader.js +51 -24
  684. package/shaders/FocusShader.mjs +55 -0
  685. package/shaders/FreiChenShader.js +57 -24
  686. package/shaders/FreiChenShader.mjs +61 -0
  687. package/shaders/FresnelShader.js +43 -22
  688. package/shaders/FresnelShader.mjs +47 -0
  689. package/shaders/GammaCorrectionShader.js +19 -11
  690. package/shaders/GammaCorrectionShader.mjs +23 -0
  691. package/shaders/GodRaysShader.js +103 -94
  692. package/shaders/GodRaysShader.mjs +146 -0
  693. package/shaders/HalftoneShader.js +208 -65
  694. package/shaders/HalftoneShader.mjs +212 -0
  695. package/shaders/HorizontalBlurShader.js +7 -23
  696. package/shaders/HorizontalBlurShader.mjs +43 -0
  697. package/shaders/HorizontalTiltShiftShader.js +33 -21
  698. package/shaders/HorizontalTiltShiftShader.mjs +37 -0
  699. package/shaders/HueSaturationShader.js +37 -21
  700. package/shaders/HueSaturationShader.mjs +41 -0
  701. package/shaders/KaleidoShader.js +30 -22
  702. package/shaders/KaleidoShader.mjs +34 -0
  703. package/shaders/LuminosityHighPassShader.js +33 -27
  704. package/shaders/LuminosityHighPassShader.mjs +37 -0
  705. package/shaders/LuminosityShader.js +21 -11
  706. package/shaders/LuminosityShader.mjs +25 -0
  707. package/shaders/MirrorShader.js +31 -16
  708. package/shaders/MirrorShader.mjs +35 -0
  709. package/shaders/NormalMapShader.js +27 -23
  710. package/shaders/NormalMapShader.mjs +31 -0
  711. package/shaders/ParallaxShader.js +107 -48
  712. package/shaders/ParallaxShader.mjs +113 -0
  713. package/shaders/PixelShader.js +24 -16
  714. package/shaders/PixelShader.mjs +28 -0
  715. package/shaders/RGBShiftShader.js +26 -22
  716. package/shaders/RGBShiftShader.mjs +30 -0
  717. package/shaders/SAOShader.js +132 -48
  718. package/shaders/SAOShader.mjs +144 -0
  719. package/shaders/SMAAShader.js +256 -135
  720. package/shaders/SMAAShader.mjs +272 -0
  721. package/shaders/SSAOShader.js +153 -81
  722. package/shaders/SSAOShader.mjs +172 -0
  723. package/shaders/SSRShader.js +32 -87
  724. package/shaders/SSRShader.mjs +324 -0
  725. package/shaders/SepiaShader.js +25 -15
  726. package/shaders/SepiaShader.mjs +29 -0
  727. package/shaders/SobelOperatorShader.js +40 -29
  728. package/shaders/SobelOperatorShader.mjs +44 -0
  729. package/shaders/SubsurfaceScatteringShader.js +53 -39
  730. package/shaders/SubsurfaceScatteringShader.mjs +59 -0
  731. package/shaders/TechnicolorShader.js +20 -13
  732. package/shaders/TechnicolorShader.mjs +24 -0
  733. package/shaders/ToneMapShader.js +44 -28
  734. package/shaders/ToneMapShader.mjs +48 -0
  735. package/shaders/ToonShader.js +172 -96
  736. package/shaders/ToonShader.mjs +188 -0
  737. package/shaders/TriangleBlurShader.js +32 -23
  738. package/shaders/TriangleBlurShader.mjs +36 -0
  739. package/shaders/UnpackDepthRGBAShader.js +22 -14
  740. package/shaders/UnpackDepthRGBAShader.mjs +26 -0
  741. package/shaders/VerticalBlurShader.js +7 -23
  742. package/shaders/VerticalBlurShader.mjs +44 -0
  743. package/shaders/VerticalTiltShiftShader.js +33 -21
  744. package/shaders/VerticalTiltShiftShader.mjs +37 -0
  745. package/shaders/VignetteShader.js +24 -28
  746. package/shaders/VignetteShader.mjs +28 -0
  747. package/shaders/VolumeShader.js +174 -77
  748. package/shaders/VolumeShader.mjs +178 -0
  749. package/shaders/WaterRefractionShader.js +38 -6
  750. package/shaders/WaterRefractionShader.mjs +57 -0
  751. package/shaders/types.js +1 -1
  752. package/{custom.d.js → shaders/types.mjs} +0 -0
  753. package/textures/FlakesTexture.js +8 -10
  754. package/textures/FlakesTexture.mjs +30 -0
  755. package/types/helpers.js +3 -2
  756. package/types/helpers.mjs +4 -0
  757. package/utils/BufferGeometryUtils.js +251 -325
  758. package/utils/BufferGeometryUtils.mjs +570 -0
  759. package/utils/GeometryCompressionUtils.js +241 -239
  760. package/utils/GeometryCompressionUtils.mjs +547 -0
  761. package/utils/GeometryUtils.js +41 -94
  762. package/utils/GeometryUtils.mjs +108 -0
  763. package/utils/RoughnessMipmapper.js +38 -82
  764. package/utils/RoughnessMipmapper.mjs +213 -0
  765. package/utils/SceneUtils.js +15 -20
  766. package/utils/SceneUtils.mjs +36 -0
  767. package/utils/ShadowMapViewer.js +49 -95
  768. package/utils/ShadowMapViewer.mjs +114 -0
  769. package/utils/SkeletonUtils.js +74 -165
  770. package/utils/SkeletonUtils.mjs +292 -0
  771. package/utils/UVsDebug.js +32 -62
  772. package/utils/UVsDebug.mjs +85 -0
  773. package/utils/WorkerPool.js +13 -33
  774. package/utils/WorkerPool.mjs +62 -0
  775. package/webxr/ARButton.js +72 -98
  776. package/webxr/ARButton.mjs +119 -0
  777. package/webxr/OculusHandModel.js +18 -37
  778. package/webxr/OculusHandModel.mjs +71 -0
  779. package/webxr/OculusHandPointerModel.js +58 -80
  780. package/webxr/OculusHandPointerModel.mjs +207 -0
  781. package/webxr/Text2D.js +37 -19
  782. package/webxr/Text2D.mjs +31 -0
  783. package/webxr/VRButton.js +59 -90
  784. package/webxr/VRButton.mjs +105 -0
  785. package/webxr/XRControllerModelFactory.js +58 -116
  786. package/webxr/XRControllerModelFactory.mjs +146 -0
  787. package/webxr/XREstimatedLight.js +39 -66
  788. package/webxr/XREstimatedLight.mjs +126 -0
  789. package/webxr/XRHandMeshModel.js +40 -29
  790. package/webxr/XRHandMeshModel.mjs +73 -0
  791. package/webxr/XRHandModelFactory.js +28 -31
  792. package/webxr/XRHandModelFactory.mjs +61 -0
  793. package/webxr/XRHandPrimitiveModel.js +41 -27
  794. package/webxr/XRHandPrimitiveModel.mjs +68 -0
  795. package/BufferGeometryUtils-1a7a235c.js +0 -655
  796. package/BufferGeometryUtils-971dfde3.js +0 -1
  797. package/Nodes-4f766d71.js +0 -471
  798. package/Nodes-9aa16d74.js +0 -1
  799. package/animation/AnimationClipCreator.cjs.js +0 -1
  800. package/animation/CCDIKSolver.cjs.js +0 -1
  801. package/animation/MMDAnimationHelper.cjs.js +0 -1
  802. package/animation/MMDPhysics.cjs.js +0 -1
  803. package/cameras/CinematicCamera.cjs.js +0 -1
  804. package/controls/ArcballControls.cjs.js +0 -1
  805. package/controls/DeviceOrientationControls.cjs.js +0 -1
  806. package/controls/DragControls.cjs.js +0 -1
  807. package/controls/FirstPersonControls.cjs.js +0 -1
  808. package/controls/FlyControls.cjs.js +0 -1
  809. package/controls/OrbitControls.cjs.js +0 -1
  810. package/controls/PointerLockControls.cjs.js +0 -1
  811. package/controls/TrackballControls.cjs.js +0 -1
  812. package/controls/TransformControls.cjs.js +0 -1
  813. package/controls/experimental/CameraControls.cjs.js +0 -1
  814. package/csm/CSM.cjs.js +0 -1
  815. package/csm/CSMFrustum.cjs.js +0 -1
  816. package/csm/CSMHelper.cjs.js +0 -1
  817. package/csm/CSMShader.cjs.js +0 -1
  818. package/curves/CurveExtras.cjs.js +0 -1
  819. package/curves/NURBSCurve.cjs.js +0 -1
  820. package/curves/NURBSSurface.cjs.js +0 -1
  821. package/curves/NURBSUtils.cjs.js +0 -1
  822. package/custom.d.cjs.js +0 -1
  823. package/deprecated/Geometry.cjs.js +0 -1
  824. package/effects/AnaglyphEffect.cjs.js +0 -1
  825. package/effects/AsciiEffect.cjs.js +0 -1
  826. package/effects/OutlineEffect.cjs.js +0 -1
  827. package/effects/ParallaxBarrierEffect.cjs.js +0 -1
  828. package/effects/PeppersGhostEffect.cjs.js +0 -1
  829. package/effects/StereoEffect.cjs.js +0 -1
  830. package/environments/RoomEnvironment.cjs.js +0 -1
  831. package/exporters/ColladaExporter.cjs.js +0 -1
  832. package/exporters/DRACOExporter.cjs.js +0 -1
  833. package/exporters/GLTFExporter.cjs.js +0 -1
  834. package/exporters/MMDExporter.cjs.js +0 -1
  835. package/exporters/OBJExporter.cjs.js +0 -1
  836. package/exporters/PLYExporter.cjs.js +0 -1
  837. package/exporters/STLExporter.cjs.js +0 -1
  838. package/exporters/USDZExporter.cjs.js +0 -1
  839. package/geometries/BoxLineGeometry.cjs.js +0 -1
  840. package/geometries/ConvexGeometry.cjs.js +0 -1
  841. package/geometries/DecalGeometry.cjs.js +0 -1
  842. package/geometries/LightningStrike.cjs.js +0 -1
  843. package/geometries/ParametricGeometries.cjs.js +0 -1
  844. package/geometries/ParametricGeometry.cjs.js +0 -1
  845. package/geometries/RoundedBoxGeometry.cjs.js +0 -1
  846. package/geometries/TeapotGeometry.cjs.js +0 -1
  847. package/geometries/TextGeometry.cjs.js +0 -1
  848. package/helpers/LightProbeHelper.cjs.js +0 -1
  849. package/helpers/PositionalAudioHelper.cjs.js +0 -1
  850. package/helpers/RectAreaLightHelper.cjs.js +0 -1
  851. package/helpers/VertexNormalsHelper.cjs.js +0 -1
  852. package/helpers/VertexTangentsHelper.cjs.js +0 -1
  853. package/index.cjs.js +0 -1
  854. package/interactive/InteractiveGroup.cjs.js +0 -1
  855. package/interactive/InteractiveGroup.d.ts +0 -5
  856. package/interactive/InteractiveGroup.js +0 -87
  857. package/interactive/SelectionBox.cjs.js +0 -1
  858. package/interactive/SelectionHelper.cjs.js +0 -1
  859. package/libs/MeshoptDecoder.cjs.js +0 -1
  860. package/libs/MotionControllers.cjs.js +0 -1
  861. package/lights/LightProbeGenerator.cjs.js +0 -1
  862. package/lights/RectAreaLightUniformsLib.cjs.js +0 -1
  863. package/lines/Line2.cjs.js +0 -1
  864. package/lines/LineGeometry.cjs.js +0 -1
  865. package/lines/LineMaterial.cjs.js +0 -1
  866. package/lines/LineSegments2.cjs.js +0 -1
  867. package/lines/LineSegmentsGeometry.cjs.js +0 -1
  868. package/lines/Wireframe.cjs.js +0 -1
  869. package/lines/WireframeGeometry2.cjs.js +0 -1
  870. package/loaders/3DMLoader.cjs.js +0 -1
  871. package/loaders/3MFLoader.cjs.js +0 -1
  872. package/loaders/AMFLoader.cjs.js +0 -1
  873. package/loaders/AssimpLoader.cjs.js +0 -1
  874. package/loaders/BVHLoader.cjs.js +0 -1
  875. package/loaders/BasisTextureLoader.cjs.js +0 -1
  876. package/loaders/ColladaLoader.cjs.js +0 -1
  877. package/loaders/DDSLoader.cjs.js +0 -1
  878. package/loaders/DRACOLoader.cjs.js +0 -1
  879. package/loaders/EXRLoader.cjs.js +0 -1
  880. package/loaders/FBXLoader.cjs.js +0 -1
  881. package/loaders/FontLoader.cjs.js +0 -1
  882. package/loaders/GCodeLoader.cjs.js +0 -1
  883. package/loaders/GLTFLoader.cjs.js +0 -1
  884. package/loaders/HDRCubeTextureLoader.cjs.js +0 -1
  885. package/loaders/KMZLoader.cjs.js +0 -1
  886. package/loaders/KTX2Loader.cjs.js +0 -1
  887. package/loaders/KTXLoader.cjs.js +0 -1
  888. package/loaders/LDrawLoader.cjs.js +0 -1
  889. package/loaders/LUT3dlLoader.cjs.js +0 -1
  890. package/loaders/LUTCubeLoader.cjs.js +0 -1
  891. package/loaders/LWOLoader.cjs.js +0 -1
  892. package/loaders/LottieLoader.cjs.js +0 -1
  893. package/loaders/MD2Loader.cjs.js +0 -1
  894. package/loaders/MDDLoader.cjs.js +0 -1
  895. package/loaders/MMDLoader.cjs.js +0 -1
  896. package/loaders/MTLLoader.cjs.js +0 -1
  897. package/loaders/NRRDLoader.cjs.js +0 -1
  898. package/loaders/NodeMaterialLoader.cjs.js +0 -1
  899. package/loaders/OBJLoader.cjs.js +0 -1
  900. package/loaders/PCDLoader.cjs.js +0 -1
  901. package/loaders/PDBLoader.cjs.js +0 -1
  902. package/loaders/PLYLoader.cjs.js +0 -1
  903. package/loaders/PRWMLoader.cjs.js +0 -1
  904. package/loaders/PVRLoader.cjs.js +0 -1
  905. package/loaders/RGBELoader.cjs.js +0 -1
  906. package/loaders/RGBMLoader.cjs.js +0 -1
  907. package/loaders/STLLoader.cjs.js +0 -1
  908. package/loaders/SVGLoader.cjs.js +0 -1
  909. package/loaders/TDSLoader.cjs.js +0 -1
  910. package/loaders/TGALoader.cjs.js +0 -1
  911. package/loaders/TTFLoader.cjs.js +0 -1
  912. package/loaders/TiltLoader.cjs.js +0 -1
  913. package/loaders/VOXLoader.cjs.js +0 -1
  914. package/loaders/VRMLLoader.cjs.js +0 -1
  915. package/loaders/VRMLoader.cjs.js +0 -1
  916. package/loaders/VTKLoader.cjs.js +0 -1
  917. package/loaders/XLoader.cjs.js +0 -1
  918. package/loaders/XYZLoader.cjs.js +0 -1
  919. package/loaders/lwo/IFFParser.cjs.js +0 -1
  920. package/loaders/lwo/LWO2Parser.cjs.js +0 -1
  921. package/loaders/lwo/LWO3Parser.cjs.js +0 -1
  922. package/math/Capsule.cjs.js +0 -1
  923. package/math/ColorConverter.cjs.js +0 -1
  924. package/math/ConvexHull.cjs.js +0 -1
  925. package/math/ImprovedNoise.cjs.js +0 -1
  926. package/math/Lut.cjs.js +0 -1
  927. package/math/MeshSurfaceSampler.cjs.js +0 -1
  928. package/math/OBB.cjs.js +0 -1
  929. package/math/Octree.cjs.js +0 -1
  930. package/math/SimplexNoise.cjs.js +0 -1
  931. package/misc/ConvexObjectBreaker.cjs.js +0 -1
  932. package/misc/GPUComputationRenderer.cjs.js +0 -1
  933. package/misc/Gyroscope.cjs.js +0 -1
  934. package/misc/MD2Character.cjs.js +0 -1
  935. package/misc/MD2CharacterComplex.cjs.js +0 -1
  936. package/misc/MorphAnimMesh.cjs.js +0 -1
  937. package/misc/MorphBlendMesh.cjs.js +0 -1
  938. package/misc/ProgressiveLightmap.cjs.js +0 -1
  939. package/misc/RollerCoaster.cjs.js +0 -1
  940. package/misc/TubePainter.cjs.js +0 -1
  941. package/misc/Volume.cjs.js +0 -1
  942. package/misc/VolumeSlice.cjs.js +0 -1
  943. package/misc/WebGL.cjs.js +0 -1
  944. package/modifiers/CurveModifier.cjs.js +0 -1
  945. package/modifiers/EdgeSplitModifier.cjs.js +0 -1
  946. package/modifiers/SimplifyModifier.cjs.js +0 -1
  947. package/modifiers/TessellateModifier.cjs.js +0 -1
  948. package/nodes/Nodes.cjs.js +0 -1
  949. package/nodes/ShaderNode.cjs.js +0 -1
  950. package/nodes/accessors/BufferNode.cjs.js +0 -1
  951. package/nodes/accessors/CameraNode.cjs.js +0 -1
  952. package/nodes/accessors/CubeTextureNode.cjs.js +0 -1
  953. package/nodes/accessors/MaterialNode.cjs.js +0 -1
  954. package/nodes/accessors/MaterialReferenceNode.cjs.js +0 -1
  955. package/nodes/accessors/ModelNode.cjs.js +0 -1
  956. package/nodes/accessors/ModelViewProjectionNode.cjs.js +0 -1
  957. package/nodes/accessors/NormalNode.cjs.js +0 -1
  958. package/nodes/accessors/Object3DNode.cjs.js +0 -1
  959. package/nodes/accessors/PointUVNode.cjs.js +0 -1
  960. package/nodes/accessors/PositionNode.cjs.js +0 -1
  961. package/nodes/accessors/ReferenceNode.cjs.js +0 -1
  962. package/nodes/accessors/ReflectNode.cjs.js +0 -1
  963. package/nodes/accessors/SkinningNode.cjs.js +0 -1
  964. package/nodes/accessors/TextureNode.cjs.js +0 -1
  965. package/nodes/accessors/UVNode.cjs.js +0 -1
  966. package/nodes/core/ArrayUniformNode.cjs.js +0 -1
  967. package/nodes/core/AttributeNode.cjs.js +0 -1
  968. package/nodes/core/BypassNode.cjs.js +0 -1
  969. package/nodes/core/CodeNode.cjs.js +0 -1
  970. package/nodes/core/ConstNode.cjs.js +0 -1
  971. package/nodes/core/ContextNode.cjs.js +0 -1
  972. package/nodes/core/ExpressionNode.cjs.js +0 -1
  973. package/nodes/core/FunctionCallNode.cjs.js +0 -1
  974. package/nodes/core/FunctionNode.cjs.js +0 -1
  975. package/nodes/core/InputNode.cjs.js +0 -1
  976. package/nodes/core/Node.cjs.js +0 -1
  977. package/nodes/core/NodeAttribute.cjs.js +0 -1
  978. package/nodes/core/NodeBuilder.cjs.js +0 -1
  979. package/nodes/core/NodeCode.cjs.js +0 -1
  980. package/nodes/core/NodeFrame.cjs.js +0 -1
  981. package/nodes/core/NodeFunction.cjs.js +0 -1
  982. package/nodes/core/NodeFunction.js +0 -17
  983. package/nodes/core/NodeFunctionInput.cjs.js +0 -1
  984. package/nodes/core/NodeKeywords.cjs.js +0 -1
  985. package/nodes/core/NodeParser.cjs.js +0 -1
  986. package/nodes/core/NodeParser.js +0 -8
  987. package/nodes/core/NodeUniform.cjs.js +0 -1
  988. package/nodes/core/NodeUtils.cjs.js +0 -1
  989. package/nodes/core/NodeVar.cjs.js +0 -1
  990. package/nodes/core/NodeVary.cjs.js +0 -1
  991. package/nodes/core/PropertyNode.cjs.js +0 -1
  992. package/nodes/core/TempNode.cjs.js +0 -1
  993. package/nodes/core/UniformNode.cjs.js +0 -1
  994. package/nodes/core/VarNode.cjs.js +0 -1
  995. package/nodes/core/VaryNode.cjs.js +0 -1
  996. package/nodes/core/constants.cjs.js +0 -1
  997. package/nodes/display/ColorSpaceNode.cjs.js +0 -1
  998. package/nodes/display/NormalMapNode.cjs.js +0 -1
  999. package/nodes/fog/FogNode.cjs.js +0 -1
  1000. package/nodes/fog/FogRangeNode.cjs.js +0 -1
  1001. package/nodes/functions/BSDFs.cjs.js +0 -1
  1002. package/nodes/functions/PhysicalMaterialFunctions.cjs.js +0 -1
  1003. package/nodes/functions/PhysicalMaterialFunctions.js +0 -57
  1004. package/nodes/lights/LightContextNode.cjs.js +0 -1
  1005. package/nodes/lights/LightNode.cjs.js +0 -1
  1006. package/nodes/lights/LightsNode.cjs.js +0 -1
  1007. package/nodes/loaders/NodeLoader.cjs.js +0 -1
  1008. package/nodes/loaders/NodeMaterialLoader.cjs.js +0 -1
  1009. package/nodes/loaders/NodeObjectLoader.cjs.js +0 -1
  1010. package/nodes/materials/LineBasicNodeMaterial.cjs.js +0 -1
  1011. package/nodes/materials/Materials.cjs.js +0 -1
  1012. package/nodes/materials/MeshBasicNodeMaterial.cjs.js +0 -1
  1013. package/nodes/materials/MeshStandardNodeMaterial.cjs.js +0 -1
  1014. package/nodes/materials/NodeMaterial.cjs.js +0 -1
  1015. package/nodes/materials/PointsNodeMaterial.cjs.js +0 -1
  1016. package/nodes/math/CondNode.cjs.js +0 -1
  1017. package/nodes/math/MathNode.cjs.js +0 -1
  1018. package/nodes/math/OperatorNode.cjs.js +0 -1
  1019. package/nodes/parsers/GLSLNodeFunction.cjs.js +0 -1
  1020. package/nodes/parsers/GLSLNodeFunction.js +0 -101
  1021. package/nodes/parsers/GLSLNodeParser.cjs.js +0 -1
  1022. package/nodes/parsers/GLSLNodeParser.js +0 -13
  1023. package/nodes/parsers/WGSLNodeFunction.cjs.js +0 -1
  1024. package/nodes/parsers/WGSLNodeFunction.js +0 -71
  1025. package/nodes/parsers/WGSLNodeParser.cjs.js +0 -1
  1026. package/nodes/parsers/WGSLNodeParser.js +0 -13
  1027. package/nodes/procedural/CheckerNode.cjs.js +0 -1
  1028. package/nodes/utils/ArrayElementNode.cjs.js +0 -1
  1029. package/nodes/utils/ConvertNode.cjs.js +0 -1
  1030. package/nodes/utils/JoinNode.cjs.js +0 -1
  1031. package/nodes/utils/MatcapUVNode.cjs.js +0 -1
  1032. package/nodes/utils/OscNode.cjs.js +0 -1
  1033. package/nodes/utils/SplitNode.cjs.js +0 -1
  1034. package/nodes/utils/SpriteSheetUVNode.cjs.js +0 -1
  1035. package/nodes/utils/TimerNode.cjs.js +0 -1
  1036. package/objects/GroundProjectedEnv.cjs.js +0 -1
  1037. package/objects/Lensflare.cjs.js +0 -1
  1038. package/objects/LightningStorm.cjs.js +0 -1
  1039. package/objects/MarchingCubes.cjs.js +0 -1
  1040. package/objects/Reflector.cjs.js +0 -1
  1041. package/objects/ReflectorForSSRPass.cjs.js +0 -1
  1042. package/objects/ReflectorRTT.cjs.js +0 -1
  1043. package/objects/Refractor.cjs.js +0 -1
  1044. package/objects/ShadowMesh.cjs.js +0 -1
  1045. package/objects/Sky.cjs.js +0 -1
  1046. package/objects/Water.cjs.js +0 -1
  1047. package/objects/Water2.cjs.js +0 -1
  1048. package/offscreen/jank.cjs.js +0 -1
  1049. package/offscreen/offscreen.cjs.js +0 -1
  1050. package/offscreen/scene.cjs.js +0 -1
  1051. package/physics/AmmoPhysics.cjs.js +0 -1
  1052. package/postprocessing/AdaptiveToneMappingPass.cjs.js +0 -1
  1053. package/postprocessing/AfterimagePass.cjs.js +0 -1
  1054. package/postprocessing/BloomPass.cjs.js +0 -1
  1055. package/postprocessing/BokehPass.cjs.js +0 -1
  1056. package/postprocessing/ClearPass.cjs.js +0 -1
  1057. package/postprocessing/CubeTexturePass.cjs.js +0 -1
  1058. package/postprocessing/DotScreenPass.cjs.js +0 -1
  1059. package/postprocessing/EffectComposer.cjs.js +0 -1
  1060. package/postprocessing/FilmPass.cjs.js +0 -1
  1061. package/postprocessing/GlitchPass.cjs.js +0 -1
  1062. package/postprocessing/HalftonePass.cjs.js +0 -1
  1063. package/postprocessing/LUTPass.cjs.js +0 -1
  1064. package/postprocessing/MaskPass.cjs.js +0 -1
  1065. package/postprocessing/OutlinePass.cjs.js +0 -1
  1066. package/postprocessing/Pass.cjs.js +0 -1
  1067. package/postprocessing/RenderPass.cjs.js +0 -1
  1068. package/postprocessing/RenderPixelatedPass.cjs.js +0 -1
  1069. package/postprocessing/SAOPass.cjs.js +0 -1
  1070. package/postprocessing/SMAAPass.cjs.js +0 -1
  1071. package/postprocessing/SSAARenderPass.cjs.js +0 -1
  1072. package/postprocessing/SSAOPass.cjs.js +0 -1
  1073. package/postprocessing/SSRPass.cjs.js +0 -1
  1074. package/postprocessing/SavePass.cjs.js +0 -1
  1075. package/postprocessing/ShaderPass.cjs.js +0 -1
  1076. package/postprocessing/TAARenderPass.cjs.js +0 -1
  1077. package/postprocessing/TexturePass.cjs.js +0 -1
  1078. package/postprocessing/UnrealBloomPass.cjs.js +0 -1
  1079. package/renderers/CSS2DRenderer.cjs.js +0 -1
  1080. package/renderers/CSS3DRenderer.cjs.js +0 -1
  1081. package/renderers/Projector.cjs.js +0 -1
  1082. package/renderers/SVGRenderer.cjs.js +0 -1
  1083. package/renderers/nodes/accessors/CameraNode.cjs.js +0 -1
  1084. package/renderers/nodes/accessors/ModelNode.cjs.js +0 -1
  1085. package/renderers/nodes/accessors/ModelViewProjectionNode.cjs.js +0 -1
  1086. package/renderers/nodes/accessors/NormalNode.cjs.js +0 -1
  1087. package/renderers/nodes/accessors/PositionNode.cjs.js +0 -1
  1088. package/renderers/nodes/accessors/UVNode.cjs.js +0 -1
  1089. package/renderers/nodes/core/AttributeNode.cjs.js +0 -1
  1090. package/renderers/nodes/core/InputNode.cjs.js +0 -1
  1091. package/renderers/nodes/core/Node.cjs.js +0 -1
  1092. package/renderers/nodes/core/NodeAttribute.cjs.js +0 -1
  1093. package/renderers/nodes/core/NodeBuilder.cjs.js +0 -1
  1094. package/renderers/nodes/core/NodeFrame.cjs.js +0 -1
  1095. package/renderers/nodes/core/NodeSlot.cjs.js +0 -1
  1096. package/renderers/nodes/core/NodeUniform.cjs.js +0 -1
  1097. package/renderers/nodes/core/NodeVary.cjs.js +0 -1
  1098. package/renderers/nodes/core/VaryNode.cjs.js +0 -1
  1099. package/renderers/nodes/core/constants.cjs.js +0 -1
  1100. package/renderers/nodes/inputs/ColorNode.cjs.js +0 -1
  1101. package/renderers/nodes/inputs/FloatNode.cjs.js +0 -1
  1102. package/renderers/nodes/inputs/Matrix3Node.cjs.js +0 -1
  1103. package/renderers/nodes/inputs/Matrix4Node.cjs.js +0 -1
  1104. package/renderers/nodes/inputs/TextureNode.cjs.js +0 -1
  1105. package/renderers/nodes/inputs/Vector2Node.cjs.js +0 -1
  1106. package/renderers/nodes/inputs/Vector3Node.cjs.js +0 -1
  1107. package/renderers/nodes/inputs/Vector4Node.cjs.js +0 -1
  1108. package/renderers/nodes/math/MathNode.cjs.js +0 -1
  1109. package/renderers/nodes/math/OperatorNode.cjs.js +0 -1
  1110. package/renderers/nodes/utils/SwitchNode.cjs.js +0 -1
  1111. package/renderers/nodes/utils/TimerNode.cjs.js +0 -1
  1112. package/renderers/webgpu/WebGPU.cjs.js +0 -1
  1113. package/renderers/webgpu/WebGPUAttributes.cjs.js +0 -1
  1114. package/renderers/webgpu/WebGPUBackground.cjs.js +0 -1
  1115. package/renderers/webgpu/WebGPUBinding.cjs.js +0 -1
  1116. package/renderers/webgpu/WebGPUBindings.cjs.js +0 -1
  1117. package/renderers/webgpu/WebGPUComputePipelines.cjs.js +0 -1
  1118. package/renderers/webgpu/WebGPUGeometries.cjs.js +0 -1
  1119. package/renderers/webgpu/WebGPUInfo.cjs.js +0 -1
  1120. package/renderers/webgpu/WebGPUObjects.cjs.js +0 -1
  1121. package/renderers/webgpu/WebGPUProperties.cjs.js +0 -1
  1122. package/renderers/webgpu/WebGPURenderLists.cjs.js +0 -1
  1123. package/renderers/webgpu/WebGPURenderPipelines.cjs.js +0 -1
  1124. package/renderers/webgpu/WebGPURenderer.cjs.js +0 -1
  1125. package/renderers/webgpu/WebGPUSampledTexture.cjs.js +0 -1
  1126. package/renderers/webgpu/WebGPUSampler.cjs.js +0 -1
  1127. package/renderers/webgpu/WebGPUStorageBuffer.cjs.js +0 -1
  1128. package/renderers/webgpu/WebGPUTextureRenderer.cjs.js +0 -1
  1129. package/renderers/webgpu/WebGPUTextureUtils.cjs.js +0 -1
  1130. package/renderers/webgpu/WebGPUTextures.cjs.js +0 -1
  1131. package/renderers/webgpu/WebGPUUniform.cjs.js +0 -1
  1132. package/renderers/webgpu/WebGPUUniformsGroup.cjs.js +0 -1
  1133. package/renderers/webgpu/constants.cjs.js +0 -1
  1134. package/renderers/webgpu/nodes/ShaderLib.cjs.js +0 -1
  1135. package/renderers/webgpu/nodes/WebGPUNodeBuilder.cjs.js +0 -1
  1136. package/renderers/webgpu/nodes/WebGPUNodeUniform.cjs.js +0 -1
  1137. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.cjs.js +0 -1
  1138. package/renderers/webgpu/nodes/WebGPUNodes.cjs.js +0 -1
  1139. package/shaders/ACESFilmicToneMappingShader.cjs.js +0 -1
  1140. package/shaders/AfterimageShader.cjs.js +0 -1
  1141. package/shaders/BasicShader.cjs.js +0 -1
  1142. package/shaders/BleachBypassShader.cjs.js +0 -1
  1143. package/shaders/BlendShader.cjs.js +0 -1
  1144. package/shaders/BokehShader.cjs.js +0 -1
  1145. package/shaders/BokehShader2.cjs.js +0 -1
  1146. package/shaders/BrightnessContrastShader.cjs.js +0 -1
  1147. package/shaders/ColorCorrectionShader.cjs.js +0 -1
  1148. package/shaders/ColorifyShader.cjs.js +0 -1
  1149. package/shaders/ConvolutionShader.cjs.js +0 -1
  1150. package/shaders/CopyShader.cjs.js +0 -1
  1151. package/shaders/DOFMipMapShader.cjs.js +0 -1
  1152. package/shaders/DepthLimitedBlurShader.cjs.js +0 -1
  1153. package/shaders/DigitalGlitch.cjs.js +0 -1
  1154. package/shaders/DotScreenShader.cjs.js +0 -1
  1155. package/shaders/FXAAShader.cjs.js +0 -1
  1156. package/shaders/FilmShader.cjs.js +0 -1
  1157. package/shaders/FocusShader.cjs.js +0 -1
  1158. package/shaders/FreiChenShader.cjs.js +0 -1
  1159. package/shaders/FresnelShader.cjs.js +0 -1
  1160. package/shaders/GammaCorrectionShader.cjs.js +0 -1
  1161. package/shaders/GodRaysShader.cjs.js +0 -1
  1162. package/shaders/HalftoneShader.cjs.js +0 -1
  1163. package/shaders/HorizontalBlurShader.cjs.js +0 -1
  1164. package/shaders/HorizontalTiltShiftShader.cjs.js +0 -1
  1165. package/shaders/HueSaturationShader.cjs.js +0 -1
  1166. package/shaders/KaleidoShader.cjs.js +0 -1
  1167. package/shaders/LuminosityHighPassShader.cjs.js +0 -1
  1168. package/shaders/LuminosityShader.cjs.js +0 -1
  1169. package/shaders/MirrorShader.cjs.js +0 -1
  1170. package/shaders/NormalMapShader.cjs.js +0 -1
  1171. package/shaders/ParallaxShader.cjs.js +0 -1
  1172. package/shaders/PixelShader.cjs.js +0 -1
  1173. package/shaders/RGBShiftShader.cjs.js +0 -1
  1174. package/shaders/SAOShader.cjs.js +0 -1
  1175. package/shaders/SMAAShader.cjs.js +0 -1
  1176. package/shaders/SSAOShader.cjs.js +0 -1
  1177. package/shaders/SSRShader.cjs.js +0 -1
  1178. package/shaders/SepiaShader.cjs.js +0 -1
  1179. package/shaders/SobelOperatorShader.cjs.js +0 -1
  1180. package/shaders/SubsurfaceScatteringShader.cjs.js +0 -1
  1181. package/shaders/TechnicolorShader.cjs.js +0 -1
  1182. package/shaders/ToneMapShader.cjs.js +0 -1
  1183. package/shaders/ToonShader.cjs.js +0 -1
  1184. package/shaders/TriangleBlurShader.cjs.js +0 -1
  1185. package/shaders/UnpackDepthRGBAShader.cjs.js +0 -1
  1186. package/shaders/VerticalBlurShader.cjs.js +0 -1
  1187. package/shaders/VerticalTiltShiftShader.cjs.js +0 -1
  1188. package/shaders/VignetteShader.cjs.js +0 -1
  1189. package/shaders/VolumeShader.cjs.js +0 -1
  1190. package/shaders/WaterRefractionShader.cjs.js +0 -1
  1191. package/shaders/index.cjs.js +0 -1
  1192. package/shaders/index.d.ts +0 -54
  1193. package/shaders/index.js +0 -53
  1194. package/shaders/types.cjs.js +0 -1
  1195. package/textures/FlakesTexture.cjs.js +0 -1
  1196. package/types/helpers.cjs.js +0 -1
  1197. package/types/shared.cjs.js +0 -1
  1198. package/types/shared.js +0 -1
  1199. package/types/utils.cjs.js +0 -1
  1200. package/types/utils.js +0 -1
  1201. package/utils/BufferGeometryUtils.cjs.js +0 -1
  1202. package/utils/GeometryCompressionUtils.cjs.js +0 -1
  1203. package/utils/GeometryUtils.cjs.js +0 -1
  1204. package/utils/LDrawUtils.cjs.js +0 -1
  1205. package/utils/LDrawUtils.d.ts +0 -5
  1206. package/utils/LDrawUtils.js +0 -144
  1207. package/utils/RoughnessMipmapper.cjs.js +0 -1
  1208. package/utils/SceneUtils.cjs.js +0 -1
  1209. package/utils/ShadowMapViewer.cjs.js +0 -1
  1210. package/utils/SkeletonUtils.cjs.js +0 -1
  1211. package/utils/UVsDebug.cjs.js +0 -1
  1212. package/utils/WorkerPool.cjs.js +0 -1
  1213. package/webxr/ARButton.cjs.js +0 -1
  1214. package/webxr/OculusHandModel.cjs.js +0 -1
  1215. package/webxr/OculusHandPointerModel.cjs.js +0 -1
  1216. package/webxr/Text2D.cjs.js +0 -1
  1217. package/webxr/VRButton.cjs.js +0 -1
  1218. package/webxr/XRControllerModelFactory.cjs.js +0 -1
  1219. package/webxr/XREstimatedLight.cjs.js +0 -1
  1220. package/webxr/XRHandMeshModel.cjs.js +0 -1
  1221. package/webxr/XRHandModelFactory.cjs.js +0 -1
  1222. package/webxr/XRHandPrimitiveModel.cjs.js +0 -1
@@ -1,85 +1,63 @@
1
- import { Loader, LoaderUtils, FileLoader, TextureLoader, RepeatWrapping, ClampToEdgeWrapping, Texture, MeshPhongMaterial, MeshLambertMaterial, Color, sRGBEncoding, EquirectangularReflectionMapping, Matrix4, Group, Bone, PropertyBinding, Object3D, OrthographicCamera, PerspectiveCamera, PointLight, MathUtils, SpotLight, DirectionalLight, SkinnedMesh, Mesh, LineBasicMaterial, Line, Vector3, Skeleton, AmbientLight, BufferGeometry, Float32BufferAttribute, Uint16BufferAttribute, Matrix3, Vector4, AnimationClip, Quaternion, Euler, VectorKeyframeTrack, QuaternionKeyframeTrack, NumberKeyframeTrack } from 'three';
2
- import { unzlibSync } from 'fflate';
3
- import { NURBSCurve } from '../curves/NURBSCurve.js';
4
-
5
- /**
6
- * Loader loads FBX file and generates Group representing FBX scene.
7
- * Requires FBX file to be >= 7.0 and in ASCII or >= 6400 in Binary format
8
- * Versions lower than this may load but will probably have errors
9
- *
10
- * Needs Support:
11
- * Morph normals / blend shape normals
12
- *
13
- * FBX format references:
14
- * https://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_index_html (C++ SDK reference)
15
- *
16
- * Binary format specification:
17
- * https://code.blender.org/2013/08/fbx-binary-file-format-specification/
18
- */
19
-
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const THREE = require("three");
4
+ const fflate = require("fflate");
5
+ const NURBSCurve = require("../curves/NURBSCurve.js");
20
6
  let fbxTree;
21
7
  let connections;
22
8
  let sceneGraph;
23
-
24
- class FBXLoader extends Loader {
9
+ class FBXLoader extends THREE.Loader {
25
10
  constructor(manager) {
26
11
  super(manager);
27
12
  }
28
-
29
13
  load(url, onLoad, onProgress, onError) {
30
14
  const scope = this;
31
- const path = scope.path === '' ? LoaderUtils.extractUrlBase(url) : scope.path;
32
- const loader = new FileLoader(this.manager);
15
+ const path = scope.path === "" ? THREE.LoaderUtils.extractUrlBase(url) : scope.path;
16
+ const loader = new THREE.FileLoader(this.manager);
33
17
  loader.setPath(scope.path);
34
- loader.setResponseType('arraybuffer');
18
+ loader.setResponseType("arraybuffer");
35
19
  loader.setRequestHeader(scope.requestHeader);
36
20
  loader.setWithCredentials(scope.withCredentials);
37
- loader.load(url, function (buffer) {
38
- try {
39
- onLoad(scope.parse(buffer, path));
40
- } catch (e) {
41
- if (onError) {
42
- onError(e);
43
- } else {
44
- console.error(e);
21
+ loader.load(
22
+ url,
23
+ function(buffer) {
24
+ try {
25
+ onLoad(scope.parse(buffer, path));
26
+ } catch (e) {
27
+ if (onError) {
28
+ onError(e);
29
+ } else {
30
+ console.error(e);
31
+ }
32
+ scope.manager.itemError(url);
45
33
  }
46
-
47
- scope.manager.itemError(url);
48
- }
49
- }, onProgress, onError);
34
+ },
35
+ onProgress,
36
+ onError
37
+ );
50
38
  }
51
-
52
39
  parse(FBXBuffer, path) {
53
40
  if (isFbxFormatBinary(FBXBuffer)) {
54
41
  fbxTree = new BinaryParser().parse(FBXBuffer);
55
42
  } else {
56
43
  const FBXText = convertArrayBufferToString(FBXBuffer);
57
-
58
44
  if (!isFbxFormatASCII(FBXText)) {
59
- throw new Error('THREE.FBXLoader: Unknown format.');
45
+ throw new Error("THREE.FBXLoader: Unknown format.");
60
46
  }
61
-
62
- if (getFbxVersion(FBXText) < 7000) {
63
- throw new Error('THREE.FBXLoader: FBX version not supported, FileVersion: ' + getFbxVersion(FBXText));
47
+ if (getFbxVersion(FBXText) < 7e3) {
48
+ throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + getFbxVersion(FBXText));
64
49
  }
65
-
66
50
  fbxTree = new TextParser().parse(FBXText);
67
- } // console.log( fbxTree );
68
-
69
-
70
- const textureLoader = new TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);
51
+ }
52
+ const textureLoader = new THREE.TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);
71
53
  return new FBXTreeParser(textureLoader, this.manager).parse(fbxTree);
72
54
  }
73
-
74
- } // Parse the FBXTree object returned by the BinaryParser or TextParser and return a Group
75
-
76
-
55
+ }
77
56
  class FBXTreeParser {
78
57
  constructor(textureLoader, manager) {
79
58
  this.textureLoader = textureLoader;
80
59
  this.manager = manager;
81
60
  }
82
-
83
61
  parse() {
84
62
  connections = this.parseConnections();
85
63
  const images = this.parseImages();
@@ -89,70 +67,47 @@ class FBXTreeParser {
89
67
  const geometryMap = new GeometryParser().parse(deformers);
90
68
  this.parseScene(deformers, geometryMap, materials);
91
69
  return sceneGraph;
92
- } // Parses FBXTree.Connections which holds parent-child connections between objects (e.g. material -> texture, model->geometry )
93
- // and details the connection type
94
-
95
-
70
+ }
96
71
  parseConnections() {
97
- const connectionMap = new Map();
98
-
99
- if ('Connections' in fbxTree) {
72
+ const connectionMap = /* @__PURE__ */ new Map();
73
+ if ("Connections" in fbxTree) {
100
74
  const rawConnections = fbxTree.Connections.connections;
101
- rawConnections.forEach(function (rawConnection) {
75
+ rawConnections.forEach(function(rawConnection) {
102
76
  const fromID = rawConnection[0];
103
77
  const toID = rawConnection[1];
104
78
  const relationship = rawConnection[2];
105
-
106
79
  if (!connectionMap.has(fromID)) {
107
80
  connectionMap.set(fromID, {
108
81
  parents: [],
109
82
  children: []
110
83
  });
111
84
  }
112
-
113
- const parentRelationship = {
114
- ID: toID,
115
- relationship: relationship
116
- };
85
+ const parentRelationship = { ID: toID, relationship };
117
86
  connectionMap.get(fromID).parents.push(parentRelationship);
118
-
119
87
  if (!connectionMap.has(toID)) {
120
88
  connectionMap.set(toID, {
121
89
  parents: [],
122
90
  children: []
123
91
  });
124
92
  }
125
-
126
- const childRelationship = {
127
- ID: fromID,
128
- relationship: relationship
129
- };
93
+ const childRelationship = { ID: fromID, relationship };
130
94
  connectionMap.get(toID).children.push(childRelationship);
131
95
  });
132
96
  }
133
-
134
97
  return connectionMap;
135
- } // Parse FBXTree.Objects.Video for embedded image data
136
- // These images are connected to textures in FBXTree.Objects.Textures
137
- // via FBXTree.Connections.
138
-
139
-
98
+ }
140
99
  parseImages() {
141
100
  const images = {};
142
101
  const blobs = {};
143
-
144
- if ('Video' in fbxTree.Objects) {
102
+ if ("Video" in fbxTree.Objects) {
145
103
  const videoNodes = fbxTree.Objects.Video;
146
-
147
104
  for (const nodeID in videoNodes) {
148
105
  const videoNode = videoNodes[nodeID];
149
106
  const id = parseInt(nodeID);
150
- images[id] = videoNode.RelativeFilename || videoNode.Filename; // raw image data is in videoNode.Content
151
-
152
- if ('Content' in videoNode) {
107
+ images[id] = videoNode.RelativeFilename || videoNode.Filename;
108
+ if ("Content" in videoNode) {
153
109
  const arrayBufferContent = videoNode.Content instanceof ArrayBuffer && videoNode.Content.byteLength > 0;
154
- const base64Content = typeof videoNode.Content === 'string' && videoNode.Content !== '';
155
-
110
+ const base64Content = typeof videoNode.Content === "string" && videoNode.Content !== "";
156
111
  if (arrayBufferContent || base64Content) {
157
112
  const image = this.parseImage(videoNodes[nodeID]);
158
113
  blobs[videoNode.RelativeFilename || videoNode.Filename] = image;
@@ -160,423 +115,314 @@ class FBXTreeParser {
160
115
  }
161
116
  }
162
117
  }
163
-
164
118
  for (const id in images) {
165
119
  const filename = images[id];
166
- if (blobs[filename] !== undefined) images[id] = blobs[filename];else images[id] = images[id].split('\\').pop();
120
+ if (blobs[filename] !== void 0)
121
+ images[id] = blobs[filename];
122
+ else
123
+ images[id] = images[id].split("\\").pop();
167
124
  }
168
-
169
125
  return images;
170
- } // Parse embedded image data in FBXTree.Video.Content
171
-
172
-
126
+ }
173
127
  parseImage(videoNode) {
174
128
  const content = videoNode.Content;
175
129
  const fileName = videoNode.RelativeFilename || videoNode.Filename;
176
- const extension = fileName.slice(fileName.lastIndexOf('.') + 1).toLowerCase();
130
+ const extension = fileName.slice(fileName.lastIndexOf(".") + 1).toLowerCase();
177
131
  let type;
178
-
179
132
  switch (extension) {
180
- case 'bmp':
181
- type = 'image/bmp';
133
+ case "bmp":
134
+ type = "image/bmp";
182
135
  break;
183
-
184
- case 'jpg':
185
- case 'jpeg':
186
- type = 'image/jpeg';
136
+ case "jpg":
137
+ case "jpeg":
138
+ type = "image/jpeg";
187
139
  break;
188
-
189
- case 'png':
190
- type = 'image/png';
140
+ case "png":
141
+ type = "image/png";
191
142
  break;
192
-
193
- case 'tif':
194
- type = 'image/tiff';
143
+ case "tif":
144
+ type = "image/tiff";
195
145
  break;
196
-
197
- case 'tga':
198
- if (this.manager.getHandler('.tga') === null) {
199
- console.warn('FBXLoader: TGA loader not found, skipping ', fileName);
146
+ case "tga":
147
+ if (this.manager.getHandler(".tga") === null) {
148
+ console.warn("FBXLoader: TGA loader not found, skipping ", fileName);
200
149
  }
201
-
202
- type = 'image/tga';
150
+ type = "image/tga";
203
151
  break;
204
-
205
152
  default:
206
153
  console.warn('FBXLoader: Image type "' + extension + '" is not supported.');
207
154
  return;
208
155
  }
209
-
210
- if (typeof content === 'string') {
211
- // ASCII format
212
- return 'data:' + type + ';base64,' + content;
156
+ if (typeof content === "string") {
157
+ return "data:" + type + ";base64," + content;
213
158
  } else {
214
- // Binary Format
215
159
  const array = new Uint8Array(content);
216
- return window.URL.createObjectURL(new Blob([array], {
217
- type: type
218
- }));
219
- }
220
- } // Parse nodes in FBXTree.Objects.Texture
221
- // These contain details such as UV scaling, cropping, rotation etc and are connected
222
- // to images in FBXTree.Objects.Video
223
-
224
-
160
+ return window.URL.createObjectURL(new Blob([array], { type }));
161
+ }
162
+ }
225
163
  parseTextures(images) {
226
- const textureMap = new Map();
227
-
228
- if ('Texture' in fbxTree.Objects) {
164
+ const textureMap = /* @__PURE__ */ new Map();
165
+ if ("Texture" in fbxTree.Objects) {
229
166
  const textureNodes = fbxTree.Objects.Texture;
230
-
231
167
  for (const nodeID in textureNodes) {
232
168
  const texture = this.parseTexture(textureNodes[nodeID], images);
233
169
  textureMap.set(parseInt(nodeID), texture);
234
170
  }
235
171
  }
236
-
237
172
  return textureMap;
238
- } // Parse individual node in FBXTree.Objects.Texture
239
-
240
-
173
+ }
241
174
  parseTexture(textureNode, images) {
242
175
  const texture = this.loadTexture(textureNode, images);
243
176
  texture.ID = textureNode.id;
244
177
  texture.name = textureNode.attrName;
245
178
  const wrapModeU = textureNode.WrapModeU;
246
179
  const wrapModeV = textureNode.WrapModeV;
247
- const valueU = wrapModeU !== undefined ? wrapModeU.value : 0;
248
- const valueV = wrapModeV !== undefined ? wrapModeV.value : 0; // http://download.autodesk.com/us/fbx/SDKdocs/FBX_SDK_Help/files/fbxsdkref/class_k_fbx_texture.html#889640e63e2e681259ea81061b85143a
249
- // 0: repeat(default), 1: clamp
250
-
251
- texture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping;
252
- texture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping;
253
-
254
- if ('Scaling' in textureNode) {
180
+ const valueU = wrapModeU !== void 0 ? wrapModeU.value : 0;
181
+ const valueV = wrapModeV !== void 0 ? wrapModeV.value : 0;
182
+ texture.wrapS = valueU === 0 ? THREE.RepeatWrapping : THREE.ClampToEdgeWrapping;
183
+ texture.wrapT = valueV === 0 ? THREE.RepeatWrapping : THREE.ClampToEdgeWrapping;
184
+ if ("Scaling" in textureNode) {
255
185
  const values = textureNode.Scaling.value;
256
186
  texture.repeat.x = values[0];
257
187
  texture.repeat.y = values[1];
258
188
  }
259
-
260
189
  return texture;
261
- } // load a texture specified as a blob or data URI, or via an external URL using TextureLoader
262
-
263
-
190
+ }
264
191
  loadTexture(textureNode, images) {
265
192
  let fileName;
266
193
  const currentPath = this.textureLoader.path;
267
194
  const children = connections.get(textureNode.id).children;
268
-
269
- if (children !== undefined && children.length > 0 && images[children[0].ID] !== undefined) {
195
+ if (children !== void 0 && children.length > 0 && images[children[0].ID] !== void 0) {
270
196
  fileName = images[children[0].ID];
271
-
272
- if (fileName.indexOf('blob:') === 0 || fileName.indexOf('data:') === 0) {
273
- this.textureLoader.setPath(undefined);
197
+ if (fileName.indexOf("blob:") === 0 || fileName.indexOf("data:") === 0) {
198
+ this.textureLoader.setPath(void 0);
274
199
  }
275
200
  }
276
-
277
201
  let texture;
278
202
  const extension = textureNode.FileName.slice(-3).toLowerCase();
279
-
280
- if (extension === 'tga') {
281
- const loader = this.manager.getHandler('.tga');
282
-
203
+ if (extension === "tga") {
204
+ const loader = this.manager.getHandler(".tga");
283
205
  if (loader === null) {
284
- console.warn('FBXLoader: TGA loader not found, creating placeholder texture for', textureNode.RelativeFilename);
285
- texture = new Texture();
206
+ console.warn("FBXLoader: TGA loader not found, creating placeholder texture for", textureNode.RelativeFilename);
207
+ texture = new THREE.Texture();
286
208
  } else {
287
209
  loader.setPath(this.textureLoader.path);
288
210
  texture = loader.load(fileName);
289
211
  }
290
- } else if (extension === 'psd') {
291
- console.warn('FBXLoader: PSD textures are not supported, creating placeholder texture for', textureNode.RelativeFilename);
292
- texture = new Texture();
212
+ } else if (extension === "psd") {
213
+ console.warn(
214
+ "FBXLoader: PSD textures are not supported, creating placeholder texture for",
215
+ textureNode.RelativeFilename
216
+ );
217
+ texture = new THREE.Texture();
293
218
  } else {
294
219
  texture = this.textureLoader.load(fileName);
295
220
  }
296
-
297
221
  this.textureLoader.setPath(currentPath);
298
222
  return texture;
299
- } // Parse nodes in FBXTree.Objects.Material
300
-
301
-
223
+ }
302
224
  parseMaterials(textureMap) {
303
- const materialMap = new Map();
304
-
305
- if ('Material' in fbxTree.Objects) {
225
+ const materialMap = /* @__PURE__ */ new Map();
226
+ if ("Material" in fbxTree.Objects) {
306
227
  const materialNodes = fbxTree.Objects.Material;
307
-
308
228
  for (const nodeID in materialNodes) {
309
229
  const material = this.parseMaterial(materialNodes[nodeID], textureMap);
310
- if (material !== null) materialMap.set(parseInt(nodeID), material);
230
+ if (material !== null)
231
+ materialMap.set(parseInt(nodeID), material);
311
232
  }
312
233
  }
313
-
314
234
  return materialMap;
315
- } // Parse single node in FBXTree.Objects.Material
316
- // Materials are connected to texture maps in FBXTree.Objects.Textures
317
- // FBX format currently only supports Lambert and Phong shading models
318
-
319
-
235
+ }
320
236
  parseMaterial(materialNode, textureMap) {
321
237
  const ID = materialNode.id;
322
238
  const name = materialNode.attrName;
323
- let type = materialNode.ShadingModel; // Case where FBX wraps shading model in property object.
324
-
325
- if (typeof type === 'object') {
239
+ let type = materialNode.ShadingModel;
240
+ if (typeof type === "object") {
326
241
  type = type.value;
327
- } // Ignore unused materials which don't have any connections.
328
-
329
-
330
- if (!connections.has(ID)) return null;
242
+ }
243
+ if (!connections.has(ID))
244
+ return null;
331
245
  const parameters = this.parseParameters(materialNode, textureMap, ID);
332
246
  let material;
333
-
334
247
  switch (type.toLowerCase()) {
335
- case 'phong':
336
- material = new MeshPhongMaterial();
248
+ case "phong":
249
+ material = new THREE.MeshPhongMaterial();
337
250
  break;
338
-
339
- case 'lambert':
340
- material = new MeshLambertMaterial();
251
+ case "lambert":
252
+ material = new THREE.MeshLambertMaterial();
341
253
  break;
342
-
343
254
  default:
344
255
  console.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.', type);
345
- material = new MeshPhongMaterial();
256
+ material = new THREE.MeshPhongMaterial();
346
257
  break;
347
258
  }
348
-
349
259
  material.setValues(parameters);
350
260
  material.name = name;
351
261
  return material;
352
- } // Parse FBX material and return parameters suitable for a three.js material
353
- // Also parse the texture map and return any textures associated with the material
354
-
355
-
262
+ }
356
263
  parseParameters(materialNode, textureMap, ID) {
357
264
  const parameters = {};
358
-
359
265
  if (materialNode.BumpFactor) {
360
266
  parameters.bumpScale = materialNode.BumpFactor.value;
361
267
  }
362
-
363
268
  if (materialNode.Diffuse) {
364
- parameters.color = new Color().fromArray(materialNode.Diffuse.value);
365
- } else if (materialNode.DiffuseColor && (materialNode.DiffuseColor.type === 'Color' || materialNode.DiffuseColor.type === 'ColorRGB')) {
366
- // The blender exporter exports diffuse here instead of in materialNode.Diffuse
367
- parameters.color = new Color().fromArray(materialNode.DiffuseColor.value);
269
+ parameters.color = new THREE.Color().fromArray(materialNode.Diffuse.value);
270
+ } else if (materialNode.DiffuseColor && (materialNode.DiffuseColor.type === "Color" || materialNode.DiffuseColor.type === "ColorRGB")) {
271
+ parameters.color = new THREE.Color().fromArray(materialNode.DiffuseColor.value);
368
272
  }
369
-
370
273
  if (materialNode.DisplacementFactor) {
371
274
  parameters.displacementScale = materialNode.DisplacementFactor.value;
372
275
  }
373
-
374
276
  if (materialNode.Emissive) {
375
- parameters.emissive = new Color().fromArray(materialNode.Emissive.value);
376
- } else if (materialNode.EmissiveColor && (materialNode.EmissiveColor.type === 'Color' || materialNode.EmissiveColor.type === 'ColorRGB')) {
377
- // The blender exporter exports emissive color here instead of in materialNode.Emissive
378
- parameters.emissive = new Color().fromArray(materialNode.EmissiveColor.value);
277
+ parameters.emissive = new THREE.Color().fromArray(materialNode.Emissive.value);
278
+ } else if (materialNode.EmissiveColor && (materialNode.EmissiveColor.type === "Color" || materialNode.EmissiveColor.type === "ColorRGB")) {
279
+ parameters.emissive = new THREE.Color().fromArray(materialNode.EmissiveColor.value);
379
280
  }
380
-
381
281
  if (materialNode.EmissiveFactor) {
382
282
  parameters.emissiveIntensity = parseFloat(materialNode.EmissiveFactor.value);
383
283
  }
384
-
385
284
  if (materialNode.Opacity) {
386
285
  parameters.opacity = parseFloat(materialNode.Opacity.value);
387
286
  }
388
-
389
- if (parameters.opacity < 1.0) {
287
+ if (parameters.opacity < 1) {
390
288
  parameters.transparent = true;
391
289
  }
392
-
393
290
  if (materialNode.ReflectionFactor) {
394
291
  parameters.reflectivity = materialNode.ReflectionFactor.value;
395
292
  }
396
-
397
293
  if (materialNode.Shininess) {
398
294
  parameters.shininess = materialNode.Shininess.value;
399
295
  }
400
-
401
296
  if (materialNode.Specular) {
402
- parameters.specular = new Color().fromArray(materialNode.Specular.value);
403
- } else if (materialNode.SpecularColor && materialNode.SpecularColor.type === 'Color') {
404
- // The blender exporter exports specular color here instead of in materialNode.Specular
405
- parameters.specular = new Color().fromArray(materialNode.SpecularColor.value);
297
+ parameters.specular = new THREE.Color().fromArray(materialNode.Specular.value);
298
+ } else if (materialNode.SpecularColor && materialNode.SpecularColor.type === "Color") {
299
+ parameters.specular = new THREE.Color().fromArray(materialNode.SpecularColor.value);
406
300
  }
407
-
408
301
  const scope = this;
409
- connections.get(ID).children.forEach(function (child) {
302
+ connections.get(ID).children.forEach(function(child) {
410
303
  const type = child.relationship;
411
-
412
304
  switch (type) {
413
- case 'Bump':
305
+ case "Bump":
414
306
  parameters.bumpMap = scope.getTexture(textureMap, child.ID);
415
307
  break;
416
-
417
- case 'Maya|TEX_ao_map':
308
+ case "Maya|TEX_ao_map":
418
309
  parameters.aoMap = scope.getTexture(textureMap, child.ID);
419
310
  break;
420
-
421
- case 'DiffuseColor':
422
- case 'Maya|TEX_color_map':
311
+ case "DiffuseColor":
312
+ case "Maya|TEX_color_map":
423
313
  parameters.map = scope.getTexture(textureMap, child.ID);
424
-
425
- if (parameters.map !== undefined) {
426
- parameters.map.encoding = sRGBEncoding;
314
+ if (parameters.map !== void 0) {
315
+ parameters.map.encoding = THREE.sRGBEncoding;
427
316
  }
428
-
429
317
  break;
430
-
431
- case 'DisplacementColor':
318
+ case "DisplacementColor":
432
319
  parameters.displacementMap = scope.getTexture(textureMap, child.ID);
433
320
  break;
434
-
435
- case 'EmissiveColor':
321
+ case "EmissiveColor":
436
322
  parameters.emissiveMap = scope.getTexture(textureMap, child.ID);
437
-
438
- if (parameters.emissiveMap !== undefined) {
439
- parameters.emissiveMap.encoding = sRGBEncoding;
323
+ if (parameters.emissiveMap !== void 0) {
324
+ parameters.emissiveMap.encoding = THREE.sRGBEncoding;
440
325
  }
441
-
442
326
  break;
443
-
444
- case 'NormalMap':
445
- case 'Maya|TEX_normal_map':
327
+ case "NormalMap":
328
+ case "Maya|TEX_normal_map":
446
329
  parameters.normalMap = scope.getTexture(textureMap, child.ID);
447
330
  break;
448
-
449
- case 'ReflectionColor':
331
+ case "ReflectionColor":
450
332
  parameters.envMap = scope.getTexture(textureMap, child.ID);
451
-
452
- if (parameters.envMap !== undefined) {
453
- parameters.envMap.mapping = EquirectangularReflectionMapping;
454
- parameters.envMap.encoding = sRGBEncoding;
333
+ if (parameters.envMap !== void 0) {
334
+ parameters.envMap.mapping = THREE.EquirectangularReflectionMapping;
335
+ parameters.envMap.encoding = THREE.sRGBEncoding;
455
336
  }
456
-
457
337
  break;
458
-
459
- case 'SpecularColor':
338
+ case "SpecularColor":
460
339
  parameters.specularMap = scope.getTexture(textureMap, child.ID);
461
-
462
- if (parameters.specularMap !== undefined) {
463
- parameters.specularMap.encoding = sRGBEncoding;
340
+ if (parameters.specularMap !== void 0) {
341
+ parameters.specularMap.encoding = THREE.sRGBEncoding;
464
342
  }
465
-
466
343
  break;
467
-
468
- case 'TransparentColor':
469
- case 'TransparencyFactor':
344
+ case "TransparentColor":
345
+ case "TransparencyFactor":
470
346
  parameters.alphaMap = scope.getTexture(textureMap, child.ID);
471
347
  parameters.transparent = true;
472
348
  break;
473
-
474
- case 'AmbientColor':
475
- case 'ShininessExponent': // AKA glossiness map
476
-
477
- case 'SpecularFactor': // AKA specularLevel
478
-
479
- case 'VectorDisplacementColor': // NOTE: Seems to be a copy of DisplacementColor
480
-
349
+ case "AmbientColor":
350
+ case "ShininessExponent":
351
+ case "SpecularFactor":
352
+ case "VectorDisplacementColor":
481
353
  default:
482
- console.warn('THREE.FBXLoader: %s map is not supported in three.js, skipping texture.', type);
354
+ console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.", type);
483
355
  break;
484
356
  }
485
357
  });
486
358
  return parameters;
487
- } // get a texture from the textureMap for use by a material.
488
-
489
-
359
+ }
490
360
  getTexture(textureMap, id) {
491
- // if the texture is a layered texture, just use the first layer and issue a warning
492
- if ('LayeredTexture' in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture) {
493
- console.warn('THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.');
361
+ if ("LayeredTexture" in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture) {
362
+ console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.");
494
363
  id = connections.get(id).children[0].ID;
495
364
  }
496
-
497
365
  return textureMap.get(id);
498
- } // Parse nodes in FBXTree.Objects.Deformer
499
- // Deformer node can contain skinning or Vertex Cache animation data, however only skinning is supported here
500
- // Generates map of Skeleton-like objects for use later when generating and binding skeletons.
501
-
502
-
366
+ }
503
367
  parseDeformers() {
504
368
  const skeletons = {};
505
369
  const morphTargets = {};
506
-
507
- if ('Deformer' in fbxTree.Objects) {
370
+ if ("Deformer" in fbxTree.Objects) {
508
371
  const DeformerNodes = fbxTree.Objects.Deformer;
509
-
510
372
  for (const nodeID in DeformerNodes) {
511
373
  const deformerNode = DeformerNodes[nodeID];
512
374
  const relationships = connections.get(parseInt(nodeID));
513
-
514
- if (deformerNode.attrType === 'Skin') {
375
+ if (deformerNode.attrType === "Skin") {
515
376
  const skeleton = this.parseSkeleton(relationships, DeformerNodes);
516
377
  skeleton.ID = nodeID;
517
-
518
378
  if (relationships.parents.length > 1) {
519
- console.warn('THREE.FBXLoader: skeleton attached to more than one geometry is not supported.');
379
+ console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported.");
520
380
  }
521
-
522
381
  skeleton.geometryID = relationships.parents[0].ID;
523
382
  skeletons[nodeID] = skeleton;
524
- } else if (deformerNode.attrType === 'BlendShape') {
383
+ } else if (deformerNode.attrType === "BlendShape") {
525
384
  const morphTarget = {
526
385
  id: nodeID
527
386
  };
528
387
  morphTarget.rawTargets = this.parseMorphTargets(relationships, DeformerNodes);
529
388
  morphTarget.id = nodeID;
530
-
531
389
  if (relationships.parents.length > 1) {
532
- console.warn('THREE.FBXLoader: morph target attached to more than one geometry is not supported.');
390
+ console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported.");
533
391
  }
534
-
535
392
  morphTargets[nodeID] = morphTarget;
536
393
  }
537
394
  }
538
395
  }
539
-
540
396
  return {
541
- skeletons: skeletons,
542
- morphTargets: morphTargets
397
+ skeletons,
398
+ morphTargets
543
399
  };
544
- } // Parse single nodes in FBXTree.Objects.Deformer
545
- // The top level skeleton node has type 'Skin' and sub nodes have type 'Cluster'
546
- // Each skin node represents a skeleton and each cluster node represents a bone
547
-
548
-
400
+ }
549
401
  parseSkeleton(relationships, deformerNodes) {
550
402
  const rawBones = [];
551
- relationships.children.forEach(function (child) {
403
+ relationships.children.forEach(function(child) {
552
404
  const boneNode = deformerNodes[child.ID];
553
- if (boneNode.attrType !== 'Cluster') return;
405
+ if (boneNode.attrType !== "Cluster")
406
+ return;
554
407
  const rawBone = {
555
408
  ID: child.ID,
556
409
  indices: [],
557
410
  weights: [],
558
- transformLink: new Matrix4().fromArray(boneNode.TransformLink.a) // transform: new Matrix4().fromArray( boneNode.Transform.a ),
559
- // linkMode: boneNode.Mode,
560
-
411
+ transformLink: new THREE.Matrix4().fromArray(boneNode.TransformLink.a)
561
412
  };
562
-
563
- if ('Indexes' in boneNode) {
413
+ if ("Indexes" in boneNode) {
564
414
  rawBone.indices = boneNode.Indexes.a;
565
415
  rawBone.weights = boneNode.Weights.a;
566
416
  }
567
-
568
417
  rawBones.push(rawBone);
569
418
  });
570
419
  return {
571
- rawBones: rawBones,
420
+ rawBones,
572
421
  bones: []
573
422
  };
574
- } // The top level morph deformer node has type "BlendShape" and sub nodes have type "BlendShapeChannel"
575
-
576
-
423
+ }
577
424
  parseMorphTargets(relationships, deformerNodes) {
578
425
  const rawMorphTargets = [];
579
-
580
426
  for (let i = 0; i < relationships.children.length; i++) {
581
427
  const child = relationships.children[i];
582
428
  const morphTargetNode = deformerNodes[child.ID];
@@ -586,126 +432,105 @@ class FBXTreeParser {
586
432
  id: morphTargetNode.id,
587
433
  fullWeights: morphTargetNode.FullWeights.a
588
434
  };
589
- if (morphTargetNode.attrType !== 'BlendShapeChannel') return;
590
- rawMorphTarget.geoID = connections.get(parseInt(child.ID)).children.filter(function (child) {
591
- return child.relationship === undefined;
435
+ if (morphTargetNode.attrType !== "BlendShapeChannel")
436
+ return;
437
+ rawMorphTarget.geoID = connections.get(parseInt(child.ID)).children.filter(function(child2) {
438
+ return child2.relationship === void 0;
592
439
  })[0].ID;
593
440
  rawMorphTargets.push(rawMorphTarget);
594
441
  }
595
-
596
442
  return rawMorphTargets;
597
- } // create the main Group() to be returned by the loader
598
-
599
-
443
+ }
600
444
  parseScene(deformers, geometryMap, materialMap) {
601
- sceneGraph = new Group();
445
+ sceneGraph = new THREE.Group();
602
446
  const modelMap = this.parseModels(deformers.skeletons, geometryMap, materialMap);
603
447
  const modelNodes = fbxTree.Objects.Model;
604
448
  const scope = this;
605
- modelMap.forEach(function (model) {
449
+ modelMap.forEach(function(model) {
606
450
  const modelNode = modelNodes[model.ID];
607
451
  scope.setLookAtProperties(model, modelNode);
608
452
  const parentConnections = connections.get(model.ID).parents;
609
- parentConnections.forEach(function (connection) {
453
+ parentConnections.forEach(function(connection) {
610
454
  const parent = modelMap.get(connection.ID);
611
- if (parent !== undefined) parent.add(model);
455
+ if (parent !== void 0)
456
+ parent.add(model);
612
457
  });
613
-
614
458
  if (model.parent === null) {
615
459
  sceneGraph.add(model);
616
460
  }
617
461
  });
618
462
  this.bindSkeleton(deformers.skeletons, geometryMap, modelMap);
619
463
  this.createAmbientLight();
620
- sceneGraph.traverse(function (node) {
464
+ sceneGraph.traverse(function(node) {
621
465
  if (node.userData.transformData) {
622
466
  if (node.parent) {
623
467
  node.userData.transformData.parentMatrix = node.parent.matrix;
624
468
  node.userData.transformData.parentMatrixWorld = node.parent.matrixWorld;
625
469
  }
626
-
627
470
  const transform = generateTransform(node.userData.transformData);
628
471
  node.applyMatrix4(transform);
629
472
  node.updateWorldMatrix();
630
473
  }
631
474
  });
632
- const animations = new AnimationParser().parse(); // if all the models where already combined in a single group, just return that
633
-
475
+ const animations = new AnimationParser().parse();
634
476
  if (sceneGraph.children.length === 1 && sceneGraph.children[0].isGroup) {
635
477
  sceneGraph.children[0].animations = animations;
636
478
  sceneGraph = sceneGraph.children[0];
637
479
  }
638
-
639
480
  sceneGraph.animations = animations;
640
- } // parse nodes in FBXTree.Objects.Model
641
-
642
-
481
+ }
643
482
  parseModels(skeletons, geometryMap, materialMap) {
644
- const modelMap = new Map();
483
+ const modelMap = /* @__PURE__ */ new Map();
645
484
  const modelNodes = fbxTree.Objects.Model;
646
-
647
485
  for (const nodeID in modelNodes) {
648
486
  const id = parseInt(nodeID);
649
487
  const node = modelNodes[nodeID];
650
488
  const relationships = connections.get(id);
651
489
  let model = this.buildSkeleton(relationships, skeletons, id, node.attrName);
652
-
653
490
  if (!model) {
654
491
  switch (node.attrType) {
655
- case 'Camera':
492
+ case "Camera":
656
493
  model = this.createCamera(relationships);
657
494
  break;
658
-
659
- case 'Light':
495
+ case "Light":
660
496
  model = this.createLight(relationships);
661
497
  break;
662
-
663
- case 'Mesh':
498
+ case "Mesh":
664
499
  model = this.createMesh(relationships, geometryMap, materialMap);
665
500
  break;
666
-
667
- case 'NurbsCurve':
501
+ case "NurbsCurve":
668
502
  model = this.createCurve(relationships, geometryMap);
669
503
  break;
670
-
671
- case 'LimbNode':
672
- case 'Root':
673
- model = new Bone();
504
+ case "LimbNode":
505
+ case "Root":
506
+ model = new THREE.Bone();
674
507
  break;
675
-
676
- case 'Null':
508
+ case "Null":
677
509
  default:
678
- model = new Group();
510
+ model = new THREE.Group();
679
511
  break;
680
512
  }
681
-
682
- model.name = node.attrName ? PropertyBinding.sanitizeNodeName(node.attrName) : '';
513
+ model.name = node.attrName ? THREE.PropertyBinding.sanitizeNodeName(node.attrName) : "";
683
514
  model.ID = id;
684
515
  }
685
-
686
516
  this.getTransformData(model, node);
687
517
  modelMap.set(id, model);
688
518
  }
689
-
690
519
  return modelMap;
691
520
  }
692
-
693
521
  buildSkeleton(relationships, skeletons, id, name) {
694
522
  let bone = null;
695
- relationships.parents.forEach(function (parent) {
523
+ relationships.parents.forEach(function(parent) {
696
524
  for (const ID in skeletons) {
697
525
  const skeleton = skeletons[ID];
698
- skeleton.rawBones.forEach(function (rawBone, i) {
526
+ skeleton.rawBones.forEach(function(rawBone, i) {
699
527
  if (rawBone.ID === parent.ID) {
700
528
  const subBone = bone;
701
- bone = new Bone();
702
- bone.matrixWorld.copy(rawBone.transformLink); // set name and id here - otherwise in cases where "subBone" is created it will not have a name / id
703
-
704
- bone.name = name ? PropertyBinding.sanitizeNodeName(name) : '';
529
+ bone = new THREE.Bone();
530
+ bone.matrixWorld.copy(rawBone.transformLink);
531
+ bone.name = name ? THREE.PropertyBinding.sanitizeNodeName(name) : "";
705
532
  bone.ID = id;
706
- skeleton.bones[i] = bone; // In cases where a bone is shared between multiple meshes
707
- // duplicate the bone here and and it as a child of the first bone
708
-
533
+ skeleton.bones[i] = bone;
709
534
  if (subBone !== null) {
710
535
  bone.add(subBone);
711
536
  }
@@ -714,502 +539,415 @@ class FBXTreeParser {
714
539
  }
715
540
  });
716
541
  return bone;
717
- } // create a PerspectiveCamera or OrthographicCamera
718
-
719
-
542
+ }
720
543
  createCamera(relationships) {
721
544
  let model;
722
545
  let cameraAttribute;
723
- relationships.children.forEach(function (child) {
546
+ relationships.children.forEach(function(child) {
724
547
  const attr = fbxTree.Objects.NodeAttribute[child.ID];
725
-
726
- if (attr !== undefined) {
548
+ if (attr !== void 0) {
727
549
  cameraAttribute = attr;
728
550
  }
729
551
  });
730
-
731
- if (cameraAttribute === undefined) {
732
- model = new Object3D();
552
+ if (cameraAttribute === void 0) {
553
+ model = new THREE.Object3D();
733
554
  } else {
734
555
  let type = 0;
735
-
736
- if (cameraAttribute.CameraProjectionType !== undefined && cameraAttribute.CameraProjectionType.value === 1) {
556
+ if (cameraAttribute.CameraProjectionType !== void 0 && cameraAttribute.CameraProjectionType.value === 1) {
737
557
  type = 1;
738
558
  }
739
-
740
559
  let nearClippingPlane = 1;
741
-
742
- if (cameraAttribute.NearPlane !== undefined) {
743
- nearClippingPlane = cameraAttribute.NearPlane.value / 1000;
560
+ if (cameraAttribute.NearPlane !== void 0) {
561
+ nearClippingPlane = cameraAttribute.NearPlane.value / 1e3;
744
562
  }
745
-
746
- let farClippingPlane = 1000;
747
-
748
- if (cameraAttribute.FarPlane !== undefined) {
749
- farClippingPlane = cameraAttribute.FarPlane.value / 1000;
563
+ let farClippingPlane = 1e3;
564
+ if (cameraAttribute.FarPlane !== void 0) {
565
+ farClippingPlane = cameraAttribute.FarPlane.value / 1e3;
750
566
  }
751
-
752
567
  let width = window.innerWidth;
753
568
  let height = window.innerHeight;
754
-
755
- if (cameraAttribute.AspectWidth !== undefined && cameraAttribute.AspectHeight !== undefined) {
569
+ if (cameraAttribute.AspectWidth !== void 0 && cameraAttribute.AspectHeight !== void 0) {
756
570
  width = cameraAttribute.AspectWidth.value;
757
571
  height = cameraAttribute.AspectHeight.value;
758
572
  }
759
-
760
573
  const aspect = width / height;
761
574
  let fov = 45;
762
-
763
- if (cameraAttribute.FieldOfView !== undefined) {
575
+ if (cameraAttribute.FieldOfView !== void 0) {
764
576
  fov = cameraAttribute.FieldOfView.value;
765
577
  }
766
-
767
578
  const focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null;
768
-
769
579
  switch (type) {
770
580
  case 0:
771
- // Perspective
772
- model = new PerspectiveCamera(fov, aspect, nearClippingPlane, farClippingPlane);
773
- if (focalLength !== null) model.setFocalLength(focalLength);
581
+ model = new THREE.PerspectiveCamera(fov, aspect, nearClippingPlane, farClippingPlane);
582
+ if (focalLength !== null)
583
+ model.setFocalLength(focalLength);
774
584
  break;
775
-
776
585
  case 1:
777
- // Orthographic
778
- model = new OrthographicCamera(-width / 2, width / 2, height / 2, -height / 2, nearClippingPlane, farClippingPlane);
586
+ model = new THREE.OrthographicCamera(
587
+ -width / 2,
588
+ width / 2,
589
+ height / 2,
590
+ -height / 2,
591
+ nearClippingPlane,
592
+ farClippingPlane
593
+ );
779
594
  break;
780
-
781
595
  default:
782
- console.warn('THREE.FBXLoader: Unknown camera type ' + type + '.');
783
- model = new Object3D();
596
+ console.warn("THREE.FBXLoader: Unknown camera type " + type + ".");
597
+ model = new THREE.Object3D();
784
598
  break;
785
599
  }
786
600
  }
787
-
788
601
  return model;
789
- } // Create a DirectionalLight, PointLight or SpotLight
790
-
791
-
602
+ }
792
603
  createLight(relationships) {
793
604
  let model;
794
605
  let lightAttribute;
795
- relationships.children.forEach(function (child) {
606
+ relationships.children.forEach(function(child) {
796
607
  const attr = fbxTree.Objects.NodeAttribute[child.ID];
797
-
798
- if (attr !== undefined) {
608
+ if (attr !== void 0) {
799
609
  lightAttribute = attr;
800
610
  }
801
611
  });
802
-
803
- if (lightAttribute === undefined) {
804
- model = new Object3D();
612
+ if (lightAttribute === void 0) {
613
+ model = new THREE.Object3D();
805
614
  } else {
806
- let type; // LightType can be undefined for Point lights
807
-
808
- if (lightAttribute.LightType === undefined) {
615
+ let type;
616
+ if (lightAttribute.LightType === void 0) {
809
617
  type = 0;
810
618
  } else {
811
619
  type = lightAttribute.LightType.value;
812
620
  }
813
-
814
- let color = 0xffffff;
815
-
816
- if (lightAttribute.Color !== undefined) {
817
- color = new Color().fromArray(lightAttribute.Color.value);
621
+ let color = 16777215;
622
+ if (lightAttribute.Color !== void 0) {
623
+ color = new THREE.Color().fromArray(lightAttribute.Color.value);
818
624
  }
819
-
820
- let intensity = lightAttribute.Intensity === undefined ? 1 : lightAttribute.Intensity.value / 100; // light disabled
821
-
822
- if (lightAttribute.CastLightOnObject !== undefined && lightAttribute.CastLightOnObject.value === 0) {
625
+ let intensity = lightAttribute.Intensity === void 0 ? 1 : lightAttribute.Intensity.value / 100;
626
+ if (lightAttribute.CastLightOnObject !== void 0 && lightAttribute.CastLightOnObject.value === 0) {
823
627
  intensity = 0;
824
628
  }
825
-
826
629
  let distance = 0;
827
-
828
- if (lightAttribute.FarAttenuationEnd !== undefined) {
829
- if (lightAttribute.EnableFarAttenuation !== undefined && lightAttribute.EnableFarAttenuation.value === 0) {
630
+ if (lightAttribute.FarAttenuationEnd !== void 0) {
631
+ if (lightAttribute.EnableFarAttenuation !== void 0 && lightAttribute.EnableFarAttenuation.value === 0) {
830
632
  distance = 0;
831
633
  } else {
832
634
  distance = lightAttribute.FarAttenuationEnd.value;
833
635
  }
834
- } // TODO: could this be calculated linearly from FarAttenuationStart to FarAttenuationEnd?
835
-
836
-
636
+ }
837
637
  const decay = 1;
838
-
839
638
  switch (type) {
840
639
  case 0:
841
- // Point
842
- model = new PointLight(color, intensity, distance, decay);
640
+ model = new THREE.PointLight(color, intensity, distance, decay);
843
641
  break;
844
-
845
642
  case 1:
846
- // Directional
847
- model = new DirectionalLight(color, intensity);
643
+ model = new THREE.DirectionalLight(color, intensity);
848
644
  break;
849
-
850
645
  case 2:
851
- // Spot
852
646
  let angle = Math.PI / 3;
853
-
854
- if (lightAttribute.InnerAngle !== undefined) {
855
- angle = MathUtils.degToRad(lightAttribute.InnerAngle.value);
647
+ if (lightAttribute.InnerAngle !== void 0) {
648
+ angle = THREE.MathUtils.degToRad(lightAttribute.InnerAngle.value);
856
649
  }
857
-
858
650
  let penumbra = 0;
859
-
860
- if (lightAttribute.OuterAngle !== undefined) {
861
- // TODO: this is not correct - FBX calculates outer and inner angle in degrees
862
- // with OuterAngle > InnerAngle && OuterAngle <= Math.PI
863
- // while three.js uses a penumbra between (0, 1) to attenuate the inner angle
864
- penumbra = MathUtils.degToRad(lightAttribute.OuterAngle.value);
651
+ if (lightAttribute.OuterAngle !== void 0) {
652
+ penumbra = THREE.MathUtils.degToRad(lightAttribute.OuterAngle.value);
865
653
  penumbra = Math.max(penumbra, 1);
866
654
  }
867
-
868
- model = new SpotLight(color, intensity, distance, angle, penumbra, decay);
655
+ model = new THREE.SpotLight(color, intensity, distance, angle, penumbra, decay);
869
656
  break;
870
-
871
657
  default:
872
- console.warn('THREE.FBXLoader: Unknown light type ' + lightAttribute.LightType.value + ', defaulting to a PointLight.');
873
- model = new PointLight(color, intensity);
658
+ console.warn(
659
+ "THREE.FBXLoader: Unknown light type " + lightAttribute.LightType.value + ", defaulting to a PointLight."
660
+ );
661
+ model = new THREE.PointLight(color, intensity);
874
662
  break;
875
663
  }
876
-
877
- if (lightAttribute.CastShadows !== undefined && lightAttribute.CastShadows.value === 1) {
664
+ if (lightAttribute.CastShadows !== void 0 && lightAttribute.CastShadows.value === 1) {
878
665
  model.castShadow = true;
879
666
  }
880
667
  }
881
-
882
668
  return model;
883
669
  }
884
-
885
670
  createMesh(relationships, geometryMap, materialMap) {
886
671
  let model;
887
672
  let geometry = null;
888
673
  let material = null;
889
- const materials = []; // get geometry and materials(s) from connections
890
-
891
- relationships.children.forEach(function (child) {
674
+ const materials = [];
675
+ relationships.children.forEach(function(child) {
892
676
  if (geometryMap.has(child.ID)) {
893
677
  geometry = geometryMap.get(child.ID);
894
678
  }
895
-
896
679
  if (materialMap.has(child.ID)) {
897
680
  materials.push(materialMap.get(child.ID));
898
681
  }
899
682
  });
900
-
901
683
  if (materials.length > 1) {
902
684
  material = materials;
903
685
  } else if (materials.length > 0) {
904
686
  material = materials[0];
905
687
  } else {
906
- material = new MeshPhongMaterial({
907
- color: 0xcccccc
908
- });
688
+ material = new THREE.MeshPhongMaterial({ color: 13421772 });
909
689
  materials.push(material);
910
690
  }
911
-
912
- if ('color' in geometry.attributes) {
913
- materials.forEach(function (material) {
914
- material.vertexColors = true;
691
+ if ("color" in geometry.attributes) {
692
+ materials.forEach(function(material2) {
693
+ material2.vertexColors = true;
915
694
  });
916
695
  }
917
-
918
696
  if (geometry.FBX_Deformer) {
919
- model = new SkinnedMesh(geometry, material);
697
+ model = new THREE.SkinnedMesh(geometry, material);
920
698
  model.normalizeSkinWeights();
921
699
  } else {
922
- model = new Mesh(geometry, material);
700
+ model = new THREE.Mesh(geometry, material);
923
701
  }
924
-
925
702
  return model;
926
703
  }
927
-
928
704
  createCurve(relationships, geometryMap) {
929
- const geometry = relationships.children.reduce(function (geo, child) {
930
- if (geometryMap.has(child.ID)) geo = geometryMap.get(child.ID);
705
+ const geometry = relationships.children.reduce(function(geo, child) {
706
+ if (geometryMap.has(child.ID))
707
+ geo = geometryMap.get(child.ID);
931
708
  return geo;
932
- }, null); // FBX does not list materials for Nurbs lines, so we'll just put our own in here.
933
-
934
- const material = new LineBasicMaterial({
935
- color: 0x3300ff,
936
- linewidth: 1
937
- });
938
- return new Line(geometry, material);
939
- } // parse the model node for transform data
940
-
941
-
709
+ }, null);
710
+ const material = new THREE.LineBasicMaterial({ color: 3342591, linewidth: 1 });
711
+ return new THREE.Line(geometry, material);
712
+ }
942
713
  getTransformData(model, modelNode) {
943
714
  const transformData = {};
944
- if ('InheritType' in modelNode) transformData.inheritType = parseInt(modelNode.InheritType.value);
945
- if ('RotationOrder' in modelNode) transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value);else transformData.eulerOrder = 'ZYX';
946
- if ('Lcl_Translation' in modelNode) transformData.translation = modelNode.Lcl_Translation.value;
947
- if ('PreRotation' in modelNode) transformData.preRotation = modelNode.PreRotation.value;
948
- if ('Lcl_Rotation' in modelNode) transformData.rotation = modelNode.Lcl_Rotation.value;
949
- if ('PostRotation' in modelNode) transformData.postRotation = modelNode.PostRotation.value;
950
- if ('Lcl_Scaling' in modelNode) transformData.scale = modelNode.Lcl_Scaling.value;
951
- if ('ScalingOffset' in modelNode) transformData.scalingOffset = modelNode.ScalingOffset.value;
952
- if ('ScalingPivot' in modelNode) transformData.scalingPivot = modelNode.ScalingPivot.value;
953
- if ('RotationOffset' in modelNode) transformData.rotationOffset = modelNode.RotationOffset.value;
954
- if ('RotationPivot' in modelNode) transformData.rotationPivot = modelNode.RotationPivot.value;
715
+ if ("InheritType" in modelNode)
716
+ transformData.inheritType = parseInt(modelNode.InheritType.value);
717
+ if ("RotationOrder" in modelNode)
718
+ transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value);
719
+ else
720
+ transformData.eulerOrder = "ZYX";
721
+ if ("Lcl_Translation" in modelNode)
722
+ transformData.translation = modelNode.Lcl_Translation.value;
723
+ if ("PreRotation" in modelNode)
724
+ transformData.preRotation = modelNode.PreRotation.value;
725
+ if ("Lcl_Rotation" in modelNode)
726
+ transformData.rotation = modelNode.Lcl_Rotation.value;
727
+ if ("PostRotation" in modelNode)
728
+ transformData.postRotation = modelNode.PostRotation.value;
729
+ if ("Lcl_Scaling" in modelNode)
730
+ transformData.scale = modelNode.Lcl_Scaling.value;
731
+ if ("ScalingOffset" in modelNode)
732
+ transformData.scalingOffset = modelNode.ScalingOffset.value;
733
+ if ("ScalingPivot" in modelNode)
734
+ transformData.scalingPivot = modelNode.ScalingPivot.value;
735
+ if ("RotationOffset" in modelNode)
736
+ transformData.rotationOffset = modelNode.RotationOffset.value;
737
+ if ("RotationPivot" in modelNode)
738
+ transformData.rotationPivot = modelNode.RotationPivot.value;
955
739
  model.userData.transformData = transformData;
956
740
  }
957
-
958
741
  setLookAtProperties(model, modelNode) {
959
- if ('LookAtProperty' in modelNode) {
742
+ if ("LookAtProperty" in modelNode) {
960
743
  const children = connections.get(model.ID).children;
961
- children.forEach(function (child) {
962
- if (child.relationship === 'LookAtProperty') {
744
+ children.forEach(function(child) {
745
+ if (child.relationship === "LookAtProperty") {
963
746
  const lookAtTarget = fbxTree.Objects.Model[child.ID];
964
-
965
- if ('Lcl_Translation' in lookAtTarget) {
966
- const pos = lookAtTarget.Lcl_Translation.value; // DirectionalLight, SpotLight
967
-
968
- if (model.target !== undefined) {
747
+ if ("Lcl_Translation" in lookAtTarget) {
748
+ const pos = lookAtTarget.Lcl_Translation.value;
749
+ if (model.target !== void 0) {
969
750
  model.target.position.fromArray(pos);
970
751
  sceneGraph.add(model.target);
971
752
  } else {
972
- // Cameras and other Object3Ds
973
- model.lookAt(new Vector3().fromArray(pos));
753
+ model.lookAt(new THREE.Vector3().fromArray(pos));
974
754
  }
975
755
  }
976
756
  }
977
757
  });
978
758
  }
979
759
  }
980
-
981
760
  bindSkeleton(skeletons, geometryMap, modelMap) {
982
761
  const bindMatrices = this.parsePoseNodes();
983
-
984
762
  for (const ID in skeletons) {
985
763
  const skeleton = skeletons[ID];
986
764
  const parents = connections.get(parseInt(skeleton.ID)).parents;
987
- parents.forEach(function (parent) {
765
+ parents.forEach(function(parent) {
988
766
  if (geometryMap.has(parent.ID)) {
989
767
  const geoID = parent.ID;
990
768
  const geoRelationships = connections.get(geoID);
991
- geoRelationships.parents.forEach(function (geoConnParent) {
769
+ geoRelationships.parents.forEach(function(geoConnParent) {
992
770
  if (modelMap.has(geoConnParent.ID)) {
993
771
  const model = modelMap.get(geoConnParent.ID);
994
- model.bind(new Skeleton(skeleton.bones), bindMatrices[geoConnParent.ID]);
772
+ model.bind(new THREE.Skeleton(skeleton.bones), bindMatrices[geoConnParent.ID]);
995
773
  }
996
774
  });
997
775
  }
998
776
  });
999
777
  }
1000
778
  }
1001
-
1002
779
  parsePoseNodes() {
1003
780
  const bindMatrices = {};
1004
-
1005
- if ('Pose' in fbxTree.Objects) {
781
+ if ("Pose" in fbxTree.Objects) {
1006
782
  const BindPoseNode = fbxTree.Objects.Pose;
1007
-
1008
783
  for (const nodeID in BindPoseNode) {
1009
- if (BindPoseNode[nodeID].attrType === 'BindPose' && BindPoseNode[nodeID].NbPoseNodes > 0) {
784
+ if (BindPoseNode[nodeID].attrType === "BindPose" && BindPoseNode[nodeID].NbPoseNodes > 0) {
1010
785
  const poseNodes = BindPoseNode[nodeID].PoseNode;
1011
-
1012
786
  if (Array.isArray(poseNodes)) {
1013
- poseNodes.forEach(function (poseNode) {
1014
- bindMatrices[poseNode.Node] = new Matrix4().fromArray(poseNode.Matrix.a);
787
+ poseNodes.forEach(function(poseNode) {
788
+ bindMatrices[poseNode.Node] = new THREE.Matrix4().fromArray(poseNode.Matrix.a);
1015
789
  });
1016
790
  } else {
1017
- bindMatrices[poseNodes.Node] = new Matrix4().fromArray(poseNodes.Matrix.a);
791
+ bindMatrices[poseNodes.Node] = new THREE.Matrix4().fromArray(poseNodes.Matrix.a);
1018
792
  }
1019
793
  }
1020
794
  }
1021
795
  }
1022
-
1023
796
  return bindMatrices;
1024
- } // Parse ambient color in FBXTree.GlobalSettings - if it's not set to black (default), create an ambient light
1025
-
1026
-
797
+ }
1027
798
  createAmbientLight() {
1028
- if ('GlobalSettings' in fbxTree && 'AmbientColor' in fbxTree.GlobalSettings) {
799
+ if ("GlobalSettings" in fbxTree && "AmbientColor" in fbxTree.GlobalSettings) {
1029
800
  const ambientColor = fbxTree.GlobalSettings.AmbientColor.value;
1030
801
  const r = ambientColor[0];
1031
802
  const g = ambientColor[1];
1032
803
  const b = ambientColor[2];
1033
-
1034
804
  if (r !== 0 || g !== 0 || b !== 0) {
1035
- const color = new Color(r, g, b);
1036
- sceneGraph.add(new AmbientLight(color, 1));
805
+ const color = new THREE.Color(r, g, b);
806
+ sceneGraph.add(new THREE.AmbientLight(color, 1));
1037
807
  }
1038
808
  }
1039
809
  }
1040
-
1041
- } // parse Geometry data from FBXTree and return map of BufferGeometries
1042
-
1043
-
810
+ }
1044
811
  class GeometryParser {
1045
- // Parse nodes in FBXTree.Objects.Geometry
1046
812
  parse(deformers) {
1047
- const geometryMap = new Map();
1048
-
1049
- if ('Geometry' in fbxTree.Objects) {
813
+ const geometryMap = /* @__PURE__ */ new Map();
814
+ if ("Geometry" in fbxTree.Objects) {
1050
815
  const geoNodes = fbxTree.Objects.Geometry;
1051
-
1052
816
  for (const nodeID in geoNodes) {
1053
817
  const relationships = connections.get(parseInt(nodeID));
1054
818
  const geo = this.parseGeometry(relationships, geoNodes[nodeID], deformers);
1055
819
  geometryMap.set(parseInt(nodeID), geo);
1056
820
  }
1057
821
  }
1058
-
1059
822
  return geometryMap;
1060
- } // Parse single node in FBXTree.Objects.Geometry
1061
-
1062
-
823
+ }
1063
824
  parseGeometry(relationships, geoNode, deformers) {
1064
825
  switch (geoNode.attrType) {
1065
- case 'Mesh':
826
+ case "Mesh":
1066
827
  return this.parseMeshGeometry(relationships, geoNode, deformers);
1067
-
1068
- case 'NurbsCurve':
828
+ break;
829
+ case "NurbsCurve":
1069
830
  return this.parseNurbsGeometry(geoNode);
831
+ break;
1070
832
  }
1071
- } // Parse single node mesh geometry in FBXTree.Objects.Geometry
1072
-
1073
-
833
+ }
1074
834
  parseMeshGeometry(relationships, geoNode, deformers) {
1075
835
  const skeletons = deformers.skeletons;
1076
836
  const morphTargets = [];
1077
- const modelNodes = relationships.parents.map(function (parent) {
837
+ const modelNodes = relationships.parents.map(function(parent) {
1078
838
  return fbxTree.Objects.Model[parent.ID];
1079
- }); // don't create geometry if it is not associated with any models
1080
-
1081
- if (modelNodes.length === 0) return;
1082
- const skeleton = relationships.children.reduce(function (skeleton, child) {
1083
- if (skeletons[child.ID] !== undefined) skeleton = skeletons[child.ID];
1084
- return skeleton;
839
+ });
840
+ if (modelNodes.length === 0)
841
+ return;
842
+ const skeleton = relationships.children.reduce(function(skeleton2, child) {
843
+ if (skeletons[child.ID] !== void 0)
844
+ skeleton2 = skeletons[child.ID];
845
+ return skeleton2;
1085
846
  }, null);
1086
- relationships.children.forEach(function (child) {
1087
- if (deformers.morphTargets[child.ID] !== undefined) {
847
+ relationships.children.forEach(function(child) {
848
+ if (deformers.morphTargets[child.ID] !== void 0) {
1088
849
  morphTargets.push(deformers.morphTargets[child.ID]);
1089
850
  }
1090
- }); // Assume one model and get the preRotation from that
1091
- // if there is more than one model associated with the geometry this may cause problems
1092
-
851
+ });
1093
852
  const modelNode = modelNodes[0];
1094
853
  const transformData = {};
1095
- if ('RotationOrder' in modelNode) transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value);
1096
- if ('InheritType' in modelNode) transformData.inheritType = parseInt(modelNode.InheritType.value);
1097
- if ('GeometricTranslation' in modelNode) transformData.translation = modelNode.GeometricTranslation.value;
1098
- if ('GeometricRotation' in modelNode) transformData.rotation = modelNode.GeometricRotation.value;
1099
- if ('GeometricScaling' in modelNode) transformData.scale = modelNode.GeometricScaling.value;
854
+ if ("RotationOrder" in modelNode)
855
+ transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value);
856
+ if ("InheritType" in modelNode)
857
+ transformData.inheritType = parseInt(modelNode.InheritType.value);
858
+ if ("GeometricTranslation" in modelNode)
859
+ transformData.translation = modelNode.GeometricTranslation.value;
860
+ if ("GeometricRotation" in modelNode)
861
+ transformData.rotation = modelNode.GeometricRotation.value;
862
+ if ("GeometricScaling" in modelNode)
863
+ transformData.scale = modelNode.GeometricScaling.value;
1100
864
  const transform = generateTransform(transformData);
1101
865
  return this.genGeometry(geoNode, skeleton, morphTargets, transform);
1102
- } // Generate a BufferGeometry from a node in FBXTree.Objects.Geometry
1103
-
1104
-
866
+ }
1105
867
  genGeometry(geoNode, skeleton, morphTargets, preTransform) {
1106
- const geo = new BufferGeometry();
1107
- if (geoNode.attrName) geo.name = geoNode.attrName;
868
+ const geo = new THREE.BufferGeometry();
869
+ if (geoNode.attrName)
870
+ geo.name = geoNode.attrName;
1108
871
  const geoInfo = this.parseGeoNode(geoNode, skeleton);
1109
872
  const buffers = this.genBuffers(geoInfo);
1110
- const positionAttribute = new Float32BufferAttribute(buffers.vertex, 3);
873
+ const positionAttribute = new THREE.Float32BufferAttribute(buffers.vertex, 3);
1111
874
  positionAttribute.applyMatrix4(preTransform);
1112
- geo.setAttribute('position', positionAttribute);
1113
-
875
+ geo.setAttribute("position", positionAttribute);
1114
876
  if (buffers.colors.length > 0) {
1115
- geo.setAttribute('color', new Float32BufferAttribute(buffers.colors, 3));
877
+ geo.setAttribute("color", new THREE.Float32BufferAttribute(buffers.colors, 3));
1116
878
  }
1117
-
1118
879
  if (skeleton) {
1119
- geo.setAttribute('skinIndex', new Uint16BufferAttribute(buffers.weightsIndices, 4));
1120
- geo.setAttribute('skinWeight', new Float32BufferAttribute(buffers.vertexWeights, 4)); // used later to bind the skeleton to the model
1121
-
880
+ geo.setAttribute("skinIndex", new THREE.Uint16BufferAttribute(buffers.weightsIndices, 4));
881
+ geo.setAttribute("skinWeight", new THREE.Float32BufferAttribute(buffers.vertexWeights, 4));
1122
882
  geo.FBX_Deformer = skeleton;
1123
883
  }
1124
-
1125
884
  if (buffers.normal.length > 0) {
1126
- const normalMatrix = new Matrix3().getNormalMatrix(preTransform);
1127
- const normalAttribute = new Float32BufferAttribute(buffers.normal, 3);
885
+ const normalMatrix = new THREE.Matrix3().getNormalMatrix(preTransform);
886
+ const normalAttribute = new THREE.Float32BufferAttribute(buffers.normal, 3);
1128
887
  normalAttribute.applyNormalMatrix(normalMatrix);
1129
- geo.setAttribute('normal', normalAttribute);
888
+ geo.setAttribute("normal", normalAttribute);
1130
889
  }
1131
-
1132
- buffers.uvs.forEach(function (uvBuffer, i) {
1133
- // subsequent uv buffers are called 'uv1', 'uv2', ...
1134
- let name = 'uv' + (i + 1).toString(); // the first uv buffer is just called 'uv'
1135
-
890
+ buffers.uvs.forEach(function(uvBuffer, i) {
891
+ let name = "uv" + (i + 1).toString();
1136
892
  if (i === 0) {
1137
- name = 'uv';
893
+ name = "uv";
1138
894
  }
1139
-
1140
- geo.setAttribute(name, new Float32BufferAttribute(buffers.uvs[i], 2));
895
+ geo.setAttribute(name, new THREE.Float32BufferAttribute(buffers.uvs[i], 2));
1141
896
  });
1142
-
1143
- if (geoInfo.material && geoInfo.material.mappingType !== 'AllSame') {
1144
- // Convert the material indices of each vertex into rendering groups on the geometry.
897
+ if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") {
1145
898
  let prevMaterialIndex = buffers.materialIndex[0];
1146
899
  let startIndex = 0;
1147
- buffers.materialIndex.forEach(function (currentIndex, i) {
900
+ buffers.materialIndex.forEach(function(currentIndex, i) {
1148
901
  if (currentIndex !== prevMaterialIndex) {
1149
902
  geo.addGroup(startIndex, i - startIndex, prevMaterialIndex);
1150
903
  prevMaterialIndex = currentIndex;
1151
904
  startIndex = i;
1152
905
  }
1153
- }); // the loop above doesn't add the last group, do that here.
1154
-
906
+ });
1155
907
  if (geo.groups.length > 0) {
1156
908
  const lastGroup = geo.groups[geo.groups.length - 1];
1157
909
  const lastIndex = lastGroup.start + lastGroup.count;
1158
-
1159
910
  if (lastIndex !== buffers.materialIndex.length) {
1160
911
  geo.addGroup(lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex);
1161
912
  }
1162
- } // case where there are multiple materials but the whole geometry is only
1163
- // using one of them
1164
-
1165
-
913
+ }
1166
914
  if (geo.groups.length === 0) {
1167
915
  geo.addGroup(0, buffers.materialIndex.length, buffers.materialIndex[0]);
1168
916
  }
1169
917
  }
1170
-
1171
918
  this.addMorphTargets(geo, geoNode, morphTargets, preTransform);
1172
919
  return geo;
1173
920
  }
1174
-
1175
921
  parseGeoNode(geoNode, skeleton) {
1176
922
  const geoInfo = {};
1177
- geoInfo.vertexPositions = geoNode.Vertices !== undefined ? geoNode.Vertices.a : [];
1178
- geoInfo.vertexIndices = geoNode.PolygonVertexIndex !== undefined ? geoNode.PolygonVertexIndex.a : [];
1179
-
923
+ geoInfo.vertexPositions = geoNode.Vertices !== void 0 ? geoNode.Vertices.a : [];
924
+ geoInfo.vertexIndices = geoNode.PolygonVertexIndex !== void 0 ? geoNode.PolygonVertexIndex.a : [];
1180
925
  if (geoNode.LayerElementColor) {
1181
926
  geoInfo.color = this.parseVertexColors(geoNode.LayerElementColor[0]);
1182
927
  }
1183
-
1184
928
  if (geoNode.LayerElementMaterial) {
1185
929
  geoInfo.material = this.parseMaterialIndices(geoNode.LayerElementMaterial[0]);
1186
930
  }
1187
-
1188
931
  if (geoNode.LayerElementNormal) {
1189
932
  geoInfo.normal = this.parseNormals(geoNode.LayerElementNormal[0]);
1190
933
  }
1191
-
1192
934
  if (geoNode.LayerElementUV) {
1193
935
  geoInfo.uv = [];
1194
936
  let i = 0;
1195
-
1196
937
  while (geoNode.LayerElementUV[i]) {
1197
938
  if (geoNode.LayerElementUV[i].UV) {
1198
939
  geoInfo.uv.push(this.parseUVs(geoNode.LayerElementUV[i]));
1199
940
  }
1200
-
1201
941
  i++;
1202
942
  }
1203
943
  }
1204
-
1205
944
  geoInfo.weightTable = {};
1206
-
1207
945
  if (skeleton !== null) {
1208
946
  geoInfo.skeleton = skeleton;
1209
- skeleton.rawBones.forEach(function (rawBone, i) {
1210
- // loop over the bone's vertex indices and weights
1211
- rawBone.indices.forEach(function (index, j) {
1212
- if (geoInfo.weightTable[index] === undefined) geoInfo.weightTable[index] = [];
947
+ skeleton.rawBones.forEach(function(rawBone, i) {
948
+ rawBone.indices.forEach(function(index, j) {
949
+ if (geoInfo.weightTable[index] === void 0)
950
+ geoInfo.weightTable[index] = [];
1213
951
  geoInfo.weightTable[index].push({
1214
952
  id: i,
1215
953
  weight: rawBone.weights[j]
@@ -1217,10 +955,8 @@ class GeometryParser {
1217
955
  });
1218
956
  });
1219
957
  }
1220
-
1221
958
  return geoInfo;
1222
959
  }
1223
-
1224
960
  genBuffers(geoInfo) {
1225
961
  const buffers = {
1226
962
  vertex: [],
@@ -1233,8 +969,7 @@ class GeometryParser {
1233
969
  };
1234
970
  let polygonIndex = 0;
1235
971
  let faceLength = 0;
1236
- let displayedWeightsWarning = false; // these will hold data for a single face
1237
-
972
+ let displayedWeightsWarning = false;
1238
973
  let facePositionIndexes = [];
1239
974
  let faceNormals = [];
1240
975
  let faceColors = [];
@@ -1242,51 +977,40 @@ class GeometryParser {
1242
977
  let faceWeights = [];
1243
978
  let faceWeightIndices = [];
1244
979
  const scope = this;
1245
- geoInfo.vertexIndices.forEach(function (vertexIndex, polygonVertexIndex) {
980
+ geoInfo.vertexIndices.forEach(function(vertexIndex, polygonVertexIndex) {
1246
981
  let materialIndex;
1247
- let endOfFace = false; // Face index and vertex index arrays are combined in a single array
1248
- // A cube with quad faces looks like this:
1249
- // PolygonVertexIndex: *24 {
1250
- // a: 0, 1, 3, -3, 2, 3, 5, -5, 4, 5, 7, -7, 6, 7, 1, -1, 1, 7, 5, -4, 6, 0, 2, -5
1251
- // }
1252
- // Negative numbers mark the end of a face - first face here is 0, 1, 3, -3
1253
- // to find index of last vertex bit shift the index: ^ - 1
1254
-
982
+ let endOfFace = false;
1255
983
  if (vertexIndex < 0) {
1256
- vertexIndex = vertexIndex ^ -1; // equivalent to ( x * -1 ) - 1
1257
-
984
+ vertexIndex = vertexIndex ^ -1;
1258
985
  endOfFace = true;
1259
986
  }
1260
-
1261
987
  let weightIndices = [];
1262
988
  let weights = [];
1263
989
  facePositionIndexes.push(vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2);
1264
-
1265
990
  if (geoInfo.color) {
1266
991
  const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color);
1267
992
  faceColors.push(data[0], data[1], data[2]);
1268
993
  }
1269
-
1270
994
  if (geoInfo.skeleton) {
1271
- if (geoInfo.weightTable[vertexIndex] !== undefined) {
1272
- geoInfo.weightTable[vertexIndex].forEach(function (wt) {
995
+ if (geoInfo.weightTable[vertexIndex] !== void 0) {
996
+ geoInfo.weightTable[vertexIndex].forEach(function(wt) {
1273
997
  weights.push(wt.weight);
1274
998
  weightIndices.push(wt.id);
1275
999
  });
1276
1000
  }
1277
-
1278
1001
  if (weights.length > 4) {
1279
1002
  if (!displayedWeightsWarning) {
1280
- console.warn('THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights.');
1003
+ console.warn(
1004
+ "THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."
1005
+ );
1281
1006
  displayedWeightsWarning = true;
1282
1007
  }
1283
-
1284
1008
  const wIndex = [0, 0, 0, 0];
1285
1009
  const Weight = [0, 0, 0, 0];
1286
- weights.forEach(function (weight, weightIndex) {
1010
+ weights.forEach(function(weight, weightIndex) {
1287
1011
  let currentWeight = weight;
1288
1012
  let currentIndex = weightIndices[weightIndex];
1289
- Weight.forEach(function (comparedWeight, comparedWeightIndex, comparedWeightArray) {
1013
+ Weight.forEach(function(comparedWeight, comparedWeightIndex, comparedWeightArray) {
1290
1014
  if (currentWeight > comparedWeight) {
1291
1015
  comparedWeightArray[comparedWeightIndex] = currentWeight;
1292
1016
  currentWeight = comparedWeight;
@@ -1298,49 +1022,49 @@ class GeometryParser {
1298
1022
  });
1299
1023
  weightIndices = wIndex;
1300
1024
  weights = Weight;
1301
- } // if the weight array is shorter than 4 pad with 0s
1302
-
1303
-
1025
+ }
1304
1026
  while (weights.length < 4) {
1305
1027
  weights.push(0);
1306
1028
  weightIndices.push(0);
1307
1029
  }
1308
-
1309
1030
  for (let i = 0; i < 4; ++i) {
1310
1031
  faceWeights.push(weights[i]);
1311
1032
  faceWeightIndices.push(weightIndices[i]);
1312
1033
  }
1313
1034
  }
1314
-
1315
1035
  if (geoInfo.normal) {
1316
1036
  const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal);
1317
1037
  faceNormals.push(data[0], data[1], data[2]);
1318
1038
  }
1319
-
1320
- if (geoInfo.material && geoInfo.material.mappingType !== 'AllSame') {
1039
+ if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") {
1321
1040
  materialIndex = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material)[0];
1322
1041
  }
1323
-
1324
1042
  if (geoInfo.uv) {
1325
- geoInfo.uv.forEach(function (uv, i) {
1043
+ geoInfo.uv.forEach(function(uv, i) {
1326
1044
  const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, uv);
1327
-
1328
- if (faceUVs[i] === undefined) {
1045
+ if (faceUVs[i] === void 0) {
1329
1046
  faceUVs[i] = [];
1330
1047
  }
1331
-
1332
1048
  faceUVs[i].push(data[0]);
1333
1049
  faceUVs[i].push(data[1]);
1334
1050
  });
1335
1051
  }
1336
-
1337
1052
  faceLength++;
1338
-
1339
1053
  if (endOfFace) {
1340
- scope.genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength);
1054
+ scope.genFace(
1055
+ buffers,
1056
+ geoInfo,
1057
+ facePositionIndexes,
1058
+ materialIndex,
1059
+ faceNormals,
1060
+ faceColors,
1061
+ faceUVs,
1062
+ faceWeights,
1063
+ faceWeightIndices,
1064
+ faceLength
1065
+ );
1341
1066
  polygonIndex++;
1342
- faceLength = 0; // reset arrays for the next face
1343
-
1067
+ faceLength = 0;
1344
1068
  facePositionIndexes = [];
1345
1069
  faceNormals = [];
1346
1070
  faceColors = [];
@@ -1350,9 +1074,7 @@ class GeometryParser {
1350
1074
  }
1351
1075
  });
1352
1076
  return buffers;
1353
- } // Generate data for a single face in a geometry. If the face is a quad then split it into 2 tris
1354
-
1355
-
1077
+ }
1356
1078
  genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength) {
1357
1079
  for (let i = 2; i < faceLength; i++) {
1358
1080
  buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[0]]);
@@ -1364,7 +1086,6 @@ class GeometryParser {
1364
1086
  buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3]]);
1365
1087
  buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3 + 1]]);
1366
1088
  buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3 + 2]]);
1367
-
1368
1089
  if (geoInfo.skeleton) {
1369
1090
  buffers.vertexWeights.push(faceWeights[0]);
1370
1091
  buffers.vertexWeights.push(faceWeights[1]);
@@ -1391,7 +1112,6 @@ class GeometryParser {
1391
1112
  buffers.weightsIndices.push(faceWeightIndices[i * 4 + 2]);
1392
1113
  buffers.weightsIndices.push(faceWeightIndices[i * 4 + 3]);
1393
1114
  }
1394
-
1395
1115
  if (geoInfo.color) {
1396
1116
  buffers.colors.push(faceColors[0]);
1397
1117
  buffers.colors.push(faceColors[1]);
@@ -1403,13 +1123,11 @@ class GeometryParser {
1403
1123
  buffers.colors.push(faceColors[i * 3 + 1]);
1404
1124
  buffers.colors.push(faceColors[i * 3 + 2]);
1405
1125
  }
1406
-
1407
- if (geoInfo.material && geoInfo.material.mappingType !== 'AllSame') {
1126
+ if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") {
1408
1127
  buffers.materialIndex.push(materialIndex);
1409
1128
  buffers.materialIndex.push(materialIndex);
1410
1129
  buffers.materialIndex.push(materialIndex);
1411
1130
  }
1412
-
1413
1131
  if (geoInfo.normal) {
1414
1132
  buffers.normal.push(faceNormals[0]);
1415
1133
  buffers.normal.push(faceNormals[1]);
@@ -1421,10 +1139,10 @@ class GeometryParser {
1421
1139
  buffers.normal.push(faceNormals[i * 3 + 1]);
1422
1140
  buffers.normal.push(faceNormals[i * 3 + 2]);
1423
1141
  }
1424
-
1425
1142
  if (geoInfo.uv) {
1426
- geoInfo.uv.forEach(function (uv, j) {
1427
- if (buffers.uvs[j] === undefined) buffers.uvs[j] = [];
1143
+ geoInfo.uv.forEach(function(uv, j) {
1144
+ if (buffers.uvs[j] === void 0)
1145
+ buffers.uvs[j] = [];
1428
1146
  buffers.uvs[j].push(faceUVs[j][0]);
1429
1147
  buffers.uvs[j].push(faceUVs[j][1]);
1430
1148
  buffers.uvs[j].push(faceUVs[j][(i - 1) * 2]);
@@ -1435,234 +1153,181 @@ class GeometryParser {
1435
1153
  }
1436
1154
  }
1437
1155
  }
1438
-
1439
1156
  addMorphTargets(parentGeo, parentGeoNode, morphTargets, preTransform) {
1440
- if (morphTargets.length === 0) return;
1157
+ if (morphTargets.length === 0)
1158
+ return;
1441
1159
  parentGeo.morphTargetsRelative = true;
1442
- parentGeo.morphAttributes.position = []; // parentGeo.morphAttributes.normal = []; // not implemented
1443
-
1160
+ parentGeo.morphAttributes.position = [];
1444
1161
  const scope = this;
1445
- morphTargets.forEach(function (morphTarget) {
1446
- morphTarget.rawTargets.forEach(function (rawTarget) {
1162
+ morphTargets.forEach(function(morphTarget) {
1163
+ morphTarget.rawTargets.forEach(function(rawTarget) {
1447
1164
  const morphGeoNode = fbxTree.Objects.Geometry[rawTarget.geoID];
1448
-
1449
- if (morphGeoNode !== undefined) {
1165
+ if (morphGeoNode !== void 0) {
1450
1166
  scope.genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name);
1451
1167
  }
1452
1168
  });
1453
1169
  });
1454
- } // a morph geometry node is similar to a standard node, and the node is also contained
1455
- // in FBXTree.Objects.Geometry, however it can only have attributes for position, normal
1456
- // and a special attribute Index defining which vertices of the original geometry are affected
1457
- // Normal and position attributes only have data for the vertices that are affected by the morph
1458
-
1459
-
1170
+ }
1460
1171
  genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, name) {
1461
- const vertexIndices = parentGeoNode.PolygonVertexIndex !== undefined ? parentGeoNode.PolygonVertexIndex.a : [];
1462
- const morphPositionsSparse = morphGeoNode.Vertices !== undefined ? morphGeoNode.Vertices.a : [];
1463
- const indices = morphGeoNode.Indexes !== undefined ? morphGeoNode.Indexes.a : [];
1172
+ const vertexIndices = parentGeoNode.PolygonVertexIndex !== void 0 ? parentGeoNode.PolygonVertexIndex.a : [];
1173
+ const morphPositionsSparse = morphGeoNode.Vertices !== void 0 ? morphGeoNode.Vertices.a : [];
1174
+ const indices = morphGeoNode.Indexes !== void 0 ? morphGeoNode.Indexes.a : [];
1464
1175
  const length = parentGeo.attributes.position.count * 3;
1465
1176
  const morphPositions = new Float32Array(length);
1466
-
1467
1177
  for (let i = 0; i < indices.length; i++) {
1468
1178
  const morphIndex = indices[i] * 3;
1469
1179
  morphPositions[morphIndex] = morphPositionsSparse[i * 3];
1470
1180
  morphPositions[morphIndex + 1] = morphPositionsSparse[i * 3 + 1];
1471
1181
  morphPositions[morphIndex + 2] = morphPositionsSparse[i * 3 + 2];
1472
- } // TODO: add morph normal support
1473
-
1474
-
1182
+ }
1475
1183
  const morphGeoInfo = {
1476
- vertexIndices: vertexIndices,
1184
+ vertexIndices,
1477
1185
  vertexPositions: morphPositions
1478
1186
  };
1479
1187
  const morphBuffers = this.genBuffers(morphGeoInfo);
1480
- const positionAttribute = new Float32BufferAttribute(morphBuffers.vertex, 3);
1188
+ const positionAttribute = new THREE.Float32BufferAttribute(morphBuffers.vertex, 3);
1481
1189
  positionAttribute.name = name || morphGeoNode.attrName;
1482
1190
  positionAttribute.applyMatrix4(preTransform);
1483
1191
  parentGeo.morphAttributes.position.push(positionAttribute);
1484
- } // Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists
1485
-
1486
-
1192
+ }
1487
1193
  parseNormals(NormalNode) {
1488
1194
  const mappingType = NormalNode.MappingInformationType;
1489
1195
  const referenceType = NormalNode.ReferenceInformationType;
1490
1196
  const buffer = NormalNode.Normals.a;
1491
1197
  let indexBuffer = [];
1492
-
1493
- if (referenceType === 'IndexToDirect') {
1494
- if ('NormalIndex' in NormalNode) {
1198
+ if (referenceType === "IndexToDirect") {
1199
+ if ("NormalIndex" in NormalNode) {
1495
1200
  indexBuffer = NormalNode.NormalIndex.a;
1496
- } else if ('NormalsIndex' in NormalNode) {
1201
+ } else if ("NormalsIndex" in NormalNode) {
1497
1202
  indexBuffer = NormalNode.NormalsIndex.a;
1498
1203
  }
1499
1204
  }
1500
-
1501
1205
  return {
1502
1206
  dataSize: 3,
1503
- buffer: buffer,
1207
+ buffer,
1504
1208
  indices: indexBuffer,
1505
- mappingType: mappingType,
1506
- referenceType: referenceType
1209
+ mappingType,
1210
+ referenceType
1507
1211
  };
1508
- } // Parse UVs from FBXTree.Objects.Geometry.LayerElementUV if it exists
1509
-
1510
-
1212
+ }
1511
1213
  parseUVs(UVNode) {
1512
1214
  const mappingType = UVNode.MappingInformationType;
1513
1215
  const referenceType = UVNode.ReferenceInformationType;
1514
1216
  const buffer = UVNode.UV.a;
1515
1217
  let indexBuffer = [];
1516
-
1517
- if (referenceType === 'IndexToDirect') {
1218
+ if (referenceType === "IndexToDirect") {
1518
1219
  indexBuffer = UVNode.UVIndex.a;
1519
1220
  }
1520
-
1521
1221
  return {
1522
1222
  dataSize: 2,
1523
- buffer: buffer,
1223
+ buffer,
1524
1224
  indices: indexBuffer,
1525
- mappingType: mappingType,
1526
- referenceType: referenceType
1225
+ mappingType,
1226
+ referenceType
1527
1227
  };
1528
- } // Parse Vertex Colors from FBXTree.Objects.Geometry.LayerElementColor if it exists
1529
-
1530
-
1228
+ }
1531
1229
  parseVertexColors(ColorNode) {
1532
1230
  const mappingType = ColorNode.MappingInformationType;
1533
1231
  const referenceType = ColorNode.ReferenceInformationType;
1534
1232
  const buffer = ColorNode.Colors.a;
1535
1233
  let indexBuffer = [];
1536
-
1537
- if (referenceType === 'IndexToDirect') {
1234
+ if (referenceType === "IndexToDirect") {
1538
1235
  indexBuffer = ColorNode.ColorIndex.a;
1539
1236
  }
1540
-
1541
1237
  return {
1542
1238
  dataSize: 4,
1543
- buffer: buffer,
1239
+ buffer,
1544
1240
  indices: indexBuffer,
1545
- mappingType: mappingType,
1546
- referenceType: referenceType
1241
+ mappingType,
1242
+ referenceType
1547
1243
  };
1548
- } // Parse mapping and material data in FBXTree.Objects.Geometry.LayerElementMaterial if it exists
1549
-
1550
-
1244
+ }
1551
1245
  parseMaterialIndices(MaterialNode) {
1552
1246
  const mappingType = MaterialNode.MappingInformationType;
1553
1247
  const referenceType = MaterialNode.ReferenceInformationType;
1554
-
1555
- if (mappingType === 'NoMappingInformation') {
1248
+ if (mappingType === "NoMappingInformation") {
1556
1249
  return {
1557
1250
  dataSize: 1,
1558
1251
  buffer: [0],
1559
1252
  indices: [0],
1560
- mappingType: 'AllSame',
1561
- referenceType: referenceType
1253
+ mappingType: "AllSame",
1254
+ referenceType
1562
1255
  };
1563
1256
  }
1564
-
1565
- const materialIndexBuffer = MaterialNode.Materials.a; // Since materials are stored as indices, there's a bit of a mismatch between FBX and what
1566
- // we expect.So we create an intermediate buffer that points to the index in the buffer,
1567
- // for conforming with the other functions we've written for other data.
1568
-
1257
+ const materialIndexBuffer = MaterialNode.Materials.a;
1569
1258
  const materialIndices = [];
1570
-
1571
1259
  for (let i = 0; i < materialIndexBuffer.length; ++i) {
1572
1260
  materialIndices.push(i);
1573
1261
  }
1574
-
1575
1262
  return {
1576
1263
  dataSize: 1,
1577
1264
  buffer: materialIndexBuffer,
1578
1265
  indices: materialIndices,
1579
- mappingType: mappingType,
1580
- referenceType: referenceType
1266
+ mappingType,
1267
+ referenceType
1581
1268
  };
1582
- } // Generate a NurbGeometry from a node in FBXTree.Objects.Geometry
1583
-
1584
-
1269
+ }
1585
1270
  parseNurbsGeometry(geoNode) {
1586
- if (NURBSCurve === undefined) {
1587
- console.error('THREE.FBXLoader: The loader relies on NURBSCurve for any nurbs present in the model. Nurbs will show up as empty geometry.');
1588
- return new BufferGeometry();
1271
+ if (NURBSCurve.NURBSCurve === void 0) {
1272
+ console.error(
1273
+ "THREE.FBXLoader: The loader relies on NURBSCurve for any nurbs present in the model. Nurbs will show up as empty geometry."
1274
+ );
1275
+ return new THREE.BufferGeometry();
1589
1276
  }
1590
-
1591
1277
  const order = parseInt(geoNode.Order);
1592
-
1593
1278
  if (isNaN(order)) {
1594
- console.error('THREE.FBXLoader: Invalid Order %s given for geometry ID: %s', geoNode.Order, geoNode.id);
1595
- return new BufferGeometry();
1279
+ console.error("THREE.FBXLoader: Invalid Order %s given for geometry ID: %s", geoNode.Order, geoNode.id);
1280
+ return new THREE.BufferGeometry();
1596
1281
  }
1597
-
1598
1282
  const degree = order - 1;
1599
1283
  const knots = geoNode.KnotVector.a;
1600
1284
  const controlPoints = [];
1601
1285
  const pointsValues = geoNode.Points.a;
1602
-
1603
1286
  for (let i = 0, l = pointsValues.length; i < l; i += 4) {
1604
- controlPoints.push(new Vector4().fromArray(pointsValues, i));
1287
+ controlPoints.push(new THREE.Vector4().fromArray(pointsValues, i));
1605
1288
  }
1606
-
1607
1289
  let startKnot, endKnot;
1608
-
1609
- if (geoNode.Form === 'Closed') {
1290
+ if (geoNode.Form === "Closed") {
1610
1291
  controlPoints.push(controlPoints[0]);
1611
- } else if (geoNode.Form === 'Periodic') {
1292
+ } else if (geoNode.Form === "Periodic") {
1612
1293
  startKnot = degree;
1613
1294
  endKnot = knots.length - 1 - startKnot;
1614
-
1615
1295
  for (let i = 0; i < degree; ++i) {
1616
1296
  controlPoints.push(controlPoints[i]);
1617
1297
  }
1618
1298
  }
1619
-
1620
- const curve = new NURBSCurve(degree, knots, controlPoints, startKnot, endKnot);
1299
+ const curve = new NURBSCurve.NURBSCurve(degree, knots, controlPoints, startKnot, endKnot);
1621
1300
  const points = curve.getPoints(controlPoints.length * 12);
1622
- return new BufferGeometry().setFromPoints(points);
1301
+ return new THREE.BufferGeometry().setFromPoints(points);
1623
1302
  }
1624
-
1625
- } // parse animation data from FBXTree
1626
-
1627
-
1303
+ }
1628
1304
  class AnimationParser {
1629
- // take raw animation clips and turn them into three.js animation clips
1630
1305
  parse() {
1631
1306
  const animationClips = [];
1632
1307
  const rawClips = this.parseClips();
1633
-
1634
- if (rawClips !== undefined) {
1308
+ if (rawClips !== void 0) {
1635
1309
  for (const key in rawClips) {
1636
1310
  const rawClip = rawClips[key];
1637
1311
  const clip = this.addClip(rawClip);
1638
1312
  animationClips.push(clip);
1639
1313
  }
1640
1314
  }
1641
-
1642
1315
  return animationClips;
1643
1316
  }
1644
-
1645
1317
  parseClips() {
1646
- // since the actual transformation data is stored in FBXTree.Objects.AnimationCurve,
1647
- // if this is undefined we can safely assume there are no animations
1648
- if (fbxTree.Objects.AnimationCurve === undefined) return undefined;
1318
+ if (fbxTree.Objects.AnimationCurve === void 0)
1319
+ return void 0;
1649
1320
  const curveNodesMap = this.parseAnimationCurveNodes();
1650
1321
  this.parseAnimationCurves(curveNodesMap);
1651
1322
  const layersMap = this.parseAnimationLayers(curveNodesMap);
1652
1323
  const rawClips = this.parseAnimStacks(layersMap);
1653
1324
  return rawClips;
1654
- } // parse nodes in FBXTree.Objects.AnimationCurveNode
1655
- // each AnimationCurveNode holds data for an animation transform for a model (e.g. left arm rotation )
1656
- // and is referenced by an AnimationLayer
1657
-
1658
-
1325
+ }
1659
1326
  parseAnimationCurveNodes() {
1660
1327
  const rawCurveNodes = fbxTree.Objects.AnimationCurveNode;
1661
- const curveNodesMap = new Map();
1662
-
1328
+ const curveNodesMap = /* @__PURE__ */ new Map();
1663
1329
  for (const nodeID in rawCurveNodes) {
1664
1330
  const rawCurveNode = rawCurveNodes[nodeID];
1665
-
1666
1331
  if (rawCurveNode.attrName.match(/S|R|T|DeformPercent/) !== null) {
1667
1332
  const curveNode = {
1668
1333
  id: rawCurveNode.id,
@@ -1672,21 +1337,10 @@ class AnimationParser {
1672
1337
  curveNodesMap.set(curveNode.id, curveNode);
1673
1338
  }
1674
1339
  }
1675
-
1676
1340
  return curveNodesMap;
1677
- } // parse nodes in FBXTree.Objects.AnimationCurve and connect them up to
1678
- // previously parsed AnimationCurveNodes. Each AnimationCurve holds data for a single animated
1679
- // axis ( e.g. times and values of x rotation)
1680
-
1681
-
1341
+ }
1682
1342
  parseAnimationCurves(curveNodesMap) {
1683
- const rawCurves = fbxTree.Objects.AnimationCurve; // TODO: Many values are identical up to roundoff error, but won't be optimised
1684
- // e.g. position times: [0, 0.4, 0. 8]
1685
- // position values: [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.235384487103147e-7, 93.67520904541016, -0.9982695579528809]
1686
- // clearly, this should be optimised to
1687
- // times: [0], positions [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809]
1688
- // this shows up in nearly every FBX file, and generally time array is length > 100
1689
-
1343
+ const rawCurves = fbxTree.Objects.AnimationCurve;
1690
1344
  for (const nodeID in rawCurves) {
1691
1345
  const animationCurve = {
1692
1346
  id: rawCurves[nodeID].id,
@@ -1694,96 +1348,83 @@ class AnimationParser {
1694
1348
  values: rawCurves[nodeID].KeyValueFloat.a
1695
1349
  };
1696
1350
  const relationships = connections.get(animationCurve.id);
1697
-
1698
- if (relationships !== undefined) {
1351
+ if (relationships !== void 0) {
1699
1352
  const animationCurveID = relationships.parents[0].ID;
1700
1353
  const animationCurveRelationship = relationships.parents[0].relationship;
1701
-
1702
1354
  if (animationCurveRelationship.match(/X/)) {
1703
- curveNodesMap.get(animationCurveID).curves['x'] = animationCurve;
1355
+ curveNodesMap.get(animationCurveID).curves["x"] = animationCurve;
1704
1356
  } else if (animationCurveRelationship.match(/Y/)) {
1705
- curveNodesMap.get(animationCurveID).curves['y'] = animationCurve;
1357
+ curveNodesMap.get(animationCurveID).curves["y"] = animationCurve;
1706
1358
  } else if (animationCurveRelationship.match(/Z/)) {
1707
- curveNodesMap.get(animationCurveID).curves['z'] = animationCurve;
1359
+ curveNodesMap.get(animationCurveID).curves["z"] = animationCurve;
1708
1360
  } else if (animationCurveRelationship.match(/d|DeformPercent/) && curveNodesMap.has(animationCurveID)) {
1709
- curveNodesMap.get(animationCurveID).curves['morph'] = animationCurve;
1361
+ curveNodesMap.get(animationCurveID).curves["morph"] = animationCurve;
1710
1362
  }
1711
1363
  }
1712
1364
  }
1713
- } // parse nodes in FBXTree.Objects.AnimationLayer. Each layers holds references
1714
- // to various AnimationCurveNodes and is referenced by an AnimationStack node
1715
- // note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack
1716
-
1717
-
1365
+ }
1718
1366
  parseAnimationLayers(curveNodesMap) {
1719
1367
  const rawLayers = fbxTree.Objects.AnimationLayer;
1720
- const layersMap = new Map();
1721
-
1368
+ const layersMap = /* @__PURE__ */ new Map();
1722
1369
  for (const nodeID in rawLayers) {
1723
1370
  const layerCurveNodes = [];
1724
1371
  const connection = connections.get(parseInt(nodeID));
1725
-
1726
- if (connection !== undefined) {
1727
- // all the animationCurveNodes used in the layer
1372
+ if (connection !== void 0) {
1728
1373
  const children = connection.children;
1729
- children.forEach(function (child, i) {
1374
+ children.forEach(function(child, i) {
1730
1375
  if (curveNodesMap.has(child.ID)) {
1731
- const curveNode = curveNodesMap.get(child.ID); // check that the curves are defined for at least one axis, otherwise ignore the curveNode
1732
-
1733
- if (curveNode.curves.x !== undefined || curveNode.curves.y !== undefined || curveNode.curves.z !== undefined) {
1734
- if (layerCurveNodes[i] === undefined) {
1735
- const modelID = connections.get(child.ID).parents.filter(function (parent) {
1736
- return parent.relationship !== undefined;
1376
+ const curveNode = curveNodesMap.get(child.ID);
1377
+ if (curveNode.curves.x !== void 0 || curveNode.curves.y !== void 0 || curveNode.curves.z !== void 0) {
1378
+ if (layerCurveNodes[i] === void 0) {
1379
+ const modelID = connections.get(child.ID).parents.filter(function(parent) {
1380
+ return parent.relationship !== void 0;
1737
1381
  })[0].ID;
1738
-
1739
- if (modelID !== undefined) {
1382
+ if (modelID !== void 0) {
1740
1383
  const rawModel = fbxTree.Objects.Model[modelID.toString()];
1741
-
1742
- if (rawModel === undefined) {
1743
- console.warn('THREE.FBXLoader: Encountered a unused curve.', child);
1384
+ if (rawModel === void 0) {
1385
+ console.warn("THREE.FBXLoader: Encountered a unused curve.", child);
1744
1386
  return;
1745
1387
  }
1746
-
1747
1388
  const node = {
1748
- modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : '',
1389
+ modelName: rawModel.attrName ? THREE.PropertyBinding.sanitizeNodeName(rawModel.attrName) : "",
1749
1390
  ID: rawModel.id,
1750
1391
  initialPosition: [0, 0, 0],
1751
1392
  initialRotation: [0, 0, 0],
1752
1393
  initialScale: [1, 1, 1]
1753
1394
  };
1754
- sceneGraph.traverse(function (child) {
1755
- if (child.ID === rawModel.id) {
1756
- node.transform = child.matrix;
1757
- if (child.userData.transformData) node.eulerOrder = child.userData.transformData.eulerOrder;
1395
+ sceneGraph.traverse(function(child2) {
1396
+ if (child2.ID === rawModel.id) {
1397
+ node.transform = child2.matrix;
1398
+ if (child2.userData.transformData)
1399
+ node.eulerOrder = child2.userData.transformData.eulerOrder;
1758
1400
  }
1759
1401
  });
1760
- if (!node.transform) node.transform = new Matrix4(); // if the animated model is pre rotated, we'll have to apply the pre rotations to every
1761
- // animation value as well
1762
-
1763
- if ('PreRotation' in rawModel) node.preRotation = rawModel.PreRotation.value;
1764
- if ('PostRotation' in rawModel) node.postRotation = rawModel.PostRotation.value;
1402
+ if (!node.transform)
1403
+ node.transform = new THREE.Matrix4();
1404
+ if ("PreRotation" in rawModel)
1405
+ node.preRotation = rawModel.PreRotation.value;
1406
+ if ("PostRotation" in rawModel)
1407
+ node.postRotation = rawModel.PostRotation.value;
1765
1408
  layerCurveNodes[i] = node;
1766
1409
  }
1767
1410
  }
1768
-
1769
- if (layerCurveNodes[i]) layerCurveNodes[i][curveNode.attr] = curveNode;
1770
- } else if (curveNode.curves.morph !== undefined) {
1771
- if (layerCurveNodes[i] === undefined) {
1772
- const deformerID = connections.get(child.ID).parents.filter(function (parent) {
1773
- return parent.relationship !== undefined;
1411
+ if (layerCurveNodes[i])
1412
+ layerCurveNodes[i][curveNode.attr] = curveNode;
1413
+ } else if (curveNode.curves.morph !== void 0) {
1414
+ if (layerCurveNodes[i] === void 0) {
1415
+ const deformerID = connections.get(child.ID).parents.filter(function(parent) {
1416
+ return parent.relationship !== void 0;
1774
1417
  })[0].ID;
1775
1418
  const morpherID = connections.get(deformerID).parents[0].ID;
1776
- const geoID = connections.get(morpherID).parents[0].ID; // assuming geometry is not used in more than one model
1777
-
1419
+ const geoID = connections.get(morpherID).parents[0].ID;
1778
1420
  const modelID = connections.get(geoID).parents[0].ID;
1779
1421
  const rawModel = fbxTree.Objects.Model[modelID];
1780
1422
  const node = {
1781
- modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : '',
1423
+ modelName: rawModel.attrName ? THREE.PropertyBinding.sanitizeNodeName(rawModel.attrName) : "",
1782
1424
  morphName: fbxTree.Objects.Deformer[deformerID].attrName
1783
1425
  };
1784
1426
  layerCurveNodes[i] = node;
1785
1427
  }
1786
-
1787
1428
  layerCurveNodes[i][curveNode.attr] = curveNode;
1788
1429
  }
1789
1430
  }
@@ -1791,194 +1432,182 @@ class AnimationParser {
1791
1432
  layersMap.set(parseInt(nodeID), layerCurveNodes);
1792
1433
  }
1793
1434
  }
1794
-
1795
1435
  return layersMap;
1796
- } // parse nodes in FBXTree.Objects.AnimationStack. These are the top level node in the animation
1797
- // hierarchy. Each Stack node will be used to create a AnimationClip
1798
-
1799
-
1436
+ }
1800
1437
  parseAnimStacks(layersMap) {
1801
- const rawStacks = fbxTree.Objects.AnimationStack; // connect the stacks (clips) up to the layers
1802
-
1438
+ const rawStacks = fbxTree.Objects.AnimationStack;
1803
1439
  const rawClips = {};
1804
-
1805
1440
  for (const nodeID in rawStacks) {
1806
1441
  const children = connections.get(parseInt(nodeID)).children;
1807
-
1808
1442
  if (children.length > 1) {
1809
- // it seems like stacks will always be associated with a single layer. But just in case there are files
1810
- // where there are multiple layers per stack, we'll display a warning
1811
- console.warn('THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.');
1443
+ console.warn(
1444
+ "THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers."
1445
+ );
1812
1446
  }
1813
-
1814
1447
  const layer = layersMap.get(children[0].ID);
1815
1448
  rawClips[nodeID] = {
1816
1449
  name: rawStacks[nodeID].attrName,
1817
- layer: layer
1450
+ layer
1818
1451
  };
1819
1452
  }
1820
-
1821
1453
  return rawClips;
1822
1454
  }
1823
-
1824
1455
  addClip(rawClip) {
1825
1456
  let tracks = [];
1826
1457
  const scope = this;
1827
- rawClip.layer.forEach(function (rawTracks) {
1458
+ rawClip.layer.forEach(function(rawTracks) {
1828
1459
  tracks = tracks.concat(scope.generateTracks(rawTracks));
1829
1460
  });
1830
- return new AnimationClip(rawClip.name, -1, tracks);
1461
+ return new THREE.AnimationClip(rawClip.name, -1, tracks);
1831
1462
  }
1832
-
1833
1463
  generateTracks(rawTracks) {
1834
1464
  const tracks = [];
1835
- let initialPosition = new Vector3();
1836
- let initialRotation = new Quaternion();
1837
- let initialScale = new Vector3();
1838
- if (rawTracks.transform) rawTracks.transform.decompose(initialPosition, initialRotation, initialScale);
1465
+ let initialPosition = new THREE.Vector3();
1466
+ let initialRotation = new THREE.Quaternion();
1467
+ let initialScale = new THREE.Vector3();
1468
+ if (rawTracks.transform)
1469
+ rawTracks.transform.decompose(initialPosition, initialRotation, initialScale);
1839
1470
  initialPosition = initialPosition.toArray();
1840
- initialRotation = new Euler().setFromQuaternion(initialRotation, rawTracks.eulerOrder).toArray();
1471
+ initialRotation = new THREE.Euler().setFromQuaternion(initialRotation, rawTracks.eulerOrder).toArray();
1841
1472
  initialScale = initialScale.toArray();
1842
-
1843
- if (rawTracks.T !== undefined && Object.keys(rawTracks.T.curves).length > 0) {
1844
- const positionTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.T.curves, initialPosition, 'position');
1845
- if (positionTrack !== undefined) tracks.push(positionTrack);
1846
- }
1847
-
1848
- if (rawTracks.R !== undefined && Object.keys(rawTracks.R.curves).length > 0) {
1849
- const rotationTrack = this.generateRotationTrack(rawTracks.modelName, rawTracks.R.curves, initialRotation, rawTracks.preRotation, rawTracks.postRotation, rawTracks.eulerOrder);
1850
- if (rotationTrack !== undefined) tracks.push(rotationTrack);
1851
- }
1852
-
1853
- if (rawTracks.S !== undefined && Object.keys(rawTracks.S.curves).length > 0) {
1854
- const scaleTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.S.curves, initialScale, 'scale');
1855
- if (scaleTrack !== undefined) tracks.push(scaleTrack);
1856
- }
1857
-
1858
- if (rawTracks.DeformPercent !== undefined) {
1473
+ if (rawTracks.T !== void 0 && Object.keys(rawTracks.T.curves).length > 0) {
1474
+ const positionTrack = this.generateVectorTrack(
1475
+ rawTracks.modelName,
1476
+ rawTracks.T.curves,
1477
+ initialPosition,
1478
+ "position"
1479
+ );
1480
+ if (positionTrack !== void 0)
1481
+ tracks.push(positionTrack);
1482
+ }
1483
+ if (rawTracks.R !== void 0 && Object.keys(rawTracks.R.curves).length > 0) {
1484
+ const rotationTrack = this.generateRotationTrack(
1485
+ rawTracks.modelName,
1486
+ rawTracks.R.curves,
1487
+ initialRotation,
1488
+ rawTracks.preRotation,
1489
+ rawTracks.postRotation,
1490
+ rawTracks.eulerOrder
1491
+ );
1492
+ if (rotationTrack !== void 0)
1493
+ tracks.push(rotationTrack);
1494
+ }
1495
+ if (rawTracks.S !== void 0 && Object.keys(rawTracks.S.curves).length > 0) {
1496
+ const scaleTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.S.curves, initialScale, "scale");
1497
+ if (scaleTrack !== void 0)
1498
+ tracks.push(scaleTrack);
1499
+ }
1500
+ if (rawTracks.DeformPercent !== void 0) {
1859
1501
  const morphTrack = this.generateMorphTrack(rawTracks);
1860
- if (morphTrack !== undefined) tracks.push(morphTrack);
1502
+ if (morphTrack !== void 0)
1503
+ tracks.push(morphTrack);
1861
1504
  }
1862
-
1863
1505
  return tracks;
1864
1506
  }
1865
-
1866
1507
  generateVectorTrack(modelName, curves, initialValue, type) {
1867
1508
  const times = this.getTimesForAllAxes(curves);
1868
1509
  const values = this.getKeyframeTrackValues(times, curves, initialValue);
1869
- return new VectorKeyframeTrack(modelName + '.' + type, times, values);
1510
+ return new THREE.VectorKeyframeTrack(modelName + "." + type, times, values);
1870
1511
  }
1871
-
1872
1512
  generateRotationTrack(modelName, curves, initialValue, preRotation, postRotation, eulerOrder) {
1873
- if (curves.x !== undefined) {
1513
+ if (curves.x !== void 0) {
1874
1514
  this.interpolateRotations(curves.x);
1875
- curves.x.values = curves.x.values.map(MathUtils.degToRad);
1515
+ curves.x.values = curves.x.values.map(THREE.MathUtils.degToRad);
1876
1516
  }
1877
-
1878
- if (curves.y !== undefined) {
1517
+ if (curves.y !== void 0) {
1879
1518
  this.interpolateRotations(curves.y);
1880
- curves.y.values = curves.y.values.map(MathUtils.degToRad);
1519
+ curves.y.values = curves.y.values.map(THREE.MathUtils.degToRad);
1881
1520
  }
1882
-
1883
- if (curves.z !== undefined) {
1521
+ if (curves.z !== void 0) {
1884
1522
  this.interpolateRotations(curves.z);
1885
- curves.z.values = curves.z.values.map(MathUtils.degToRad);
1523
+ curves.z.values = curves.z.values.map(THREE.MathUtils.degToRad);
1886
1524
  }
1887
-
1888
1525
  const times = this.getTimesForAllAxes(curves);
1889
1526
  const values = this.getKeyframeTrackValues(times, curves, initialValue);
1890
-
1891
- if (preRotation !== undefined) {
1892
- preRotation = preRotation.map(MathUtils.degToRad);
1527
+ if (preRotation !== void 0) {
1528
+ preRotation = preRotation.map(THREE.MathUtils.degToRad);
1893
1529
  preRotation.push(eulerOrder);
1894
- preRotation = new Euler().fromArray(preRotation);
1895
- preRotation = new Quaternion().setFromEuler(preRotation);
1530
+ preRotation = new THREE.Euler().fromArray(preRotation);
1531
+ preRotation = new THREE.Quaternion().setFromEuler(preRotation);
1896
1532
  }
1897
-
1898
- if (postRotation !== undefined) {
1899
- postRotation = postRotation.map(MathUtils.degToRad);
1533
+ if (postRotation !== void 0) {
1534
+ postRotation = postRotation.map(THREE.MathUtils.degToRad);
1900
1535
  postRotation.push(eulerOrder);
1901
- postRotation = new Euler().fromArray(postRotation);
1902
- postRotation = new Quaternion().setFromEuler(postRotation).invert();
1536
+ postRotation = new THREE.Euler().fromArray(postRotation);
1537
+ postRotation = new THREE.Quaternion().setFromEuler(postRotation).invert();
1903
1538
  }
1904
-
1905
- const quaternion = new Quaternion();
1906
- const euler = new Euler();
1539
+ const quaternion = new THREE.Quaternion();
1540
+ const euler = new THREE.Euler();
1907
1541
  const quaternionValues = [];
1908
-
1909
1542
  for (let i = 0; i < values.length; i += 3) {
1910
1543
  euler.set(values[i], values[i + 1], values[i + 2], eulerOrder);
1911
1544
  quaternion.setFromEuler(euler);
1912
- if (preRotation !== undefined) quaternion.premultiply(preRotation);
1913
- if (postRotation !== undefined) quaternion.multiply(postRotation);
1545
+ if (preRotation !== void 0)
1546
+ quaternion.premultiply(preRotation);
1547
+ if (postRotation !== void 0)
1548
+ quaternion.multiply(postRotation);
1914
1549
  quaternion.toArray(quaternionValues, i / 3 * 4);
1915
1550
  }
1916
-
1917
- return new QuaternionKeyframeTrack(modelName + '.quaternion', times, quaternionValues);
1551
+ return new THREE.QuaternionKeyframeTrack(modelName + ".quaternion", times, quaternionValues);
1918
1552
  }
1919
-
1920
1553
  generateMorphTrack(rawTracks) {
1921
1554
  const curves = rawTracks.DeformPercent.curves.morph;
1922
- const values = curves.values.map(function (val) {
1555
+ const values = curves.values.map(function(val) {
1923
1556
  return val / 100;
1924
1557
  });
1925
1558
  const morphNum = sceneGraph.getObjectByName(rawTracks.modelName).morphTargetDictionary[rawTracks.morphName];
1926
- return new NumberKeyframeTrack(rawTracks.modelName + '.morphTargetInfluences[' + morphNum + ']', curves.times, values);
1927
- } // For all animated objects, times are defined separately for each axis
1928
- // Here we'll combine the times into one sorted array without duplicates
1929
-
1930
-
1559
+ return new THREE.NumberKeyframeTrack(
1560
+ rawTracks.modelName + ".morphTargetInfluences[" + morphNum + "]",
1561
+ curves.times,
1562
+ values
1563
+ );
1564
+ }
1931
1565
  getTimesForAllAxes(curves) {
1932
- let times = []; // first join together the times for each axis, if defined
1933
-
1934
- if (curves.x !== undefined) times = times.concat(curves.x.times);
1935
- if (curves.y !== undefined) times = times.concat(curves.y.times);
1936
- if (curves.z !== undefined) times = times.concat(curves.z.times); // then sort them
1937
-
1938
- times = times.sort(function (a, b) {
1566
+ let times = [];
1567
+ if (curves.x !== void 0)
1568
+ times = times.concat(curves.x.times);
1569
+ if (curves.y !== void 0)
1570
+ times = times.concat(curves.y.times);
1571
+ if (curves.z !== void 0)
1572
+ times = times.concat(curves.z.times);
1573
+ times = times.sort(function(a, b) {
1939
1574
  return a - b;
1940
- }); // and remove duplicates
1941
-
1575
+ });
1942
1576
  if (times.length > 1) {
1943
1577
  let targetIndex = 1;
1944
1578
  let lastValue = times[0];
1945
-
1946
1579
  for (let i = 1; i < times.length; i++) {
1947
1580
  const currentValue = times[i];
1948
-
1949
1581
  if (currentValue !== lastValue) {
1950
1582
  times[targetIndex] = currentValue;
1951
1583
  lastValue = currentValue;
1952
1584
  targetIndex++;
1953
1585
  }
1954
1586
  }
1955
-
1956
1587
  times = times.slice(0, targetIndex);
1957
1588
  }
1958
-
1959
1589
  return times;
1960
1590
  }
1961
-
1962
1591
  getKeyframeTrackValues(times, curves, initialValue) {
1963
1592
  const prevValue = initialValue;
1964
1593
  const values = [];
1965
1594
  let xIndex = -1;
1966
1595
  let yIndex = -1;
1967
1596
  let zIndex = -1;
1968
- times.forEach(function (time) {
1969
- if (curves.x) xIndex = curves.x.times.indexOf(time);
1970
- if (curves.y) yIndex = curves.y.times.indexOf(time);
1971
- if (curves.z) zIndex = curves.z.times.indexOf(time); // if there is an x value defined for this frame, use that
1972
-
1597
+ times.forEach(function(time) {
1598
+ if (curves.x)
1599
+ xIndex = curves.x.times.indexOf(time);
1600
+ if (curves.y)
1601
+ yIndex = curves.y.times.indexOf(time);
1602
+ if (curves.z)
1603
+ zIndex = curves.z.times.indexOf(time);
1973
1604
  if (xIndex !== -1) {
1974
1605
  const xValue = curves.x.values[xIndex];
1975
1606
  values.push(xValue);
1976
1607
  prevValue[0] = xValue;
1977
1608
  } else {
1978
- // otherwise use the x value from the previous frame
1979
1609
  values.push(prevValue[0]);
1980
1610
  }
1981
-
1982
1611
  if (yIndex !== -1) {
1983
1612
  const yValue = curves.y.values[yIndex];
1984
1613
  values.push(yValue);
@@ -1986,7 +1615,6 @@ class AnimationParser {
1986
1615
  } else {
1987
1616
  values.push(prevValue[1]);
1988
1617
  }
1989
-
1990
1618
  if (zIndex !== -1) {
1991
1619
  const zValue = curves.z.values[zIndex];
1992
1620
  values.push(zValue);
@@ -1996,17 +1624,12 @@ class AnimationParser {
1996
1624
  }
1997
1625
  });
1998
1626
  return values;
1999
- } // Rotations are defined as Euler angles which can have values of any size
2000
- // These will be converted to quaternions which don't support values greater than
2001
- // PI, so we'll interpolate large rotations
2002
-
2003
-
1627
+ }
2004
1628
  interpolateRotations(curve) {
2005
1629
  for (let i = 1; i < curve.values.length; i++) {
2006
1630
  const initialValue = curve.values[i - 1];
2007
1631
  const valuesSpan = curve.values[i] - initialValue;
2008
1632
  const absoluteSpan = Math.abs(valuesSpan);
2009
-
2010
1633
  if (absoluteSpan >= 180) {
2011
1634
  const numSubIntervals = absoluteSpan / 180;
2012
1635
  const step = valuesSpan / numSubIntervals;
@@ -2017,67 +1640,56 @@ class AnimationParser {
2017
1640
  let nextTime = initialTime + interval;
2018
1641
  const interpolatedTimes = [];
2019
1642
  const interpolatedValues = [];
2020
-
2021
1643
  while (nextTime < curve.times[i]) {
2022
1644
  interpolatedTimes.push(nextTime);
2023
1645
  nextTime += interval;
2024
1646
  interpolatedValues.push(nextValue);
2025
1647
  nextValue += step;
2026
1648
  }
2027
-
2028
1649
  curve.times = inject(curve.times, i, interpolatedTimes);
2029
1650
  curve.values = inject(curve.values, i, interpolatedValues);
2030
1651
  }
2031
1652
  }
2032
1653
  }
2033
-
2034
- } // parse an FBX file in ASCII format
2035
-
2036
-
1654
+ }
2037
1655
  class TextParser {
2038
1656
  getPrevNode() {
2039
1657
  return this.nodeStack[this.currentIndent - 2];
2040
1658
  }
2041
-
2042
1659
  getCurrentNode() {
2043
1660
  return this.nodeStack[this.currentIndent - 1];
2044
1661
  }
2045
-
2046
1662
  getCurrentProp() {
2047
1663
  return this.currentProp;
2048
1664
  }
2049
-
2050
1665
  pushStack(node) {
2051
1666
  this.nodeStack.push(node);
2052
1667
  this.currentIndent += 1;
2053
1668
  }
2054
-
2055
1669
  popStack() {
2056
1670
  this.nodeStack.pop();
2057
1671
  this.currentIndent -= 1;
2058
1672
  }
2059
-
2060
1673
  setCurrentProp(val, name) {
2061
1674
  this.currentProp = val;
2062
1675
  this.currentPropName = name;
2063
1676
  }
2064
-
2065
1677
  parse(text) {
2066
1678
  this.currentIndent = 0;
2067
1679
  this.allNodes = new FBXTree();
2068
1680
  this.nodeStack = [];
2069
1681
  this.currentProp = [];
2070
- this.currentPropName = '';
1682
+ this.currentPropName = "";
2071
1683
  const scope = this;
2072
1684
  const split = text.split(/[\r\n]+/);
2073
- split.forEach(function (line, i) {
1685
+ split.forEach(function(line, i) {
2074
1686
  const matchComment = line.match(/^[\s\t]*;/);
2075
1687
  const matchEmpty = line.match(/^[\s\t]*$/);
2076
- if (matchComment || matchEmpty) return;
2077
- const matchBeginning = line.match('^\\t{' + scope.currentIndent + '}(\\w+):(.*){', '');
2078
- const matchProperty = line.match('^\\t{' + scope.currentIndent + '}(\\w+):[\\s\\t\\r\\n](.*)');
2079
- const matchEnd = line.match('^\\t{' + (scope.currentIndent - 1) + '}}');
2080
-
1688
+ if (matchComment || matchEmpty)
1689
+ return;
1690
+ const matchBeginning = line.match("^\\t{" + scope.currentIndent + "}(\\w+):(.*){", "");
1691
+ const matchProperty = line.match("^\\t{" + scope.currentIndent + "}(\\w+):[\\s\\t\\r\\n](.*)");
1692
+ const matchEnd = line.match("^\\t{" + (scope.currentIndent - 1) + "}}");
2081
1693
  if (matchBeginning) {
2082
1694
  scope.parseNodeBegin(line, matchBeginning);
2083
1695
  } else if (matchProperty) {
@@ -2085,179 +1697,141 @@ class TextParser {
2085
1697
  } else if (matchEnd) {
2086
1698
  scope.popStack();
2087
1699
  } else if (line.match(/^[^\s\t}]/)) {
2088
- // large arrays are split over multiple lines terminated with a ',' character
2089
- // if this is encountered the line needs to be joined to the previous line
2090
1700
  scope.parseNodePropertyContinued(line);
2091
1701
  }
2092
1702
  });
2093
1703
  return this.allNodes;
2094
1704
  }
2095
-
2096
1705
  parseNodeBegin(line, property) {
2097
- const nodeName = property[1].trim().replace(/^"/, '').replace(/"$/, '');
2098
- const nodeAttrs = property[2].split(',').map(function (attr) {
2099
- return attr.trim().replace(/^"/, '').replace(/"$/, '');
1706
+ const nodeName = property[1].trim().replace(/^"/, "").replace(/"$/, "");
1707
+ const nodeAttrs = property[2].split(",").map(function(attr) {
1708
+ return attr.trim().replace(/^"/, "").replace(/"$/, "");
2100
1709
  });
2101
- const node = {
2102
- name: nodeName
2103
- };
1710
+ const node = { name: nodeName };
2104
1711
  const attrs = this.parseNodeAttr(nodeAttrs);
2105
- const currentNode = this.getCurrentNode(); // a top node
2106
-
1712
+ const currentNode = this.getCurrentNode();
2107
1713
  if (this.currentIndent === 0) {
2108
1714
  this.allNodes.add(nodeName, node);
2109
1715
  } else {
2110
- // a subnode
2111
- // if the subnode already exists, append it
2112
1716
  if (nodeName in currentNode) {
2113
- // special case Pose needs PoseNodes as an array
2114
- if (nodeName === 'PoseNode') {
1717
+ if (nodeName === "PoseNode") {
2115
1718
  currentNode.PoseNode.push(node);
2116
- } else if (currentNode[nodeName].id !== undefined) {
1719
+ } else if (currentNode[nodeName].id !== void 0) {
2117
1720
  currentNode[nodeName] = {};
2118
1721
  currentNode[nodeName][currentNode[nodeName].id] = currentNode[nodeName];
2119
1722
  }
2120
-
2121
- if (attrs.id !== '') currentNode[nodeName][attrs.id] = node;
2122
- } else if (typeof attrs.id === 'number') {
1723
+ if (attrs.id !== "")
1724
+ currentNode[nodeName][attrs.id] = node;
1725
+ } else if (typeof attrs.id === "number") {
2123
1726
  currentNode[nodeName] = {};
2124
1727
  currentNode[nodeName][attrs.id] = node;
2125
- } else if (nodeName !== 'Properties70') {
2126
- if (nodeName === 'PoseNode') currentNode[nodeName] = [node];else currentNode[nodeName] = node;
2127
- }
2128
- }
2129
-
2130
- if (typeof attrs.id === 'number') node.id = attrs.id;
2131
- if (attrs.name !== '') node.attrName = attrs.name;
2132
- if (attrs.type !== '') node.attrType = attrs.type;
1728
+ } else if (nodeName !== "Properties70") {
1729
+ if (nodeName === "PoseNode")
1730
+ currentNode[nodeName] = [node];
1731
+ else
1732
+ currentNode[nodeName] = node;
1733
+ }
1734
+ }
1735
+ if (typeof attrs.id === "number")
1736
+ node.id = attrs.id;
1737
+ if (attrs.name !== "")
1738
+ node.attrName = attrs.name;
1739
+ if (attrs.type !== "")
1740
+ node.attrType = attrs.type;
2133
1741
  this.pushStack(node);
2134
1742
  }
2135
-
2136
1743
  parseNodeAttr(attrs) {
2137
1744
  let id = attrs[0];
2138
-
2139
- if (attrs[0] !== '') {
1745
+ if (attrs[0] !== "") {
2140
1746
  id = parseInt(attrs[0]);
2141
-
2142
1747
  if (isNaN(id)) {
2143
1748
  id = attrs[0];
2144
1749
  }
2145
1750
  }
2146
-
2147
- let name = '',
2148
- type = '';
2149
-
1751
+ let name = "", type = "";
2150
1752
  if (attrs.length > 1) {
2151
- name = attrs[1].replace(/^(\w+)::/, '');
1753
+ name = attrs[1].replace(/^(\w+)::/, "");
2152
1754
  type = attrs[2];
2153
1755
  }
2154
-
2155
- return {
2156
- id: id,
2157
- name: name,
2158
- type: type
2159
- };
1756
+ return { id, name, type };
2160
1757
  }
2161
-
2162
1758
  parseNodeProperty(line, property, contentLine) {
2163
- let propName = property[1].replace(/^"/, '').replace(/"$/, '').trim();
2164
- let propValue = property[2].replace(/^"/, '').replace(/"$/, '').trim(); // for special case: base64 image data follows "Content: ," line
2165
- // Content: ,
2166
- // "/9j/4RDaRXhpZgAATU0A..."
2167
-
2168
- if (propName === 'Content' && propValue === ',') {
2169
- propValue = contentLine.replace(/"/g, '').replace(/,$/, '').trim();
2170
- }
2171
-
1759
+ let propName = property[1].replace(/^"/, "").replace(/"$/, "").trim();
1760
+ let propValue = property[2].replace(/^"/, "").replace(/"$/, "").trim();
1761
+ if (propName === "Content" && propValue === ",") {
1762
+ propValue = contentLine.replace(/"/g, "").replace(/,$/, "").trim();
1763
+ }
2172
1764
  const currentNode = this.getCurrentNode();
2173
1765
  const parentName = currentNode.name;
2174
-
2175
- if (parentName === 'Properties70') {
1766
+ if (parentName === "Properties70") {
2176
1767
  this.parseNodeSpecialProperty(line, propName, propValue);
2177
1768
  return;
2178
- } // Connections
2179
-
2180
-
2181
- if (propName === 'C') {
2182
- const connProps = propValue.split(',').slice(1);
1769
+ }
1770
+ if (propName === "C") {
1771
+ const connProps = propValue.split(",").slice(1);
2183
1772
  const from = parseInt(connProps[0]);
2184
1773
  const to = parseInt(connProps[1]);
2185
- let rest = propValue.split(',').slice(3);
2186
- rest = rest.map(function (elem) {
2187
- return elem.trim().replace(/^"/, '');
1774
+ let rest = propValue.split(",").slice(3);
1775
+ rest = rest.map(function(elem) {
1776
+ return elem.trim().replace(/^"/, "");
2188
1777
  });
2189
- propName = 'connections';
1778
+ propName = "connections";
2190
1779
  propValue = [from, to];
2191
1780
  append(propValue, rest);
2192
-
2193
- if (currentNode[propName] === undefined) {
1781
+ if (currentNode[propName] === void 0) {
2194
1782
  currentNode[propName] = [];
2195
1783
  }
2196
- } // Node
2197
-
2198
-
2199
- if (propName === 'Node') currentNode.id = propValue; // connections
2200
-
1784
+ }
1785
+ if (propName === "Node")
1786
+ currentNode.id = propValue;
2201
1787
  if (propName in currentNode && Array.isArray(currentNode[propName])) {
2202
1788
  currentNode[propName].push(propValue);
2203
1789
  } else {
2204
- if (propName !== 'a') currentNode[propName] = propValue;else currentNode.a = propValue;
1790
+ if (propName !== "a")
1791
+ currentNode[propName] = propValue;
1792
+ else
1793
+ currentNode.a = propValue;
2205
1794
  }
2206
-
2207
- this.setCurrentProp(currentNode, propName); // convert string to array, unless it ends in ',' in which case more will be added to it
2208
-
2209
- if (propName === 'a' && propValue.slice(-1) !== ',') {
1795
+ this.setCurrentProp(currentNode, propName);
1796
+ if (propName === "a" && propValue.slice(-1) !== ",") {
2210
1797
  currentNode.a = parseNumberArray(propValue);
2211
1798
  }
2212
1799
  }
2213
-
2214
1800
  parseNodePropertyContinued(line) {
2215
1801
  const currentNode = this.getCurrentNode();
2216
- currentNode.a += line; // if the line doesn't end in ',' we have reached the end of the property value
2217
- // so convert the string to an array
2218
-
2219
- if (line.slice(-1) !== ',') {
1802
+ currentNode.a += line;
1803
+ if (line.slice(-1) !== ",") {
2220
1804
  currentNode.a = parseNumberArray(currentNode.a);
2221
1805
  }
2222
- } // parse "Property70"
2223
-
2224
-
1806
+ }
2225
1807
  parseNodeSpecialProperty(line, propName, propValue) {
2226
- // split this
2227
- // P: "Lcl Scaling", "Lcl Scaling", "", "A",1,1,1
2228
- // into array like below
2229
- // ["Lcl Scaling", "Lcl Scaling", "", "A", "1,1,1" ]
2230
- const props = propValue.split('",').map(function (prop) {
2231
- return prop.trim().replace(/^\"/, '').replace(/\s/, '_');
1808
+ const props = propValue.split('",').map(function(prop) {
1809
+ return prop.trim().replace(/^\"/, "").replace(/\s/, "_");
2232
1810
  });
2233
1811
  const innerPropName = props[0];
2234
1812
  const innerPropType1 = props[1];
2235
1813
  const innerPropType2 = props[2];
2236
1814
  const innerPropFlag = props[3];
2237
- let innerPropValue = props[4]; // cast values where needed, otherwise leave as strings
2238
-
1815
+ let innerPropValue = props[4];
2239
1816
  switch (innerPropType1) {
2240
- case 'int':
2241
- case 'enum':
2242
- case 'bool':
2243
- case 'ULongLong':
2244
- case 'double':
2245
- case 'Number':
2246
- case 'FieldOfView':
1817
+ case "int":
1818
+ case "enum":
1819
+ case "bool":
1820
+ case "ULongLong":
1821
+ case "double":
1822
+ case "Number":
1823
+ case "FieldOfView":
2247
1824
  innerPropValue = parseFloat(innerPropValue);
2248
1825
  break;
2249
-
2250
- case 'Color':
2251
- case 'ColorRGB':
2252
- case 'Vector3D':
2253
- case 'Lcl_Translation':
2254
- case 'Lcl_Rotation':
2255
- case 'Lcl_Scaling':
1826
+ case "Color":
1827
+ case "ColorRGB":
1828
+ case "Vector3D":
1829
+ case "Lcl_Translation":
1830
+ case "Lcl_Rotation":
1831
+ case "Lcl_Scaling":
2256
1832
  innerPropValue = parseNumberArray(innerPropValue);
2257
1833
  break;
2258
- } // CAUTION: these props must append to parent's parent
2259
-
2260
-
1834
+ }
2261
1835
  this.getPrevNode()[innerPropName] = {
2262
1836
  type: innerPropType1,
2263
1837
  type2: innerPropType2,
@@ -2266,361 +1840,272 @@ class TextParser {
2266
1840
  };
2267
1841
  this.setCurrentProp(this.getPrevNode(), innerPropName);
2268
1842
  }
2269
-
2270
- } // Parse an FBX file in Binary format
2271
-
2272
-
1843
+ }
2273
1844
  class BinaryParser {
2274
1845
  parse(buffer) {
2275
1846
  const reader = new BinaryReader(buffer);
2276
- reader.skip(23); // skip magic 23 bytes
2277
-
1847
+ reader.skip(23);
2278
1848
  const version = reader.getUint32();
2279
-
2280
1849
  if (version < 6400) {
2281
- throw new Error('THREE.FBXLoader: FBX version not supported, FileVersion: ' + version);
1850
+ throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + version);
2282
1851
  }
2283
-
2284
1852
  const allNodes = new FBXTree();
2285
-
2286
1853
  while (!this.endOfContent(reader)) {
2287
1854
  const node = this.parseNode(reader, version);
2288
- if (node !== null) allNodes.add(node.name, node);
1855
+ if (node !== null)
1856
+ allNodes.add(node.name, node);
2289
1857
  }
2290
-
2291
1858
  return allNodes;
2292
- } // Check if reader has reached the end of content.
2293
-
2294
-
1859
+ }
2295
1860
  endOfContent(reader) {
2296
- // footer size: 160bytes + 16-byte alignment padding
2297
- // - 16bytes: magic
2298
- // - padding til 16-byte alignment (at least 1byte?)
2299
- // (seems like some exporters embed fixed 15 or 16bytes?)
2300
- // - 4bytes: magic
2301
- // - 4bytes: version
2302
- // - 120bytes: zero
2303
- // - 16bytes: magic
2304
1861
  if (reader.size() % 16 === 0) {
2305
- return (reader.getOffset() + 160 + 16 & ~0xf) >= reader.size();
1862
+ return (reader.getOffset() + 160 + 16 & ~15) >= reader.size();
2306
1863
  } else {
2307
1864
  return reader.getOffset() + 160 + 16 >= reader.size();
2308
1865
  }
2309
- } // recursively parse nodes until the end of the file is reached
2310
-
2311
-
1866
+ }
2312
1867
  parseNode(reader, version) {
2313
- const node = {}; // The first three data sizes depends on version.
2314
-
1868
+ const node = {};
2315
1869
  const endOffset = version >= 7500 ? reader.getUint64() : reader.getUint32();
2316
1870
  const numProperties = version >= 7500 ? reader.getUint64() : reader.getUint32();
2317
- version >= 7500 ? reader.getUint64() : reader.getUint32(); // the returned propertyListLen is not used
2318
-
1871
+ version >= 7500 ? reader.getUint64() : reader.getUint32();
2319
1872
  const nameLen = reader.getUint8();
2320
- const name = reader.getString(nameLen); // Regards this node as NULL-record if endOffset is zero
2321
-
2322
- if (endOffset === 0) return null;
1873
+ const name = reader.getString(nameLen);
1874
+ if (endOffset === 0)
1875
+ return null;
2323
1876
  const propertyList = [];
2324
-
2325
1877
  for (let i = 0; i < numProperties; i++) {
2326
1878
  propertyList.push(this.parseProperty(reader));
2327
- } // Regards the first three elements in propertyList as id, attrName, and attrType
2328
-
2329
-
2330
- const id = propertyList.length > 0 ? propertyList[0] : '';
2331
- const attrName = propertyList.length > 1 ? propertyList[1] : '';
2332
- const attrType = propertyList.length > 2 ? propertyList[2] : ''; // check if this node represents just a single property
2333
- // like (name, 0) set or (name2, [0, 1, 2]) set of {name: 0, name2: [0, 1, 2]}
2334
-
1879
+ }
1880
+ const id = propertyList.length > 0 ? propertyList[0] : "";
1881
+ const attrName = propertyList.length > 1 ? propertyList[1] : "";
1882
+ const attrType = propertyList.length > 2 ? propertyList[2] : "";
2335
1883
  node.singleProperty = numProperties === 1 && reader.getOffset() === endOffset ? true : false;
2336
-
2337
1884
  while (endOffset > reader.getOffset()) {
2338
1885
  const subNode = this.parseNode(reader, version);
2339
- if (subNode !== null) this.parseSubNode(name, node, subNode);
2340
- }
2341
-
2342
- node.propertyList = propertyList; // raw property list used by parent
2343
-
2344
- if (typeof id === 'number') node.id = id;
2345
- if (attrName !== '') node.attrName = attrName;
2346
- if (attrType !== '') node.attrType = attrType;
2347
- if (name !== '') node.name = name;
1886
+ if (subNode !== null)
1887
+ this.parseSubNode(name, node, subNode);
1888
+ }
1889
+ node.propertyList = propertyList;
1890
+ if (typeof id === "number")
1891
+ node.id = id;
1892
+ if (attrName !== "")
1893
+ node.attrName = attrName;
1894
+ if (attrType !== "")
1895
+ node.attrType = attrType;
1896
+ if (name !== "")
1897
+ node.name = name;
2348
1898
  return node;
2349
1899
  }
2350
-
2351
1900
  parseSubNode(name, node, subNode) {
2352
- // special case: child node is single property
2353
1901
  if (subNode.singleProperty === true) {
2354
1902
  const value = subNode.propertyList[0];
2355
-
2356
1903
  if (Array.isArray(value)) {
2357
1904
  node[subNode.name] = subNode;
2358
1905
  subNode.a = value;
2359
1906
  } else {
2360
1907
  node[subNode.name] = value;
2361
1908
  }
2362
- } else if (name === 'Connections' && subNode.name === 'C') {
1909
+ } else if (name === "Connections" && subNode.name === "C") {
2363
1910
  const array = [];
2364
- subNode.propertyList.forEach(function (property, i) {
2365
- // first Connection is FBX type (OO, OP, etc.). We'll discard these
2366
- if (i !== 0) array.push(property);
1911
+ subNode.propertyList.forEach(function(property, i) {
1912
+ if (i !== 0)
1913
+ array.push(property);
2367
1914
  });
2368
-
2369
- if (node.connections === undefined) {
1915
+ if (node.connections === void 0) {
2370
1916
  node.connections = [];
2371
1917
  }
2372
-
2373
1918
  node.connections.push(array);
2374
- } else if (subNode.name === 'Properties70') {
1919
+ } else if (subNode.name === "Properties70") {
2375
1920
  const keys = Object.keys(subNode);
2376
- keys.forEach(function (key) {
1921
+ keys.forEach(function(key) {
2377
1922
  node[key] = subNode[key];
2378
1923
  });
2379
- } else if (name === 'Properties70' && subNode.name === 'P') {
1924
+ } else if (name === "Properties70" && subNode.name === "P") {
2380
1925
  let innerPropName = subNode.propertyList[0];
2381
1926
  let innerPropType1 = subNode.propertyList[1];
2382
1927
  const innerPropType2 = subNode.propertyList[2];
2383
1928
  const innerPropFlag = subNode.propertyList[3];
2384
1929
  let innerPropValue;
2385
- if (innerPropName.indexOf('Lcl ') === 0) innerPropName = innerPropName.replace('Lcl ', 'Lcl_');
2386
- if (innerPropType1.indexOf('Lcl ') === 0) innerPropType1 = innerPropType1.replace('Lcl ', 'Lcl_');
2387
-
2388
- if (innerPropType1 === 'Color' || innerPropType1 === 'ColorRGB' || innerPropType1 === 'Vector' || innerPropType1 === 'Vector3D' || innerPropType1.indexOf('Lcl_') === 0) {
1930
+ if (innerPropName.indexOf("Lcl ") === 0)
1931
+ innerPropName = innerPropName.replace("Lcl ", "Lcl_");
1932
+ if (innerPropType1.indexOf("Lcl ") === 0)
1933
+ innerPropType1 = innerPropType1.replace("Lcl ", "Lcl_");
1934
+ if (innerPropType1 === "Color" || innerPropType1 === "ColorRGB" || innerPropType1 === "Vector" || innerPropType1 === "Vector3D" || innerPropType1.indexOf("Lcl_") === 0) {
2389
1935
  innerPropValue = [subNode.propertyList[4], subNode.propertyList[5], subNode.propertyList[6]];
2390
1936
  } else {
2391
1937
  innerPropValue = subNode.propertyList[4];
2392
- } // this will be copied to parent, see above
2393
-
2394
-
1938
+ }
2395
1939
  node[innerPropName] = {
2396
1940
  type: innerPropType1,
2397
1941
  type2: innerPropType2,
2398
1942
  flag: innerPropFlag,
2399
1943
  value: innerPropValue
2400
1944
  };
2401
- } else if (node[subNode.name] === undefined) {
2402
- if (typeof subNode.id === 'number') {
1945
+ } else if (node[subNode.name] === void 0) {
1946
+ if (typeof subNode.id === "number") {
2403
1947
  node[subNode.name] = {};
2404
1948
  node[subNode.name][subNode.id] = subNode;
2405
1949
  } else {
2406
1950
  node[subNode.name] = subNode;
2407
1951
  }
2408
1952
  } else {
2409
- if (subNode.name === 'PoseNode') {
1953
+ if (subNode.name === "PoseNode") {
2410
1954
  if (!Array.isArray(node[subNode.name])) {
2411
1955
  node[subNode.name] = [node[subNode.name]];
2412
1956
  }
2413
-
2414
1957
  node[subNode.name].push(subNode);
2415
- } else if (node[subNode.name][subNode.id] === undefined) {
1958
+ } else if (node[subNode.name][subNode.id] === void 0) {
2416
1959
  node[subNode.name][subNode.id] = subNode;
2417
1960
  }
2418
1961
  }
2419
1962
  }
2420
-
2421
1963
  parseProperty(reader) {
2422
1964
  const type = reader.getString(1);
2423
1965
  let length;
2424
-
2425
1966
  switch (type) {
2426
- case 'C':
1967
+ case "C":
2427
1968
  return reader.getBoolean();
2428
-
2429
- case 'D':
1969
+ case "D":
2430
1970
  return reader.getFloat64();
2431
-
2432
- case 'F':
1971
+ case "F":
2433
1972
  return reader.getFloat32();
2434
-
2435
- case 'I':
1973
+ case "I":
2436
1974
  return reader.getInt32();
2437
-
2438
- case 'L':
1975
+ case "L":
2439
1976
  return reader.getInt64();
2440
-
2441
- case 'R':
1977
+ case "R":
2442
1978
  length = reader.getUint32();
2443
1979
  return reader.getArrayBuffer(length);
2444
-
2445
- case 'S':
1980
+ case "S":
2446
1981
  length = reader.getUint32();
2447
1982
  return reader.getString(length);
2448
-
2449
- case 'Y':
1983
+ case "Y":
2450
1984
  return reader.getInt16();
2451
-
2452
- case 'b':
2453
- case 'c':
2454
- case 'd':
2455
- case 'f':
2456
- case 'i':
2457
- case 'l':
1985
+ case "b":
1986
+ case "c":
1987
+ case "d":
1988
+ case "f":
1989
+ case "i":
1990
+ case "l":
2458
1991
  const arrayLength = reader.getUint32();
2459
- const encoding = reader.getUint32(); // 0: non-compressed, 1: compressed
2460
-
1992
+ const encoding = reader.getUint32();
2461
1993
  const compressedLength = reader.getUint32();
2462
-
2463
1994
  if (encoding === 0) {
2464
1995
  switch (type) {
2465
- case 'b':
2466
- case 'c':
1996
+ case "b":
1997
+ case "c":
2467
1998
  return reader.getBooleanArray(arrayLength);
2468
-
2469
- case 'd':
1999
+ case "d":
2470
2000
  return reader.getFloat64Array(arrayLength);
2471
-
2472
- case 'f':
2001
+ case "f":
2473
2002
  return reader.getFloat32Array(arrayLength);
2474
-
2475
- case 'i':
2003
+ case "i":
2476
2004
  return reader.getInt32Array(arrayLength);
2477
-
2478
- case 'l':
2005
+ case "l":
2479
2006
  return reader.getInt64Array(arrayLength);
2480
2007
  }
2481
2008
  }
2482
-
2483
- const data = unzlibSync(new Uint8Array(reader.getArrayBuffer(compressedLength))); // eslint-disable-line no-undef
2484
-
2009
+ const data = fflate.unzlibSync(new Uint8Array(reader.getArrayBuffer(compressedLength)));
2485
2010
  const reader2 = new BinaryReader(data.buffer);
2486
-
2487
2011
  switch (type) {
2488
- case 'b':
2489
- case 'c':
2012
+ case "b":
2013
+ case "c":
2490
2014
  return reader2.getBooleanArray(arrayLength);
2491
-
2492
- case 'd':
2015
+ case "d":
2493
2016
  return reader2.getFloat64Array(arrayLength);
2494
-
2495
- case 'f':
2017
+ case "f":
2496
2018
  return reader2.getFloat32Array(arrayLength);
2497
-
2498
- case 'i':
2019
+ case "i":
2499
2020
  return reader2.getInt32Array(arrayLength);
2500
-
2501
- case 'l':
2021
+ case "l":
2502
2022
  return reader2.getInt64Array(arrayLength);
2503
2023
  }
2504
-
2505
2024
  default:
2506
- throw new Error('THREE.FBXLoader: Unknown property type ' + type);
2025
+ throw new Error("THREE.FBXLoader: Unknown property type " + type);
2507
2026
  }
2508
2027
  }
2509
-
2510
2028
  }
2511
-
2512
2029
  class BinaryReader {
2513
2030
  constructor(buffer, littleEndian) {
2514
2031
  this.dv = new DataView(buffer);
2515
2032
  this.offset = 0;
2516
- this.littleEndian = littleEndian !== undefined ? littleEndian : true;
2033
+ this.littleEndian = littleEndian !== void 0 ? littleEndian : true;
2517
2034
  }
2518
-
2519
2035
  getOffset() {
2520
2036
  return this.offset;
2521
2037
  }
2522
-
2523
2038
  size() {
2524
2039
  return this.dv.buffer.byteLength;
2525
2040
  }
2526
-
2527
2041
  skip(length) {
2528
2042
  this.offset += length;
2529
- } // seems like true/false representation depends on exporter.
2530
- // true: 1 or 'Y'(=0x59), false: 0 or 'T'(=0x54)
2531
- // then sees LSB.
2532
-
2533
-
2043
+ }
2534
2044
  getBoolean() {
2535
2045
  return (this.getUint8() & 1) === 1;
2536
2046
  }
2537
-
2538
2047
  getBooleanArray(size) {
2539
2048
  const a = [];
2540
-
2541
2049
  for (let i = 0; i < size; i++) {
2542
2050
  a.push(this.getBoolean());
2543
2051
  }
2544
-
2545
2052
  return a;
2546
2053
  }
2547
-
2548
2054
  getUint8() {
2549
2055
  const value = this.dv.getUint8(this.offset);
2550
2056
  this.offset += 1;
2551
2057
  return value;
2552
2058
  }
2553
-
2554
2059
  getInt16() {
2555
2060
  const value = this.dv.getInt16(this.offset, this.littleEndian);
2556
2061
  this.offset += 2;
2557
2062
  return value;
2558
2063
  }
2559
-
2560
2064
  getInt32() {
2561
2065
  const value = this.dv.getInt32(this.offset, this.littleEndian);
2562
2066
  this.offset += 4;
2563
2067
  return value;
2564
2068
  }
2565
-
2566
2069
  getInt32Array(size) {
2567
2070
  const a = [];
2568
-
2569
2071
  for (let i = 0; i < size; i++) {
2570
2072
  a.push(this.getInt32());
2571
2073
  }
2572
-
2573
2074
  return a;
2574
2075
  }
2575
-
2576
2076
  getUint32() {
2577
2077
  const value = this.dv.getUint32(this.offset, this.littleEndian);
2578
2078
  this.offset += 4;
2579
2079
  return value;
2580
- } // JavaScript doesn't support 64-bit integer so calculate this here
2581
- // 1 << 32 will return 1 so using multiply operation instead here.
2582
- // There's a possibility that this method returns wrong value if the value
2583
- // is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER.
2584
- // TODO: safely handle 64-bit integer
2585
-
2586
-
2080
+ }
2587
2081
  getInt64() {
2588
2082
  let low, high;
2589
-
2590
2083
  if (this.littleEndian) {
2591
2084
  low = this.getUint32();
2592
2085
  high = this.getUint32();
2593
2086
  } else {
2594
2087
  high = this.getUint32();
2595
2088
  low = this.getUint32();
2596
- } // calculate negative value
2597
-
2598
-
2599
- if (high & 0x80000000) {
2600
- high = ~high & 0xffffffff;
2601
- low = ~low & 0xffffffff;
2602
- if (low === 0xffffffff) high = high + 1 & 0xffffffff;
2603
- low = low + 1 & 0xffffffff;
2604
- return -(high * 0x100000000 + low);
2605
- }
2606
-
2607
- return high * 0x100000000 + low;
2608
- }
2609
-
2089
+ }
2090
+ if (high & 2147483648) {
2091
+ high = ~high & 4294967295;
2092
+ low = ~low & 4294967295;
2093
+ if (low === 4294967295)
2094
+ high = high + 1 & 4294967295;
2095
+ low = low + 1 & 4294967295;
2096
+ return -(high * 4294967296 + low);
2097
+ }
2098
+ return high * 4294967296 + low;
2099
+ }
2610
2100
  getInt64Array(size) {
2611
2101
  const a = [];
2612
-
2613
2102
  for (let i = 0; i < size; i++) {
2614
2103
  a.push(this.getInt64());
2615
2104
  }
2616
-
2617
2105
  return a;
2618
- } // Note: see getInt64() comment
2619
-
2620
-
2106
+ }
2621
2107
  getUint64() {
2622
2108
  let low, high;
2623
-
2624
2109
  if (this.littleEndian) {
2625
2110
  low = this.getUint32();
2626
2111
  high = this.getUint32();
@@ -2628,290 +2113,250 @@ class BinaryReader {
2628
2113
  high = this.getUint32();
2629
2114
  low = this.getUint32();
2630
2115
  }
2631
-
2632
- return high * 0x100000000 + low;
2116
+ return high * 4294967296 + low;
2633
2117
  }
2634
-
2635
2118
  getFloat32() {
2636
2119
  const value = this.dv.getFloat32(this.offset, this.littleEndian);
2637
2120
  this.offset += 4;
2638
2121
  return value;
2639
2122
  }
2640
-
2641
2123
  getFloat32Array(size) {
2642
2124
  const a = [];
2643
-
2644
2125
  for (let i = 0; i < size; i++) {
2645
2126
  a.push(this.getFloat32());
2646
2127
  }
2647
-
2648
2128
  return a;
2649
2129
  }
2650
-
2651
2130
  getFloat64() {
2652
2131
  const value = this.dv.getFloat64(this.offset, this.littleEndian);
2653
2132
  this.offset += 8;
2654
2133
  return value;
2655
2134
  }
2656
-
2657
2135
  getFloat64Array(size) {
2658
2136
  const a = [];
2659
-
2660
2137
  for (let i = 0; i < size; i++) {
2661
2138
  a.push(this.getFloat64());
2662
2139
  }
2663
-
2664
2140
  return a;
2665
2141
  }
2666
-
2667
2142
  getArrayBuffer(size) {
2668
2143
  const value = this.dv.buffer.slice(this.offset, this.offset + size);
2669
2144
  this.offset += size;
2670
2145
  return value;
2671
2146
  }
2672
-
2673
2147
  getString(size) {
2674
- // note: safari 9 doesn't support Uint8Array.indexOf; create intermediate array instead
2675
2148
  let a = [];
2676
-
2677
2149
  for (let i = 0; i < size; i++) {
2678
2150
  a[i] = this.getUint8();
2679
2151
  }
2680
-
2681
2152
  const nullByte = a.indexOf(0);
2682
- if (nullByte >= 0) a = a.slice(0, nullByte);
2683
- return LoaderUtils.decodeText(new Uint8Array(a));
2684
- }
2685
-
2686
- } // FBXTree holds a representation of the FBX data, returned by the TextParser ( FBX ASCII format)
2687
- // and BinaryParser( FBX Binary format)
2688
-
2689
-
2153
+ if (nullByte >= 0)
2154
+ a = a.slice(0, nullByte);
2155
+ return THREE.LoaderUtils.decodeText(new Uint8Array(a));
2156
+ }
2157
+ }
2690
2158
  class FBXTree {
2691
2159
  add(key, val) {
2692
2160
  this[key] = val;
2693
2161
  }
2694
-
2695
- } // ************** UTILITY FUNCTIONS **************
2696
-
2697
-
2162
+ }
2698
2163
  function isFbxFormatBinary(buffer) {
2699
- const CORRECT = 'Kaydara\u0020FBX\u0020Binary\u0020\u0020\0';
2164
+ const CORRECT = "Kaydara FBX Binary \0";
2700
2165
  return buffer.byteLength >= CORRECT.length && CORRECT === convertArrayBufferToString(buffer, 0, CORRECT.length);
2701
2166
  }
2702
-
2703
2167
  function isFbxFormatASCII(text) {
2704
- const CORRECT = ['K', 'a', 'y', 'd', 'a', 'r', 'a', '\\', 'F', 'B', 'X', '\\', 'B', 'i', 'n', 'a', 'r', 'y', '\\', '\\'];
2168
+ const CORRECT = [
2169
+ "K",
2170
+ "a",
2171
+ "y",
2172
+ "d",
2173
+ "a",
2174
+ "r",
2175
+ "a",
2176
+ "\\",
2177
+ "F",
2178
+ "B",
2179
+ "X",
2180
+ "\\",
2181
+ "B",
2182
+ "i",
2183
+ "n",
2184
+ "a",
2185
+ "r",
2186
+ "y",
2187
+ "\\",
2188
+ "\\"
2189
+ ];
2705
2190
  let cursor = 0;
2706
-
2707
2191
  function read(offset) {
2708
2192
  const result = text[offset - 1];
2709
2193
  text = text.slice(cursor + offset);
2710
2194
  cursor++;
2711
2195
  return result;
2712
2196
  }
2713
-
2714
2197
  for (let i = 0; i < CORRECT.length; ++i) {
2715
2198
  const num = read(1);
2716
-
2717
2199
  if (num === CORRECT[i]) {
2718
2200
  return false;
2719
2201
  }
2720
2202
  }
2721
-
2722
2203
  return true;
2723
2204
  }
2724
-
2725
2205
  function getFbxVersion(text) {
2726
2206
  const versionRegExp = /FBXVersion: (\d+)/;
2727
2207
  const match = text.match(versionRegExp);
2728
-
2729
2208
  if (match) {
2730
2209
  const version = parseInt(match[1]);
2731
2210
  return version;
2732
2211
  }
2733
-
2734
- throw new Error('THREE.FBXLoader: Cannot find the version number for the file given.');
2735
- } // Converts FBX ticks into real time seconds.
2736
-
2737
-
2212
+ throw new Error("THREE.FBXLoader: Cannot find the version number for the file given.");
2213
+ }
2738
2214
  function convertFBXTimeToSeconds(time) {
2739
- return time / 46186158000;
2215
+ return time / 46186158e3;
2740
2216
  }
2741
-
2742
- const dataArray = []; // extracts the data from the correct position in the FBX array based on indexing type
2743
-
2217
+ const dataArray = [];
2744
2218
  function getData(polygonVertexIndex, polygonIndex, vertexIndex, infoObject) {
2745
2219
  let index;
2746
-
2747
2220
  switch (infoObject.mappingType) {
2748
- case 'ByPolygonVertex':
2221
+ case "ByPolygonVertex":
2749
2222
  index = polygonVertexIndex;
2750
2223
  break;
2751
-
2752
- case 'ByPolygon':
2224
+ case "ByPolygon":
2753
2225
  index = polygonIndex;
2754
2226
  break;
2755
-
2756
- case 'ByVertice':
2227
+ case "ByVertice":
2757
2228
  index = vertexIndex;
2758
2229
  break;
2759
-
2760
- case 'AllSame':
2230
+ case "AllSame":
2761
2231
  index = infoObject.indices[0];
2762
2232
  break;
2763
-
2764
2233
  default:
2765
- console.warn('THREE.FBXLoader: unknown attribute mapping type ' + infoObject.mappingType);
2234
+ console.warn("THREE.FBXLoader: unknown attribute mapping type " + infoObject.mappingType);
2766
2235
  }
2767
-
2768
- if (infoObject.referenceType === 'IndexToDirect') index = infoObject.indices[index];
2236
+ if (infoObject.referenceType === "IndexToDirect")
2237
+ index = infoObject.indices[index];
2769
2238
  const from = index * infoObject.dataSize;
2770
2239
  const to = from + infoObject.dataSize;
2771
2240
  return slice(dataArray, infoObject.buffer, from, to);
2772
2241
  }
2773
-
2774
- const tempEuler = new Euler();
2775
- const tempVec = new Vector3(); // generate transformation from FBX transform data
2776
- // ref: https://help.autodesk.com/view/FBX/2017/ENU/?guid=__files_GUID_10CDD63C_79C1_4F2D_BB28_AD2BE65A02ED_htm
2777
- // ref: http://docs.autodesk.com/FBX/2014/ENU/FBX-SDK-Documentation/index.html?url=cpp_ref/_transformations_2main_8cxx-example.html,topicNumber=cpp_ref__transformations_2main_8cxx_example_htmlfc10a1e1-b18d-4e72-9dc0-70d0f1959f5e
2778
-
2242
+ const tempEuler = new THREE.Euler();
2243
+ const tempVec = new THREE.Vector3();
2779
2244
  function generateTransform(transformData) {
2780
- const lTranslationM = new Matrix4();
2781
- const lPreRotationM = new Matrix4();
2782
- const lRotationM = new Matrix4();
2783
- const lPostRotationM = new Matrix4();
2784
- const lScalingM = new Matrix4();
2785
- const lScalingPivotM = new Matrix4();
2786
- const lScalingOffsetM = new Matrix4();
2787
- const lRotationOffsetM = new Matrix4();
2788
- const lRotationPivotM = new Matrix4();
2789
- const lParentGX = new Matrix4();
2790
- const lParentLX = new Matrix4();
2791
- const lGlobalT = new Matrix4();
2245
+ const lTranslationM = new THREE.Matrix4();
2246
+ const lPreRotationM = new THREE.Matrix4();
2247
+ const lRotationM = new THREE.Matrix4();
2248
+ const lPostRotationM = new THREE.Matrix4();
2249
+ const lScalingM = new THREE.Matrix4();
2250
+ const lScalingPivotM = new THREE.Matrix4();
2251
+ const lScalingOffsetM = new THREE.Matrix4();
2252
+ const lRotationOffsetM = new THREE.Matrix4();
2253
+ const lRotationPivotM = new THREE.Matrix4();
2254
+ const lParentGX = new THREE.Matrix4();
2255
+ const lParentLX = new THREE.Matrix4();
2256
+ const lGlobalT = new THREE.Matrix4();
2792
2257
  const inheritType = transformData.inheritType ? transformData.inheritType : 0;
2793
- if (transformData.translation) lTranslationM.setPosition(tempVec.fromArray(transformData.translation));
2794
-
2258
+ if (transformData.translation)
2259
+ lTranslationM.setPosition(tempVec.fromArray(transformData.translation));
2795
2260
  if (transformData.preRotation) {
2796
- const array = transformData.preRotation.map(MathUtils.degToRad);
2261
+ const array = transformData.preRotation.map(THREE.MathUtils.degToRad);
2797
2262
  array.push(transformData.eulerOrder);
2798
2263
  lPreRotationM.makeRotationFromEuler(tempEuler.fromArray(array));
2799
2264
  }
2800
-
2801
2265
  if (transformData.rotation) {
2802
- const array = transformData.rotation.map(MathUtils.degToRad);
2266
+ const array = transformData.rotation.map(THREE.MathUtils.degToRad);
2803
2267
  array.push(transformData.eulerOrder);
2804
2268
  lRotationM.makeRotationFromEuler(tempEuler.fromArray(array));
2805
2269
  }
2806
-
2807
2270
  if (transformData.postRotation) {
2808
- const array = transformData.postRotation.map(MathUtils.degToRad);
2271
+ const array = transformData.postRotation.map(THREE.MathUtils.degToRad);
2809
2272
  array.push(transformData.eulerOrder);
2810
2273
  lPostRotationM.makeRotationFromEuler(tempEuler.fromArray(array));
2811
2274
  lPostRotationM.invert();
2812
2275
  }
2813
-
2814
- if (transformData.scale) lScalingM.scale(tempVec.fromArray(transformData.scale)); // Pivots and offsets
2815
-
2816
- if (transformData.scalingOffset) lScalingOffsetM.setPosition(tempVec.fromArray(transformData.scalingOffset));
2817
- if (transformData.scalingPivot) lScalingPivotM.setPosition(tempVec.fromArray(transformData.scalingPivot));
2818
- if (transformData.rotationOffset) lRotationOffsetM.setPosition(tempVec.fromArray(transformData.rotationOffset));
2819
- if (transformData.rotationPivot) lRotationPivotM.setPosition(tempVec.fromArray(transformData.rotationPivot)); // parent transform
2820
-
2276
+ if (transformData.scale)
2277
+ lScalingM.scale(tempVec.fromArray(transformData.scale));
2278
+ if (transformData.scalingOffset)
2279
+ lScalingOffsetM.setPosition(tempVec.fromArray(transformData.scalingOffset));
2280
+ if (transformData.scalingPivot)
2281
+ lScalingPivotM.setPosition(tempVec.fromArray(transformData.scalingPivot));
2282
+ if (transformData.rotationOffset)
2283
+ lRotationOffsetM.setPosition(tempVec.fromArray(transformData.rotationOffset));
2284
+ if (transformData.rotationPivot)
2285
+ lRotationPivotM.setPosition(tempVec.fromArray(transformData.rotationPivot));
2821
2286
  if (transformData.parentMatrixWorld) {
2822
2287
  lParentLX.copy(transformData.parentMatrix);
2823
2288
  lParentGX.copy(transformData.parentMatrixWorld);
2824
2289
  }
2825
-
2826
- const lLRM = lPreRotationM.clone().multiply(lRotationM).multiply(lPostRotationM); // Global Rotation
2827
-
2828
- const lParentGRM = new Matrix4();
2829
- lParentGRM.extractRotation(lParentGX); // Global Shear*Scaling
2830
-
2831
- const lParentTM = new Matrix4();
2290
+ const lLRM = lPreRotationM.clone().multiply(lRotationM).multiply(lPostRotationM);
2291
+ const lParentGRM = new THREE.Matrix4();
2292
+ lParentGRM.extractRotation(lParentGX);
2293
+ const lParentTM = new THREE.Matrix4();
2832
2294
  lParentTM.copyPosition(lParentGX);
2833
2295
  const lParentGRSM = lParentTM.clone().invert().multiply(lParentGX);
2834
2296
  const lParentGSM = lParentGRM.clone().invert().multiply(lParentGRSM);
2835
2297
  const lLSM = lScalingM;
2836
- const lGlobalRS = new Matrix4();
2837
-
2298
+ const lGlobalRS = new THREE.Matrix4();
2838
2299
  if (inheritType === 0) {
2839
2300
  lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM).multiply(lLSM);
2840
2301
  } else if (inheritType === 1) {
2841
2302
  lGlobalRS.copy(lParentGRM).multiply(lParentGSM).multiply(lLRM).multiply(lLSM);
2842
2303
  } else {
2843
- const lParentLSM = new Matrix4().scale(new Vector3().setFromMatrixScale(lParentLX));
2304
+ const lParentLSM = new THREE.Matrix4().scale(new THREE.Vector3().setFromMatrixScale(lParentLX));
2844
2305
  const lParentLSM_inv = lParentLSM.clone().invert();
2845
2306
  const lParentGSM_noLocal = lParentGSM.clone().multiply(lParentLSM_inv);
2846
2307
  lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM_noLocal).multiply(lLSM);
2847
2308
  }
2848
-
2849
2309
  const lRotationPivotM_inv = lRotationPivotM.clone().invert();
2850
- const lScalingPivotM_inv = lScalingPivotM.clone().invert(); // Calculate the local transform matrix
2851
-
2310
+ const lScalingPivotM_inv = lScalingPivotM.clone().invert();
2852
2311
  let lTransform = lTranslationM.clone().multiply(lRotationOffsetM).multiply(lRotationPivotM).multiply(lPreRotationM).multiply(lRotationM).multiply(lPostRotationM).multiply(lRotationPivotM_inv).multiply(lScalingOffsetM).multiply(lScalingPivotM).multiply(lScalingM).multiply(lScalingPivotM_inv);
2853
- const lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition(lTransform);
2312
+ const lLocalTWithAllPivotAndOffsetInfo = new THREE.Matrix4().copyPosition(lTransform);
2854
2313
  const lGlobalTranslation = lParentGX.clone().multiply(lLocalTWithAllPivotAndOffsetInfo);
2855
2314
  lGlobalT.copyPosition(lGlobalTranslation);
2856
- lTransform = lGlobalT.clone().multiply(lGlobalRS); // from global to local
2857
-
2315
+ lTransform = lGlobalT.clone().multiply(lGlobalRS);
2858
2316
  lTransform.premultiply(lParentGX.invert());
2859
2317
  return lTransform;
2860
- } // Returns the three.js intrinsic Euler order corresponding to FBX extrinsic Euler order
2861
- // ref: http://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_class_fbx_euler_html
2862
-
2863
-
2318
+ }
2864
2319
  function getEulerOrder(order) {
2865
2320
  order = order || 0;
2866
- const enums = ['ZYX', // -> XYZ extrinsic
2867
- 'YZX', // -> XZY extrinsic
2868
- 'XZY', // -> YZX extrinsic
2869
- 'ZXY', // -> YXZ extrinsic
2870
- 'YXZ', // -> ZXY extrinsic
2871
- 'XYZ' // -> ZYX extrinsic
2872
- //'SphericXYZ', // not possible to support
2321
+ const enums = [
2322
+ "ZYX",
2323
+ "YZX",
2324
+ "XZY",
2325
+ "ZXY",
2326
+ "YXZ",
2327
+ "XYZ"
2873
2328
  ];
2874
-
2875
2329
  if (order === 6) {
2876
- console.warn('THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect.');
2330
+ console.warn("THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect.");
2877
2331
  return enums[0];
2878
2332
  }
2879
-
2880
2333
  return enums[order];
2881
- } // Parses comma separated list of numbers and returns them an array.
2882
- // Used internally by the TextParser
2883
-
2884
-
2334
+ }
2885
2335
  function parseNumberArray(value) {
2886
- const array = value.split(',').map(function (val) {
2336
+ const array = value.split(",").map(function(val) {
2887
2337
  return parseFloat(val);
2888
2338
  });
2889
2339
  return array;
2890
2340
  }
2891
-
2892
2341
  function convertArrayBufferToString(buffer, from, to) {
2893
- if (from === undefined) from = 0;
2894
- if (to === undefined) to = buffer.byteLength;
2895
- return LoaderUtils.decodeText(new Uint8Array(buffer, from, to));
2342
+ if (from === void 0)
2343
+ from = 0;
2344
+ if (to === void 0)
2345
+ to = buffer.byteLength;
2346
+ return THREE.LoaderUtils.decodeText(new Uint8Array(buffer, from, to));
2896
2347
  }
2897
-
2898
2348
  function append(a, b) {
2899
2349
  for (let i = 0, j = a.length, l = b.length; i < l; i++, j++) {
2900
2350
  a[j] = b[i];
2901
2351
  }
2902
2352
  }
2903
-
2904
2353
  function slice(a, b, from, to) {
2905
2354
  for (let i = from, j = 0; i < to; i++, j++) {
2906
2355
  a[j] = b[i];
2907
2356
  }
2908
-
2909
2357
  return a;
2910
- } // inject array a2 into array a1 at index
2911
-
2912
-
2358
+ }
2913
2359
  function inject(a1, index, a2) {
2914
2360
  return a1.slice(0, index).concat(a2).concat(a1.slice(index));
2915
2361
  }
2916
-
2917
- export { FBXLoader };
2362
+ exports.FBXLoader = FBXLoader;