three-stdlib 2.15.2 → 2.16.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1218) hide show
  1. package/BufferGeometryUtils-1a7a235c.js +655 -0
  2. package/BufferGeometryUtils-971dfde3.js +1 -0
  3. package/Nodes-4f766d71.js +471 -0
  4. package/Nodes-9aa16d74.js +1 -0
  5. package/animation/AnimationClipCreator.cjs.js +1 -0
  6. package/animation/AnimationClipCreator.js +52 -32
  7. package/animation/CCDIKSolver.cjs.js +1 -0
  8. package/animation/CCDIKSolver.js +275 -207
  9. package/animation/MMDAnimationHelper.cjs.js +1 -0
  10. package/animation/MMDAnimationHelper.js +341 -150
  11. package/animation/MMDPhysics.cjs.js +1 -0
  12. package/animation/MMDPhysics.js +361 -154
  13. package/cameras/CinematicCamera.cjs.js +1 -0
  14. package/cameras/CinematicCamera.js +77 -67
  15. package/controls/ArcballControls.cjs.js +1 -0
  16. package/controls/ArcballControls.js +1449 -544
  17. package/controls/DeviceOrientationControls.cjs.js +1 -0
  18. package/controls/DeviceOrientationControls.js +97 -52
  19. package/controls/DragControls.cjs.js +1 -0
  20. package/controls/DragControls.js +187 -85
  21. package/controls/FirstPersonControls.cjs.js +1 -0
  22. package/controls/FirstPersonControls.js +193 -123
  23. package/controls/FlyControls.cjs.js +1 -0
  24. package/controls/FlyControls.js +152 -82
  25. package/controls/OrbitControls.cjs.js +1 -0
  26. package/controls/OrbitControls.js +481 -232
  27. package/controls/PointerLockControls.cjs.js +1 -0
  28. package/controls/PointerLockControls.js +99 -63
  29. package/controls/TrackballControls.cjs.js +1 -0
  30. package/controls/TrackballControls.js +383 -211
  31. package/controls/TransformControls.cjs.js +1 -0
  32. package/controls/TransformControls.js +782 -575
  33. package/controls/experimental/CameraControls.cjs.js +1 -0
  34. package/controls/experimental/CameraControls.js +609 -329
  35. package/csm/CSM.cjs.js +1 -0
  36. package/csm/CSM.js +108 -47
  37. package/csm/CSMFrustum.cjs.js +1 -0
  38. package/csm/CSMFrustum.js +29 -14
  39. package/csm/CSMHelper.cjs.js +1 -0
  40. package/csm/CSMHelper.js +34 -20
  41. package/csm/CSMShader.cjs.js +1 -0
  42. package/csm/CSMShader.js +11 -7
  43. package/curves/CurveExtras.cjs.js +1 -0
  44. package/curves/CurveExtras.js +115 -73
  45. package/curves/NURBSCurve.cjs.js +1 -0
  46. package/curves/NURBSCurve.js +43 -15
  47. package/curves/NURBSSurface.cjs.js +1 -0
  48. package/curves/NURBSSurface.js +27 -11
  49. package/curves/NURBSUtils.cjs.js +1 -0
  50. package/curves/NURBSUtils.js +203 -54
  51. package/custom.d.cjs.js +1 -0
  52. package/{shaders/types.mjs → custom.d.js} +0 -0
  53. package/deprecated/Geometry.cjs.js +1 -0
  54. package/deprecated/Geometry.js +486 -191
  55. package/effects/AnaglyphEffect.cjs.js +1 -0
  56. package/effects/AnaglyphEffect.js +60 -95
  57. package/effects/AsciiEffect.cjs.js +1 -0
  58. package/effects/AsciiEffect.js +110 -80
  59. package/effects/OutlineEffect.cjs.js +1 -0
  60. package/effects/OutlineEffect.js +204 -121
  61. package/effects/ParallaxBarrierEffect.cjs.js +1 -0
  62. package/effects/ParallaxBarrierEffect.js +38 -39
  63. package/effects/PeppersGhostEffect.cjs.js +1 -0
  64. package/effects/PeppersGhostEffect.js +68 -19
  65. package/effects/StereoEffect.cjs.js +1 -0
  66. package/effects/StereoEffect.js +16 -12
  67. package/environments/RoomEnvironment.cjs.js +1 -0
  68. package/environments/RoomEnvironment.js +47 -52
  69. package/exporters/ColladaExporter.cjs.js +1 -0
  70. package/exporters/ColladaExporter.js +241 -115
  71. package/exporters/DRACOExporter.cjs.js +1 -0
  72. package/exporters/DRACOExporter.js +121 -67
  73. package/exporters/GLTFExporter.cjs.js +1 -0
  74. package/exporters/GLTFExporter.js +1014 -463
  75. package/exporters/MMDExporter.cjs.js +1 -0
  76. package/exporters/MMDExporter.js +102 -44
  77. package/exporters/OBJExporter.cjs.js +1 -0
  78. package/exporters/OBJExporter.js +140 -78
  79. package/exporters/PLYExporter.cjs.js +1 -0
  80. package/exporters/PLYExporter.js +154 -93
  81. package/exporters/STLExporter.cjs.js +1 -0
  82. package/exporters/STLExporter.js +81 -30
  83. package/exporters/USDZExporter.cjs.js +1 -0
  84. package/exporters/USDZExporter.js +144 -84
  85. package/geometries/BoxLineGeometry.cjs.js +1 -0
  86. package/geometries/BoxLineGeometry.js +14 -7
  87. package/geometries/ConvexGeometry.cjs.js +1 -0
  88. package/geometries/ConvexGeometry.js +23 -14
  89. package/geometries/DecalGeometry.cjs.js +1 -0
  90. package/geometries/DecalGeometry.js +162 -108
  91. package/geometries/LightningStrike.cjs.js +1 -0
  92. package/geometries/LightningStrike.js +294 -101
  93. package/geometries/ParametricGeometries.cjs.js +1 -0
  94. package/geometries/ParametricGeometries.js +76 -26
  95. package/geometries/ParametricGeometry.cjs.js +1 -0
  96. package/geometries/ParametricGeometry.js +48 -24
  97. package/geometries/RoundedBoxGeometry.cjs.js +1 -0
  98. package/geometries/RoundedBoxGeometry.js +64 -33
  99. package/geometries/TeapotGeometry.cjs.js +1 -0
  100. package/geometries/TeapotGeometry.js +174 -1434
  101. package/geometries/TextGeometry.cjs.js +1 -0
  102. package/geometries/TextGeometry.js +17 -9
  103. package/helpers/LightProbeHelper.cjs.js +1 -0
  104. package/helpers/LightProbeHelper.js +21 -53
  105. package/helpers/PositionalAudioHelper.cjs.js +1 -0
  106. package/helpers/PositionalAudioHelper.js +30 -23
  107. package/helpers/RectAreaLightHelper.cjs.js +1 -0
  108. package/helpers/RectAreaLightHelper.js +33 -17
  109. package/helpers/VertexNormalsHelper.cjs.js +1 -0
  110. package/helpers/VertexNormalsHelper.js +41 -20
  111. package/helpers/VertexTangentsHelper.cjs.js +1 -0
  112. package/helpers/VertexTangentsHelper.js +36 -18
  113. package/index.cjs.js +1 -0
  114. package/index.js +333 -968
  115. package/interactive/InteractiveGroup.cjs.js +1 -0
  116. package/interactive/InteractiveGroup.d.ts +5 -0
  117. package/interactive/InteractiveGroup.js +87 -0
  118. package/interactive/SelectionBox.cjs.js +1 -0
  119. package/interactive/SelectionBox.js +46 -31
  120. package/interactive/SelectionHelper.cjs.js +1 -0
  121. package/interactive/SelectionHelper.js +21 -16
  122. package/libs/MeshoptDecoder.cjs.js +1 -0
  123. package/libs/MeshoptDecoder.js +58 -147
  124. package/libs/MotionControllers.cjs.js +1 -0
  125. package/libs/MotionControllers.js +208 -66
  126. package/lights/LightProbeGenerator.cjs.js +1 -0
  127. package/lights/LightProbeGenerator.js +96 -40
  128. package/lights/RectAreaLightUniformsLib.cjs.js +1 -0
  129. package/lights/RectAreaLightUniformsLib.js +9 -32842
  130. package/lines/Line2.cjs.js +1 -0
  131. package/lines/Line2.js +12 -9
  132. package/lines/LineGeometry.cjs.js +1 -0
  133. package/lines/LineGeometry.js +19 -7
  134. package/lines/LineMaterial.cjs.js +1 -0
  135. package/lines/LineMaterial.js +89 -51
  136. package/lines/LineSegments2.cjs.js +1 -0
  137. package/lines/LineSegments2.js +165 -56
  138. package/lines/LineSegmentsGeometry.cjs.js +1 -0
  139. package/lines/LineSegmentsGeometry.js +71 -29
  140. package/lines/Wireframe.cjs.js +1 -0
  141. package/lines/Wireframe.js +29 -15
  142. package/lines/WireframeGeometry2.cjs.js +1 -0
  143. package/lines/WireframeGeometry2.js +9 -8
  144. package/loaders/3DMLoader.cjs.js +1 -0
  145. package/loaders/3DMLoader.js +469 -234
  146. package/loaders/3MFLoader.cjs.js +1 -0
  147. package/loaders/3MFLoader.js +555 -340
  148. package/loaders/AMFLoader.cjs.js +1 -0
  149. package/loaders/AMFLoader.js +219 -114
  150. package/loaders/AssimpLoader.cjs.js +1 -0
  151. package/loaders/AssimpLoader.js +725 -328
  152. package/loaders/BVHLoader.cjs.js +1 -0
  153. package/loaders/BVHLoader.js +200 -94
  154. package/loaders/BasisTextureLoader.cjs.js +1 -0
  155. package/loaders/BasisTextureLoader.js +357 -229
  156. package/loaders/ColladaLoader.cjs.js +1 -0
  157. package/loaders/ColladaLoader.js +1522 -932
  158. package/loaders/DDSLoader.cjs.js +1 -0
  159. package/loaders/DDSLoader.js +108 -42
  160. package/loaders/DRACOLoader.cjs.js +1 -0
  161. package/loaders/DRACOLoader.js +210 -103
  162. package/loaders/EXRLoader.cjs.js +1 -0
  163. package/loaders/EXRLoader.js +809 -461
  164. package/loaders/FBXLoader.cjs.js +1 -0
  165. package/loaders/FBXLoader.js +1397 -842
  166. package/loaders/FontLoader.cjs.js +1 -0
  167. package/loaders/FontLoader.js +66 -33
  168. package/loaders/GCodeLoader.cjs.js +1 -0
  169. package/loaders/GCodeLoader.js +111 -63
  170. package/loaders/GLTFLoader.cjs.js +1 -0
  171. package/loaders/GLTFLoader.js +1484 -771
  172. package/loaders/HDRCubeTextureLoader.cjs.js +1 -0
  173. package/loaders/HDRCubeTextureLoader.js +50 -45
  174. package/loaders/KMZLoader.cjs.js +1 -0
  175. package/loaders/KMZLoader.js +55 -42
  176. package/loaders/KTX2Loader.cjs.js +1 -0
  177. package/loaders/KTX2Loader.js +362 -229
  178. package/loaders/KTXLoader.cjs.js +1 -0
  179. package/loaders/KTXLoader.js +99 -37
  180. package/loaders/LDrawLoader.cjs.js +1 -0
  181. package/loaders/LDrawLoader.js +746 -313
  182. package/loaders/LUT3dlLoader.cjs.js +1 -0
  183. package/loaders/LUT3dlLoader.js +62 -50
  184. package/loaders/LUTCubeLoader.cjs.js +1 -0
  185. package/loaders/LUTCubeLoader.js +56 -45
  186. package/loaders/LWOLoader.cjs.js +1 -0
  187. package/loaders/LWOLoader.js +339 -227
  188. package/loaders/LottieLoader.cjs.js +1 -0
  189. package/loaders/LottieLoader.js +38 -36
  190. package/loaders/MD2Loader.cjs.js +1 -0
  191. package/loaders/MD2Loader.js +91 -248
  192. package/loaders/MDDLoader.cjs.js +1 -0
  193. package/loaders/MDDLoader.js +45 -25
  194. package/loaders/MMDLoader.cjs.js +1 -0
  195. package/loaders/MMDLoader.js +795 -359
  196. package/loaders/MTLLoader.cjs.js +1 -0
  197. package/loaders/MTLLoader.js +201 -91
  198. package/loaders/NRRDLoader.cjs.js +1 -0
  199. package/loaders/NRRDLoader.js +263 -182
  200. package/loaders/NodeMaterialLoader.cjs.js +1 -0
  201. package/loaders/NodeMaterialLoader.js +14 -121
  202. package/loaders/OBJLoader.cjs.js +1 -0
  203. package/loaders/OBJLoader.js +283 -161
  204. package/loaders/PCDLoader.cjs.js +1 -0
  205. package/loaders/PCDLoader.js +164 -145
  206. package/loaders/PDBLoader.cjs.js +1 -0
  207. package/loaders/PDBLoader.js +63 -45
  208. package/loaders/PLYLoader.cjs.js +1 -0
  209. package/loaders/PLYLoader.js +203 -106
  210. package/loaders/PRWMLoader.cjs.js +1 -0
  211. package/loaders/PRWMLoader.js +110 -73
  212. package/loaders/PVRLoader.cjs.js +1 -0
  213. package/loaders/PVRLoader.js +93 -32
  214. package/loaders/RGBELoader.cjs.js +1 -0
  215. package/loaders/RGBELoader.js +233 -96
  216. package/loaders/RGBMLoader.cjs.js +1 -0
  217. package/loaders/RGBMLoader.js +514 -344
  218. package/loaders/STLLoader.cjs.js +1 -0
  219. package/loaders/STLLoader.js +165 -59
  220. package/loaders/SVGLoader.cjs.js +1 -0
  221. package/loaders/SVGLoader.js +851 -481
  222. package/loaders/TDSLoader.cjs.js +1 -0
  223. package/loaders/TDSLoader.js +527 -137
  224. package/loaders/TGALoader.cjs.js +1 -0
  225. package/loaders/TGALoader.js +205 -94
  226. package/loaders/TTFLoader.cjs.js +1 -0
  227. package/loaders/TTFLoader.js +79 -58
  228. package/loaders/TiltLoader.cjs.js +1 -0
  229. package/loaders/TiltLoader.js +167 -129
  230. package/loaders/VOXLoader.cjs.js +1 -0
  231. package/loaders/VOXLoader.js +84 -320
  232. package/loaders/VRMLLoader.cjs.js +1 -0
  233. package/loaders/VRMLLoader.js +1268 -786
  234. package/loaders/VRMLoader.cjs.js +1 -0
  235. package/loaders/VRMLoader.js +31 -23
  236. package/loaders/VTKLoader.cjs.js +1 -0
  237. package/loaders/VTKLoader.js +407 -219
  238. package/loaders/XLoader.cjs.js +1 -0
  239. package/loaders/XLoader.js +1259 -1083
  240. package/loaders/XYZLoader.cjs.js +1 -0
  241. package/loaders/XYZLoader.js +34 -28
  242. package/loaders/lwo/IFFParser.cjs.js +1 -0
  243. package/loaders/lwo/IFFParser.js +492 -238
  244. package/loaders/lwo/LWO2Parser.cjs.js +1 -0
  245. package/loaders/lwo/LWO2Parser.js +279 -176
  246. package/loaders/lwo/LWO3Parser.cjs.js +1 -0
  247. package/loaders/lwo/LWO3Parser.js +247 -160
  248. package/math/Capsule.cjs.js +1 -0
  249. package/math/Capsule.js +43 -56
  250. package/math/ColorConverter.cjs.js +1 -0
  251. package/math/ColorConverter.js +32 -18
  252. package/math/ConvexHull.cjs.js +1 -0
  253. package/math/ConvexHull.js +357 -97
  254. package/math/ImprovedNoise.cjs.js +1 -0
  255. package/math/ImprovedNoise.js +32 -282
  256. package/math/Lut.cjs.js +1 -0
  257. package/math/Lut.js +35 -51
  258. package/math/MeshSurfaceSampler.cjs.js +1 -0
  259. package/math/MeshSurfaceSampler.js +68 -25
  260. package/math/OBB.cjs.js +1 -0
  261. package/math/OBB.js +152 -91
  262. package/math/Octree.cjs.js +1 -0
  263. package/math/Octree.js +139 -76
  264. package/math/SimplexNoise.cjs.js +1 -0
  265. package/math/SimplexNoise.js +238 -217
  266. package/misc/ConvexObjectBreaker.cjs.js +1 -0
  267. package/misc/ConvexObjectBreaker.js +185 -79
  268. package/misc/GPUComputationRenderer.cjs.js +1 -0
  269. package/misc/GPUComputationRenderer.js +194 -69
  270. package/misc/Gyroscope.cjs.js +1 -0
  271. package/misc/Gyroscope.js +22 -16
  272. package/misc/MD2Character.cjs.js +1 -0
  273. package/misc/MD2Character.js +74 -52
  274. package/misc/MD2CharacterComplex.cjs.js +1 -0
  275. package/misc/MD2CharacterComplex.js +163 -112
  276. package/misc/MorphAnimMesh.cjs.js +1 -0
  277. package/misc/MorphAnimMesh.js +28 -20
  278. package/misc/MorphBlendMesh.cjs.js +1 -0
  279. package/misc/MorphBlendMesh.js +69 -45
  280. package/misc/ProgressiveLightmap.cjs.js +1 -0
  281. package/misc/ProgressiveLightmap.js +187 -70
  282. package/misc/RollerCoaster.cjs.js +1 -0
  283. package/misc/RollerCoaster.js +135 -106
  284. package/misc/TubePainter.cjs.js +1 -0
  285. package/misc/TubePainter.js +92 -74
  286. package/misc/Volume.cjs.js +1 -0
  287. package/misc/Volume.js +270 -108
  288. package/misc/VolumeSlice.cjs.js +1 -0
  289. package/misc/VolumeSlice.js +122 -34
  290. package/misc/WebGL.cjs.js +1 -0
  291. package/misc/WebGL.js +34 -37
  292. package/modifiers/CurveModifier.cjs.js +1 -0
  293. package/modifiers/CurveModifier.js +151 -46
  294. package/modifiers/EdgeSplitModifier.cjs.js +1 -0
  295. package/modifiers/EdgeSplitModifier.js +90 -46
  296. package/modifiers/SimplifyModifier.cjs.js +1 -0
  297. package/modifiers/SimplifyModifier.js +202 -77
  298. package/modifiers/TessellateModifier.cjs.js +1 -0
  299. package/modifiers/TessellateModifier.js +90 -65
  300. package/nodes/Nodes.cjs.js +1 -0
  301. package/nodes/Nodes.js +140 -274
  302. package/nodes/ShaderNode.cjs.js +1 -0
  303. package/nodes/ShaderNode.js +196 -296
  304. package/nodes/accessors/BufferNode.cjs.js +1 -0
  305. package/nodes/accessors/BufferNode.js +8 -4
  306. package/nodes/accessors/CameraNode.cjs.js +1 -0
  307. package/nodes/accessors/CameraNode.js +25 -20
  308. package/nodes/accessors/CubeTextureNode.cjs.js +1 -0
  309. package/nodes/accessors/CubeTextureNode.js +26 -14
  310. package/nodes/accessors/MaterialNode.cjs.js +1 -0
  311. package/nodes/accessors/MaterialNode.js +53 -43
  312. package/nodes/accessors/MaterialReferenceNode.cjs.js +1 -0
  313. package/nodes/accessors/MaterialReferenceNode.js +6 -3
  314. package/nodes/accessors/ModelNode.cjs.js +1 -0
  315. package/nodes/accessors/ModelNode.js +5 -3
  316. package/nodes/accessors/ModelViewProjectionNode.cjs.js +1 -0
  317. package/nodes/accessors/ModelViewProjectionNode.js +13 -14
  318. package/nodes/accessors/NormalNode.cjs.js +1 -0
  319. package/nodes/accessors/NormalNode.js +39 -40
  320. package/nodes/accessors/Object3DNode.cjs.js +1 -0
  321. package/nodes/accessors/Object3DNode.js +50 -40
  322. package/nodes/accessors/PointUVNode.cjs.js +1 -0
  323. package/nodes/accessors/PointUVNode.js +9 -5
  324. package/nodes/accessors/PositionNode.cjs.js +1 -0
  325. package/nodes/accessors/PositionNode.js +41 -42
  326. package/nodes/accessors/ReferenceNode.cjs.js +1 -0
  327. package/nodes/accessors/ReferenceNode.js +17 -10
  328. package/nodes/accessors/ReflectNode.cjs.js +1 -0
  329. package/nodes/accessors/ReflectNode.js +26 -23
  330. package/nodes/accessors/SkinningNode.cjs.js +1 -0
  331. package/nodes/accessors/SkinningNode.js +48 -46
  332. package/nodes/accessors/TextureNode.cjs.js +1 -0
  333. package/nodes/accessors/TextureNode.js +29 -14
  334. package/nodes/accessors/UVNode.cjs.js +1 -0
  335. package/nodes/accessors/UVNode.js +11 -5
  336. package/nodes/core/ArrayUniformNode.cjs.js +1 -0
  337. package/nodes/core/ArrayUniformNode.js +7 -3
  338. package/nodes/core/AttributeNode.cjs.js +1 -0
  339. package/nodes/core/AttributeNode.js +12 -5
  340. package/nodes/core/BypassNode.cjs.js +1 -0
  341. package/nodes/core/BypassNode.js +12 -5
  342. package/nodes/core/CodeNode.cjs.js +1 -0
  343. package/nodes/core/CodeNode.js +12 -4
  344. package/nodes/core/ConstNode.cjs.js +1 -0
  345. package/nodes/core/ConstNode.js +7 -3
  346. package/nodes/core/ContextNode.cjs.js +1 -0
  347. package/nodes/core/ContextNode.js +8 -3
  348. package/nodes/core/ExpressionNode.cjs.js +1 -0
  349. package/nodes/core/ExpressionNode.js +9 -5
  350. package/nodes/core/FunctionCallNode.cjs.js +1 -0
  351. package/nodes/core/FunctionCallNode.js +15 -6
  352. package/nodes/core/FunctionNode.cjs.js +1 -0
  353. package/nodes/core/FunctionNode.js +25 -10
  354. package/nodes/core/InputNode.cjs.js +1 -0
  355. package/nodes/core/InputNode.js +23 -12
  356. package/nodes/core/Node.cjs.js +1 -0
  357. package/nodes/core/Node.js +75 -35
  358. package/nodes/core/NodeAttribute.cjs.js +1 -0
  359. package/nodes/core/NodeAttribute.js +4 -2
  360. package/nodes/core/NodeBuilder.cjs.js +1 -0
  361. package/nodes/core/NodeBuilder.js +224 -110
  362. package/nodes/core/NodeCode.cjs.js +1 -0
  363. package/nodes/core/NodeCode.js +7 -4
  364. package/nodes/core/NodeFrame.cjs.js +1 -0
  365. package/nodes/core/NodeFrame.js +12 -9
  366. package/nodes/core/NodeFunction.cjs.js +1 -0
  367. package/nodes/core/NodeFunction.js +17 -0
  368. package/nodes/core/NodeFunctionInput.cjs.js +1 -0
  369. package/nodes/core/NodeFunctionInput.js +5 -3
  370. package/nodes/core/NodeKeywords.cjs.js +1 -0
  371. package/nodes/core/NodeKeywords.js +16 -5
  372. package/nodes/core/NodeParser.cjs.js +1 -0
  373. package/nodes/core/NodeParser.js +8 -0
  374. package/nodes/core/NodeUniform.cjs.js +1 -0
  375. package/nodes/core/NodeUniform.js +7 -3
  376. package/nodes/core/NodeUtils.cjs.js +1 -0
  377. package/nodes/core/NodeUtils.js +43 -39
  378. package/nodes/core/NodeVar.cjs.js +1 -0
  379. package/nodes/core/NodeVar.js +4 -2
  380. package/nodes/core/NodeVary.cjs.js +1 -0
  381. package/nodes/core/NodeVary.js +4 -2
  382. package/nodes/core/PropertyNode.cjs.js +1 -0
  383. package/nodes/core/PropertyNode.js +10 -4
  384. package/nodes/core/TempNode.cjs.js +1 -0
  385. package/nodes/core/TempNode.js +11 -5
  386. package/nodes/core/UniformNode.cjs.js +1 -0
  387. package/nodes/core/UniformNode.js +10 -4
  388. package/nodes/core/VarNode.cjs.js +1 -0
  389. package/nodes/core/VarNode.js +11 -3
  390. package/nodes/core/VaryNode.cjs.js +1 -0
  391. package/nodes/core/VaryNode.js +15 -6
  392. package/nodes/core/constants.cjs.js +1 -0
  393. package/nodes/core/constants.js +7 -20
  394. package/nodes/display/ColorSpaceNode.cjs.js +1 -0
  395. package/nodes/display/ColorSpaceNode.js +38 -34
  396. package/nodes/display/NormalMapNode.cjs.js +1 -0
  397. package/nodes/display/NormalMapNode.js +53 -35
  398. package/nodes/fog/FogNode.cjs.js +1 -0
  399. package/nodes/fog/FogNode.js +9 -5
  400. package/nodes/fog/FogRangeNode.cjs.js +1 -0
  401. package/nodes/fog/FogRangeNode.js +9 -5
  402. package/nodes/functions/BSDFs.cjs.js +1 -0
  403. package/nodes/functions/BSDFs.js +118 -61
  404. package/nodes/functions/PhysicalMaterialFunctions.cjs.js +1 -0
  405. package/nodes/functions/PhysicalMaterialFunctions.js +57 -0
  406. package/nodes/lights/LightContextNode.cjs.js +1 -0
  407. package/nodes/lights/LightContextNode.js +23 -14
  408. package/nodes/lights/LightNode.cjs.js +1 -0
  409. package/nodes/lights/LightNode.js +31 -27
  410. package/nodes/lights/LightsNode.cjs.js +1 -0
  411. package/nodes/lights/LightsNode.js +28 -9
  412. package/nodes/loaders/NodeLoader.cjs.js +1 -0
  413. package/nodes/loaders/NodeLoader.js +42 -27
  414. package/nodes/loaders/NodeMaterialLoader.cjs.js +1 -0
  415. package/nodes/loaders/NodeMaterialLoader.js +10 -4
  416. package/nodes/loaders/NodeObjectLoader.cjs.js +1 -0
  417. package/nodes/loaders/NodeObjectLoader.js +19 -9
  418. package/nodes/materials/LineBasicNodeMaterial.cjs.js +1 -0
  419. package/nodes/materials/LineBasicNodeMaterial.js +10 -5
  420. package/nodes/materials/Materials.cjs.js +1 -0
  421. package/nodes/materials/Materials.js +17 -14
  422. package/nodes/materials/MeshBasicNodeMaterial.cjs.js +1 -0
  423. package/nodes/materials/MeshBasicNodeMaterial.js +10 -5
  424. package/nodes/materials/MeshStandardNodeMaterial.cjs.js +1 -0
  425. package/nodes/materials/MeshStandardNodeMaterial.js +8 -5
  426. package/nodes/materials/NodeMaterial.cjs.js +1 -0
  427. package/nodes/materials/NodeMaterial.js +36 -20
  428. package/nodes/materials/PointsNodeMaterial.cjs.js +1 -0
  429. package/nodes/materials/PointsNodeMaterial.js +10 -5
  430. package/nodes/math/CondNode.cjs.js +1 -0
  431. package/nodes/math/CondNode.js +23 -11
  432. package/nodes/math/MathNode.cjs.js +1 -0
  433. package/nodes/math/MathNode.js +142 -98
  434. package/nodes/math/OperatorNode.cjs.js +1 -0
  435. package/nodes/math/OperatorNode.js +46 -24
  436. package/nodes/parsers/GLSLNodeFunction.cjs.js +1 -0
  437. package/nodes/parsers/GLSLNodeFunction.js +101 -0
  438. package/nodes/parsers/GLSLNodeParser.cjs.js +1 -0
  439. package/nodes/parsers/GLSLNodeParser.js +13 -0
  440. package/nodes/parsers/WGSLNodeFunction.cjs.js +1 -0
  441. package/nodes/parsers/WGSLNodeFunction.js +71 -0
  442. package/nodes/parsers/WGSLNodeParser.cjs.js +1 -0
  443. package/nodes/parsers/WGSLNodeParser.js +13 -0
  444. package/nodes/procedural/CheckerNode.cjs.js +1 -0
  445. package/nodes/procedural/CheckerNode.js +19 -13
  446. package/nodes/utils/ArrayElementNode.cjs.js +1 -0
  447. package/nodes/utils/ArrayElementNode.js +8 -4
  448. package/nodes/utils/ConvertNode.cjs.js +1 -0
  449. package/nodes/utils/ConvertNode.js +8 -3
  450. package/nodes/utils/JoinNode.cjs.js +1 -0
  451. package/nodes/utils/JoinNode.js +11 -7
  452. package/nodes/utils/MatcapUVNode.cjs.js +1 -0
  453. package/nodes/utils/MatcapUVNode.js +11 -8
  454. package/nodes/utils/OscNode.cjs.js +1 -0
  455. package/nodes/utils/OscNode.js +33 -27
  456. package/nodes/utils/SplitNode.cjs.js +1 -0
  457. package/nodes/utils/SplitNode.js +20 -6
  458. package/nodes/utils/SpriteSheetUVNode.cjs.js +1 -0
  459. package/nodes/utils/SpriteSheetUVNode.js +23 -23
  460. package/nodes/utils/TimerNode.cjs.js +1 -0
  461. package/nodes/utils/TimerNode.js +24 -20
  462. package/objects/GroundProjectedEnv.cjs.js +1 -0
  463. package/objects/GroundProjectedEnv.js +37 -22
  464. package/objects/Lensflare.cjs.js +1 -0
  465. package/objects/Lensflare.js +156 -86
  466. package/objects/LightningStorm.cjs.js +1 -0
  467. package/objects/LightningStorm.js +102 -38
  468. package/objects/MarchingCubes.cjs.js +1 -0
  469. package/objects/MarchingCubes.js +303 -150
  470. package/objects/Reflector.cjs.js +1 -0
  471. package/objects/Reflector.js +72 -50
  472. package/objects/ReflectorForSSRPass.cjs.js +1 -0
  473. package/objects/ReflectorForSSRPass.js +131 -80
  474. package/objects/ReflectorRTT.cjs.js +1 -0
  475. package/objects/ReflectorRTT.js +7 -6
  476. package/objects/Refractor.cjs.js +1 -0
  477. package/objects/Refractor.js +106 -64
  478. package/objects/ShadowMesh.cjs.js +1 -0
  479. package/objects/ShadowMesh.js +17 -8
  480. package/objects/Sky.cjs.js +1 -0
  481. package/objects/Sky.js +80 -119
  482. package/objects/Water.cjs.js +1 -0
  483. package/objects/Water.js +127 -83
  484. package/objects/Water2.cjs.js +1 -0
  485. package/objects/Water2.js +108 -72
  486. package/offscreen/jank.cjs.js +1 -0
  487. package/offscreen/jank.js +14 -10
  488. package/offscreen/offscreen.cjs.js +1 -0
  489. package/offscreen/offscreen.js +5 -4
  490. package/offscreen/scene.cjs.js +1 -0
  491. package/offscreen/scene.js +48 -45
  492. package/package.json +3 -3
  493. package/physics/AmmoPhysics.cjs.js +1 -0
  494. package/physics/AmmoPhysics.js +71 -30
  495. package/postprocessing/AdaptiveToneMappingPass.cjs.js +1 -0
  496. package/postprocessing/AdaptiveToneMappingPass.js +123 -97
  497. package/postprocessing/AfterimagePass.cjs.js +1 -0
  498. package/postprocessing/AfterimagePass.js +49 -28
  499. package/postprocessing/BloomPass.cjs.js +1 -0
  500. package/postprocessing/BloomPass.js +69 -43
  501. package/postprocessing/BokehPass.cjs.js +1 -0
  502. package/postprocessing/BokehPass.js +69 -39
  503. package/postprocessing/ClearPass.cjs.js +1 -0
  504. package/postprocessing/ClearPass.js +25 -10
  505. package/postprocessing/CubeTexturePass.cjs.js +1 -0
  506. package/postprocessing/CubeTexturePass.js +27 -28
  507. package/postprocessing/DotScreenPass.cjs.js +1 -0
  508. package/postprocessing/DotScreenPass.js +32 -24
  509. package/postprocessing/EffectComposer.cjs.js +1 -0
  510. package/postprocessing/EffectComposer.js +86 -39
  511. package/postprocessing/FilmPass.cjs.js +1 -0
  512. package/postprocessing/FilmPass.js +30 -25
  513. package/postprocessing/GlitchPass.cjs.js +1 -0
  514. package/postprocessing/GlitchPass.js +61 -38
  515. package/postprocessing/HalftonePass.cjs.js +1 -0
  516. package/postprocessing/HalftonePass.js +39 -19
  517. package/postprocessing/LUTPass.cjs.js +1 -0
  518. package/postprocessing/LUTPass.js +38 -13
  519. package/postprocessing/MaskPass.cjs.js +1 -0
  520. package/postprocessing/MaskPass.js +38 -19
  521. package/postprocessing/OutlinePass.cjs.js +1 -0
  522. package/postprocessing/OutlinePass.js +277 -135
  523. package/postprocessing/Pass.cjs.js +1 -0
  524. package/postprocessing/Pass.js +44 -20
  525. package/postprocessing/RenderPass.cjs.js +1 -0
  526. package/postprocessing/RenderPass.js +36 -13
  527. package/postprocessing/RenderPixelatedPass.cjs.js +1 -0
  528. package/postprocessing/RenderPixelatedPass.js +58 -44
  529. package/postprocessing/SAOPass.cjs.js +1 -0
  530. package/postprocessing/SAOPass.js +189 -154
  531. package/postprocessing/SMAAPass.cjs.js +1 -0
  532. package/postprocessing/SMAAPass.js +84 -64
  533. package/postprocessing/SSAARenderPass.cjs.js +1 -0
  534. package/postprocessing/SSAARenderPass.js +69 -121
  535. package/postprocessing/SSAOPass.cjs.js +1 -0
  536. package/postprocessing/SSAOPass.js +172 -123
  537. package/postprocessing/SSRPass.cjs.js +1 -0
  538. package/postprocessing/SSRPass.js +280 -211
  539. package/postprocessing/SavePass.cjs.js +1 -0
  540. package/postprocessing/SavePass.js +25 -20
  541. package/postprocessing/ShaderPass.cjs.js +1 -0
  542. package/postprocessing/ShaderPass.js +30 -14
  543. package/postprocessing/TAARenderPass.cjs.js +1 -0
  544. package/postprocessing/TAARenderPass.js +61 -42
  545. package/postprocessing/TexturePass.cjs.js +1 -0
  546. package/postprocessing/TexturePass.js +22 -21
  547. package/postprocessing/UnrealBloomPass.cjs.js +1 -0
  548. package/postprocessing/UnrealBloomPass.js +213 -105
  549. package/renderers/CSS2DRenderer.cjs.js +1 -0
  550. package/renderers/CSS2DRenderer.js +56 -44
  551. package/renderers/CSS3DRenderer.cjs.js +1 -0
  552. package/renderers/CSS3DRenderer.js +86 -53
  553. package/renderers/Projector.cjs.js +1 -0
  554. package/renderers/Projector.js +274 -107
  555. package/renderers/SVGRenderer.cjs.js +1 -0
  556. package/renderers/SVGRenderer.js +182 -72
  557. package/renderers/nodes/accessors/CameraNode.cjs.js +1 -0
  558. package/renderers/nodes/accessors/CameraNode.js +40 -29
  559. package/renderers/nodes/accessors/ModelNode.cjs.js +1 -0
  560. package/renderers/nodes/accessors/ModelNode.js +37 -28
  561. package/renderers/nodes/accessors/ModelViewProjectionNode.cjs.js +1 -0
  562. package/renderers/nodes/accessors/ModelViewProjectionNode.js +23 -10
  563. package/renderers/nodes/accessors/NormalNode.cjs.js +1 -0
  564. package/renderers/nodes/accessors/NormalNode.js +45 -35
  565. package/renderers/nodes/accessors/PositionNode.cjs.js +1 -0
  566. package/renderers/nodes/accessors/PositionNode.js +19 -18
  567. package/renderers/nodes/accessors/UVNode.cjs.js +1 -0
  568. package/renderers/nodes/accessors/UVNode.js +10 -5
  569. package/renderers/nodes/core/AttributeNode.cjs.js +1 -0
  570. package/renderers/nodes/core/AttributeNode.js +14 -5
  571. package/renderers/nodes/core/InputNode.cjs.js +1 -0
  572. package/renderers/nodes/core/InputNode.js +14 -4
  573. package/renderers/nodes/core/Node.cjs.js +1 -0
  574. package/renderers/nodes/core/Node.js +17 -7
  575. package/renderers/nodes/core/NodeAttribute.cjs.js +1 -0
  576. package/renderers/nodes/core/NodeAttribute.js +6 -3
  577. package/renderers/nodes/core/NodeBuilder.cjs.js +1 -0
  578. package/renderers/nodes/core/NodeBuilder.js +154 -87
  579. package/renderers/nodes/core/NodeFrame.cjs.js +1 -0
  580. package/renderers/nodes/core/NodeFrame.js +12 -9
  581. package/renderers/nodes/core/NodeSlot.cjs.js +1 -0
  582. package/renderers/nodes/core/NodeSlot.js +3 -2
  583. package/renderers/nodes/core/NodeUniform.cjs.js +1 -0
  584. package/renderers/nodes/core/NodeUniform.js +9 -4
  585. package/renderers/nodes/core/NodeVary.cjs.js +1 -0
  586. package/renderers/nodes/core/NodeVary.js +7 -4
  587. package/renderers/nodes/core/VaryNode.cjs.js +1 -0
  588. package/renderers/nodes/core/VaryNode.js +12 -6
  589. package/renderers/nodes/core/constants.cjs.js +1 -0
  590. package/renderers/nodes/core/constants.js +13 -16
  591. package/renderers/nodes/inputs/ColorNode.cjs.js +1 -0
  592. package/renderers/nodes/inputs/ColorNode.js +11 -5
  593. package/renderers/nodes/inputs/FloatNode.cjs.js +1 -0
  594. package/renderers/nodes/inputs/FloatNode.js +11 -5
  595. package/renderers/nodes/inputs/Matrix3Node.cjs.js +1 -0
  596. package/renderers/nodes/inputs/Matrix3Node.js +13 -7
  597. package/renderers/nodes/inputs/Matrix4Node.cjs.js +1 -0
  598. package/renderers/nodes/inputs/Matrix4Node.js +13 -7
  599. package/renderers/nodes/inputs/TextureNode.cjs.js +1 -0
  600. package/renderers/nodes/inputs/TextureNode.js +15 -7
  601. package/renderers/nodes/inputs/Vector2Node.cjs.js +1 -0
  602. package/renderers/nodes/inputs/Vector2Node.js +11 -5
  603. package/renderers/nodes/inputs/Vector3Node.cjs.js +1 -0
  604. package/renderers/nodes/inputs/Vector3Node.js +13 -7
  605. package/renderers/nodes/inputs/Vector4Node.cjs.js +1 -0
  606. package/renderers/nodes/inputs/Vector4Node.js +13 -7
  607. package/renderers/nodes/math/MathNode.cjs.js +1 -0
  608. package/renderers/nodes/math/MathNode.js +30 -20
  609. package/renderers/nodes/math/OperatorNode.cjs.js +1 -0
  610. package/renderers/nodes/math/OperatorNode.js +20 -4
  611. package/renderers/nodes/utils/SwitchNode.cjs.js +1 -0
  612. package/renderers/nodes/utils/SwitchNode.js +9 -4
  613. package/renderers/nodes/utils/TimerNode.cjs.js +1 -0
  614. package/renderers/nodes/utils/TimerNode.js +10 -5
  615. package/renderers/webgpu/WebGPU.cjs.js +1 -0
  616. package/renderers/webgpu/WebGPU.js +16 -14
  617. package/renderers/webgpu/WebGPUAttributes.cjs.js +1 -0
  618. package/renderers/webgpu/WebGPUAttributes.js +23 -16
  619. package/renderers/webgpu/WebGPUBackground.cjs.js +1 -0
  620. package/renderers/webgpu/WebGPUBackground.js +30 -13
  621. package/renderers/webgpu/WebGPUBinding.cjs.js +1 -0
  622. package/renderers/webgpu/WebGPUBinding.js +7 -4
  623. package/renderers/webgpu/WebGPUBindings.cjs.js +1 -0
  624. package/renderers/webgpu/WebGPUBindings.js +57 -21
  625. package/renderers/webgpu/WebGPUComputePipelines.cjs.js +1 -0
  626. package/renderers/webgpu/WebGPUComputePipelines.js +25 -14
  627. package/renderers/webgpu/WebGPUGeometries.cjs.js +1 -0
  628. package/renderers/webgpu/WebGPUGeometries.js +15 -5
  629. package/renderers/webgpu/WebGPUInfo.cjs.js +1 -0
  630. package/renderers/webgpu/WebGPUInfo.js +8 -3
  631. package/renderers/webgpu/WebGPUObjects.cjs.js +1 -0
  632. package/renderers/webgpu/WebGPUObjects.js +10 -5
  633. package/renderers/webgpu/WebGPUProperties.cjs.js +1 -0
  634. package/renderers/webgpu/WebGPUProperties.js +11 -5
  635. package/renderers/webgpu/WebGPURenderLists.cjs.js +1 -0
  636. package/renderers/webgpu/WebGPURenderLists.js +36 -20
  637. package/renderers/webgpu/WebGPURenderPipelines.cjs.js +1 -0
  638. package/renderers/webgpu/WebGPURenderPipelines.js +387 -260
  639. package/renderers/webgpu/WebGPURenderer.cjs.js +1 -0
  640. package/renderers/webgpu/WebGPURenderer.js +262 -124
  641. package/renderers/webgpu/WebGPUSampledTexture.cjs.js +1 -0
  642. package/renderers/webgpu/WebGPUSampledTexture.js +31 -18
  643. package/renderers/webgpu/WebGPUSampler.cjs.js +1 -0
  644. package/renderers/webgpu/WebGPUSampler.js +12 -7
  645. package/renderers/webgpu/WebGPUStorageBuffer.cjs.js +1 -0
  646. package/renderers/webgpu/WebGPUStorageBuffer.js +12 -7
  647. package/renderers/webgpu/WebGPUTextureRenderer.cjs.js +1 -0
  648. package/renderers/webgpu/WebGPUTextureRenderer.js +11 -5
  649. package/renderers/webgpu/WebGPUTextureUtils.cjs.js +1 -0
  650. package/renderers/webgpu/WebGPUTextureUtils.js +40 -29
  651. package/renderers/webgpu/WebGPUTextures.cjs.js +1 -0
  652. package/renderers/webgpu/WebGPUTextures.js +333 -186
  653. package/renderers/webgpu/WebGPUUniform.cjs.js +1 -0
  654. package/renderers/webgpu/WebGPUUniform.js +51 -25
  655. package/renderers/webgpu/WebGPUUniformsGroup.cjs.js +1 -0
  656. package/renderers/webgpu/WebGPUUniformsGroup.js +72 -32
  657. package/renderers/webgpu/constants.cjs.js +1 -0
  658. package/renderers/webgpu/constants.js +181 -190
  659. package/renderers/webgpu/nodes/ShaderLib.cjs.js +1 -0
  660. package/renderers/webgpu/nodes/ShaderLib.js +2 -2
  661. package/renderers/webgpu/nodes/WebGPUNodeBuilder.cjs.js +1 -0
  662. package/renderers/webgpu/nodes/WebGPUNodeBuilder.js +124 -53
  663. package/renderers/webgpu/nodes/WebGPUNodeUniform.cjs.js +1 -0
  664. package/renderers/webgpu/nodes/WebGPUNodeUniform.js +31 -17
  665. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.cjs.js +1 -0
  666. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +9 -8
  667. package/renderers/webgpu/nodes/WebGPUNodes.cjs.js +1 -0
  668. package/renderers/webgpu/nodes/WebGPUNodes.js +45 -7
  669. package/shaders/ACESFilmicToneMappingShader.cjs.js +1 -0
  670. package/shaders/ACESFilmicToneMappingShader.js +24 -44
  671. package/shaders/AfterimageShader.cjs.js +1 -0
  672. package/shaders/AfterimageShader.js +18 -28
  673. package/shaders/BasicShader.cjs.js +1 -0
  674. package/shaders/BasicShader.js +7 -9
  675. package/shaders/BleachBypassShader.cjs.js +1 -0
  676. package/shaders/BleachBypassShader.js +15 -31
  677. package/shaders/BlendShader.cjs.js +1 -0
  678. package/shaders/BlendShader.js +19 -26
  679. package/shaders/BokehShader.cjs.js +1 -0
  680. package/shaders/BokehShader.js +36 -98
  681. package/shaders/BokehShader2.cjs.js +1 -0
  682. package/shaders/BokehShader2.js +90 -261
  683. package/shaders/BrightnessContrastShader.cjs.js +1 -0
  684. package/shaders/BrightnessContrastShader.js +19 -28
  685. package/shaders/ColorCorrectionShader.cjs.js +1 -0
  686. package/shaders/ColorCorrectionShader.js +22 -26
  687. package/shaders/ColorifyShader.cjs.js +1 -0
  688. package/shaders/ColorifyShader.js +16 -24
  689. package/shaders/ConvolutionShader.cjs.js +1 -0
  690. package/shaders/ConvolutionShader.js +36 -40
  691. package/shaders/CopyShader.cjs.js +1 -0
  692. package/shaders/CopyShader.js +13 -21
  693. package/shaders/DOFMipMapShader.cjs.js +1 -0
  694. package/shaders/DOFMipMapShader.js +21 -28
  695. package/shaders/DepthLimitedBlurShader.cjs.js +1 -0
  696. package/shaders/DepthLimitedBlurShader.js +40 -85
  697. package/shaders/DigitalGlitch.cjs.js +1 -0
  698. package/shaders/DigitalGlitch.js +46 -74
  699. package/shaders/DotScreenShader.cjs.js +1 -0
  700. package/shaders/DotScreenShader.js +27 -35
  701. package/shaders/FXAAShader.cjs.js +1 -0
  702. package/shaders/FXAAShader.js +19 -1094
  703. package/shaders/FilmShader.cjs.js +1 -0
  704. package/shaders/FilmShader.js +52 -38
  705. package/shaders/FocusShader.cjs.js +1 -0
  706. package/shaders/FocusShader.js +24 -51
  707. package/shaders/FreiChenShader.cjs.js +1 -0
  708. package/shaders/FreiChenShader.js +24 -57
  709. package/shaders/FresnelShader.cjs.js +1 -0
  710. package/shaders/FresnelShader.js +22 -43
  711. package/shaders/GammaCorrectionShader.cjs.js +1 -0
  712. package/shaders/GammaCorrectionShader.js +11 -19
  713. package/shaders/GodRaysShader.cjs.js +1 -0
  714. package/shaders/GodRaysShader.js +94 -103
  715. package/shaders/HalftoneShader.cjs.js +1 -0
  716. package/shaders/HalftoneShader.js +65 -208
  717. package/shaders/HorizontalBlurShader.cjs.js +1 -0
  718. package/shaders/HorizontalBlurShader.js +23 -7
  719. package/shaders/HorizontalTiltShiftShader.cjs.js +1 -0
  720. package/shaders/HorizontalTiltShiftShader.js +21 -33
  721. package/shaders/HueSaturationShader.cjs.js +1 -0
  722. package/shaders/HueSaturationShader.js +21 -37
  723. package/shaders/KaleidoShader.cjs.js +1 -0
  724. package/shaders/KaleidoShader.js +22 -30
  725. package/shaders/LuminosityHighPassShader.cjs.js +1 -0
  726. package/shaders/LuminosityHighPassShader.js +27 -33
  727. package/shaders/LuminosityShader.cjs.js +1 -0
  728. package/shaders/LuminosityShader.js +11 -21
  729. package/shaders/MirrorShader.cjs.js +1 -0
  730. package/shaders/MirrorShader.js +16 -31
  731. package/shaders/NormalMapShader.cjs.js +1 -0
  732. package/shaders/NormalMapShader.js +23 -27
  733. package/shaders/ParallaxShader.cjs.js +1 -0
  734. package/shaders/ParallaxShader.js +48 -107
  735. package/shaders/PixelShader.cjs.js +1 -0
  736. package/shaders/PixelShader.js +16 -24
  737. package/shaders/RGBShiftShader.cjs.js +1 -0
  738. package/shaders/RGBShiftShader.js +22 -26
  739. package/shaders/SAOShader.cjs.js +1 -0
  740. package/shaders/SAOShader.js +48 -132
  741. package/shaders/SMAAShader.cjs.js +1 -0
  742. package/shaders/SMAAShader.js +135 -256
  743. package/shaders/SSAOShader.cjs.js +1 -0
  744. package/shaders/SSAOShader.js +81 -153
  745. package/shaders/SSRShader.cjs.js +1 -0
  746. package/shaders/SSRShader.js +87 -32
  747. package/shaders/SepiaShader.cjs.js +1 -0
  748. package/shaders/SepiaShader.js +15 -25
  749. package/shaders/SobelOperatorShader.cjs.js +1 -0
  750. package/shaders/SobelOperatorShader.js +29 -40
  751. package/shaders/SubsurfaceScatteringShader.cjs.js +1 -0
  752. package/shaders/SubsurfaceScatteringShader.js +39 -53
  753. package/shaders/TechnicolorShader.cjs.js +1 -0
  754. package/shaders/TechnicolorShader.js +13 -20
  755. package/shaders/ToneMapShader.cjs.js +1 -0
  756. package/shaders/ToneMapShader.js +28 -44
  757. package/shaders/ToonShader.cjs.js +1 -0
  758. package/shaders/ToonShader.js +96 -172
  759. package/shaders/TriangleBlurShader.cjs.js +1 -0
  760. package/shaders/TriangleBlurShader.js +23 -32
  761. package/shaders/UnpackDepthRGBAShader.cjs.js +1 -0
  762. package/shaders/UnpackDepthRGBAShader.js +14 -22
  763. package/shaders/VerticalBlurShader.cjs.js +1 -0
  764. package/shaders/VerticalBlurShader.js +23 -7
  765. package/shaders/VerticalTiltShiftShader.cjs.js +1 -0
  766. package/shaders/VerticalTiltShiftShader.js +21 -33
  767. package/shaders/VignetteShader.cjs.js +1 -0
  768. package/shaders/VignetteShader.js +28 -24
  769. package/shaders/VolumeShader.cjs.js +1 -0
  770. package/shaders/VolumeShader.js +77 -174
  771. package/shaders/WaterRefractionShader.cjs.js +1 -0
  772. package/shaders/WaterRefractionShader.js +6 -38
  773. package/shaders/types.cjs.js +1 -0
  774. package/shaders/types.js +1 -1
  775. package/textures/FlakesTexture.cjs.js +1 -0
  776. package/textures/FlakesTexture.js +10 -8
  777. package/types/helpers.cjs.js +1 -0
  778. package/types/helpers.js +2 -3
  779. package/types/shared.cjs.js +1 -0
  780. package/types/shared.js +1 -0
  781. package/types/utils.cjs.js +1 -0
  782. package/types/utils.js +1 -0
  783. package/utils/BufferGeometryUtils.cjs.js +1 -0
  784. package/utils/BufferGeometryUtils.js +325 -251
  785. package/utils/GeometryCompressionUtils.cjs.js +1 -0
  786. package/utils/GeometryCompressionUtils.js +239 -241
  787. package/utils/GeometryUtils.cjs.js +1 -0
  788. package/utils/GeometryUtils.js +94 -41
  789. package/utils/LDrawUtils.cjs.js +1 -0
  790. package/utils/LDrawUtils.d.ts +5 -0
  791. package/utils/LDrawUtils.js +144 -0
  792. package/utils/RoughnessMipmapper.cjs.js +1 -0
  793. package/utils/RoughnessMipmapper.js +82 -38
  794. package/utils/SceneUtils.cjs.js +1 -0
  795. package/utils/SceneUtils.js +20 -15
  796. package/utils/ShadowMapViewer.cjs.js +1 -0
  797. package/utils/ShadowMapViewer.js +95 -49
  798. package/utils/SkeletonUtils.cjs.js +1 -0
  799. package/utils/SkeletonUtils.js +165 -74
  800. package/utils/UVsDebug.cjs.js +1 -0
  801. package/utils/UVsDebug.js +62 -32
  802. package/utils/WorkerPool.cjs.js +1 -0
  803. package/utils/WorkerPool.js +33 -13
  804. package/webxr/ARButton.cjs.js +1 -0
  805. package/webxr/ARButton.js +98 -72
  806. package/webxr/OculusHandModel.cjs.js +1 -0
  807. package/webxr/OculusHandModel.js +37 -18
  808. package/webxr/OculusHandPointerModel.cjs.js +1 -0
  809. package/webxr/OculusHandPointerModel.js +80 -58
  810. package/webxr/Text2D.cjs.js +1 -0
  811. package/webxr/Text2D.js +19 -37
  812. package/webxr/VRButton.cjs.js +1 -0
  813. package/webxr/VRButton.js +90 -59
  814. package/webxr/XRControllerModelFactory.cjs.js +1 -0
  815. package/webxr/XRControllerModelFactory.js +116 -58
  816. package/webxr/XREstimatedLight.cjs.js +1 -0
  817. package/webxr/XREstimatedLight.js +66 -39
  818. package/webxr/XRHandMeshModel.cjs.js +1 -0
  819. package/webxr/XRHandMeshModel.js +29 -40
  820. package/webxr/XRHandModelFactory.cjs.js +1 -0
  821. package/webxr/XRHandModelFactory.js +31 -28
  822. package/webxr/XRHandPrimitiveModel.cjs.js +1 -0
  823. package/webxr/XRHandPrimitiveModel.js +27 -41
  824. package/animation/AnimationClipCreator.mjs +0 -57
  825. package/animation/CCDIKSolver.mjs +0 -234
  826. package/animation/MMDAnimationHelper.mjs +0 -514
  827. package/animation/MMDPhysics.mjs +0 -769
  828. package/cameras/CinematicCamera.mjs +0 -129
  829. package/controls/ArcballControls.mjs +0 -1737
  830. package/controls/DeviceOrientationControls.mjs +0 -74
  831. package/controls/DragControls.mjs +0 -172
  832. package/controls/FirstPersonControls.mjs +0 -220
  833. package/controls/FlyControls.mjs +0 -239
  834. package/controls/OrbitControls.mjs +0 -731
  835. package/controls/PointerLockControls.mjs +0 -88
  836. package/controls/TrackballControls.mjs +0 -481
  837. package/controls/TransformControls.mjs +0 -1068
  838. package/controls/experimental/CameraControls.mjs +0 -673
  839. package/csm/CSM.mjs +0 -244
  840. package/csm/CSMFrustum.mjs +0 -75
  841. package/csm/CSMHelper.mjs +0 -114
  842. package/csm/CSMShader.mjs +0 -251
  843. package/curves/CurveExtras.mjs +0 -224
  844. package/curves/NURBSCurve.mjs +0 -35
  845. package/curves/NURBSSurface.mjs +0 -28
  846. package/curves/NURBSUtils.mjs +0 -226
  847. package/deprecated/Geometry.mjs +0 -966
  848. package/effects/AnaglyphEffect.mjs +0 -120
  849. package/effects/AsciiEffect.mjs +0 -173
  850. package/effects/OutlineEffect.mjs +0 -295
  851. package/effects/ParallaxBarrierEffect.mjs +0 -64
  852. package/effects/PeppersGhostEffect.mjs +0 -85
  853. package/effects/StereoEffect.mjs +0 -32
  854. package/environments/RoomEnvironment.mjs +0 -78
  855. package/exporters/ColladaExporter.mjs +0 -299
  856. package/exporters/DRACOExporter.mjs +0 -132
  857. package/exporters/GLTFExporter.mjs +0 -1381
  858. package/exporters/MMDExporter.mjs +0 -102
  859. package/exporters/OBJExporter.mjs +0 -166
  860. package/exporters/PLYExporter.mjs +0 -278
  861. package/exporters/STLExporter.mjs +0 -129
  862. package/exporters/USDZExporter.mjs +0 -328
  863. package/geometries/BoxLineGeometry.mjs +0 -45
  864. package/geometries/ConvexGeometry.mjs +0 -29
  865. package/geometries/DecalGeometry.mjs +0 -184
  866. package/geometries/LightningStrike.mjs +0 -547
  867. package/geometries/ParametricGeometries.mjs +0 -129
  868. package/geometries/ParametricGeometry.mjs +0 -63
  869. package/geometries/RoundedBoxGeometry.mjs +0 -91
  870. package/geometries/TeapotGeometry.mjs +0 -1557
  871. package/geometries/TextGeometry.mjs +0 -23
  872. package/helpers/LightProbeHelper.mjs +0 -72
  873. package/helpers/PositionalAudioHelper.mjs +0 -68
  874. package/helpers/RectAreaLightHelper.mjs +0 -44
  875. package/helpers/VertexNormalsHelper.mjs +0 -54
  876. package/helpers/VertexTangentsHelper.mjs +0 -45
  877. package/index.mjs +0 -968
  878. package/interactive/SelectionBox.mjs +0 -137
  879. package/interactive/SelectionHelper.mjs +0 -54
  880. package/libs/MeshoptDecoder.mjs +0 -210
  881. package/libs/MotionControllers.mjs +0 -261
  882. package/lights/LightProbeGenerator.mjs +0 -145
  883. package/lights/RectAreaLightUniformsLib.mjs +0 -32842
  884. package/lines/Line2.mjs +0 -13
  885. package/lines/LineGeometry.mjs +0 -44
  886. package/lines/LineMaterial.mjs +0 -539
  887. package/lines/LineSegments2.mjs +0 -202
  888. package/lines/LineSegmentsGeometry.mjs +0 -124
  889. package/lines/Wireframe.mjs +0 -31
  890. package/lines/WireframeGeometry2.mjs +0 -13
  891. package/loaders/3DMLoader.mjs +0 -802
  892. package/loaders/3MFLoader.mjs +0 -837
  893. package/loaders/AMFLoader.mjs +0 -284
  894. package/loaders/AssimpLoader.mjs +0 -1396
  895. package/loaders/BVHLoader.mjs +0 -207
  896. package/loaders/BasisTextureLoader.mjs +0 -474
  897. package/loaders/ColladaLoader.mjs +0 -2403
  898. package/loaders/DDSLoader.mjs +0 -148
  899. package/loaders/DRACOLoader.mjs +0 -340
  900. package/loaders/EXRLoader.mjs +0 -1351
  901. package/loaders/FBXLoader.mjs +0 -2362
  902. package/loaders/FontLoader.mjs +0 -111
  903. package/loaders/GCodeLoader.mjs +0 -141
  904. package/loaders/GLTFLoader.mjs +0 -2316
  905. package/loaders/HDRCubeTextureLoader.mjs +0 -77
  906. package/loaders/KMZLoader.mjs +0 -75
  907. package/loaders/KTX2Loader.mjs +0 -427
  908. package/loaders/KTXLoader.mjs +0 -87
  909. package/loaders/LDrawLoader.mjs +0 -1409
  910. package/loaders/LUT3dlLoader.mjs +0 -100
  911. package/loaders/LUTCubeLoader.mjs +0 -104
  912. package/loaders/LWOLoader.mjs +0 -625
  913. package/loaders/LottieLoader.mjs +0 -47
  914. package/loaders/MD2Loader.mjs +0 -359
  915. package/loaders/MDDLoader.mjs +0 -58
  916. package/loaders/MMDLoader.mjs +0 -998
  917. package/loaders/MTLLoader.mjs +0 -280
  918. package/loaders/NRRDLoader.mjs +0 -401
  919. package/loaders/NodeMaterialLoader.mjs +0 -146
  920. package/loaders/OBJLoader.mjs +0 -487
  921. package/loaders/PCDLoader.mjs +0 -248
  922. package/loaders/PDBLoader.mjs +0 -246
  923. package/loaders/PLYLoader.mjs +0 -317
  924. package/loaders/PRWMLoader.mjs +0 -160
  925. package/loaders/PVRLoader.mjs +0 -131
  926. package/loaders/RGBELoader.mjs +0 -244
  927. package/loaders/RGBMLoader.mjs +0 -998
  928. package/loaders/STLLoader.mjs +0 -190
  929. package/loaders/SVGLoader.mjs +0 -1709
  930. package/loaders/TDSLoader.mjs +0 -480
  931. package/loaders/TGALoader.mjs +0 -285
  932. package/loaders/TTFLoader.mjs +0 -131
  933. package/loaders/TiltLoader.mjs +0 -373
  934. package/loaders/VOXLoader.mjs +0 -431
  935. package/loaders/VRMLLoader.mjs +0 -2093
  936. package/loaders/VRMLoader.mjs +0 -38
  937. package/loaders/VTKLoader.mjs +0 -646
  938. package/loaders/XLoader.mjs +0 -1258
  939. package/loaders/XYZLoader.mjs +0 -60
  940. package/loaders/lwo/IFFParser.mjs +0 -697
  941. package/loaders/lwo/LWO2Parser.mjs +0 -327
  942. package/loaders/lwo/LWO3Parser.mjs +0 -298
  943. package/math/Capsule.mjs +0 -100
  944. package/math/ColorConverter.mjs +0 -51
  945. package/math/ConvexHull.mjs +0 -574
  946. package/math/ImprovedNoise.mjs +0 -302
  947. package/math/Lut.mjs +0 -135
  948. package/math/MeshSurfaceSampler.mjs +0 -107
  949. package/math/OBB.mjs +0 -235
  950. package/math/Octree.mjs +0 -278
  951. package/math/SimplexNoise.mjs +0 -425
  952. package/misc/ConvexObjectBreaker.mjs +0 -292
  953. package/misc/GPUComputationRenderer.mjs +0 -171
  954. package/misc/Gyroscope.mjs +0 -35
  955. package/misc/MD2Character.mjs +0 -162
  956. package/misc/MD2CharacterComplex.mjs +0 -328
  957. package/misc/MorphAnimMesh.mjs +0 -40
  958. package/misc/MorphBlendMesh.mjs +0 -179
  959. package/misc/ProgressiveLightmap.mjs +0 -166
  960. package/misc/RollerCoaster.mjs +0 -346
  961. package/misc/TubePainter.mjs +0 -123
  962. package/misc/Volume.mjs +0 -244
  963. package/misc/VolumeSlice.mjs +0 -106
  964. package/misc/WebGL.mjs +0 -74
  965. package/modifiers/CurveModifier.mjs +0 -182
  966. package/modifiers/EdgeSplitModifier.mjs +0 -162
  967. package/modifiers/SimplifyModifier.mjs +0 -282
  968. package/modifiers/TessellateModifier.mjs +0 -206
  969. package/nodes/Nodes.mjs +0 -400
  970. package/nodes/ShaderNode.mjs +0 -408
  971. package/nodes/accessors/BufferNode.mjs +0 -15
  972. package/nodes/accessors/CameraNode.mjs +0 -44
  973. package/nodes/accessors/CubeTextureNode.mjs +0 -42
  974. package/nodes/accessors/MaterialNode.mjs +0 -71
  975. package/nodes/accessors/MaterialReferenceNode.mjs +0 -14
  976. package/nodes/accessors/ModelNode.mjs +0 -9
  977. package/nodes/accessors/ModelViewProjectionNode.mjs +0 -24
  978. package/nodes/accessors/NormalNode.mjs +0 -62
  979. package/nodes/accessors/Object3DNode.mjs +0 -76
  980. package/nodes/accessors/PointUVNode.mjs +0 -13
  981. package/nodes/accessors/PositionNode.mjs +0 -65
  982. package/nodes/accessors/ReferenceNode.mjs +0 -37
  983. package/nodes/accessors/ReflectNode.mjs +0 -43
  984. package/nodes/accessors/SkinningNode.mjs +0 -58
  985. package/nodes/accessors/TextureNode.mjs +0 -54
  986. package/nodes/accessors/UVNode.mjs +0 -23
  987. package/nodes/core/ArrayUniformNode.mjs +0 -14
  988. package/nodes/core/AttributeNode.mjs +0 -30
  989. package/nodes/core/BypassNode.mjs +0 -22
  990. package/nodes/core/CodeNode.mjs +0 -28
  991. package/nodes/core/ConstNode.mjs +0 -14
  992. package/nodes/core/ContextNode.mjs +0 -22
  993. package/nodes/core/ExpressionNode.mjs +0 -19
  994. package/nodes/core/FunctionCallNode.mjs +0 -37
  995. package/nodes/core/FunctionNode.mjs +0 -56
  996. package/nodes/core/InputNode.mjs +0 -38
  997. package/nodes/core/Node.mjs +0 -139
  998. package/nodes/core/NodeAttribute.mjs +0 -10
  999. package/nodes/core/NodeBuilder.mjs +0 -395
  1000. package/nodes/core/NodeCode.mjs +0 -11
  1001. package/nodes/core/NodeFrame.mjs +0 -35
  1002. package/nodes/core/NodeFunctionInput.mjs +0 -13
  1003. package/nodes/core/NodeKeywords.mjs +0 -44
  1004. package/nodes/core/NodeUniform.mjs +0 -18
  1005. package/nodes/core/NodeUtils.mjs +0 -57
  1006. package/nodes/core/NodeVar.mjs +0 -10
  1007. package/nodes/core/NodeVary.mjs +0 -10
  1008. package/nodes/core/PropertyNode.mjs +0 -21
  1009. package/nodes/core/TempNode.mjs +0 -25
  1010. package/nodes/core/UniformNode.mjs +0 -23
  1011. package/nodes/core/VarNode.mjs +0 -31
  1012. package/nodes/core/VaryNode.mjs +0 -30
  1013. package/nodes/core/constants.mjs +0 -24
  1014. package/nodes/display/ColorSpaceNode.mjs +0 -63
  1015. package/nodes/display/NormalMapNode.mjs +0 -54
  1016. package/nodes/fog/FogNode.mjs +0 -15
  1017. package/nodes/fog/FogRangeNode.mjs +0 -17
  1018. package/nodes/functions/BSDFs.mjs +0 -64
  1019. package/nodes/lights/LightContextNode.mjs +0 -35
  1020. package/nodes/lights/LightNode.mjs +0 -58
  1021. package/nodes/lights/LightsNode.mjs +0 -59
  1022. package/nodes/loaders/NodeLoader.mjs +0 -66
  1023. package/nodes/loaders/NodeMaterialLoader.mjs +0 -24
  1024. package/nodes/loaders/NodeObjectLoader.mjs +0 -40
  1025. package/nodes/materials/LineBasicNodeMaterial.mjs +0 -27
  1026. package/nodes/materials/Materials.mjs +0 -28
  1027. package/nodes/materials/MeshBasicNodeMaterial.mjs +0 -28
  1028. package/nodes/materials/MeshStandardNodeMaterial.mjs +0 -41
  1029. package/nodes/materials/NodeMaterial.mjs +0 -64
  1030. package/nodes/materials/PointsNodeMaterial.mjs +0 -30
  1031. package/nodes/math/CondNode.mjs +0 -38
  1032. package/nodes/math/MathNode.mjs +0 -163
  1033. package/nodes/math/OperatorNode.mjs +0 -103
  1034. package/nodes/procedural/CheckerNode.mjs +0 -21
  1035. package/nodes/utils/ArrayElementNode.mjs +0 -19
  1036. package/nodes/utils/ConvertNode.mjs +0 -25
  1037. package/nodes/utils/JoinNode.mjs +0 -26
  1038. package/nodes/utils/MatcapUVNode.mjs +0 -16
  1039. package/nodes/utils/OscNode.mjs +0 -50
  1040. package/nodes/utils/SplitNode.mjs +0 -45
  1041. package/nodes/utils/SpriteSheetUVNode.mjs +0 -40
  1042. package/nodes/utils/TimerNode.mjs +0 -44
  1043. package/objects/GroundProjectedEnv.mjs +0 -130
  1044. package/objects/Lensflare.mjs +0 -262
  1045. package/objects/LightningStorm.mjs +0 -110
  1046. package/objects/MarchingCubes.mjs +0 -457
  1047. package/objects/Reflector.mjs +0 -166
  1048. package/objects/ReflectorForSSRPass.mjs +0 -247
  1049. package/objects/ReflectorRTT.mjs +0 -10
  1050. package/objects/Refractor.mjs +0 -178
  1051. package/objects/ShadowMesh.mjs +0 -41
  1052. package/objects/Sky.mjs +0 -124
  1053. package/objects/Water.mjs +0 -235
  1054. package/objects/Water2.mjs +0 -252
  1055. package/offscreen/jank.mjs +0 -27
  1056. package/offscreen/offscreen.mjs +0 -5
  1057. package/offscreen/scene.mjs +0 -52
  1058. package/physics/AmmoPhysics.mjs +0 -165
  1059. package/postprocessing/AdaptiveToneMappingPass.mjs +0 -221
  1060. package/postprocessing/AfterimagePass.mjs +0 -55
  1061. package/postprocessing/BloomPass.mjs +0 -90
  1062. package/postprocessing/BokehPass.mjs +0 -76
  1063. package/postprocessing/ClearPass.mjs +0 -27
  1064. package/postprocessing/CubeTexturePass.mjs +0 -49
  1065. package/postprocessing/DotScreenPass.mjs +0 -40
  1066. package/postprocessing/EffectComposer.mjs +0 -139
  1067. package/postprocessing/FilmPass.mjs +0 -42
  1068. package/postprocessing/GlitchPass.mjs +0 -75
  1069. package/postprocessing/HalftonePass.mjs +0 -44
  1070. package/postprocessing/LUTPass.mjs +0 -136
  1071. package/postprocessing/MaskPass.mjs +0 -60
  1072. package/postprocessing/OutlinePass.mjs +0 -438
  1073. package/postprocessing/Pass.mjs +0 -37
  1074. package/postprocessing/RenderPass.mjs +0 -48
  1075. package/postprocessing/RenderPixelatedPass.mjs +0 -199
  1076. package/postprocessing/SAOPass.mjs +0 -282
  1077. package/postprocessing/SMAAPass.mjs +0 -112
  1078. package/postprocessing/SSAARenderPass.mjs +0 -170
  1079. package/postprocessing/SSAOPass.mjs +0 -265
  1080. package/postprocessing/SSRPass.mjs +0 -432
  1081. package/postprocessing/SavePass.mjs +0 -37
  1082. package/postprocessing/ShaderPass.mjs +0 -39
  1083. package/postprocessing/TAARenderPass.mjs +0 -88
  1084. package/postprocessing/TexturePass.mjs +0 -39
  1085. package/postprocessing/UnrealBloomPass.mjs +0 -220
  1086. package/renderers/CSS2DRenderer.mjs +0 -112
  1087. package/renderers/CSS3DRenderer.mjs +0 -133
  1088. package/renderers/Projector.mjs +0 -511
  1089. package/renderers/SVGRenderer.mjs +0 -306
  1090. package/renderers/nodes/accessors/CameraNode.mjs +0 -63
  1091. package/renderers/nodes/accessors/ModelNode.mjs +0 -61
  1092. package/renderers/nodes/accessors/ModelViewProjectionNode.mjs +0 -21
  1093. package/renderers/nodes/accessors/NormalNode.mjs +0 -61
  1094. package/renderers/nodes/accessors/PositionNode.mjs +0 -30
  1095. package/renderers/nodes/accessors/UVNode.mjs +0 -13
  1096. package/renderers/nodes/core/AttributeNode.mjs +0 -35
  1097. package/renderers/nodes/core/InputNode.mjs +0 -31
  1098. package/renderers/nodes/core/Node.mjs +0 -34
  1099. package/renderers/nodes/core/NodeAttribute.mjs +0 -10
  1100. package/renderers/nodes/core/NodeBuilder.mjs +0 -243
  1101. package/renderers/nodes/core/NodeFrame.mjs +0 -35
  1102. package/renderers/nodes/core/NodeSlot.mjs +0 -10
  1103. package/renderers/nodes/core/NodeUniform.mjs +0 -18
  1104. package/renderers/nodes/core/NodeVary.mjs +0 -11
  1105. package/renderers/nodes/core/VaryNode.mjs +0 -22
  1106. package/renderers/nodes/core/constants.mjs +0 -22
  1107. package/renderers/nodes/inputs/ColorNode.mjs +0 -11
  1108. package/renderers/nodes/inputs/FloatNode.mjs +0 -11
  1109. package/renderers/nodes/inputs/Matrix3Node.mjs +0 -12
  1110. package/renderers/nodes/inputs/Matrix4Node.mjs +0 -12
  1111. package/renderers/nodes/inputs/TextureNode.mjs +0 -20
  1112. package/renderers/nodes/inputs/Vector2Node.mjs +0 -11
  1113. package/renderers/nodes/inputs/Vector3Node.mjs +0 -12
  1114. package/renderers/nodes/inputs/Vector4Node.mjs +0 -12
  1115. package/renderers/nodes/math/MathNode.mjs +0 -55
  1116. package/renderers/nodes/math/OperatorNode.mjs +0 -42
  1117. package/renderers/nodes/utils/SwitchNode.mjs +0 -20
  1118. package/renderers/nodes/utils/TimerNode.mjs +0 -14
  1119. package/renderers/webgpu/WebGPU.mjs +0 -24
  1120. package/renderers/webgpu/WebGPUAttributes.mjs +0 -69
  1121. package/renderers/webgpu/WebGPUBackground.mjs +0 -61
  1122. package/renderers/webgpu/WebGPUBinding.mjs +0 -14
  1123. package/renderers/webgpu/WebGPUBindings.mjs +0 -155
  1124. package/renderers/webgpu/WebGPUComputePipelines.mjs +0 -44
  1125. package/renderers/webgpu/WebGPUGeometries.mjs +0 -41
  1126. package/renderers/webgpu/WebGPUInfo.mjs +0 -46
  1127. package/renderers/webgpu/WebGPUObjects.mjs +0 -25
  1128. package/renderers/webgpu/WebGPUProperties.mjs +0 -22
  1129. package/renderers/webgpu/WebGPURenderLists.mjs +0 -119
  1130. package/renderers/webgpu/WebGPURenderPipelines.mjs +0 -545
  1131. package/renderers/webgpu/WebGPURenderer.mjs +0 -574
  1132. package/renderers/webgpu/WebGPUSampledTexture.mjs +0 -40
  1133. package/renderers/webgpu/WebGPUSampler.mjs +0 -15
  1134. package/renderers/webgpu/WebGPUStorageBuffer.mjs +0 -15
  1135. package/renderers/webgpu/WebGPUTextureRenderer.mjs +0 -23
  1136. package/renderers/webgpu/WebGPUTextureUtils.mjs +0 -98
  1137. package/renderers/webgpu/WebGPUTextures.mjs +0 -484
  1138. package/renderers/webgpu/WebGPUUniform.mjs +0 -81
  1139. package/renderers/webgpu/WebGPUUniformsGroup.mjs +0 -176
  1140. package/renderers/webgpu/constants.mjs +0 -230
  1141. package/renderers/webgpu/nodes/ShaderLib.mjs +0 -42
  1142. package/renderers/webgpu/nodes/WebGPUNodeBuilder.mjs +0 -165
  1143. package/renderers/webgpu/nodes/WebGPUNodeUniform.mjs +0 -73
  1144. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.mjs +0 -15
  1145. package/renderers/webgpu/nodes/WebGPUNodes.mjs +0 -40
  1146. package/shaders/ACESFilmicToneMappingShader.mjs +0 -48
  1147. package/shaders/AfterimageShader.mjs +0 -32
  1148. package/shaders/BasicShader.mjs +0 -12
  1149. package/shaders/BleachBypassShader.mjs +0 -35
  1150. package/shaders/BlendShader.mjs +0 -30
  1151. package/shaders/BokehShader.mjs +0 -106
  1152. package/shaders/BokehShader2.mjs +0 -269
  1153. package/shaders/BrightnessContrastShader.mjs +0 -32
  1154. package/shaders/ColorCorrectionShader.mjs +0 -30
  1155. package/shaders/ColorifyShader.mjs +0 -28
  1156. package/shaders/ConvolutionShader.mjs +0 -55
  1157. package/shaders/CopyShader.mjs +0 -25
  1158. package/shaders/DOFMipMapShader.mjs +0 -32
  1159. package/shaders/DepthLimitedBlurShader.mjs +0 -114
  1160. package/shaders/DigitalGlitch.mjs +0 -78
  1161. package/shaders/DotScreenShader.mjs +0 -39
  1162. package/shaders/FXAAShader.mjs +0 -1098
  1163. package/shaders/FilmShader.mjs +0 -42
  1164. package/shaders/FocusShader.mjs +0 -55
  1165. package/shaders/FreiChenShader.mjs +0 -61
  1166. package/shaders/FresnelShader.mjs +0 -47
  1167. package/shaders/GammaCorrectionShader.mjs +0 -23
  1168. package/shaders/GodRaysShader.mjs +0 -146
  1169. package/shaders/HalftoneShader.mjs +0 -212
  1170. package/shaders/HorizontalBlurShader.mjs +0 -43
  1171. package/shaders/HorizontalTiltShiftShader.mjs +0 -37
  1172. package/shaders/HueSaturationShader.mjs +0 -41
  1173. package/shaders/KaleidoShader.mjs +0 -34
  1174. package/shaders/LuminosityHighPassShader.mjs +0 -37
  1175. package/shaders/LuminosityShader.mjs +0 -25
  1176. package/shaders/MirrorShader.mjs +0 -35
  1177. package/shaders/NormalMapShader.mjs +0 -31
  1178. package/shaders/ParallaxShader.mjs +0 -113
  1179. package/shaders/PixelShader.mjs +0 -28
  1180. package/shaders/RGBShiftShader.mjs +0 -30
  1181. package/shaders/SAOShader.mjs +0 -144
  1182. package/shaders/SMAAShader.mjs +0 -272
  1183. package/shaders/SSAOShader.mjs +0 -172
  1184. package/shaders/SSRShader.mjs +0 -324
  1185. package/shaders/SepiaShader.mjs +0 -29
  1186. package/shaders/SobelOperatorShader.mjs +0 -44
  1187. package/shaders/SubsurfaceScatteringShader.mjs +0 -59
  1188. package/shaders/TechnicolorShader.mjs +0 -24
  1189. package/shaders/ToneMapShader.mjs +0 -48
  1190. package/shaders/ToonShader.mjs +0 -188
  1191. package/shaders/TriangleBlurShader.mjs +0 -36
  1192. package/shaders/UnpackDepthRGBAShader.mjs +0 -26
  1193. package/shaders/VerticalBlurShader.mjs +0 -44
  1194. package/shaders/VerticalTiltShiftShader.mjs +0 -37
  1195. package/shaders/VignetteShader.mjs +0 -28
  1196. package/shaders/VolumeShader.mjs +0 -178
  1197. package/shaders/WaterRefractionShader.mjs +0 -57
  1198. package/textures/FlakesTexture.mjs +0 -30
  1199. package/types/helpers.mjs +0 -4
  1200. package/utils/BufferGeometryUtils.mjs +0 -570
  1201. package/utils/GeometryCompressionUtils.mjs +0 -547
  1202. package/utils/GeometryUtils.mjs +0 -108
  1203. package/utils/RoughnessMipmapper.mjs +0 -213
  1204. package/utils/SceneUtils.mjs +0 -36
  1205. package/utils/ShadowMapViewer.mjs +0 -114
  1206. package/utils/SkeletonUtils.mjs +0 -292
  1207. package/utils/UVsDebug.mjs +0 -85
  1208. package/utils/WorkerPool.mjs +0 -62
  1209. package/webxr/ARButton.mjs +0 -119
  1210. package/webxr/OculusHandModel.mjs +0 -71
  1211. package/webxr/OculusHandPointerModel.mjs +0 -207
  1212. package/webxr/Text2D.mjs +0 -31
  1213. package/webxr/VRButton.mjs +0 -105
  1214. package/webxr/XRControllerModelFactory.mjs +0 -146
  1215. package/webxr/XREstimatedLight.mjs +0 -126
  1216. package/webxr/XRHandMeshModel.mjs +0 -73
  1217. package/webxr/XRHandModelFactory.mjs +0 -61
  1218. package/webxr/XRHandPrimitiveModel.mjs +0 -68
@@ -1,732 +1,884 @@
1
- "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const THREE = require("three");
4
- const chevrotain = require("chevrotain");
5
- class VRMLLoader extends THREE.Loader {
1
+ import { Loader, LoaderUtils, FileLoader, Vector3, Vector2, TextureLoader, Scene, Object3D, Group, SphereGeometry, MeshBasicMaterial, BackSide, Mesh, PointsMaterial, Points, LineBasicMaterial, LineSegments, FrontSide, DoubleSide, MeshPhongMaterial, Color, DataTexture, BufferGeometry, Float32BufferAttribute, BoxGeometry, ConeGeometry, CylinderGeometry, Quaternion, ShapeUtils, BufferAttribute, RepeatWrapping, ClampToEdgeWrapping } from 'three';
2
+ import { createToken, Lexer, CstParser } from 'chevrotain';
3
+
4
+ class VRMLLoader extends Loader {
6
5
  constructor(manager) {
7
6
  super(manager);
8
7
  }
8
+
9
9
  load(url, onLoad, onProgress, onError) {
10
10
  const scope = this;
11
- const path = scope.path === "" ? THREE.LoaderUtils.extractUrlBase(url) : scope.path;
12
- const loader = new THREE.FileLoader(scope.manager);
11
+ const path = scope.path === '' ? LoaderUtils.extractUrlBase(url) : scope.path;
12
+ const loader = new FileLoader(scope.manager);
13
13
  loader.setPath(scope.path);
14
14
  loader.setRequestHeader(scope.requestHeader);
15
15
  loader.setWithCredentials(scope.withCredentials);
16
- loader.load(
17
- url,
18
- function(text) {
19
- try {
20
- onLoad(scope.parse(text, path));
21
- } catch (e) {
22
- if (onError) {
23
- onError(e);
24
- } else {
25
- console.error(e);
26
- }
27
- scope.manager.itemError(url);
16
+ loader.load(url, function (text) {
17
+ try {
18
+ onLoad(scope.parse(text, path));
19
+ } catch (e) {
20
+ if (onError) {
21
+ onError(e);
22
+ } else {
23
+ console.error(e);
28
24
  }
29
- },
30
- onProgress,
31
- onError
32
- );
25
+
26
+ scope.manager.itemError(url);
27
+ }
28
+ }, onProgress, onError);
33
29
  }
30
+
34
31
  parse(data, path) {
35
32
  const nodeMap = {};
36
- function generateVRMLTree(data2) {
33
+
34
+ function generateVRMLTree(data) {
35
+ // create lexer, parser and visitor
37
36
  const tokenData = createTokens();
38
37
  const lexer = new VRMLLexer(tokenData.tokens);
39
38
  const parser = new VRMLParser(tokenData.tokenVocabulary);
40
- const visitor = createVisitor(parser.getBaseCstVisitorConstructor());
41
- const lexingResult = lexer.lex(data2);
42
- parser.input = lexingResult.tokens;
39
+ const visitor = createVisitor(parser.getBaseCstVisitorConstructor()); // lexing
40
+
41
+ const lexingResult = lexer.lex(data);
42
+ parser.input = lexingResult.tokens; // parsing
43
+
43
44
  const cstOutput = parser.vrml();
45
+
44
46
  if (parser.errors.length > 0) {
45
47
  console.error(parser.errors);
46
- throw Error("THREE.VRMLLoader: Parsing errors detected.");
47
- }
48
+ throw Error('THREE.VRMLLoader: Parsing errors detected.');
49
+ } // actions
50
+
51
+
48
52
  const ast = visitor.visit(cstOutput);
49
53
  return ast;
50
54
  }
55
+
51
56
  function createTokens() {
52
- const RouteIdentifier = chevrotain.createToken({
53
- name: "RouteIdentifier",
57
+ // from http://gun.teipir.gr/VRML-amgem/spec/part1/concepts.html#SyntaxBasics
58
+ const RouteIdentifier = createToken({
59
+ name: 'RouteIdentifier',
54
60
  pattern: /[^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*[\.][^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*/
55
61
  });
56
- const Identifier = chevrotain.createToken({
57
- name: "Identifier",
62
+ const Identifier = createToken({
63
+ name: 'Identifier',
58
64
  pattern: /[^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*/,
59
65
  longer_alt: RouteIdentifier
60
- });
61
- const nodeTypes = [
62
- "Anchor",
63
- "Billboard",
64
- "Collision",
65
- "Group",
66
- "Transform",
67
- "Inline",
68
- "LOD",
69
- "Switch",
70
- "AudioClip",
71
- "DirectionalLight",
72
- "PointLight",
73
- "Script",
74
- "Shape",
75
- "Sound",
76
- "SpotLight",
77
- "WorldInfo",
78
- "CylinderSensor",
79
- "PlaneSensor",
80
- "ProximitySensor",
81
- "SphereSensor",
82
- "TimeSensor",
83
- "TouchSensor",
84
- "VisibilitySensor",
85
- "Box",
86
- "Cone",
87
- "Cylinder",
88
- "ElevationGrid",
89
- "Extrusion",
90
- "IndexedFaceSet",
91
- "IndexedLineSet",
92
- "PointSet",
93
- "Sphere",
94
- "Color",
95
- "Coordinate",
96
- "Normal",
97
- "TextureCoordinate",
98
- "Appearance",
99
- "FontStyle",
100
- "ImageTexture",
101
- "Material",
102
- "MovieTexture",
103
- "PixelTexture",
104
- "TextureTransform",
105
- "ColorInterpolator",
106
- "CoordinateInterpolator",
107
- "NormalInterpolator",
108
- "OrientationInterpolator",
109
- "PositionInterpolator",
110
- "ScalarInterpolator",
111
- "Background",
112
- "Fog",
113
- "NavigationInfo",
114
- "Viewpoint",
115
- "Text"
116
- ];
117
- const Version = chevrotain.createToken({
118
- name: "Version",
66
+ }); // from http://gun.teipir.gr/VRML-amgem/spec/part1/nodesRef.html
67
+
68
+ const nodeTypes = ['Anchor', 'Billboard', 'Collision', 'Group', 'Transform', // grouping nodes
69
+ 'Inline', 'LOD', 'Switch', // special groups
70
+ 'AudioClip', 'DirectionalLight', 'PointLight', 'Script', 'Shape', 'Sound', 'SpotLight', 'WorldInfo', // common nodes
71
+ 'CylinderSensor', 'PlaneSensor', 'ProximitySensor', 'SphereSensor', 'TimeSensor', 'TouchSensor', 'VisibilitySensor', // sensors
72
+ 'Box', 'Cone', 'Cylinder', 'ElevationGrid', 'Extrusion', 'IndexedFaceSet', 'IndexedLineSet', 'PointSet', 'Sphere', // geometries
73
+ 'Color', 'Coordinate', 'Normal', 'TextureCoordinate', // geometric properties
74
+ 'Appearance', 'FontStyle', 'ImageTexture', 'Material', 'MovieTexture', 'PixelTexture', 'TextureTransform', // appearance
75
+ 'ColorInterpolator', 'CoordinateInterpolator', 'NormalInterpolator', 'OrientationInterpolator', 'PositionInterpolator', 'ScalarInterpolator', // interpolators
76
+ 'Background', 'Fog', 'NavigationInfo', 'Viewpoint', // bindable nodes
77
+ 'Text' // Text must be placed at the end of the regex so there are no matches for TextureTransform and TextureCoordinate
78
+ ]; //
79
+
80
+ const Version = createToken({
81
+ name: 'Version',
119
82
  pattern: /#VRML.*/,
120
83
  longer_alt: Identifier
121
84
  });
122
- const NodeName = chevrotain.createToken({
123
- name: "NodeName",
124
- pattern: new RegExp(nodeTypes.join("|")),
85
+ const NodeName = createToken({
86
+ name: 'NodeName',
87
+ pattern: new RegExp(nodeTypes.join('|')),
125
88
  longer_alt: Identifier
126
89
  });
127
- const DEF = chevrotain.createToken({
128
- name: "DEF",
90
+ const DEF = createToken({
91
+ name: 'DEF',
129
92
  pattern: /DEF/,
130
93
  longer_alt: Identifier
131
94
  });
132
- const USE = chevrotain.createToken({
133
- name: "USE",
95
+ const USE = createToken({
96
+ name: 'USE',
134
97
  pattern: /USE/,
135
98
  longer_alt: Identifier
136
99
  });
137
- const ROUTE = chevrotain.createToken({
138
- name: "ROUTE",
100
+ const ROUTE = createToken({
101
+ name: 'ROUTE',
139
102
  pattern: /ROUTE/,
140
103
  longer_alt: Identifier
141
104
  });
142
- const TO = chevrotain.createToken({
143
- name: "TO",
105
+ const TO = createToken({
106
+ name: 'TO',
144
107
  pattern: /TO/,
145
108
  longer_alt: Identifier
146
- });
147
- const StringLiteral = chevrotain.createToken({
148
- name: "StringLiteral",
109
+ }); //
110
+
111
+ const StringLiteral = createToken({
112
+ name: 'StringLiteral',
149
113
  pattern: /"(?:[^\\"\n\r]|\\[bfnrtv"\\/]|\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])*"/
150
114
  });
151
- const HexLiteral = chevrotain.createToken({ name: "HexLiteral", pattern: /0[xX][0-9a-fA-F]+/ });
152
- const NumberLiteral = chevrotain.createToken({ name: "NumberLiteral", pattern: /[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/ });
153
- const TrueLiteral = chevrotain.createToken({ name: "TrueLiteral", pattern: /TRUE/ });
154
- const FalseLiteral = chevrotain.createToken({ name: "FalseLiteral", pattern: /FALSE/ });
155
- const NullLiteral = chevrotain.createToken({ name: "NullLiteral", pattern: /NULL/ });
156
- const LSquare = chevrotain.createToken({ name: "LSquare", pattern: /\[/ });
157
- const RSquare = chevrotain.createToken({ name: "RSquare", pattern: /]/ });
158
- const LCurly = chevrotain.createToken({ name: "LCurly", pattern: /{/ });
159
- const RCurly = chevrotain.createToken({ name: "RCurly", pattern: /}/ });
160
- const Comment = chevrotain.createToken({
161
- name: "Comment",
162
- pattern: /#.*/,
163
- group: chevrotain.Lexer.SKIPPED
115
+ const HexLiteral = createToken({
116
+ name: 'HexLiteral',
117
+ pattern: /0[xX][0-9a-fA-F]+/
118
+ });
119
+ const NumberLiteral = createToken({
120
+ name: 'NumberLiteral',
121
+ pattern: /[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/
122
+ });
123
+ const TrueLiteral = createToken({
124
+ name: 'TrueLiteral',
125
+ pattern: /TRUE/
126
+ });
127
+ const FalseLiteral = createToken({
128
+ name: 'FalseLiteral',
129
+ pattern: /FALSE/
130
+ });
131
+ const NullLiteral = createToken({
132
+ name: 'NullLiteral',
133
+ pattern: /NULL/
164
134
  });
165
- const WhiteSpace = chevrotain.createToken({
166
- name: "WhiteSpace",
135
+ const LSquare = createToken({
136
+ name: 'LSquare',
137
+ pattern: /\[/
138
+ });
139
+ const RSquare = createToken({
140
+ name: 'RSquare',
141
+ pattern: /]/
142
+ });
143
+ const LCurly = createToken({
144
+ name: 'LCurly',
145
+ pattern: /{/
146
+ });
147
+ const RCurly = createToken({
148
+ name: 'RCurly',
149
+ pattern: /}/
150
+ });
151
+ const Comment = createToken({
152
+ name: 'Comment',
153
+ pattern: /#.*/,
154
+ group: Lexer.SKIPPED // eslint-disable-line no-undef
155
+
156
+ }); // commas, blanks, tabs, newlines and carriage returns are whitespace characters wherever they appear outside of string fields
157
+
158
+ const WhiteSpace = createToken({
159
+ name: 'WhiteSpace',
167
160
  pattern: /[ ,\s]/,
168
- group: chevrotain.Lexer.SKIPPED
161
+ group: Lexer.SKIPPED // eslint-disable-line no-undef
162
+
169
163
  });
170
- const tokens = [
171
- WhiteSpace,
172
- NodeName,
173
- DEF,
174
- USE,
175
- ROUTE,
176
- TO,
177
- TrueLiteral,
178
- FalseLiteral,
179
- NullLiteral,
180
- Version,
181
- Identifier,
182
- RouteIdentifier,
183
- StringLiteral,
184
- HexLiteral,
185
- NumberLiteral,
186
- LSquare,
187
- RSquare,
188
- LCurly,
189
- RCurly,
190
- Comment
191
- ];
164
+ const tokens = [WhiteSpace, // keywords appear before the Identifier
165
+ NodeName, DEF, USE, ROUTE, TO, TrueLiteral, FalseLiteral, NullLiteral, // the Identifier must appear after the keywords because all keywords are valid identifiers
166
+ Version, Identifier, RouteIdentifier, StringLiteral, HexLiteral, NumberLiteral, LSquare, RSquare, LCurly, RCurly, Comment];
192
167
  const tokenVocabulary = {};
168
+
193
169
  for (let i = 0, l = tokens.length; i < l; i++) {
194
170
  const token = tokens[i];
195
171
  tokenVocabulary[token.name] = token;
196
172
  }
197
- return { tokens, tokenVocabulary };
173
+
174
+ return {
175
+ tokens: tokens,
176
+ tokenVocabulary: tokenVocabulary
177
+ };
198
178
  }
179
+
199
180
  function createVisitor(BaseVRMLVisitor) {
181
+ // the visitor is created dynmaically based on the given base class
200
182
  function VRMLToASTVisitor() {
201
183
  BaseVRMLVisitor.call(this);
202
184
  this.validateVisitor();
203
185
  }
186
+
204
187
  VRMLToASTVisitor.prototype = Object.assign(Object.create(BaseVRMLVisitor.prototype), {
205
188
  constructor: VRMLToASTVisitor,
206
- vrml: function(ctx) {
207
- const data2 = {
189
+ vrml: function (ctx) {
190
+ const data = {
208
191
  version: this.visit(ctx.version),
209
192
  nodes: [],
210
193
  routes: []
211
194
  };
195
+
212
196
  for (let i = 0, l = ctx.node.length; i < l; i++) {
213
197
  const node = ctx.node[i];
214
- data2.nodes.push(this.visit(node));
198
+ data.nodes.push(this.visit(node));
215
199
  }
200
+
216
201
  if (ctx.route) {
217
202
  for (let i = 0, l = ctx.route.length; i < l; i++) {
218
203
  const route = ctx.route[i];
219
- data2.routes.push(this.visit(route));
204
+ data.routes.push(this.visit(route));
220
205
  }
221
206
  }
222
- return data2;
207
+
208
+ return data;
223
209
  },
224
- version: function(ctx) {
210
+ version: function (ctx) {
225
211
  return ctx.Version[0].image;
226
212
  },
227
- node: function(ctx) {
228
- const data2 = {
213
+ node: function (ctx) {
214
+ const data = {
229
215
  name: ctx.NodeName[0].image,
230
216
  fields: []
231
217
  };
218
+
232
219
  if (ctx.field) {
233
220
  for (let i = 0, l = ctx.field.length; i < l; i++) {
234
221
  const field = ctx.field[i];
235
- data2.fields.push(this.visit(field));
222
+ data.fields.push(this.visit(field));
236
223
  }
237
- }
224
+ } // DEF
225
+
226
+
238
227
  if (ctx.def) {
239
- data2.DEF = this.visit(ctx.def[0]);
228
+ data.DEF = this.visit(ctx.def[0]);
240
229
  }
241
- return data2;
230
+
231
+ return data;
242
232
  },
243
- field: function(ctx) {
244
- const data2 = {
233
+ field: function (ctx) {
234
+ const data = {
245
235
  name: ctx.Identifier[0].image,
246
236
  type: null,
247
237
  values: null
248
238
  };
249
- let result;
239
+ let result; // SFValue
240
+
250
241
  if (ctx.singleFieldValue) {
251
242
  result = this.visit(ctx.singleFieldValue[0]);
252
- }
243
+ } // MFValue
244
+
245
+
253
246
  if (ctx.multiFieldValue) {
254
247
  result = this.visit(ctx.multiFieldValue[0]);
255
248
  }
256
- data2.type = result.type;
257
- data2.values = result.values;
258
- return data2;
249
+
250
+ data.type = result.type;
251
+ data.values = result.values;
252
+ return data;
259
253
  },
260
- def: function(ctx) {
254
+ def: function (ctx) {
261
255
  return (ctx.Identifier || ctx.NodeName)[0].image;
262
256
  },
263
- use: function(ctx) {
264
- return { USE: (ctx.Identifier || ctx.NodeName)[0].image };
257
+ use: function (ctx) {
258
+ return {
259
+ USE: (ctx.Identifier || ctx.NodeName)[0].image
260
+ };
265
261
  },
266
- singleFieldValue: function(ctx) {
262
+ singleFieldValue: function (ctx) {
267
263
  return processField(this, ctx);
268
264
  },
269
- multiFieldValue: function(ctx) {
265
+ multiFieldValue: function (ctx) {
270
266
  return processField(this, ctx);
271
267
  },
272
- route: function(ctx) {
273
- const data2 = {
268
+ route: function (ctx) {
269
+ const data = {
274
270
  FROM: ctx.RouteIdentifier[0].image,
275
271
  TO: ctx.RouteIdentifier[1].image
276
272
  };
277
- return data2;
273
+ return data;
278
274
  }
279
275
  });
276
+
280
277
  function processField(scope, ctx) {
281
278
  const field = {
282
279
  type: null,
283
280
  values: []
284
281
  };
282
+
285
283
  if (ctx.node) {
286
- field.type = "node";
284
+ field.type = 'node';
285
+
287
286
  for (let i = 0, l = ctx.node.length; i < l; i++) {
288
287
  const node = ctx.node[i];
289
288
  field.values.push(scope.visit(node));
290
289
  }
291
290
  }
291
+
292
292
  if (ctx.use) {
293
- field.type = "use";
293
+ field.type = 'use';
294
+
294
295
  for (let i = 0, l = ctx.use.length; i < l; i++) {
295
296
  const use = ctx.use[i];
296
297
  field.values.push(scope.visit(use));
297
298
  }
298
299
  }
300
+
299
301
  if (ctx.StringLiteral) {
300
- field.type = "string";
302
+ field.type = 'string';
303
+
301
304
  for (let i = 0, l = ctx.StringLiteral.length; i < l; i++) {
302
305
  const stringLiteral = ctx.StringLiteral[i];
303
- field.values.push(stringLiteral.image.replace(/'|"/g, ""));
306
+ field.values.push(stringLiteral.image.replace(/'|"/g, ''));
304
307
  }
305
308
  }
309
+
306
310
  if (ctx.NumberLiteral) {
307
- field.type = "number";
311
+ field.type = 'number';
312
+
308
313
  for (let i = 0, l = ctx.NumberLiteral.length; i < l; i++) {
309
314
  const numberLiteral = ctx.NumberLiteral[i];
310
315
  field.values.push(parseFloat(numberLiteral.image));
311
316
  }
312
317
  }
318
+
313
319
  if (ctx.HexLiteral) {
314
- field.type = "hex";
320
+ field.type = 'hex';
321
+
315
322
  for (let i = 0, l = ctx.HexLiteral.length; i < l; i++) {
316
323
  const hexLiteral = ctx.HexLiteral[i];
317
324
  field.values.push(hexLiteral.image);
318
325
  }
319
326
  }
327
+
320
328
  if (ctx.TrueLiteral) {
321
- field.type = "boolean";
329
+ field.type = 'boolean';
330
+
322
331
  for (let i = 0, l = ctx.TrueLiteral.length; i < l; i++) {
323
332
  const trueLiteral = ctx.TrueLiteral[i];
324
- if (trueLiteral.image === "TRUE")
325
- field.values.push(true);
333
+ if (trueLiteral.image === 'TRUE') field.values.push(true);
326
334
  }
327
335
  }
336
+
328
337
  if (ctx.FalseLiteral) {
329
- field.type = "boolean";
338
+ field.type = 'boolean';
339
+
330
340
  for (let i = 0, l = ctx.FalseLiteral.length; i < l; i++) {
331
341
  const falseLiteral = ctx.FalseLiteral[i];
332
- if (falseLiteral.image === "FALSE")
333
- field.values.push(false);
342
+ if (falseLiteral.image === 'FALSE') field.values.push(false);
334
343
  }
335
344
  }
345
+
336
346
  if (ctx.NullLiteral) {
337
- field.type = "null";
338
- ctx.NullLiteral.forEach(function() {
347
+ field.type = 'null';
348
+ ctx.NullLiteral.forEach(function () {
339
349
  field.values.push(null);
340
350
  });
341
351
  }
352
+
342
353
  return field;
343
354
  }
355
+
344
356
  return new VRMLToASTVisitor();
345
357
  }
346
- function parseTree(tree2) {
347
- const nodes = tree2.nodes;
348
- const scene2 = new THREE.Scene();
358
+
359
+ function parseTree(tree) {
360
+ // console.log( JSON.stringify( tree, null, 2 ) );
361
+ const nodes = tree.nodes;
362
+ const scene = new Scene(); // first iteration: build nodemap based on DEF statements
363
+
349
364
  for (let i = 0, l = nodes.length; i < l; i++) {
350
365
  const node = nodes[i];
351
366
  buildNodeMap(node);
352
- }
367
+ } // second iteration: build nodes
368
+
369
+
353
370
  for (let i = 0, l = nodes.length; i < l; i++) {
354
371
  const node = nodes[i];
355
372
  const object = getNode(node);
356
- if (object instanceof THREE.Object3D)
357
- scene2.add(object);
358
- if (node.name === "WorldInfo")
359
- scene2.userData.worldInfo = object;
373
+ if (object instanceof Object3D) scene.add(object);
374
+ if (node.name === 'WorldInfo') scene.userData.worldInfo = object;
360
375
  }
361
- return scene2;
376
+
377
+ return scene;
362
378
  }
379
+
363
380
  function buildNodeMap(node) {
364
381
  if (node.DEF) {
365
382
  nodeMap[node.DEF] = node;
366
383
  }
384
+
367
385
  const fields = node.fields;
386
+
368
387
  for (let i = 0, l = fields.length; i < l; i++) {
369
388
  const field = fields[i];
370
- if (field.type === "node") {
389
+
390
+ if (field.type === 'node') {
371
391
  const fieldValues = field.values;
392
+
372
393
  for (let j = 0, jl = fieldValues.length; j < jl; j++) {
373
394
  buildNodeMap(fieldValues[j]);
374
395
  }
375
396
  }
376
397
  }
377
398
  }
399
+
378
400
  function getNode(node) {
401
+ // handle case where a node refers to a different one
379
402
  if (node.USE) {
380
403
  return resolveUSE(node.USE);
381
404
  }
382
- if (node.build !== void 0)
383
- return node.build;
405
+
406
+ if (node.build !== undefined) return node.build;
384
407
  node.build = buildNode(node);
385
408
  return node.build;
386
- }
409
+ } // node builder
410
+
411
+
387
412
  function buildNode(node) {
388
413
  const nodeName = node.name;
389
414
  let build;
415
+
390
416
  switch (nodeName) {
391
- case "Group":
392
- case "Transform":
393
- case "Collision":
417
+ case 'Group':
418
+ case 'Transform':
419
+ case 'Collision':
394
420
  build = buildGroupingNode(node);
395
421
  break;
396
- case "Background":
422
+
423
+ case 'Background':
397
424
  build = buildBackgroundNode(node);
398
425
  break;
399
- case "Shape":
426
+
427
+ case 'Shape':
400
428
  build = buildShapeNode(node);
401
429
  break;
402
- case "Appearance":
430
+
431
+ case 'Appearance':
403
432
  build = buildAppearanceNode(node);
404
433
  break;
405
- case "Material":
434
+
435
+ case 'Material':
406
436
  build = buildMaterialNode(node);
407
437
  break;
408
- case "ImageTexture":
438
+
439
+ case 'ImageTexture':
409
440
  build = buildImageTextureNode(node);
410
441
  break;
411
- case "PixelTexture":
442
+
443
+ case 'PixelTexture':
412
444
  build = buildPixelTextureNode(node);
413
445
  break;
414
- case "TextureTransform":
446
+
447
+ case 'TextureTransform':
415
448
  build = buildTextureTransformNode(node);
416
449
  break;
417
- case "IndexedFaceSet":
450
+
451
+ case 'IndexedFaceSet':
418
452
  build = buildIndexedFaceSetNode(node);
419
453
  break;
420
- case "IndexedLineSet":
454
+
455
+ case 'IndexedLineSet':
421
456
  build = buildIndexedLineSetNode(node);
422
457
  break;
423
- case "PointSet":
458
+
459
+ case 'PointSet':
424
460
  build = buildPointSetNode(node);
425
461
  break;
426
- case "Box":
462
+
463
+ case 'Box':
427
464
  build = buildBoxNode(node);
428
465
  break;
429
- case "Cone":
466
+
467
+ case 'Cone':
430
468
  build = buildConeNode(node);
431
469
  break;
432
- case "Cylinder":
470
+
471
+ case 'Cylinder':
433
472
  build = buildCylinderNode(node);
434
473
  break;
435
- case "Sphere":
474
+
475
+ case 'Sphere':
436
476
  build = buildSphereNode(node);
437
477
  break;
438
- case "ElevationGrid":
478
+
479
+ case 'ElevationGrid':
439
480
  build = buildElevationGridNode(node);
440
481
  break;
441
- case "Extrusion":
482
+
483
+ case 'Extrusion':
442
484
  build = buildExtrusionNode(node);
443
485
  break;
444
- case "Color":
445
- case "Coordinate":
446
- case "Normal":
447
- case "TextureCoordinate":
486
+
487
+ case 'Color':
488
+ case 'Coordinate':
489
+ case 'Normal':
490
+ case 'TextureCoordinate':
448
491
  build = buildGeometricNode(node);
449
492
  break;
450
- case "WorldInfo":
493
+
494
+ case 'WorldInfo':
451
495
  build = buildWorldInfoNode(node);
452
496
  break;
453
- case "Anchor":
454
- case "Billboard":
455
- case "Inline":
456
- case "LOD":
457
- case "Switch":
458
- case "AudioClip":
459
- case "DirectionalLight":
460
- case "PointLight":
461
- case "Script":
462
- case "Sound":
463
- case "SpotLight":
464
- case "CylinderSensor":
465
- case "PlaneSensor":
466
- case "ProximitySensor":
467
- case "SphereSensor":
468
- case "TimeSensor":
469
- case "TouchSensor":
470
- case "VisibilitySensor":
471
- case "Text":
472
- case "FontStyle":
473
- case "MovieTexture":
474
- case "ColorInterpolator":
475
- case "CoordinateInterpolator":
476
- case "NormalInterpolator":
477
- case "OrientationInterpolator":
478
- case "PositionInterpolator":
479
- case "ScalarInterpolator":
480
- case "Fog":
481
- case "NavigationInfo":
482
- case "Viewpoint":
497
+
498
+ case 'Anchor':
499
+ case 'Billboard':
500
+ case 'Inline':
501
+ case 'LOD':
502
+ case 'Switch':
503
+ case 'AudioClip':
504
+ case 'DirectionalLight':
505
+ case 'PointLight':
506
+ case 'Script':
507
+ case 'Sound':
508
+ case 'SpotLight':
509
+ case 'CylinderSensor':
510
+ case 'PlaneSensor':
511
+ case 'ProximitySensor':
512
+ case 'SphereSensor':
513
+ case 'TimeSensor':
514
+ case 'TouchSensor':
515
+ case 'VisibilitySensor':
516
+ case 'Text':
517
+ case 'FontStyle':
518
+ case 'MovieTexture':
519
+ case 'ColorInterpolator':
520
+ case 'CoordinateInterpolator':
521
+ case 'NormalInterpolator':
522
+ case 'OrientationInterpolator':
523
+ case 'PositionInterpolator':
524
+ case 'ScalarInterpolator':
525
+ case 'Fog':
526
+ case 'NavigationInfo':
527
+ case 'Viewpoint':
528
+ // node not supported yet
483
529
  break;
530
+
484
531
  default:
485
- console.warn("THREE.VRMLLoader: Unknown node:", nodeName);
532
+ console.warn('THREE.VRMLLoader: Unknown node:', nodeName);
486
533
  break;
487
534
  }
488
- if (build !== void 0 && node.DEF !== void 0 && build.hasOwnProperty("name") === true) {
535
+
536
+ if (build !== undefined && node.DEF !== undefined && build.hasOwnProperty('name') === true) {
489
537
  build.name = node.DEF;
490
538
  }
539
+
491
540
  return build;
492
541
  }
542
+
493
543
  function buildGroupingNode(node) {
494
- const object = new THREE.Group();
544
+ const object = new Group(); //
545
+
495
546
  const fields = node.fields;
547
+
496
548
  for (let i = 0, l = fields.length; i < l; i++) {
497
549
  const field = fields[i];
498
550
  const fieldName = field.name;
499
551
  const fieldValues = field.values;
552
+
500
553
  switch (fieldName) {
501
- case "bboxCenter":
554
+ case 'bboxCenter':
555
+ // field not supported
502
556
  break;
503
- case "bboxSize":
557
+
558
+ case 'bboxSize':
559
+ // field not supported
504
560
  break;
505
- case "center":
561
+
562
+ case 'center':
563
+ // field not supported
506
564
  break;
507
- case "children":
565
+
566
+ case 'children':
508
567
  parseFieldChildren(fieldValues, object);
509
568
  break;
510
- case "collide":
569
+
570
+ case 'collide':
571
+ // field not supported
511
572
  break;
512
- case "rotation":
513
- const axis = new THREE.Vector3(fieldValues[0], fieldValues[1], fieldValues[2]);
573
+
574
+ case 'rotation':
575
+ const axis = new Vector3(fieldValues[0], fieldValues[1], fieldValues[2]);
514
576
  const angle = fieldValues[3];
515
577
  object.quaternion.setFromAxisAngle(axis, angle);
516
578
  break;
517
- case "scale":
579
+
580
+ case 'scale':
518
581
  object.scale.set(fieldValues[0], fieldValues[1], fieldValues[2]);
519
582
  break;
520
- case "scaleOrientation":
583
+
584
+ case 'scaleOrientation':
585
+ // field not supported
521
586
  break;
522
- case "translation":
587
+
588
+ case 'translation':
523
589
  object.position.set(fieldValues[0], fieldValues[1], fieldValues[2]);
524
590
  break;
525
- case "proxy":
591
+
592
+ case 'proxy':
593
+ // field not supported
526
594
  break;
595
+
527
596
  default:
528
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
597
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
529
598
  break;
530
599
  }
531
600
  }
601
+
532
602
  return object;
533
603
  }
604
+
534
605
  function buildBackgroundNode(node) {
535
- const group = new THREE.Group();
606
+ const group = new Group();
536
607
  let groundAngle, groundColor;
537
608
  let skyAngle, skyColor;
538
609
  const fields = node.fields;
610
+
539
611
  for (let i = 0, l = fields.length; i < l; i++) {
540
612
  const field = fields[i];
541
613
  const fieldName = field.name;
542
614
  const fieldValues = field.values;
615
+
543
616
  switch (fieldName) {
544
- case "groundAngle":
617
+ case 'groundAngle':
545
618
  groundAngle = fieldValues;
546
619
  break;
547
- case "groundColor":
620
+
621
+ case 'groundColor':
548
622
  groundColor = fieldValues;
549
623
  break;
550
- case "backUrl":
624
+
625
+ case 'backUrl':
626
+ // field not supported
551
627
  break;
552
- case "bottomUrl":
628
+
629
+ case 'bottomUrl':
630
+ // field not supported
553
631
  break;
554
- case "frontUrl":
632
+
633
+ case 'frontUrl':
634
+ // field not supported
555
635
  break;
556
- case "leftUrl":
636
+
637
+ case 'leftUrl':
638
+ // field not supported
557
639
  break;
558
- case "rightUrl":
640
+
641
+ case 'rightUrl':
642
+ // field not supported
559
643
  break;
560
- case "topUrl":
644
+
645
+ case 'topUrl':
646
+ // field not supported
561
647
  break;
562
- case "skyAngle":
648
+
649
+ case 'skyAngle':
563
650
  skyAngle = fieldValues;
564
651
  break;
565
- case "skyColor":
652
+
653
+ case 'skyColor':
566
654
  skyColor = fieldValues;
567
655
  break;
656
+
568
657
  default:
569
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
658
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
570
659
  break;
571
660
  }
572
661
  }
573
- const radius = 1e4;
662
+
663
+ const radius = 10000; // sky
664
+
574
665
  if (skyColor) {
575
- const skyGeometry = new THREE.SphereGeometry(radius, 32, 16);
576
- const skyMaterial = new THREE.MeshBasicMaterial({ fog: false, side: THREE.BackSide, depthWrite: false, depthTest: false });
666
+ const skyGeometry = new SphereGeometry(radius, 32, 16);
667
+ const skyMaterial = new MeshBasicMaterial({
668
+ fog: false,
669
+ side: BackSide,
670
+ depthWrite: false,
671
+ depthTest: false
672
+ });
673
+
577
674
  if (skyColor.length > 3) {
578
675
  paintFaces(skyGeometry, radius, skyAngle, toColorArray(skyColor), true);
579
676
  skyMaterial.vertexColors = true;
580
677
  } else {
581
678
  skyMaterial.color.setRGB(skyColor[0], skyColor[1], skyColor[2]);
582
679
  }
583
- const sky = new THREE.Mesh(skyGeometry, skyMaterial);
680
+
681
+ const sky = new Mesh(skyGeometry, skyMaterial);
584
682
  group.add(sky);
585
- }
683
+ } // ground
684
+
685
+
586
686
  if (groundColor) {
587
687
  if (groundColor.length > 0) {
588
- const groundGeometry = new THREE.SphereGeometry(radius, 32, 16, 0, 2 * Math.PI, 0.5 * Math.PI, 1.5 * Math.PI);
589
- const groundMaterial = new THREE.MeshBasicMaterial({
688
+ const groundGeometry = new SphereGeometry(radius, 32, 16, 0, 2 * Math.PI, 0.5 * Math.PI, 1.5 * Math.PI);
689
+ const groundMaterial = new MeshBasicMaterial({
590
690
  fog: false,
591
- side: THREE.BackSide,
691
+ side: BackSide,
592
692
  vertexColors: true,
593
693
  depthWrite: false,
594
694
  depthTest: false
595
695
  });
596
696
  paintFaces(groundGeometry, radius, groundAngle, toColorArray(groundColor), false);
597
- const ground = new THREE.Mesh(groundGeometry, groundMaterial);
697
+ const ground = new Mesh(groundGeometry, groundMaterial);
598
698
  group.add(ground);
599
699
  }
600
- }
700
+ } // render background group first
701
+
702
+
601
703
  group.renderOrder = -Infinity;
602
704
  return group;
603
705
  }
706
+
604
707
  function buildShapeNode(node) {
605
- const fields = node.fields;
606
- let material = new THREE.MeshBasicMaterial({ color: 0 });
708
+ const fields = node.fields; // if the appearance field is NULL or unspecified, lighting is off and the unlit object color is (0, 0, 0)
709
+
710
+ let material = new MeshBasicMaterial({
711
+ color: 0x000000
712
+ });
607
713
  let geometry;
714
+
608
715
  for (let i = 0, l = fields.length; i < l; i++) {
609
716
  const field = fields[i];
610
717
  const fieldName = field.name;
611
718
  const fieldValues = field.values;
719
+
612
720
  switch (fieldName) {
613
- case "appearance":
721
+ case 'appearance':
614
722
  if (fieldValues[0] !== null) {
615
723
  material = getNode(fieldValues[0]);
616
724
  }
725
+
617
726
  break;
618
- case "geometry":
727
+
728
+ case 'geometry':
619
729
  if (fieldValues[0] !== null) {
620
730
  geometry = getNode(fieldValues[0]);
621
731
  }
732
+
622
733
  break;
734
+
623
735
  default:
624
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
736
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
625
737
  break;
626
738
  }
627
- }
739
+ } // build 3D object
740
+
741
+
628
742
  let object;
743
+
629
744
  if (geometry && geometry.attributes.position) {
630
745
  const type = geometry._type;
631
- if (type === "points") {
632
- const pointsMaterial = new THREE.PointsMaterial({ color: 16777215 });
633
- if (geometry.attributes.color !== void 0) {
746
+
747
+ if (type === 'points') {
748
+ // points
749
+ const pointsMaterial = new PointsMaterial({
750
+ color: 0xffffff
751
+ });
752
+
753
+ if (geometry.attributes.color !== undefined) {
634
754
  pointsMaterial.vertexColors = true;
635
755
  } else {
756
+ // if the color field is NULL and there is a material defined for the appearance affecting this PointSet, then use the emissiveColor of the material to draw the points
636
757
  if (material.isMeshPhongMaterial) {
637
758
  pointsMaterial.color.copy(material.emissive);
638
759
  }
639
760
  }
640
- object = new THREE.Points(geometry, pointsMaterial);
641
- } else if (type === "line") {
642
- const lineMaterial = new THREE.LineBasicMaterial({ color: 16777215 });
643
- if (geometry.attributes.color !== void 0) {
761
+
762
+ object = new Points(geometry, pointsMaterial);
763
+ } else if (type === 'line') {
764
+ // lines
765
+ const lineMaterial = new LineBasicMaterial({
766
+ color: 0xffffff
767
+ });
768
+
769
+ if (geometry.attributes.color !== undefined) {
644
770
  lineMaterial.vertexColors = true;
645
771
  } else {
772
+ // if the color field is NULL and there is a material defined for the appearance affecting this IndexedLineSet, then use the emissiveColor of the material to draw the lines
646
773
  if (material.isMeshPhongMaterial) {
647
774
  lineMaterial.color.copy(material.emissive);
648
775
  }
649
776
  }
650
- object = new THREE.LineSegments(geometry, lineMaterial);
777
+
778
+ object = new LineSegments(geometry, lineMaterial);
651
779
  } else {
652
- if (geometry._solid !== void 0) {
653
- material.side = geometry._solid ? THREE.FrontSide : THREE.DoubleSide;
654
- }
655
- if (geometry.attributes.color !== void 0) {
780
+ // consider meshes
781
+ // check "solid" hint (it's placed in the geometry but affects the material)
782
+ if (geometry._solid !== undefined) {
783
+ material.side = geometry._solid ? FrontSide : DoubleSide;
784
+ } // check for vertex colors
785
+
786
+
787
+ if (geometry.attributes.color !== undefined) {
656
788
  material.vertexColors = true;
657
789
  }
658
- object = new THREE.Mesh(geometry, material);
790
+
791
+ object = new Mesh(geometry, material);
659
792
  }
660
793
  } else {
661
- object = new THREE.Object3D();
794
+ object = new Object3D(); // if the geometry field is NULL or no vertices are defined the object is not drawn
795
+
662
796
  object.visible = false;
663
797
  }
798
+
664
799
  return object;
665
800
  }
801
+
666
802
  function buildAppearanceNode(node) {
667
- let material = new THREE.MeshPhongMaterial();
803
+ let material = new MeshPhongMaterial();
668
804
  let transformData;
669
805
  const fields = node.fields;
806
+
670
807
  for (let i = 0, l = fields.length; i < l; i++) {
671
808
  const field = fields[i];
672
809
  const fieldName = field.name;
673
810
  const fieldValues = field.values;
811
+
674
812
  switch (fieldName) {
675
- case "material":
813
+ case 'material':
676
814
  if (fieldValues[0] !== null) {
677
815
  const materialData = getNode(fieldValues[0]);
678
- if (materialData.diffuseColor)
679
- material.color.copy(materialData.diffuseColor);
680
- if (materialData.emissiveColor)
681
- material.emissive.copy(materialData.emissiveColor);
682
- if (materialData.shininess)
683
- material.shininess = materialData.shininess;
684
- if (materialData.specularColor)
685
- material.specular.copy(materialData.specularColor);
686
- if (materialData.transparency)
687
- material.opacity = 1 - materialData.transparency;
688
- if (materialData.transparency > 0)
689
- material.transparent = true;
816
+ if (materialData.diffuseColor) material.color.copy(materialData.diffuseColor);
817
+ if (materialData.emissiveColor) material.emissive.copy(materialData.emissiveColor);
818
+ if (materialData.shininess) material.shininess = materialData.shininess;
819
+ if (materialData.specularColor) material.specular.copy(materialData.specularColor);
820
+ if (materialData.transparency) material.opacity = 1 - materialData.transparency;
821
+ if (materialData.transparency > 0) material.transparent = true;
690
822
  } else {
691
- material = new THREE.MeshBasicMaterial({ color: 0 });
823
+ // if the material field is NULL or unspecified, lighting is off and the unlit object color is (0, 0, 0)
824
+ material = new MeshBasicMaterial({
825
+ color: 0x000000
826
+ });
692
827
  }
828
+
693
829
  break;
694
- case "texture":
830
+
831
+ case 'texture':
695
832
  const textureNode = fieldValues[0];
833
+
696
834
  if (textureNode !== null) {
697
- if (textureNode.name === "ImageTexture" || textureNode.name === "PixelTexture") {
835
+ if (textureNode.name === 'ImageTexture' || textureNode.name === 'PixelTexture') {
698
836
  material.map = getNode(textureNode);
699
- } else {
700
837
  }
701
838
  }
839
+
702
840
  break;
703
- case "textureTransform":
841
+
842
+ case 'textureTransform':
704
843
  if (fieldValues[0] !== null) {
705
844
  transformData = getNode(fieldValues[0]);
706
845
  }
846
+
707
847
  break;
848
+
708
849
  default:
709
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
850
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
710
851
  break;
711
852
  }
712
- }
853
+ } // only apply texture transform data if a texture was defined
854
+
855
+
713
856
  if (material.map) {
857
+ // respect VRML lighting model
714
858
  if (material.map.__type) {
715
859
  switch (material.map.__type) {
716
860
  case TEXTURE_TYPE.INTENSITY_ALPHA:
717
- material.opacity = 1;
861
+ material.opacity = 1; // ignore transparency
862
+
718
863
  break;
864
+
719
865
  case TEXTURE_TYPE.RGB:
720
- material.color.set(16777215);
866
+ material.color.set(0xffffff); // ignore material color
867
+
721
868
  break;
869
+
722
870
  case TEXTURE_TYPE.RGBA:
723
- material.color.set(16777215);
724
- material.opacity = 1;
871
+ material.color.set(0xffffff); // ignore material color
872
+
873
+ material.opacity = 1; // ignore transparency
874
+
725
875
  break;
726
- default:
727
876
  }
877
+
728
878
  delete material.map.__type;
729
- }
879
+ } // apply texture transform
880
+
881
+
730
882
  if (transformData) {
731
883
  material.map.center.copy(transformData.center);
732
884
  material.map.rotation = transformData.rotation;
@@ -734,563 +886,734 @@ class VRMLLoader extends THREE.Loader {
734
886
  material.map.offset.copy(transformData.translation);
735
887
  }
736
888
  }
889
+
737
890
  return material;
738
891
  }
892
+
739
893
  function buildMaterialNode(node) {
740
894
  const materialData = {};
741
895
  const fields = node.fields;
896
+
742
897
  for (let i = 0, l = fields.length; i < l; i++) {
743
898
  const field = fields[i];
744
899
  const fieldName = field.name;
745
900
  const fieldValues = field.values;
901
+
746
902
  switch (fieldName) {
747
- case "ambientIntensity":
903
+ case 'ambientIntensity':
904
+ // field not supported
748
905
  break;
749
- case "diffuseColor":
750
- materialData.diffuseColor = new THREE.Color(fieldValues[0], fieldValues[1], fieldValues[2]);
906
+
907
+ case 'diffuseColor':
908
+ materialData.diffuseColor = new Color(fieldValues[0], fieldValues[1], fieldValues[2]);
751
909
  break;
752
- case "emissiveColor":
753
- materialData.emissiveColor = new THREE.Color(fieldValues[0], fieldValues[1], fieldValues[2]);
910
+
911
+ case 'emissiveColor':
912
+ materialData.emissiveColor = new Color(fieldValues[0], fieldValues[1], fieldValues[2]);
754
913
  break;
755
- case "shininess":
914
+
915
+ case 'shininess':
756
916
  materialData.shininess = fieldValues[0];
757
917
  break;
758
- case "specularColor":
759
- materialData.emissiveColor = new THREE.Color(fieldValues[0], fieldValues[1], fieldValues[2]);
918
+
919
+ case 'specularColor':
920
+ materialData.emissiveColor = new Color(fieldValues[0], fieldValues[1], fieldValues[2]);
760
921
  break;
761
- case "transparency":
922
+
923
+ case 'transparency':
762
924
  materialData.transparency = fieldValues[0];
763
925
  break;
926
+
764
927
  default:
765
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
928
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
766
929
  break;
767
930
  }
768
931
  }
932
+
769
933
  return materialData;
770
934
  }
935
+
771
936
  function parseHexColor(hex, textureType, color) {
772
937
  let value;
938
+
773
939
  switch (textureType) {
774
940
  case TEXTURE_TYPE.INTENSITY:
941
+ // Intensity texture: A one-component image specifies one-byte hexadecimal or integer values representing the intensity of the image
775
942
  value = parseInt(hex);
776
943
  color.r = value;
777
944
  color.g = value;
778
945
  color.b = value;
779
946
  color.a = 1;
780
947
  break;
948
+
781
949
  case TEXTURE_TYPE.INTENSITY_ALPHA:
782
- value = parseInt("0x" + hex.substring(2, 4));
950
+ // Intensity+Alpha texture: A two-component image specifies the intensity in the first (high) byte and the alpha opacity in the second (low) byte.
951
+ value = parseInt('0x' + hex.substring(2, 4));
783
952
  color.r = value;
784
953
  color.g = value;
785
954
  color.b = value;
786
- color.a = parseInt("0x" + hex.substring(4, 6));
955
+ color.a = parseInt('0x' + hex.substring(4, 6));
787
956
  break;
957
+
788
958
  case TEXTURE_TYPE.RGB:
789
- color.r = parseInt("0x" + hex.substring(2, 4));
790
- color.g = parseInt("0x" + hex.substring(4, 6));
791
- color.b = parseInt("0x" + hex.substring(6, 8));
959
+ // RGB texture: Pixels in a three-component image specify the red component in the first (high) byte, followed by the green and blue components
960
+ color.r = parseInt('0x' + hex.substring(2, 4));
961
+ color.g = parseInt('0x' + hex.substring(4, 6));
962
+ color.b = parseInt('0x' + hex.substring(6, 8));
792
963
  color.a = 1;
793
964
  break;
965
+
794
966
  case TEXTURE_TYPE.RGBA:
795
- color.r = parseInt("0x" + hex.substring(2, 4));
796
- color.g = parseInt("0x" + hex.substring(4, 6));
797
- color.b = parseInt("0x" + hex.substring(6, 8));
798
- color.a = parseInt("0x" + hex.substring(8, 10));
967
+ // RGBA texture: Four-component images specify the alpha opacity byte after red/green/blue
968
+ color.r = parseInt('0x' + hex.substring(2, 4));
969
+ color.g = parseInt('0x' + hex.substring(4, 6));
970
+ color.b = parseInt('0x' + hex.substring(6, 8));
971
+ color.a = parseInt('0x' + hex.substring(8, 10));
799
972
  break;
800
- default:
801
973
  }
802
974
  }
975
+
803
976
  function getTextureType(num_components) {
804
977
  let type;
978
+
805
979
  switch (num_components) {
806
980
  case 1:
807
981
  type = TEXTURE_TYPE.INTENSITY;
808
982
  break;
983
+
809
984
  case 2:
810
985
  type = TEXTURE_TYPE.INTENSITY_ALPHA;
811
986
  break;
987
+
812
988
  case 3:
813
989
  type = TEXTURE_TYPE.RGB;
814
990
  break;
991
+
815
992
  case 4:
816
993
  type = TEXTURE_TYPE.RGBA;
817
994
  break;
818
- default:
819
995
  }
996
+
820
997
  return type;
821
998
  }
999
+
822
1000
  function buildPixelTextureNode(node) {
823
1001
  let texture;
824
- let wrapS = THREE.RepeatWrapping;
825
- let wrapT = THREE.RepeatWrapping;
1002
+ let wrapS = RepeatWrapping;
1003
+ let wrapT = RepeatWrapping;
826
1004
  const fields = node.fields;
1005
+
827
1006
  for (let i = 0, l = fields.length; i < l; i++) {
828
1007
  const field = fields[i];
829
1008
  const fieldName = field.name;
830
1009
  const fieldValues = field.values;
1010
+
831
1011
  switch (fieldName) {
832
- case "image":
1012
+ case 'image':
833
1013
  const width = fieldValues[0];
834
1014
  const height = fieldValues[1];
835
1015
  const num_components = fieldValues[2];
836
1016
  const textureType = getTextureType(num_components);
837
- const data2 = new Uint8Array(4 * width * height);
838
- const color = { r: 0, g: 0, b: 0, a: 0 };
1017
+ const data = new Uint8Array(4 * width * height);
1018
+ const color = {
1019
+ r: 0,
1020
+ g: 0,
1021
+ b: 0,
1022
+ a: 0
1023
+ };
1024
+
839
1025
  for (let j = 3, k = 0, jl = fieldValues.length; j < jl; j++, k++) {
840
1026
  parseHexColor(fieldValues[j], textureType, color);
841
1027
  const stride = k * 4;
842
- data2[stride + 0] = color.r;
843
- data2[stride + 1] = color.g;
844
- data2[stride + 2] = color.b;
845
- data2[stride + 3] = color.a;
1028
+ data[stride + 0] = color.r;
1029
+ data[stride + 1] = color.g;
1030
+ data[stride + 2] = color.b;
1031
+ data[stride + 3] = color.a;
846
1032
  }
847
- texture = new THREE.DataTexture(data2, width, height);
1033
+
1034
+ texture = new DataTexture(data, width, height);
848
1035
  texture.needsUpdate = true;
849
- texture.__type = textureType;
1036
+ texture.__type = textureType; // needed for material modifications
1037
+
850
1038
  break;
851
- case "repeatS":
852
- if (fieldValues[0] === false)
853
- wrapS = THREE.ClampToEdgeWrapping;
1039
+
1040
+ case 'repeatS':
1041
+ if (fieldValues[0] === false) wrapS = ClampToEdgeWrapping;
854
1042
  break;
855
- case "repeatT":
856
- if (fieldValues[0] === false)
857
- wrapT = THREE.ClampToEdgeWrapping;
1043
+
1044
+ case 'repeatT':
1045
+ if (fieldValues[0] === false) wrapT = ClampToEdgeWrapping;
858
1046
  break;
1047
+
859
1048
  default:
860
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
1049
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
861
1050
  break;
862
1051
  }
863
1052
  }
1053
+
864
1054
  if (texture) {
865
1055
  texture.wrapS = wrapS;
866
1056
  texture.wrapT = wrapT;
867
1057
  }
1058
+
868
1059
  return texture;
869
1060
  }
1061
+
870
1062
  function buildImageTextureNode(node) {
871
1063
  let texture;
872
- let wrapS = THREE.RepeatWrapping;
873
- let wrapT = THREE.RepeatWrapping;
1064
+ let wrapS = RepeatWrapping;
1065
+ let wrapT = RepeatWrapping;
874
1066
  const fields = node.fields;
1067
+
875
1068
  for (let i = 0, l = fields.length; i < l; i++) {
876
1069
  const field = fields[i];
877
1070
  const fieldName = field.name;
878
1071
  const fieldValues = field.values;
1072
+
879
1073
  switch (fieldName) {
880
- case "url":
1074
+ case 'url':
881
1075
  const url = fieldValues[0];
882
- if (url)
883
- texture = textureLoader.load(url);
1076
+ if (url) texture = textureLoader.load(url);
884
1077
  break;
885
- case "repeatS":
886
- if (fieldValues[0] === false)
887
- wrapS = THREE.ClampToEdgeWrapping;
1078
+
1079
+ case 'repeatS':
1080
+ if (fieldValues[0] === false) wrapS = ClampToEdgeWrapping;
888
1081
  break;
889
- case "repeatT":
890
- if (fieldValues[0] === false)
891
- wrapT = THREE.ClampToEdgeWrapping;
1082
+
1083
+ case 'repeatT':
1084
+ if (fieldValues[0] === false) wrapT = ClampToEdgeWrapping;
892
1085
  break;
1086
+
893
1087
  default:
894
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
1088
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
895
1089
  break;
896
1090
  }
897
1091
  }
1092
+
898
1093
  if (texture) {
899
1094
  texture.wrapS = wrapS;
900
1095
  texture.wrapT = wrapT;
901
1096
  }
1097
+
902
1098
  return texture;
903
1099
  }
1100
+
904
1101
  function buildTextureTransformNode(node) {
905
1102
  const transformData = {
906
- center: new THREE.Vector2(),
907
- rotation: new THREE.Vector2(),
908
- scale: new THREE.Vector2(),
909
- translation: new THREE.Vector2()
1103
+ center: new Vector2(),
1104
+ rotation: new Vector2(),
1105
+ scale: new Vector2(),
1106
+ translation: new Vector2()
910
1107
  };
911
1108
  const fields = node.fields;
1109
+
912
1110
  for (let i = 0, l = fields.length; i < l; i++) {
913
1111
  const field = fields[i];
914
1112
  const fieldName = field.name;
915
1113
  const fieldValues = field.values;
1114
+
916
1115
  switch (fieldName) {
917
- case "center":
1116
+ case 'center':
918
1117
  transformData.center.set(fieldValues[0], fieldValues[1]);
919
1118
  break;
920
- case "rotation":
1119
+
1120
+ case 'rotation':
921
1121
  transformData.rotation = fieldValues[0];
922
1122
  break;
923
- case "scale":
1123
+
1124
+ case 'scale':
924
1125
  transformData.scale.set(fieldValues[0], fieldValues[1]);
925
1126
  break;
926
- case "translation":
1127
+
1128
+ case 'translation':
927
1129
  transformData.translation.set(fieldValues[0], fieldValues[1]);
928
1130
  break;
1131
+
929
1132
  default:
930
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
1133
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
931
1134
  break;
932
1135
  }
933
1136
  }
1137
+
934
1138
  return transformData;
935
1139
  }
1140
+
936
1141
  function buildGeometricNode(node) {
937
1142
  return node.fields[0].values;
938
1143
  }
1144
+
939
1145
  function buildWorldInfoNode(node) {
940
1146
  const worldInfo = {};
941
1147
  const fields = node.fields;
1148
+
942
1149
  for (let i = 0, l = fields.length; i < l; i++) {
943
1150
  const field = fields[i];
944
1151
  const fieldName = field.name;
945
1152
  const fieldValues = field.values;
1153
+
946
1154
  switch (fieldName) {
947
- case "title":
1155
+ case 'title':
948
1156
  worldInfo.title = fieldValues[0];
949
1157
  break;
950
- case "info":
1158
+
1159
+ case 'info':
951
1160
  worldInfo.info = fieldValues;
952
1161
  break;
1162
+
953
1163
  default:
954
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
1164
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
955
1165
  break;
956
1166
  }
957
1167
  }
1168
+
958
1169
  return worldInfo;
959
1170
  }
1171
+
960
1172
  function buildIndexedFaceSetNode(node) {
961
1173
  let color, coord, normal, texCoord;
962
- let ccw = true, solid = true, creaseAngle = 0;
1174
+ let ccw = true,
1175
+ solid = true,
1176
+ creaseAngle = 0;
963
1177
  let colorIndex, coordIndex, normalIndex, texCoordIndex;
964
- let colorPerVertex = true, normalPerVertex = true;
1178
+ let colorPerVertex = true,
1179
+ normalPerVertex = true;
965
1180
  const fields = node.fields;
1181
+
966
1182
  for (let i = 0, l = fields.length; i < l; i++) {
967
1183
  const field = fields[i];
968
1184
  const fieldName = field.name;
969
1185
  const fieldValues = field.values;
1186
+
970
1187
  switch (fieldName) {
971
- case "color":
1188
+ case 'color':
972
1189
  const colorNode = fieldValues[0];
1190
+
973
1191
  if (colorNode !== null) {
974
1192
  color = getNode(colorNode);
975
1193
  }
1194
+
976
1195
  break;
977
- case "coord":
1196
+
1197
+ case 'coord':
978
1198
  const coordNode = fieldValues[0];
1199
+
979
1200
  if (coordNode !== null) {
980
1201
  coord = getNode(coordNode);
981
1202
  }
1203
+
982
1204
  break;
983
- case "normal":
1205
+
1206
+ case 'normal':
984
1207
  const normalNode = fieldValues[0];
1208
+
985
1209
  if (normalNode !== null) {
986
1210
  normal = getNode(normalNode);
987
1211
  }
1212
+
988
1213
  break;
989
- case "texCoord":
1214
+
1215
+ case 'texCoord':
990
1216
  const texCoordNode = fieldValues[0];
1217
+
991
1218
  if (texCoordNode !== null) {
992
1219
  texCoord = getNode(texCoordNode);
993
1220
  }
1221
+
994
1222
  break;
995
- case "ccw":
1223
+
1224
+ case 'ccw':
996
1225
  ccw = fieldValues[0];
997
1226
  break;
998
- case "colorIndex":
1227
+
1228
+ case 'colorIndex':
999
1229
  colorIndex = fieldValues;
1000
1230
  break;
1001
- case "colorPerVertex":
1231
+
1232
+ case 'colorPerVertex':
1002
1233
  colorPerVertex = fieldValues[0];
1003
1234
  break;
1004
- case "convex":
1235
+
1236
+ case 'convex':
1237
+ // field not supported
1005
1238
  break;
1006
- case "coordIndex":
1239
+
1240
+ case 'coordIndex':
1007
1241
  coordIndex = fieldValues;
1008
1242
  break;
1009
- case "creaseAngle":
1243
+
1244
+ case 'creaseAngle':
1010
1245
  creaseAngle = fieldValues[0];
1011
1246
  break;
1012
- case "normalIndex":
1247
+
1248
+ case 'normalIndex':
1013
1249
  normalIndex = fieldValues;
1014
1250
  break;
1015
- case "normalPerVertex":
1251
+
1252
+ case 'normalPerVertex':
1016
1253
  normalPerVertex = fieldValues[0];
1017
1254
  break;
1018
- case "solid":
1255
+
1256
+ case 'solid':
1019
1257
  solid = fieldValues[0];
1020
1258
  break;
1021
- case "texCoordIndex":
1259
+
1260
+ case 'texCoordIndex':
1022
1261
  texCoordIndex = fieldValues;
1023
1262
  break;
1263
+
1024
1264
  default:
1025
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
1265
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
1026
1266
  break;
1027
1267
  }
1028
1268
  }
1029
- if (coordIndex === void 0) {
1030
- console.warn("THREE.VRMLLoader: Missing coordIndex.");
1031
- return new THREE.BufferGeometry();
1269
+
1270
+ if (coordIndex === undefined) {
1271
+ console.warn('THREE.VRMLLoader: Missing coordIndex.');
1272
+ return new BufferGeometry(); // handle VRML files with incomplete geometry definition
1032
1273
  }
1274
+
1033
1275
  const triangulatedCoordIndex = triangulateFaceIndex(coordIndex, ccw);
1034
1276
  let colorAttribute;
1035
1277
  let normalAttribute;
1036
1278
  let uvAttribute;
1279
+
1037
1280
  if (color) {
1038
1281
  if (colorPerVertex === true) {
1039
1282
  if (colorIndex && colorIndex.length > 0) {
1283
+ // if the colorIndex field is not empty, then it is used to choose colors for each vertex of the IndexedFaceSet.
1040
1284
  const triangulatedColorIndex = triangulateFaceIndex(colorIndex, ccw);
1041
1285
  colorAttribute = computeAttributeFromIndexedData(triangulatedCoordIndex, triangulatedColorIndex, color, 3);
1042
1286
  } else {
1043
- colorAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new THREE.Float32BufferAttribute(color, 3));
1287
+ // if the colorIndex field is empty, then the coordIndex field is used to choose colors from the Color node
1288
+ colorAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(color, 3));
1044
1289
  }
1045
1290
  } else {
1046
1291
  if (colorIndex && colorIndex.length > 0) {
1292
+ // if the colorIndex field is not empty, then they are used to choose one color for each face of the IndexedFaceSet
1047
1293
  const flattenFaceColors = flattenData(color, colorIndex);
1048
1294
  const triangulatedFaceColors = triangulateFaceData(flattenFaceColors, coordIndex);
1049
1295
  colorAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceColors);
1050
1296
  } else {
1297
+ // if the colorIndex field is empty, then the color are applied to each face of the IndexedFaceSet in order
1051
1298
  const triangulatedFaceColors = triangulateFaceData(color, coordIndex);
1052
1299
  colorAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceColors);
1053
1300
  }
1054
1301
  }
1055
1302
  }
1303
+
1056
1304
  if (normal) {
1057
1305
  if (normalPerVertex === true) {
1306
+ // consider vertex normals
1058
1307
  if (normalIndex && normalIndex.length > 0) {
1308
+ // if the normalIndex field is not empty, then it is used to choose normals for each vertex of the IndexedFaceSet.
1059
1309
  const triangulatedNormalIndex = triangulateFaceIndex(normalIndex, ccw);
1060
- normalAttribute = computeAttributeFromIndexedData(
1061
- triangulatedCoordIndex,
1062
- triangulatedNormalIndex,
1063
- normal,
1064
- 3
1065
- );
1310
+ normalAttribute = computeAttributeFromIndexedData(triangulatedCoordIndex, triangulatedNormalIndex, normal, 3);
1066
1311
  } else {
1067
- normalAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new THREE.Float32BufferAttribute(normal, 3));
1312
+ // if the normalIndex field is empty, then the coordIndex field is used to choose normals from the Normal node
1313
+ normalAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(normal, 3));
1068
1314
  }
1069
1315
  } else {
1316
+ // consider face normals
1070
1317
  if (normalIndex && normalIndex.length > 0) {
1318
+ // if the normalIndex field is not empty, then they are used to choose one normal for each face of the IndexedFaceSet
1071
1319
  const flattenFaceNormals = flattenData(normal, normalIndex);
1072
1320
  const triangulatedFaceNormals = triangulateFaceData(flattenFaceNormals, coordIndex);
1073
1321
  normalAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceNormals);
1074
1322
  } else {
1323
+ // if the normalIndex field is empty, then the normals are applied to each face of the IndexedFaceSet in order
1075
1324
  const triangulatedFaceNormals = triangulateFaceData(normal, coordIndex);
1076
1325
  normalAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceNormals);
1077
1326
  }
1078
1327
  }
1079
1328
  } else {
1329
+ // if the normal field is NULL, then the loader should automatically generate normals, using creaseAngle to determine if and how normals are smoothed across shared vertices
1080
1330
  normalAttribute = computeNormalAttribute(triangulatedCoordIndex, coord, creaseAngle);
1081
1331
  }
1332
+
1082
1333
  if (texCoord) {
1334
+ // texture coordinates are always defined on vertex level
1083
1335
  if (texCoordIndex && texCoordIndex.length > 0) {
1336
+ // if the texCoordIndex field is not empty, then it is used to choose texture coordinates for each vertex of the IndexedFaceSet.
1084
1337
  const triangulatedTexCoordIndex = triangulateFaceIndex(texCoordIndex, ccw);
1085
1338
  uvAttribute = computeAttributeFromIndexedData(triangulatedCoordIndex, triangulatedTexCoordIndex, texCoord, 2);
1086
1339
  } else {
1087
- uvAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new THREE.Float32BufferAttribute(texCoord, 2));
1340
+ // if the texCoordIndex field is empty, then the coordIndex array is used to choose texture coordinates from the TextureCoordinate node
1341
+ uvAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(texCoord, 2));
1088
1342
  }
1089
1343
  }
1090
- const geometry = new THREE.BufferGeometry();
1091
- const positionAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new THREE.Float32BufferAttribute(coord, 3));
1092
- geometry.setAttribute("position", positionAttribute);
1093
- geometry.setAttribute("normal", normalAttribute);
1094
- if (colorAttribute)
1095
- geometry.setAttribute("color", colorAttribute);
1096
- if (uvAttribute)
1097
- geometry.setAttribute("uv", uvAttribute);
1344
+
1345
+ const geometry = new BufferGeometry();
1346
+ const positionAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(coord, 3));
1347
+ geometry.setAttribute('position', positionAttribute);
1348
+ geometry.setAttribute('normal', normalAttribute); // optional attributes
1349
+
1350
+ if (colorAttribute) geometry.setAttribute('color', colorAttribute);
1351
+ if (uvAttribute) geometry.setAttribute('uv', uvAttribute); // "solid" influences the material so let's store it for later use
1352
+
1098
1353
  geometry._solid = solid;
1099
- geometry._type = "mesh";
1354
+ geometry._type = 'mesh';
1100
1355
  return geometry;
1101
1356
  }
1357
+
1102
1358
  function buildIndexedLineSetNode(node) {
1103
1359
  let color, coord;
1104
1360
  let colorIndex, coordIndex;
1105
1361
  let colorPerVertex = true;
1106
1362
  const fields = node.fields;
1363
+
1107
1364
  for (let i = 0, l = fields.length; i < l; i++) {
1108
1365
  const field = fields[i];
1109
1366
  const fieldName = field.name;
1110
1367
  const fieldValues = field.values;
1368
+
1111
1369
  switch (fieldName) {
1112
- case "color":
1370
+ case 'color':
1113
1371
  const colorNode = fieldValues[0];
1372
+
1114
1373
  if (colorNode !== null) {
1115
1374
  color = getNode(colorNode);
1116
1375
  }
1376
+
1117
1377
  break;
1118
- case "coord":
1378
+
1379
+ case 'coord':
1119
1380
  const coordNode = fieldValues[0];
1381
+
1120
1382
  if (coordNode !== null) {
1121
1383
  coord = getNode(coordNode);
1122
1384
  }
1385
+
1123
1386
  break;
1124
- case "colorIndex":
1387
+
1388
+ case 'colorIndex':
1125
1389
  colorIndex = fieldValues;
1126
1390
  break;
1127
- case "colorPerVertex":
1391
+
1392
+ case 'colorPerVertex':
1128
1393
  colorPerVertex = fieldValues[0];
1129
1394
  break;
1130
- case "coordIndex":
1395
+
1396
+ case 'coordIndex':
1131
1397
  coordIndex = fieldValues;
1132
1398
  break;
1399
+
1133
1400
  default:
1134
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
1401
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
1135
1402
  break;
1136
1403
  }
1137
- }
1404
+ } // build lines
1405
+
1406
+
1138
1407
  let colorAttribute;
1139
- const expandedLineIndex = expandLineIndex(coordIndex);
1408
+ const expandedLineIndex = expandLineIndex(coordIndex); // create an index for three.js's linesegment primitive
1409
+
1140
1410
  if (color) {
1141
1411
  if (colorPerVertex === true) {
1142
1412
  if (colorIndex.length > 0) {
1143
- const expandedColorIndex = expandLineIndex(colorIndex);
1144
- colorAttribute = computeAttributeFromIndexedData(expandedLineIndex, expandedColorIndex, color, 3);
1413
+ // if the colorIndex field is not empty, then one color is used for each polyline of the IndexedLineSet.
1414
+ const expandedColorIndex = expandLineIndex(colorIndex); // compute colors for each line segment (rendering primitve)
1415
+
1416
+ colorAttribute = computeAttributeFromIndexedData(expandedLineIndex, expandedColorIndex, color, 3); // compute data on vertex level
1145
1417
  } else {
1146
- colorAttribute = toNonIndexedAttribute(expandedLineIndex, new THREE.Float32BufferAttribute(color, 3));
1418
+ // if the colorIndex field is empty, then the colors are applied to each polyline of the IndexedLineSet in order.
1419
+ colorAttribute = toNonIndexedAttribute(expandedLineIndex, new Float32BufferAttribute(color, 3));
1147
1420
  }
1148
1421
  } else {
1149
1422
  if (colorIndex.length > 0) {
1150
- const flattenLineColors = flattenData(color, colorIndex);
1151
- const expandedLineColors = expandLineData(flattenLineColors, coordIndex);
1152
- colorAttribute = computeAttributeFromLineData(expandedLineIndex, expandedLineColors);
1423
+ // if the colorIndex field is not empty, then colors are applied to each vertex of the IndexedLineSet
1424
+ const flattenLineColors = flattenData(color, colorIndex); // compute colors for each VRML primitve
1425
+
1426
+ const expandedLineColors = expandLineData(flattenLineColors, coordIndex); // compute colors for each line segment (rendering primitve)
1427
+
1428
+ colorAttribute = computeAttributeFromLineData(expandedLineIndex, expandedLineColors); // compute data on vertex level
1153
1429
  } else {
1154
- const expandedLineColors = expandLineData(color, coordIndex);
1155
- colorAttribute = computeAttributeFromLineData(expandedLineIndex, expandedLineColors);
1430
+ // if the colorIndex field is empty, then the coordIndex field is used to choose colors from the Color node
1431
+ const expandedLineColors = expandLineData(color, coordIndex); // compute colors for each line segment (rendering primitve)
1432
+
1433
+ colorAttribute = computeAttributeFromLineData(expandedLineIndex, expandedLineColors); // compute data on vertex level
1156
1434
  }
1157
1435
  }
1158
- }
1159
- const geometry = new THREE.BufferGeometry();
1160
- const positionAttribute = toNonIndexedAttribute(expandedLineIndex, new THREE.Float32BufferAttribute(coord, 3));
1161
- geometry.setAttribute("position", positionAttribute);
1162
- if (colorAttribute)
1163
- geometry.setAttribute("color", colorAttribute);
1164
- geometry._type = "line";
1436
+ } //
1437
+
1438
+
1439
+ const geometry = new BufferGeometry();
1440
+ const positionAttribute = toNonIndexedAttribute(expandedLineIndex, new Float32BufferAttribute(coord, 3));
1441
+ geometry.setAttribute('position', positionAttribute);
1442
+ if (colorAttribute) geometry.setAttribute('color', colorAttribute);
1443
+ geometry._type = 'line';
1165
1444
  return geometry;
1166
1445
  }
1446
+
1167
1447
  function buildPointSetNode(node) {
1168
1448
  let color, coord;
1169
1449
  const fields = node.fields;
1450
+
1170
1451
  for (let i = 0, l = fields.length; i < l; i++) {
1171
1452
  const field = fields[i];
1172
1453
  const fieldName = field.name;
1173
1454
  const fieldValues = field.values;
1455
+
1174
1456
  switch (fieldName) {
1175
- case "color":
1457
+ case 'color':
1176
1458
  const colorNode = fieldValues[0];
1459
+
1177
1460
  if (colorNode !== null) {
1178
1461
  color = getNode(colorNode);
1179
1462
  }
1463
+
1180
1464
  break;
1181
- case "coord":
1465
+
1466
+ case 'coord':
1182
1467
  const coordNode = fieldValues[0];
1468
+
1183
1469
  if (coordNode !== null) {
1184
1470
  coord = getNode(coordNode);
1185
1471
  }
1472
+
1186
1473
  break;
1474
+
1187
1475
  default:
1188
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
1476
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
1189
1477
  break;
1190
1478
  }
1191
1479
  }
1192
- const geometry = new THREE.BufferGeometry();
1193
- geometry.setAttribute("position", new THREE.Float32BufferAttribute(coord, 3));
1194
- if (color)
1195
- geometry.setAttribute("color", new THREE.Float32BufferAttribute(color, 3));
1196
- geometry._type = "points";
1480
+
1481
+ const geometry = new BufferGeometry();
1482
+ geometry.setAttribute('position', new Float32BufferAttribute(coord, 3));
1483
+ if (color) geometry.setAttribute('color', new Float32BufferAttribute(color, 3));
1484
+ geometry._type = 'points';
1197
1485
  return geometry;
1198
1486
  }
1487
+
1199
1488
  function buildBoxNode(node) {
1200
- const size = new THREE.Vector3(2, 2, 2);
1489
+ const size = new Vector3(2, 2, 2);
1201
1490
  const fields = node.fields;
1491
+
1202
1492
  for (let i = 0, l = fields.length; i < l; i++) {
1203
1493
  const field = fields[i];
1204
1494
  const fieldName = field.name;
1205
1495
  const fieldValues = field.values;
1496
+
1206
1497
  switch (fieldName) {
1207
- case "size":
1498
+ case 'size':
1208
1499
  size.x = fieldValues[0];
1209
1500
  size.y = fieldValues[1];
1210
1501
  size.z = fieldValues[2];
1211
1502
  break;
1503
+
1212
1504
  default:
1213
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
1505
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
1214
1506
  break;
1215
1507
  }
1216
1508
  }
1217
- const geometry = new THREE.BoxGeometry(size.x, size.y, size.z);
1509
+
1510
+ const geometry = new BoxGeometry(size.x, size.y, size.z);
1218
1511
  return geometry;
1219
1512
  }
1513
+
1220
1514
  function buildConeNode(node) {
1221
- let radius = 1, height = 2, openEnded = false;
1515
+ let radius = 1,
1516
+ height = 2,
1517
+ openEnded = false;
1222
1518
  const fields = node.fields;
1519
+
1223
1520
  for (let i = 0, l = fields.length; i < l; i++) {
1224
1521
  const field = fields[i];
1225
1522
  const fieldName = field.name;
1226
1523
  const fieldValues = field.values;
1524
+
1227
1525
  switch (fieldName) {
1228
- case "bottom":
1526
+ case 'bottom':
1229
1527
  openEnded = !fieldValues[0];
1230
1528
  break;
1231
- case "bottomRadius":
1529
+
1530
+ case 'bottomRadius':
1232
1531
  radius = fieldValues[0];
1233
1532
  break;
1234
- case "height":
1533
+
1534
+ case 'height':
1235
1535
  height = fieldValues[0];
1236
1536
  break;
1237
- case "side":
1537
+
1538
+ case 'side':
1539
+ // field not supported
1238
1540
  break;
1541
+
1239
1542
  default:
1240
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
1543
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
1241
1544
  break;
1242
1545
  }
1243
1546
  }
1244
- const geometry = new THREE.ConeGeometry(radius, height, 16, 1, openEnded);
1547
+
1548
+ const geometry = new ConeGeometry(radius, height, 16, 1, openEnded);
1245
1549
  return geometry;
1246
1550
  }
1551
+
1247
1552
  function buildCylinderNode(node) {
1248
- let radius = 1, height = 2;
1553
+ let radius = 1,
1554
+ height = 2;
1249
1555
  const fields = node.fields;
1556
+
1250
1557
  for (let i = 0, l = fields.length; i < l; i++) {
1251
1558
  const field = fields[i];
1252
1559
  const fieldName = field.name;
1253
1560
  const fieldValues = field.values;
1561
+
1254
1562
  switch (fieldName) {
1255
- case "bottom":
1563
+ case 'bottom':
1564
+ // field not supported
1256
1565
  break;
1257
- case "radius":
1566
+
1567
+ case 'radius':
1258
1568
  radius = fieldValues[0];
1259
1569
  break;
1260
- case "height":
1570
+
1571
+ case 'height':
1261
1572
  height = fieldValues[0];
1262
1573
  break;
1263
- case "side":
1574
+
1575
+ case 'side':
1576
+ // field not supported
1264
1577
  break;
1265
- case "top":
1578
+
1579
+ case 'top':
1580
+ // field not supported
1266
1581
  break;
1582
+
1267
1583
  default:
1268
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
1584
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
1269
1585
  break;
1270
1586
  }
1271
1587
  }
1272
- const geometry = new THREE.CylinderGeometry(radius, radius, height, 16, 1);
1588
+
1589
+ const geometry = new CylinderGeometry(radius, radius, height, 16, 1);
1273
1590
  return geometry;
1274
1591
  }
1592
+
1275
1593
  function buildSphereNode(node) {
1276
1594
  let radius = 1;
1277
1595
  const fields = node.fields;
1596
+
1278
1597
  for (let i = 0, l = fields.length; i < l; i++) {
1279
1598
  const field = fields[i];
1280
1599
  const fieldName = field.name;
1281
1600
  const fieldValues = field.values;
1601
+
1282
1602
  switch (fieldName) {
1283
- case "radius":
1603
+ case 'radius':
1284
1604
  radius = fieldValues[0];
1285
1605
  break;
1606
+
1286
1607
  default:
1287
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
1608
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
1288
1609
  break;
1289
1610
  }
1290
1611
  }
1291
- const geometry = new THREE.SphereGeometry(radius, 16, 16);
1612
+
1613
+ const geometry = new SphereGeometry(radius, 16, 16);
1292
1614
  return geometry;
1293
1615
  }
1616
+
1294
1617
  function buildElevationGridNode(node) {
1295
1618
  let color;
1296
1619
  let normal;
@@ -1306,87 +1629,118 @@ class VRMLLoader extends THREE.Loader {
1306
1629
  let xSpacing = 1;
1307
1630
  let zSpacing = 1;
1308
1631
  const fields = node.fields;
1632
+
1309
1633
  for (let i = 0, l = fields.length; i < l; i++) {
1310
1634
  const field = fields[i];
1311
1635
  const fieldName = field.name;
1312
1636
  const fieldValues = field.values;
1637
+
1313
1638
  switch (fieldName) {
1314
- case "color":
1639
+ case 'color':
1315
1640
  const colorNode = fieldValues[0];
1641
+
1316
1642
  if (colorNode !== null) {
1317
1643
  color = getNode(colorNode);
1318
1644
  }
1645
+
1319
1646
  break;
1320
- case "normal":
1647
+
1648
+ case 'normal':
1321
1649
  const normalNode = fieldValues[0];
1650
+
1322
1651
  if (normalNode !== null) {
1323
1652
  normal = getNode(normalNode);
1324
1653
  }
1654
+
1325
1655
  break;
1326
- case "texCoord":
1656
+
1657
+ case 'texCoord':
1327
1658
  const texCoordNode = fieldValues[0];
1659
+
1328
1660
  if (texCoordNode !== null) {
1329
1661
  texCoord = getNode(texCoordNode);
1330
1662
  }
1663
+
1331
1664
  break;
1332
- case "height":
1665
+
1666
+ case 'height':
1333
1667
  height = fieldValues;
1334
1668
  break;
1335
- case "ccw":
1669
+
1670
+ case 'ccw':
1336
1671
  ccw = fieldValues[0];
1337
1672
  break;
1338
- case "colorPerVertex":
1673
+
1674
+ case 'colorPerVertex':
1339
1675
  colorPerVertex = fieldValues[0];
1340
1676
  break;
1341
- case "creaseAngle":
1677
+
1678
+ case 'creaseAngle':
1342
1679
  creaseAngle = fieldValues[0];
1343
1680
  break;
1344
- case "normalPerVertex":
1681
+
1682
+ case 'normalPerVertex':
1345
1683
  normalPerVertex = fieldValues[0];
1346
1684
  break;
1347
- case "solid":
1685
+
1686
+ case 'solid':
1348
1687
  solid = fieldValues[0];
1349
1688
  break;
1350
- case "xDimension":
1689
+
1690
+ case 'xDimension':
1351
1691
  xDimension = fieldValues[0];
1352
1692
  break;
1353
- case "xSpacing":
1693
+
1694
+ case 'xSpacing':
1354
1695
  xSpacing = fieldValues[0];
1355
1696
  break;
1356
- case "zDimension":
1697
+
1698
+ case 'zDimension':
1357
1699
  zDimension = fieldValues[0];
1358
1700
  break;
1359
- case "zSpacing":
1701
+
1702
+ case 'zSpacing':
1360
1703
  zSpacing = fieldValues[0];
1361
1704
  break;
1705
+
1362
1706
  default:
1363
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
1707
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
1364
1708
  break;
1365
1709
  }
1366
- }
1710
+ } // vertex data
1711
+
1712
+
1367
1713
  const vertices = [];
1368
1714
  const normals = [];
1369
1715
  const colors = [];
1370
1716
  const uvs = [];
1717
+
1371
1718
  for (let i = 0; i < zDimension; i++) {
1372
1719
  for (let j = 0; j < xDimension; j++) {
1373
- const index = i * xDimension + j;
1720
+ // compute a row major index
1721
+ const index = i * xDimension + j; // vertices
1722
+
1374
1723
  const x = xSpacing * i;
1375
1724
  const y = height[index];
1376
1725
  const z = zSpacing * j;
1377
- vertices.push(x, y, z);
1726
+ vertices.push(x, y, z); // colors
1727
+
1378
1728
  if (color && colorPerVertex === true) {
1379
1729
  const r = color[index * 3 + 0];
1380
1730
  const g = color[index * 3 + 1];
1381
1731
  const b = color[index * 3 + 2];
1382
1732
  colors.push(r, g, b);
1383
- }
1733
+ } // normals
1734
+
1735
+
1384
1736
  if (normal && normalPerVertex === true) {
1385
1737
  const xn = normal[index * 3 + 0];
1386
1738
  const yn = normal[index * 3 + 1];
1387
1739
  const zn = normal[index * 3 + 2];
1388
1740
  normals.push(xn, yn, zn);
1389
- }
1741
+ } // uvs
1742
+
1743
+
1390
1744
  if (texCoord) {
1391
1745
  const s = texCoord[index * 2 + 0];
1392
1746
  const t = texCoord[index * 2 + 1];
@@ -1395,14 +1749,19 @@ class VRMLLoader extends THREE.Loader {
1395
1749
  uvs.push(i / (xDimension - 1), j / (zDimension - 1));
1396
1750
  }
1397
1751
  }
1398
- }
1752
+ } // indices
1753
+
1754
+
1399
1755
  const indices = [];
1756
+
1400
1757
  for (let i = 0; i < xDimension - 1; i++) {
1401
1758
  for (let j = 0; j < zDimension - 1; j++) {
1759
+ // from https://tecfa.unige.ch/guides/vrml/vrml97/spec/part1/nodesRef.html#ElevationGrid
1402
1760
  const a = i + j * xDimension;
1403
1761
  const b = i + (j + 1) * xDimension;
1404
1762
  const c = i + 1 + (j + 1) * xDimension;
1405
- const d = i + 1 + j * xDimension;
1763
+ const d = i + 1 + j * xDimension; // faces
1764
+
1406
1765
  if (ccw === true) {
1407
1766
  indices.push(a, c, b);
1408
1767
  indices.push(c, a, d);
@@ -1411,11 +1770,14 @@ class VRMLLoader extends THREE.Loader {
1411
1770
  indices.push(c, d, a);
1412
1771
  }
1413
1772
  }
1414
- }
1415
- const positionAttribute = toNonIndexedAttribute(indices, new THREE.Float32BufferAttribute(vertices, 3));
1416
- const uvAttribute = toNonIndexedAttribute(indices, new THREE.Float32BufferAttribute(uvs, 2));
1773
+ } //
1774
+
1775
+
1776
+ const positionAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(vertices, 3));
1777
+ const uvAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(uvs, 2));
1417
1778
  let colorAttribute;
1418
- let normalAttribute;
1779
+ let normalAttribute; // color attribute
1780
+
1419
1781
  if (color) {
1420
1782
  if (colorPerVertex === false) {
1421
1783
  for (let i = 0; i < xDimension - 1; i++) {
@@ -1423,7 +1785,8 @@ class VRMLLoader extends THREE.Loader {
1423
1785
  const index = i + j * (xDimension - 1);
1424
1786
  const r = color[index * 3 + 0];
1425
1787
  const g = color[index * 3 + 1];
1426
- const b = color[index * 3 + 2];
1788
+ const b = color[index * 3 + 2]; // one color per quad
1789
+
1427
1790
  colors.push(r, g, b);
1428
1791
  colors.push(r, g, b);
1429
1792
  colors.push(r, g, b);
@@ -1432,11 +1795,14 @@ class VRMLLoader extends THREE.Loader {
1432
1795
  colors.push(r, g, b);
1433
1796
  }
1434
1797
  }
1435
- colorAttribute = new THREE.Float32BufferAttribute(colors, 3);
1798
+
1799
+ colorAttribute = new Float32BufferAttribute(colors, 3);
1436
1800
  } else {
1437
- colorAttribute = toNonIndexedAttribute(indices, new THREE.Float32BufferAttribute(colors, 3));
1801
+ colorAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(colors, 3));
1438
1802
  }
1439
- }
1803
+ } // normal attribute
1804
+
1805
+
1440
1806
  if (normal) {
1441
1807
  if (normalPerVertex === false) {
1442
1808
  for (let i = 0; i < xDimension - 1; i++) {
@@ -1444,7 +1810,8 @@ class VRMLLoader extends THREE.Loader {
1444
1810
  const index = i + j * (xDimension - 1);
1445
1811
  const xn = normal[index * 3 + 0];
1446
1812
  const yn = normal[index * 3 + 1];
1447
- const zn = normal[index * 3 + 2];
1813
+ const zn = normal[index * 3 + 2]; // one normal per quad
1814
+
1448
1815
  normals.push(xn, yn, zn);
1449
1816
  normals.push(xn, yn, zn);
1450
1817
  normals.push(xn, yn, zn);
@@ -1453,23 +1820,27 @@ class VRMLLoader extends THREE.Loader {
1453
1820
  normals.push(xn, yn, zn);
1454
1821
  }
1455
1822
  }
1456
- normalAttribute = new THREE.Float32BufferAttribute(normals, 3);
1823
+
1824
+ normalAttribute = new Float32BufferAttribute(normals, 3);
1457
1825
  } else {
1458
- normalAttribute = toNonIndexedAttribute(indices, new THREE.Float32BufferAttribute(normals, 3));
1826
+ normalAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(normals, 3));
1459
1827
  }
1460
1828
  } else {
1461
1829
  normalAttribute = computeNormalAttribute(indices, vertices, creaseAngle);
1462
- }
1463
- const geometry = new THREE.BufferGeometry();
1464
- geometry.setAttribute("position", positionAttribute);
1465
- geometry.setAttribute("normal", normalAttribute);
1466
- geometry.setAttribute("uv", uvAttribute);
1467
- if (colorAttribute)
1468
- geometry.setAttribute("color", colorAttribute);
1830
+ } // build geometry
1831
+
1832
+
1833
+ const geometry = new BufferGeometry();
1834
+ geometry.setAttribute('position', positionAttribute);
1835
+ geometry.setAttribute('normal', normalAttribute);
1836
+ geometry.setAttribute('uv', uvAttribute);
1837
+ if (colorAttribute) geometry.setAttribute('color', colorAttribute); // "solid" influences the material so let's store it for later use
1838
+
1469
1839
  geometry._solid = solid;
1470
- geometry._type = "mesh";
1840
+ geometry._type = 'mesh';
1471
1841
  return geometry;
1472
1842
  }
1843
+
1473
1844
  function buildExtrusionNode(node) {
1474
1845
  let crossSection = [1, 1, 1, -1, -1, -1, -1, 1, 1, 1];
1475
1846
  let spine = [0, 0, 0, 0, 1, 0];
@@ -1481,52 +1852,69 @@ class VRMLLoader extends THREE.Loader {
1481
1852
  let endCap = true;
1482
1853
  let solid = true;
1483
1854
  const fields = node.fields;
1855
+
1484
1856
  for (let i = 0, l = fields.length; i < l; i++) {
1485
1857
  const field = fields[i];
1486
1858
  const fieldName = field.name;
1487
1859
  const fieldValues = field.values;
1860
+
1488
1861
  switch (fieldName) {
1489
- case "beginCap":
1862
+ case 'beginCap':
1490
1863
  beginCap = fieldValues[0];
1491
1864
  break;
1492
- case "ccw":
1865
+
1866
+ case 'ccw':
1493
1867
  ccw = fieldValues[0];
1494
1868
  break;
1495
- case "convex":
1869
+
1870
+ case 'convex':
1871
+ // field not supported
1496
1872
  break;
1497
- case "creaseAngle":
1873
+
1874
+ case 'creaseAngle':
1498
1875
  creaseAngle = fieldValues[0];
1499
1876
  break;
1500
- case "crossSection":
1877
+
1878
+ case 'crossSection':
1501
1879
  crossSection = fieldValues;
1502
1880
  break;
1503
- case "endCap":
1881
+
1882
+ case 'endCap':
1504
1883
  endCap = fieldValues[0];
1505
1884
  break;
1506
- case "orientation":
1885
+
1886
+ case 'orientation':
1507
1887
  orientation = fieldValues;
1508
1888
  break;
1509
- case "scale":
1889
+
1890
+ case 'scale':
1510
1891
  scale = fieldValues;
1511
1892
  break;
1512
- case "solid":
1893
+
1894
+ case 'solid':
1513
1895
  solid = fieldValues[0];
1514
1896
  break;
1515
- case "spine":
1516
- spine = fieldValues;
1897
+
1898
+ case 'spine':
1899
+ spine = fieldValues; // only extrusion along the Y-axis are supported so far
1900
+
1517
1901
  break;
1902
+
1518
1903
  default:
1519
- console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
1904
+ console.warn('THREE.VRMLLoader: Unknown field:', fieldName);
1520
1905
  break;
1521
1906
  }
1522
1907
  }
1523
- const crossSectionClosed = crossSection[0] === crossSection[crossSection.length - 2] && crossSection[1] === crossSection[crossSection.length - 1];
1908
+
1909
+ const crossSectionClosed = crossSection[0] === crossSection[crossSection.length - 2] && crossSection[1] === crossSection[crossSection.length - 1]; // vertices
1910
+
1524
1911
  const vertices = [];
1525
- const spineVector = new THREE.Vector3();
1526
- const scaling = new THREE.Vector3();
1527
- const axis = new THREE.Vector3();
1528
- const vertex = new THREE.Vector3();
1529
- const quaternion = new THREE.Quaternion();
1912
+ const spineVector = new Vector3();
1913
+ const scaling = new Vector3();
1914
+ const axis = new Vector3();
1915
+ const vertex = new Vector3();
1916
+ const quaternion = new Quaternion();
1917
+
1530
1918
  for (let i = 0, j = 0, o = 0, il = spine.length; i < il; i += 3, j += 2, o += 4) {
1531
1919
  spineVector.fromArray(spine, i);
1532
1920
  scaling.x = scale ? scale[j + 0] : 1;
@@ -1536,30 +1924,39 @@ class VRMLLoader extends THREE.Loader {
1536
1924
  axis.y = orientation ? orientation[o + 1] : 0;
1537
1925
  axis.z = orientation ? orientation[o + 2] : 1;
1538
1926
  const angle = orientation ? orientation[o + 3] : 0;
1927
+
1539
1928
  for (let k = 0, kl = crossSection.length; k < kl; k += 2) {
1540
1929
  vertex.x = crossSection[k + 0];
1541
1930
  vertex.y = 0;
1542
- vertex.z = crossSection[k + 1];
1543
- vertex.multiply(scaling);
1931
+ vertex.z = crossSection[k + 1]; // scale
1932
+
1933
+ vertex.multiply(scaling); // rotate
1934
+
1544
1935
  quaternion.setFromAxisAngle(axis, angle);
1545
- vertex.applyQuaternion(quaternion);
1936
+ vertex.applyQuaternion(quaternion); // translate
1937
+
1546
1938
  vertex.add(spineVector);
1547
1939
  vertices.push(vertex.x, vertex.y, vertex.z);
1548
1940
  }
1549
- }
1941
+ } // indices
1942
+
1943
+
1550
1944
  const indices = [];
1551
1945
  const spineCount = spine.length / 3;
1552
1946
  const crossSectionCount = crossSection.length / 2;
1947
+
1553
1948
  for (let i = 0; i < spineCount - 1; i++) {
1554
1949
  for (let j = 0; j < crossSectionCount - 1; j++) {
1555
1950
  const a = j + i * crossSectionCount;
1556
1951
  let b = j + 1 + i * crossSectionCount;
1557
1952
  const c = j + (i + 1) * crossSectionCount;
1558
1953
  let d = j + 1 + (i + 1) * crossSectionCount;
1954
+
1559
1955
  if (j === crossSectionCount - 2 && crossSectionClosed === true) {
1560
1956
  b = i * crossSectionCount;
1561
1957
  d = (i + 1) * crossSectionCount;
1562
1958
  }
1959
+
1563
1960
  if (ccw === true) {
1564
1961
  indices.push(a, b, c);
1565
1962
  indices.push(c, b, d);
@@ -1568,18 +1965,25 @@ class VRMLLoader extends THREE.Loader {
1568
1965
  indices.push(c, d, b);
1569
1966
  }
1570
1967
  }
1571
- }
1968
+ } // triangulate cap
1969
+
1970
+
1572
1971
  if (beginCap === true || endCap === true) {
1573
1972
  const contour = [];
1973
+
1574
1974
  for (let i = 0, l = crossSection.length; i < l; i += 2) {
1575
- contour.push(new THREE.Vector2(crossSection[i], crossSection[i + 1]));
1975
+ contour.push(new Vector2(crossSection[i], crossSection[i + 1]));
1576
1976
  }
1577
- const faces = THREE.ShapeUtils.triangulateShape(contour, []);
1977
+
1978
+ const faces = ShapeUtils.triangulateShape(contour, []);
1578
1979
  const capIndices = [];
1980
+
1579
1981
  for (let i = 0, l = faces.length; i < l; i++) {
1580
1982
  const face = faces[i];
1581
1983
  capIndices.push(face[0], face[1], face[2]);
1582
- }
1984
+ } // begin cap
1985
+
1986
+
1583
1987
  if (beginCap === true) {
1584
1988
  for (let i = 0, l = capIndices.length; i < l; i += 3) {
1585
1989
  if (ccw === true) {
@@ -1588,185 +1992,228 @@ class VRMLLoader extends THREE.Loader {
1588
1992
  indices.push(capIndices[i + 0], capIndices[i + 2], capIndices[i + 1]);
1589
1993
  }
1590
1994
  }
1591
- }
1995
+ } // end cap
1996
+
1997
+
1592
1998
  if (endCap === true) {
1593
- const indexOffset = crossSectionCount * (spineCount - 1);
1999
+ const indexOffset = crossSectionCount * (spineCount - 1); // references to the first vertex of the last cross section
2000
+
1594
2001
  for (let i = 0, l = capIndices.length; i < l; i += 3) {
1595
2002
  if (ccw === true) {
1596
- indices.push(
1597
- indexOffset + capIndices[i + 0],
1598
- indexOffset + capIndices[i + 2],
1599
- indexOffset + capIndices[i + 1]
1600
- );
2003
+ indices.push(indexOffset + capIndices[i + 0], indexOffset + capIndices[i + 2], indexOffset + capIndices[i + 1]);
1601
2004
  } else {
1602
- indices.push(
1603
- indexOffset + capIndices[i + 0],
1604
- indexOffset + capIndices[i + 1],
1605
- indexOffset + capIndices[i + 2]
1606
- );
2005
+ indices.push(indexOffset + capIndices[i + 0], indexOffset + capIndices[i + 1], indexOffset + capIndices[i + 2]);
1607
2006
  }
1608
2007
  }
1609
2008
  }
1610
2009
  }
1611
- const positionAttribute = toNonIndexedAttribute(indices, new THREE.Float32BufferAttribute(vertices, 3));
2010
+
2011
+ const positionAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(vertices, 3));
1612
2012
  const normalAttribute = computeNormalAttribute(indices, vertices, creaseAngle);
1613
- const geometry = new THREE.BufferGeometry();
1614
- geometry.setAttribute("position", positionAttribute);
1615
- geometry.setAttribute("normal", normalAttribute);
2013
+ const geometry = new BufferGeometry();
2014
+ geometry.setAttribute('position', positionAttribute);
2015
+ geometry.setAttribute('normal', normalAttribute); // no uvs yet
2016
+ // "solid" influences the material so let's store it for later use
2017
+
1616
2018
  geometry._solid = solid;
1617
- geometry._type = "mesh";
2019
+ geometry._type = 'mesh';
1618
2020
  return geometry;
1619
- }
2021
+ } // helper functions
2022
+
2023
+
1620
2024
  function resolveUSE(identifier) {
1621
2025
  const node = nodeMap[identifier];
1622
- const build = getNode(node);
2026
+ const build = getNode(node); // because the same 3D objects can have different transformations, it's necessary to clone them.
2027
+ // materials can be influenced by the geometry (e.g. vertex normals). cloning is necessary to avoid
2028
+ // any side effects
2029
+
1623
2030
  return build.isObject3D || build.isMaterial ? build.clone() : build;
1624
2031
  }
2032
+
1625
2033
  function parseFieldChildren(children, owner) {
1626
2034
  for (let i = 0, l = children.length; i < l; i++) {
1627
2035
  const object = getNode(children[i]);
1628
- if (object instanceof THREE.Object3D)
1629
- owner.add(object);
2036
+ if (object instanceof Object3D) owner.add(object);
1630
2037
  }
1631
2038
  }
2039
+
1632
2040
  function triangulateFaceIndex(index, ccw) {
1633
- const indices = [];
2041
+ const indices = []; // since face defintions can have more than three vertices, it's necessary to
2042
+ // perform a simple triangulation
2043
+
1634
2044
  let start = 0;
2045
+
1635
2046
  for (let i = 0, l = index.length; i < l; i++) {
1636
2047
  const i1 = index[start];
1637
2048
  const i2 = index[i + (ccw ? 1 : 2)];
1638
2049
  const i3 = index[i + (ccw ? 2 : 1)];
1639
- indices.push(i1, i2, i3);
2050
+ indices.push(i1, i2, i3); // an index of -1 indicates that the current face has ended and the next one begins
2051
+
1640
2052
  if (index[i + 3] === -1 || i + 3 >= l) {
1641
2053
  i += 3;
1642
2054
  start = i + 1;
1643
2055
  }
1644
2056
  }
2057
+
1645
2058
  return indices;
1646
2059
  }
1647
- function triangulateFaceData(data2, index) {
2060
+
2061
+ function triangulateFaceData(data, index) {
1648
2062
  const triangulatedData = [];
1649
2063
  let start = 0;
2064
+
1650
2065
  for (let i = 0, l = index.length; i < l; i++) {
1651
2066
  const stride = start * 3;
1652
- const x = data2[stride];
1653
- const y = data2[stride + 1];
1654
- const z = data2[stride + 2];
1655
- triangulatedData.push(x, y, z);
2067
+ const x = data[stride];
2068
+ const y = data[stride + 1];
2069
+ const z = data[stride + 2];
2070
+ triangulatedData.push(x, y, z); // an index of -1 indicates that the current face has ended and the next one begins
2071
+
1656
2072
  if (index[i + 3] === -1 || i + 3 >= l) {
1657
2073
  i += 3;
1658
2074
  start++;
1659
2075
  }
1660
2076
  }
2077
+
1661
2078
  return triangulatedData;
1662
2079
  }
1663
- function flattenData(data2, index) {
1664
- const flattenData2 = [];
2080
+
2081
+ function flattenData(data, index) {
2082
+ const flattenData = [];
2083
+
1665
2084
  for (let i = 0, l = index.length; i < l; i++) {
1666
2085
  const i1 = index[i];
1667
2086
  const stride = i1 * 3;
1668
- const x = data2[stride];
1669
- const y = data2[stride + 1];
1670
- const z = data2[stride + 2];
1671
- flattenData2.push(x, y, z);
2087
+ const x = data[stride];
2088
+ const y = data[stride + 1];
2089
+ const z = data[stride + 2];
2090
+ flattenData.push(x, y, z);
1672
2091
  }
1673
- return flattenData2;
2092
+
2093
+ return flattenData;
1674
2094
  }
2095
+
1675
2096
  function expandLineIndex(index) {
1676
2097
  const indices = [];
2098
+
1677
2099
  for (let i = 0, l = index.length; i < l; i++) {
1678
2100
  const i1 = index[i];
1679
2101
  const i2 = index[i + 1];
1680
- indices.push(i1, i2);
2102
+ indices.push(i1, i2); // an index of -1 indicates that the current line has ended and the next one begins
2103
+
1681
2104
  if (index[i + 2] === -1 || i + 2 >= l) {
1682
2105
  i += 2;
1683
2106
  }
1684
2107
  }
2108
+
1685
2109
  return indices;
1686
2110
  }
1687
- function expandLineData(data2, index) {
2111
+
2112
+ function expandLineData(data, index) {
1688
2113
  const triangulatedData = [];
1689
2114
  let start = 0;
2115
+
1690
2116
  for (let i = 0, l = index.length; i < l; i++) {
1691
2117
  const stride = start * 3;
1692
- const x = data2[stride];
1693
- const y = data2[stride + 1];
1694
- const z = data2[stride + 2];
1695
- triangulatedData.push(x, y, z);
2118
+ const x = data[stride];
2119
+ const y = data[stride + 1];
2120
+ const z = data[stride + 2];
2121
+ triangulatedData.push(x, y, z); // an index of -1 indicates that the current line has ended and the next one begins
2122
+
1696
2123
  if (index[i + 2] === -1 || i + 2 >= l) {
1697
2124
  i += 2;
1698
2125
  start++;
1699
2126
  }
1700
2127
  }
2128
+
1701
2129
  return triangulatedData;
1702
2130
  }
1703
- const vA = new THREE.Vector3();
1704
- const vB = new THREE.Vector3();
1705
- const vC = new THREE.Vector3();
1706
- const uvA = new THREE.Vector2();
1707
- const uvB = new THREE.Vector2();
1708
- const uvC = new THREE.Vector2();
1709
- function computeAttributeFromIndexedData(coordIndex, index, data2, itemSize) {
1710
- const array = [];
2131
+
2132
+ const vA = new Vector3();
2133
+ const vB = new Vector3();
2134
+ const vC = new Vector3();
2135
+ const uvA = new Vector2();
2136
+ const uvB = new Vector2();
2137
+ const uvC = new Vector2();
2138
+
2139
+ function computeAttributeFromIndexedData(coordIndex, index, data, itemSize) {
2140
+ const array = []; // we use the coordIndex.length as delimiter since normalIndex must contain at least as many indices
2141
+
1711
2142
  for (let i = 0, l = coordIndex.length; i < l; i += 3) {
1712
2143
  const a = index[i];
1713
2144
  const b = index[i + 1];
1714
2145
  const c = index[i + 2];
2146
+
1715
2147
  if (itemSize === 2) {
1716
- uvA.fromArray(data2, a * itemSize);
1717
- uvB.fromArray(data2, b * itemSize);
1718
- uvC.fromArray(data2, c * itemSize);
2148
+ uvA.fromArray(data, a * itemSize);
2149
+ uvB.fromArray(data, b * itemSize);
2150
+ uvC.fromArray(data, c * itemSize);
1719
2151
  array.push(uvA.x, uvA.y);
1720
2152
  array.push(uvB.x, uvB.y);
1721
2153
  array.push(uvC.x, uvC.y);
1722
2154
  } else {
1723
- vA.fromArray(data2, a * itemSize);
1724
- vB.fromArray(data2, b * itemSize);
1725
- vC.fromArray(data2, c * itemSize);
2155
+ vA.fromArray(data, a * itemSize);
2156
+ vB.fromArray(data, b * itemSize);
2157
+ vC.fromArray(data, c * itemSize);
1726
2158
  array.push(vA.x, vA.y, vA.z);
1727
2159
  array.push(vB.x, vB.y, vB.z);
1728
2160
  array.push(vC.x, vC.y, vC.z);
1729
2161
  }
1730
2162
  }
1731
- return new THREE.Float32BufferAttribute(array, itemSize);
2163
+
2164
+ return new Float32BufferAttribute(array, itemSize);
1732
2165
  }
2166
+
1733
2167
  function computeAttributeFromFaceData(index, faceData) {
1734
2168
  const array = [];
2169
+
1735
2170
  for (let i = 0, j = 0, l = index.length; i < l; i += 3, j++) {
1736
2171
  vA.fromArray(faceData, j * 3);
1737
2172
  array.push(vA.x, vA.y, vA.z);
1738
2173
  array.push(vA.x, vA.y, vA.z);
1739
2174
  array.push(vA.x, vA.y, vA.z);
1740
2175
  }
1741
- return new THREE.Float32BufferAttribute(array, 3);
2176
+
2177
+ return new Float32BufferAttribute(array, 3);
1742
2178
  }
2179
+
1743
2180
  function computeAttributeFromLineData(index, lineData) {
1744
2181
  const array = [];
2182
+
1745
2183
  for (let i = 0, j = 0, l = index.length; i < l; i += 2, j++) {
1746
2184
  vA.fromArray(lineData, j * 3);
1747
2185
  array.push(vA.x, vA.y, vA.z);
1748
2186
  array.push(vA.x, vA.y, vA.z);
1749
2187
  }
1750
- return new THREE.Float32BufferAttribute(array, 3);
2188
+
2189
+ return new Float32BufferAttribute(array, 3);
1751
2190
  }
2191
+
1752
2192
  function toNonIndexedAttribute(indices, attribute) {
1753
2193
  const array = attribute.array;
1754
2194
  const itemSize = attribute.itemSize;
1755
2195
  const array2 = new array.constructor(indices.length * itemSize);
1756
- let index = 0, index2 = 0;
2196
+ let index = 0,
2197
+ index2 = 0;
2198
+
1757
2199
  for (let i = 0, l = indices.length; i < l; i++) {
1758
2200
  index = indices[i] * itemSize;
2201
+
1759
2202
  for (let j = 0; j < itemSize; j++) {
1760
2203
  array2[index2++] = array[index++];
1761
2204
  }
1762
2205
  }
1763
- return new THREE.Float32BufferAttribute(array2, itemSize);
2206
+
2207
+ return new Float32BufferAttribute(array2, itemSize);
1764
2208
  }
1765
- const ab = new THREE.Vector3();
1766
- const cb = new THREE.Vector3();
2209
+
2210
+ const ab = new Vector3();
2211
+ const cb = new Vector3();
2212
+
1767
2213
  function computeNormalAttribute(index, coord, creaseAngle) {
1768
2214
  const faces = [];
1769
- const vertexNormals = {};
2215
+ const vertexNormals = {}; // prepare face and raw vertex normals
2216
+
1770
2217
  for (let i = 0, l = index.length; i < l; i += 3) {
1771
2218
  const a = index[i];
1772
2219
  const b = index[i + 1];
@@ -1780,18 +2227,18 @@ class VRMLLoader extends THREE.Loader {
1780
2227
  cb.cross(ab);
1781
2228
  cb.normalize();
1782
2229
  face.normal.copy(cb);
1783
- if (vertexNormals[a] === void 0)
1784
- vertexNormals[a] = [];
1785
- if (vertexNormals[b] === void 0)
1786
- vertexNormals[b] = [];
1787
- if (vertexNormals[c] === void 0)
1788
- vertexNormals[c] = [];
2230
+ if (vertexNormals[a] === undefined) vertexNormals[a] = [];
2231
+ if (vertexNormals[b] === undefined) vertexNormals[b] = [];
2232
+ if (vertexNormals[c] === undefined) vertexNormals[c] = [];
1789
2233
  vertexNormals[a].push(face.normal);
1790
2234
  vertexNormals[b].push(face.normal);
1791
2235
  vertexNormals[c].push(face.normal);
1792
2236
  faces.push(face);
1793
- }
2237
+ } // compute vertex normals and build final geometry
2238
+
2239
+
1794
2240
  const normals = [];
2241
+
1795
2242
  for (let i = 0, l = faces.length; i < l; i++) {
1796
2243
  const face = faces[i];
1797
2244
  const nA = weightedNormal(vertexNormals[face.a], face.normal, creaseAngle);
@@ -1804,10 +2251,13 @@ class VRMLLoader extends THREE.Loader {
1804
2251
  normals.push(nB.x, nB.y, nB.z);
1805
2252
  normals.push(nC.x, nC.y, nC.z);
1806
2253
  }
1807
- return new THREE.Float32BufferAttribute(normals, 3);
2254
+
2255
+ return new Float32BufferAttribute(normals, 3);
1808
2256
  }
2257
+
1809
2258
  function weightedNormal(normals, vector, creaseAngle) {
1810
- const normal = new THREE.Vector3();
2259
+ const normal = new Vector3();
2260
+
1811
2261
  if (creaseAngle === 0) {
1812
2262
  normal.copy(vector);
1813
2263
  } else {
@@ -1817,257 +2267,284 @@ class VRMLLoader extends THREE.Loader {
1817
2267
  }
1818
2268
  }
1819
2269
  }
2270
+
1820
2271
  return normal.normalize();
1821
2272
  }
2273
+
1822
2274
  function toColorArray(colors) {
1823
2275
  const array = [];
2276
+
1824
2277
  for (let i = 0, l = colors.length; i < l; i += 3) {
1825
- array.push(new THREE.Color(colors[i], colors[i + 1], colors[i + 2]));
2278
+ array.push(new Color(colors[i], colors[i + 1], colors[i + 2]));
1826
2279
  }
2280
+
1827
2281
  return array;
1828
2282
  }
2283
+ /**
2284
+ * Vertically paints the faces interpolating between the
2285
+ * specified colors at the specified angels. This is used for the Background
2286
+ * node, but could be applied to other nodes with multiple faces as well.
2287
+ *
2288
+ * When used with the Background node, default is directionIsDown is true if
2289
+ * interpolating the skyColor down from the Zenith. When interpolationg up from
2290
+ * the Nadir i.e. interpolating the groundColor, the directionIsDown is false.
2291
+ *
2292
+ * The first angle is never specified, it is the Zenith (0 rad). Angles are specified
2293
+ * in radians. The geometry is thought a sphere, but could be anything. The color interpolation
2294
+ * is linear along the Y axis in any case.
2295
+ *
2296
+ * You must specify one more color than you have angles at the beginning of the colors array.
2297
+ * This is the color of the Zenith (the top of the shape).
2298
+ *
2299
+ * @param {BufferGeometry} geometry
2300
+ * @param {number} radius
2301
+ * @param {array} angles
2302
+ * @param {array} colors
2303
+ * @param {boolean} topDown - Whether to work top down or bottom up.
2304
+ */
2305
+
2306
+
1829
2307
  function paintFaces(geometry, radius, angles, colors, topDown) {
2308
+ // compute threshold values
1830
2309
  const thresholds = [];
1831
2310
  const startAngle = topDown === true ? 0 : Math.PI;
2311
+
1832
2312
  for (let i = 0, l = colors.length; i < l; i++) {
1833
2313
  let angle = i === 0 ? 0 : angles[i - 1];
1834
2314
  angle = topDown === true ? angle : startAngle - angle;
1835
- const point = new THREE.Vector3();
2315
+ const point = new Vector3();
1836
2316
  point.setFromSphericalCoords(radius, angle, 0);
1837
2317
  thresholds.push(point);
1838
- }
2318
+ } // generate vertex colors
2319
+
2320
+
1839
2321
  const indices = geometry.index;
1840
2322
  const positionAttribute = geometry.attributes.position;
1841
- const colorAttribute = new THREE.BufferAttribute(new Float32Array(geometry.attributes.position.count * 3), 3);
1842
- const position = new THREE.Vector3();
1843
- const color = new THREE.Color();
2323
+ const colorAttribute = new BufferAttribute(new Float32Array(geometry.attributes.position.count * 3), 3);
2324
+ const position = new Vector3();
2325
+ const color = new Color();
2326
+
1844
2327
  for (let i = 0; i < indices.count; i++) {
1845
2328
  const index = indices.getX(i);
1846
2329
  position.fromBufferAttribute(positionAttribute, index);
1847
2330
  let thresholdIndexA, thresholdIndexB;
1848
2331
  let t = 1;
2332
+
1849
2333
  for (let j = 1; j < thresholds.length; j++) {
1850
2334
  thresholdIndexA = j - 1;
1851
2335
  thresholdIndexB = j;
1852
2336
  const thresholdA = thresholds[thresholdIndexA];
1853
2337
  const thresholdB = thresholds[thresholdIndexB];
2338
+
1854
2339
  if (topDown === true) {
2340
+ // interpolation for sky color
1855
2341
  if (position.y <= thresholdA.y && position.y > thresholdB.y) {
1856
2342
  t = Math.abs(thresholdA.y - position.y) / Math.abs(thresholdA.y - thresholdB.y);
1857
2343
  break;
1858
2344
  }
1859
2345
  } else {
2346
+ // interpolation for ground color
1860
2347
  if (position.y >= thresholdA.y && position.y < thresholdB.y) {
1861
2348
  t = Math.abs(thresholdA.y - position.y) / Math.abs(thresholdA.y - thresholdB.y);
1862
2349
  break;
1863
2350
  }
1864
2351
  }
1865
2352
  }
2353
+
1866
2354
  const colorA = colors[thresholdIndexA];
1867
2355
  const colorB = colors[thresholdIndexB];
1868
2356
  color.copy(colorA).lerp(colorB, t);
1869
2357
  colorAttribute.setXYZ(index, color.r, color.g, color.b);
1870
2358
  }
1871
- geometry.setAttribute("color", colorAttribute);
1872
- }
1873
- const textureLoader = new THREE.TextureLoader(this.manager);
1874
- textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);
1875
- if (data.indexOf("#VRML V2.0") === -1) {
1876
- throw Error("THREE.VRMLLexer: Version of VRML asset not supported.");
1877
- }
1878
- const tree = generateVRMLTree(data);
2359
+
2360
+ geometry.setAttribute('color', colorAttribute);
2361
+ } //
2362
+
2363
+
2364
+ const textureLoader = new TextureLoader(this.manager);
2365
+ textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin); // check version (only 2.0 is supported)
2366
+
2367
+ if (data.indexOf('#VRML V2.0') === -1) {
2368
+ throw Error('THREE.VRMLLexer: Version of VRML asset not supported.');
2369
+ } // create JSON representing the tree structure of the VRML asset
2370
+
2371
+
2372
+ const tree = generateVRMLTree(data); // parse the tree structure to a three.js scene
2373
+
1879
2374
  const scene = parseTree(tree);
1880
2375
  return scene;
1881
2376
  }
2377
+
1882
2378
  }
2379
+
1883
2380
  class VRMLLexer {
1884
2381
  constructor(tokens) {
1885
- this.lexer = new chevrotain.Lexer(tokens);
2382
+ this.lexer = new Lexer(tokens); // eslint-disable-line no-undef
1886
2383
  }
2384
+
1887
2385
  lex(inputText) {
1888
2386
  const lexingResult = this.lexer.tokenize(inputText);
2387
+
1889
2388
  if (lexingResult.errors.length > 0) {
1890
2389
  console.error(lexingResult.errors);
1891
- throw Error("THREE.VRMLLexer: Lexing errors detected.");
2390
+ throw Error('THREE.VRMLLexer: Lexing errors detected.');
1892
2391
  }
2392
+
1893
2393
  return lexingResult;
1894
2394
  }
2395
+
1895
2396
  }
1896
- class VRMLParser extends chevrotain.CstParser {
2397
+
2398
+ class VRMLParser extends CstParser {
1897
2399
  constructor(tokenVocabulary) {
1898
2400
  super(tokenVocabulary);
1899
2401
  const $ = this;
1900
- const Version = tokenVocabulary["Version"];
1901
- const LCurly = tokenVocabulary["LCurly"];
1902
- const RCurly = tokenVocabulary["RCurly"];
1903
- const LSquare = tokenVocabulary["LSquare"];
1904
- const RSquare = tokenVocabulary["RSquare"];
1905
- const Identifier = tokenVocabulary["Identifier"];
1906
- const RouteIdentifier = tokenVocabulary["RouteIdentifier"];
1907
- const StringLiteral = tokenVocabulary["StringLiteral"];
1908
- const HexLiteral = tokenVocabulary["HexLiteral"];
1909
- const NumberLiteral = tokenVocabulary["NumberLiteral"];
1910
- const TrueLiteral = tokenVocabulary["TrueLiteral"];
1911
- const FalseLiteral = tokenVocabulary["FalseLiteral"];
1912
- const NullLiteral = tokenVocabulary["NullLiteral"];
1913
- const DEF = tokenVocabulary["DEF"];
1914
- const USE = tokenVocabulary["USE"];
1915
- const ROUTE = tokenVocabulary["ROUTE"];
1916
- const TO = tokenVocabulary["TO"];
1917
- const NodeName = tokenVocabulary["NodeName"];
1918
- $.RULE("vrml", function() {
2402
+ const Version = tokenVocabulary['Version'];
2403
+ const LCurly = tokenVocabulary['LCurly'];
2404
+ const RCurly = tokenVocabulary['RCurly'];
2405
+ const LSquare = tokenVocabulary['LSquare'];
2406
+ const RSquare = tokenVocabulary['RSquare'];
2407
+ const Identifier = tokenVocabulary['Identifier'];
2408
+ const RouteIdentifier = tokenVocabulary['RouteIdentifier'];
2409
+ const StringLiteral = tokenVocabulary['StringLiteral'];
2410
+ const HexLiteral = tokenVocabulary['HexLiteral'];
2411
+ const NumberLiteral = tokenVocabulary['NumberLiteral'];
2412
+ const TrueLiteral = tokenVocabulary['TrueLiteral'];
2413
+ const FalseLiteral = tokenVocabulary['FalseLiteral'];
2414
+ const NullLiteral = tokenVocabulary['NullLiteral'];
2415
+ const DEF = tokenVocabulary['DEF'];
2416
+ const USE = tokenVocabulary['USE'];
2417
+ const ROUTE = tokenVocabulary['ROUTE'];
2418
+ const TO = tokenVocabulary['TO'];
2419
+ const NodeName = tokenVocabulary['NodeName'];
2420
+ $.RULE('vrml', function () {
1919
2421
  $.SUBRULE($.version);
1920
- $.AT_LEAST_ONE(function() {
2422
+ $.AT_LEAST_ONE(function () {
1921
2423
  $.SUBRULE($.node);
1922
2424
  });
1923
- $.MANY(function() {
2425
+ $.MANY(function () {
1924
2426
  $.SUBRULE($.route);
1925
2427
  });
1926
2428
  });
1927
- $.RULE("version", function() {
2429
+ $.RULE('version', function () {
1928
2430
  $.CONSUME(Version);
1929
2431
  });
1930
- $.RULE("node", function() {
1931
- $.OPTION(function() {
2432
+ $.RULE('node', function () {
2433
+ $.OPTION(function () {
1932
2434
  $.SUBRULE($.def);
1933
2435
  });
1934
2436
  $.CONSUME(NodeName);
1935
2437
  $.CONSUME(LCurly);
1936
- $.MANY(function() {
2438
+ $.MANY(function () {
1937
2439
  $.SUBRULE($.field);
1938
2440
  });
1939
2441
  $.CONSUME(RCurly);
1940
2442
  });
1941
- $.RULE("field", function() {
2443
+ $.RULE('field', function () {
1942
2444
  $.CONSUME(Identifier);
1943
- $.OR2([
1944
- {
1945
- ALT: function() {
1946
- $.SUBRULE($.singleFieldValue);
1947
- }
1948
- },
1949
- {
1950
- ALT: function() {
1951
- $.SUBRULE($.multiFieldValue);
1952
- }
2445
+ $.OR2([{
2446
+ ALT: function () {
2447
+ $.SUBRULE($.singleFieldValue);
1953
2448
  }
1954
- ]);
2449
+ }, {
2450
+ ALT: function () {
2451
+ $.SUBRULE($.multiFieldValue);
2452
+ }
2453
+ }]);
1955
2454
  });
1956
- $.RULE("def", function() {
2455
+ $.RULE('def', function () {
1957
2456
  $.CONSUME(DEF);
1958
- $.OR([
1959
- {
1960
- ALT: function() {
1961
- $.CONSUME(Identifier);
1962
- }
1963
- },
1964
- {
1965
- ALT: function() {
1966
- $.CONSUME(NodeName);
1967
- }
2457
+ $.OR([{
2458
+ ALT: function () {
2459
+ $.CONSUME(Identifier);
2460
+ }
2461
+ }, {
2462
+ ALT: function () {
2463
+ $.CONSUME(NodeName);
1968
2464
  }
1969
- ]);
2465
+ }]);
1970
2466
  });
1971
- $.RULE("use", function() {
2467
+ $.RULE('use', function () {
1972
2468
  $.CONSUME(USE);
1973
- $.OR([
1974
- {
1975
- ALT: function() {
1976
- $.CONSUME(Identifier);
1977
- }
1978
- },
1979
- {
1980
- ALT: function() {
1981
- $.CONSUME(NodeName);
1982
- }
2469
+ $.OR([{
2470
+ ALT: function () {
2471
+ $.CONSUME(Identifier);
2472
+ }
2473
+ }, {
2474
+ ALT: function () {
2475
+ $.CONSUME(NodeName);
1983
2476
  }
1984
- ]);
2477
+ }]);
1985
2478
  });
1986
- $.RULE("singleFieldValue", function() {
1987
- $.AT_LEAST_ONE(function() {
1988
- $.OR([
1989
- {
1990
- ALT: function() {
1991
- $.SUBRULE($.node);
1992
- }
1993
- },
1994
- {
1995
- ALT: function() {
1996
- $.SUBRULE($.use);
1997
- }
1998
- },
1999
- {
2000
- ALT: function() {
2001
- $.CONSUME(StringLiteral);
2002
- }
2003
- },
2004
- {
2005
- ALT: function() {
2006
- $.CONSUME(HexLiteral);
2007
- }
2008
- },
2009
- {
2010
- ALT: function() {
2011
- $.CONSUME(NumberLiteral);
2012
- }
2013
- },
2014
- {
2015
- ALT: function() {
2016
- $.CONSUME(TrueLiteral);
2017
- }
2018
- },
2019
- {
2020
- ALT: function() {
2021
- $.CONSUME(FalseLiteral);
2022
- }
2023
- },
2024
- {
2025
- ALT: function() {
2026
- $.CONSUME(NullLiteral);
2027
- }
2479
+ $.RULE('singleFieldValue', function () {
2480
+ $.AT_LEAST_ONE(function () {
2481
+ $.OR([{
2482
+ ALT: function () {
2483
+ $.SUBRULE($.node);
2484
+ }
2485
+ }, {
2486
+ ALT: function () {
2487
+ $.SUBRULE($.use);
2488
+ }
2489
+ }, {
2490
+ ALT: function () {
2491
+ $.CONSUME(StringLiteral);
2492
+ }
2493
+ }, {
2494
+ ALT: function () {
2495
+ $.CONSUME(HexLiteral);
2496
+ }
2497
+ }, {
2498
+ ALT: function () {
2499
+ $.CONSUME(NumberLiteral);
2500
+ }
2501
+ }, {
2502
+ ALT: function () {
2503
+ $.CONSUME(TrueLiteral);
2504
+ }
2505
+ }, {
2506
+ ALT: function () {
2507
+ $.CONSUME(FalseLiteral);
2508
+ }
2509
+ }, {
2510
+ ALT: function () {
2511
+ $.CONSUME(NullLiteral);
2028
2512
  }
2029
- ]);
2513
+ }]);
2030
2514
  });
2031
2515
  });
2032
- $.RULE("multiFieldValue", function() {
2516
+ $.RULE('multiFieldValue', function () {
2033
2517
  $.CONSUME(LSquare);
2034
- $.MANY(function() {
2035
- $.OR([
2036
- {
2037
- ALT: function() {
2038
- $.SUBRULE($.node);
2039
- }
2040
- },
2041
- {
2042
- ALT: function() {
2043
- $.SUBRULE($.use);
2044
- }
2045
- },
2046
- {
2047
- ALT: function() {
2048
- $.CONSUME(StringLiteral);
2049
- }
2050
- },
2051
- {
2052
- ALT: function() {
2053
- $.CONSUME(HexLiteral);
2054
- }
2055
- },
2056
- {
2057
- ALT: function() {
2058
- $.CONSUME(NumberLiteral);
2059
- }
2060
- },
2061
- {
2062
- ALT: function() {
2063
- $.CONSUME(NullLiteral);
2064
- }
2518
+ $.MANY(function () {
2519
+ $.OR([{
2520
+ ALT: function () {
2521
+ $.SUBRULE($.node);
2522
+ }
2523
+ }, {
2524
+ ALT: function () {
2525
+ $.SUBRULE($.use);
2526
+ }
2527
+ }, {
2528
+ ALT: function () {
2529
+ $.CONSUME(StringLiteral);
2530
+ }
2531
+ }, {
2532
+ ALT: function () {
2533
+ $.CONSUME(HexLiteral);
2534
+ }
2535
+ }, {
2536
+ ALT: function () {
2537
+ $.CONSUME(NumberLiteral);
2538
+ }
2539
+ }, {
2540
+ ALT: function () {
2541
+ $.CONSUME(NullLiteral);
2065
2542
  }
2066
- ]);
2543
+ }]);
2067
2544
  });
2068
2545
  $.CONSUME(RSquare);
2069
2546
  });
2070
- $.RULE("route", function() {
2547
+ $.RULE('route', function () {
2071
2548
  $.CONSUME(ROUTE);
2072
2549
  $.CONSUME(RouteIdentifier);
2073
2550
  $.CONSUME(TO);
@@ -2075,19 +2552,24 @@ class VRMLParser extends chevrotain.CstParser {
2075
2552
  });
2076
2553
  this.performSelfAnalysis();
2077
2554
  }
2555
+
2078
2556
  }
2557
+
2079
2558
  class Face {
2080
2559
  constructor(a, b, c) {
2081
2560
  this.a = a;
2082
2561
  this.b = b;
2083
2562
  this.c = c;
2084
- this.normal = new THREE.Vector3();
2563
+ this.normal = new Vector3();
2085
2564
  }
2565
+
2086
2566
  }
2567
+
2087
2568
  const TEXTURE_TYPE = {
2088
2569
  INTENSITY: 1,
2089
2570
  INTENSITY_ALPHA: 2,
2090
2571
  RGB: 3,
2091
2572
  RGBA: 4
2092
2573
  };
2093
- exports.VRMLLoader = VRMLLoader;
2574
+
2575
+ export { VRMLLoader };