opal-js_wrap-three 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (503) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/Gemfile.lock +4 -4
  4. data/lib/opal/js_wrap/three/version.rb +1 -1
  5. data/lib-opal/js_wrap/three/WebGL.js +102 -0
  6. data/lib-opal/js_wrap/three/animation/AnimationClipCreator.js +116 -0
  7. data/lib-opal/js_wrap/three/animation/CCDIKSolver.js +436 -0
  8. data/lib-opal/js_wrap/three/animation/MMDAnimationHelper.js +941 -0
  9. data/lib-opal/js_wrap/three/animation/MMDPhysics.js +1183 -0
  10. data/lib-opal/js_wrap/three/cameras/CinematicCamera.js +204 -0
  11. data/lib-opal/js_wrap/three/controls/ArcballControls.js +2649 -0
  12. data/lib-opal/js_wrap/three/controls/DragControls.js +234 -0
  13. data/lib-opal/js_wrap/three/controls/FirstPersonControls.js +301 -0
  14. data/lib-opal/js_wrap/three/controls/FlyControls.js +357 -0
  15. data/lib-opal/js_wrap/three/controls/OrbitControls.js +908 -0
  16. data/lib-opal/js_wrap/three/controls/PointerLockControls.js +173 -0
  17. data/lib-opal/js_wrap/three/controls/TrackballControls.js +666 -0
  18. data/lib-opal/js_wrap/three/controls/TransformControls.js +1210 -0
  19. data/lib-opal/js_wrap/three/controls/experimental/CameraControls.js +860 -0
  20. data/lib-opal/js_wrap/three/csm/CSM.js +346 -0
  21. data/lib-opal/js_wrap/three/csm/CSMFrustum.js +123 -0
  22. data/lib-opal/js_wrap/three/csm/CSMHelper.js +197 -0
  23. data/lib-opal/js_wrap/three/csm/CSMShader.js +29 -0
  24. data/lib-opal/js_wrap/three/curves/CurveExtras.js +544 -0
  25. data/lib-opal/js_wrap/three/curves/NURBSCurve.js +122 -0
  26. data/lib-opal/js_wrap/three/curves/NURBSSurface.js +78 -0
  27. data/lib-opal/js_wrap/three/curves/NURBSUtils.js +413 -0
  28. data/lib-opal/js_wrap/three/deprecated/Geometry.js +1373 -0
  29. data/lib-opal/js_wrap/three/effects/AnaglyphEffect.js +113 -0
  30. data/lib-opal/js_wrap/three/effects/AsciiEffect.js +267 -0
  31. data/lib-opal/js_wrap/three/effects/OutlineEffect.js +400 -0
  32. data/lib-opal/js_wrap/three/effects/ParallaxBarrierEffect.js +90 -0
  33. data/lib-opal/js_wrap/three/effects/PeppersGhostEffect.js +160 -0
  34. data/lib-opal/js_wrap/three/effects/StereoEffect.js +63 -0
  35. data/lib-opal/js_wrap/three/environments/DebugEnvironment.js +107 -0
  36. data/lib-opal/js_wrap/three/environments/RoomEnvironment.js +166 -0
  37. data/lib-opal/js_wrap/three/exporters/ColladaExporter.js +442 -0
  38. data/lib-opal/js_wrap/three/exporters/DRACOExporter.js +205 -0
  39. data/lib-opal/js_wrap/three/exporters/GLTFExporter.js +2042 -0
  40. data/lib-opal/js_wrap/three/exporters/MMDExporter.js +189 -0
  41. data/lib-opal/js_wrap/three/exporters/OBJExporter.js +241 -0
  42. data/lib-opal/js_wrap/three/exporters/PLYExporter.js +370 -0
  43. data/lib-opal/js_wrap/three/exporters/STLExporter.js +186 -0
  44. data/lib-opal/js_wrap/three/exporters/USDZExporter.js +402 -0
  45. data/lib-opal/js_wrap/three/geometries/BoxLineGeometry.js +106 -0
  46. data/lib-opal/js_wrap/three/geometries/ConvexGeometry.js +88 -0
  47. data/lib-opal/js_wrap/three/geometries/DecalGeometry.js +302 -0
  48. data/lib-opal/js_wrap/three/geometries/LightningStrike.js +817 -0
  49. data/lib-opal/js_wrap/three/geometries/ParametricGeometries.js +280 -0
  50. data/lib-opal/js_wrap/three/geometries/ParametricGeometry.js +146 -0
  51. data/lib-opal/js_wrap/three/geometries/RoundedBoxGeometry.js +183 -0
  52. data/lib-opal/js_wrap/three/geometries/TeapotGeometry.js +352 -0
  53. data/lib-opal/js_wrap/three/geometries/TextGeometry.js +76 -0
  54. data/lib-opal/js_wrap/three/helpers/LightProbeHelper.js +95 -0
  55. data/lib-opal/js_wrap/three/helpers/PositionalAudioHelper.js +138 -0
  56. data/lib-opal/js_wrap/three/helpers/RectAreaLightHelper.js +115 -0
  57. data/lib-opal/js_wrap/three/helpers/VertexNormalsHelper.js +131 -0
  58. data/lib-opal/js_wrap/three/helpers/VertexTangentsHelper.js +118 -0
  59. data/lib-opal/js_wrap/three/interactive/HTMLMesh.js +307 -0
  60. data/lib-opal/js_wrap/three/interactive/InteractiveGroup.js +138 -0
  61. data/lib-opal/js_wrap/three/interactive/SelectionBox.js +264 -0
  62. data/lib-opal/js_wrap/three/interactive/SelectionHelper.js +88 -0
  63. data/lib-opal/js_wrap/three/libs/OimoPhysics/OimoPhysics.js +46059 -0
  64. data/lib-opal/js_wrap/three/libs/OimoPhysics/index.js +92 -0
  65. data/lib-opal/js_wrap/three/libs/chevrotain.module.min.js +6947 -0
  66. data/lib-opal/js_wrap/three/libs/ecsy.module.js +1999 -0
  67. data/lib-opal/js_wrap/three/libs/fflate.module.js +3002 -0
  68. data/lib-opal/js_wrap/three/libs/flow.module.js +3033 -0
  69. data/lib-opal/js_wrap/three/libs/ktx-parse.module.js +392 -0
  70. data/lib-opal/js_wrap/three/libs/lil-gui.module.min.js +821 -0
  71. data/lib-opal/js_wrap/three/libs/meshopt_decoder.module.js +136 -0
  72. data/lib-opal/js_wrap/three/libs/mmdparser.module.js +11022 -0
  73. data/lib-opal/js_wrap/three/libs/motion-controllers.module.js +589 -0
  74. data/lib-opal/js_wrap/three/libs/opentype.module.min.js +6132 -0
  75. data/lib-opal/js_wrap/three/libs/potpack.module.js +171 -0
  76. data/lib-opal/js_wrap/three/libs/rhino3dm/rhino3dm.js +6781 -0
  77. data/lib-opal/js_wrap/three/libs/rhino3dm/rhino3dm.module.js +6783 -0
  78. data/lib-opal/js_wrap/three/libs/stats.module.js +139 -0
  79. data/lib-opal/js_wrap/three/libs/tween.module.min.js +349 -0
  80. data/lib-opal/js_wrap/three/lights/LightProbeGenerator.js +233 -0
  81. data/lib-opal/js_wrap/three/lights/RectAreaLightUniformsLib.js +75 -0
  82. data/lib-opal/js_wrap/three/lines/Line2.js +66 -0
  83. data/lib-opal/js_wrap/three/lines/LineGeometry.js +122 -0
  84. data/lib-opal/js_wrap/three/lines/LineMaterial.js +227 -0
  85. data/lib-opal/js_wrap/three/lines/LineSegments2.js +312 -0
  86. data/lib-opal/js_wrap/three/lines/LineSegmentsGeometry.js +238 -0
  87. data/lib-opal/js_wrap/three/lines/Wireframe.js +98 -0
  88. data/lib-opal/js_wrap/three/lines/WireframeGeometry2.js +65 -0
  89. data/lib-opal/js_wrap/three/loaders/3DMLoader.js +1230 -0
  90. data/lib-opal/js_wrap/three/loaders/3MFLoader.js +1123 -0
  91. data/lib-opal/js_wrap/three/loaders/AMFLoader.js +445 -0
  92. data/lib-opal/js_wrap/three/loaders/BVHLoader.js +365 -0
  93. data/lib-opal/js_wrap/three/loaders/BasisTextureLoader.js +692 -0
  94. data/lib-opal/js_wrap/three/loaders/ColladaLoader.js +3046 -0
  95. data/lib-opal/js_wrap/three/loaders/DDSLoader.js +264 -0
  96. data/lib-opal/js_wrap/three/loaders/DRACOLoader.js +531 -0
  97. data/lib-opal/js_wrap/three/loaders/EXRLoader.js +1834 -0
  98. data/lib-opal/js_wrap/three/loaders/FBXLoader.js +3125 -0
  99. data/lib-opal/js_wrap/three/loaders/FontLoader.js +201 -0
  100. data/lib-opal/js_wrap/three/loaders/GCodeLoader.js +248 -0
  101. data/lib-opal/js_wrap/three/loaders/GLTFLoader.js +3334 -0
  102. data/lib-opal/js_wrap/three/loaders/HDRCubeTextureLoader.js +144 -0
  103. data/lib-opal/js_wrap/three/loaders/IFCLoader.js +2395 -0
  104. data/lib-opal/js_wrap/three/loaders/KMZLoader.js +142 -0
  105. data/lib-opal/js_wrap/three/loaders/KTX2Loader.js +535 -0
  106. data/lib-opal/js_wrap/three/loaders/KTXLoader.js +202 -0
  107. data/lib-opal/js_wrap/three/loaders/LDrawLoader.js +1737 -0
  108. data/lib-opal/js_wrap/three/loaders/LUT3dlLoader.js +163 -0
  109. data/lib-opal/js_wrap/three/loaders/LUTCubeLoader.js +171 -0
  110. data/lib-opal/js_wrap/three/loaders/LWOLoader.js +831 -0
  111. data/lib-opal/js_wrap/three/loaders/LogLuvLoader.js +713 -0
  112. data/lib-opal/js_wrap/three/loaders/LottieLoader.js +103 -0
  113. data/lib-opal/js_wrap/three/loaders/MD2Loader.js +258 -0
  114. data/lib-opal/js_wrap/three/loaders/MDDLoader.js +116 -0
  115. data/lib-opal/js_wrap/three/loaders/MMDLoader.js +1687 -0
  116. data/lib-opal/js_wrap/three/loaders/MTLLoader.js +465 -0
  117. data/lib-opal/js_wrap/three/loaders/NRRDLoader.js +554 -0
  118. data/lib-opal/js_wrap/three/loaders/NodeMaterialLoader.js +248 -0
  119. data/lib-opal/js_wrap/three/loaders/OBJLoader.js +673 -0
  120. data/lib-opal/js_wrap/three/loaders/PCDLoader.js +322 -0
  121. data/lib-opal/js_wrap/three/loaders/PDBLoader.js +318 -0
  122. data/lib-opal/js_wrap/three/loaders/PLYLoader.js +489 -0
  123. data/lib-opal/js_wrap/three/loaders/PRWMLoader.js +247 -0
  124. data/lib-opal/js_wrap/three/loaders/PVRLoader.js +240 -0
  125. data/lib-opal/js_wrap/three/loaders/RGBELoader.js +462 -0
  126. data/lib-opal/js_wrap/three/loaders/RGBMLoader.js +1169 -0
  127. data/lib-opal/js_wrap/three/loaders/STLLoader.js +345 -0
  128. data/lib-opal/js_wrap/three/loaders/SVGLoader.js +2162 -0
  129. data/lib-opal/js_wrap/three/loaders/TDSLoader.js +982 -0
  130. data/lib-opal/js_wrap/three/loaders/TGALoader.js +444 -0
  131. data/lib-opal/js_wrap/three/loaders/TTFLoader.js +210 -0
  132. data/lib-opal/js_wrap/three/loaders/TiltLoader.js +391 -0
  133. data/lib-opal/js_wrap/three/loaders/VOXLoader.js +272 -0
  134. data/lib-opal/js_wrap/three/loaders/VRMLLoader.js +2685 -0
  135. data/lib-opal/js_wrap/three/loaders/VRMLoader.js +103 -0
  136. data/lib-opal/js_wrap/three/loaders/VTKLoader.js +894 -0
  137. data/lib-opal/js_wrap/three/loaders/XYZLoader.js +136 -0
  138. data/lib-opal/js_wrap/three/loaders/ifc/web-ifc-api.js +60504 -0
  139. data/lib-opal/js_wrap/three/loaders/lwo/IFFParser.js +931 -0
  140. data/lib-opal/js_wrap/three/loaders/lwo/LWO2Parser.js +450 -0
  141. data/lib-opal/js_wrap/three/loaders/lwo/LWO3Parser.js +406 -0
  142. data/lib-opal/js_wrap/three/math/Capsule.js +133 -0
  143. data/lib-opal/js_wrap/three/math/ColorConverter.js +104 -0
  144. data/lib-opal/js_wrap/three/math/ConvexHull.js +924 -0
  145. data/lib-opal/js_wrap/three/math/ImprovedNoise.js +86 -0
  146. data/lib-opal/js_wrap/three/math/Lut.js +170 -0
  147. data/lib-opal/js_wrap/three/math/MeshSurfaceSampler.js +187 -0
  148. data/lib-opal/js_wrap/three/math/OBB.js +345 -0
  149. data/lib-opal/js_wrap/three/math/Octree.js +409 -0
  150. data/lib-opal/js_wrap/three/math/SimplexNoise.js +425 -0
  151. data/lib-opal/js_wrap/three/misc/ConvexObjectBreaker.js +447 -0
  152. data/lib-opal/js_wrap/three/misc/GPUComputationRenderer.js +322 -0
  153. data/lib-opal/js_wrap/three/misc/Gyroscope.js +94 -0
  154. data/lib-opal/js_wrap/three/misc/MD2Character.js +225 -0
  155. data/lib-opal/js_wrap/three/misc/MD2CharacterComplex.js +424 -0
  156. data/lib-opal/js_wrap/three/misc/MorphAnimMesh.js +109 -0
  157. data/lib-opal/js_wrap/three/misc/MorphBlendMesh.js +283 -0
  158. data/lib-opal/js_wrap/three/misc/ProgressiveLightMap.js +324 -0
  159. data/lib-opal/js_wrap/three/misc/RollerCoaster.js +489 -0
  160. data/lib-opal/js_wrap/three/misc/TubePainter.js +158 -0
  161. data/lib-opal/js_wrap/three/misc/Volume.js +427 -0
  162. data/lib-opal/js_wrap/three/misc/VolumeSlice.js +210 -0
  163. data/lib-opal/js_wrap/three/modifiers/CurveModifier.js +291 -0
  164. data/lib-opal/js_wrap/three/modifiers/EdgeSplitModifier.js +308 -0
  165. data/lib-opal/js_wrap/three/modifiers/SimplifyModifier.js +435 -0
  166. data/lib-opal/js_wrap/three/modifiers/TessellateModifier.js +264 -0
  167. data/lib-opal/js_wrap/three/node-editor/NodeEditor.js +402 -0
  168. data/lib-opal/js_wrap/three/node-editor/accessors/NormalEditor.js +80 -0
  169. data/lib-opal/js_wrap/three/node-editor/accessors/PositionEditor.js +80 -0
  170. data/lib-opal/js_wrap/three/node-editor/accessors/UVEditor.js +71 -0
  171. data/lib-opal/js_wrap/three/node-editor/display/BlendEditor.js +78 -0
  172. data/lib-opal/js_wrap/three/node-editor/inputs/ColorEditor.js +111 -0
  173. data/lib-opal/js_wrap/three/node-editor/inputs/FloatEditor.js +69 -0
  174. data/lib-opal/js_wrap/three/node-editor/inputs/SliderEditor.js +97 -0
  175. data/lib-opal/js_wrap/three/node-editor/inputs/Vector2Editor.js +73 -0
  176. data/lib-opal/js_wrap/three/node-editor/inputs/Vector3Editor.js +75 -0
  177. data/lib-opal/js_wrap/three/node-editor/inputs/Vector4Editor.js +77 -0
  178. data/lib-opal/js_wrap/three/node-editor/materials/StandardMaterialEditor.js +121 -0
  179. data/lib-opal/js_wrap/three/node-editor/math/DotEditor.js +76 -0
  180. data/lib-opal/js_wrap/three/node-editor/math/InvertEditor.js +80 -0
  181. data/lib-opal/js_wrap/three/node-editor/math/LimiterEditor.js +85 -0
  182. data/lib-opal/js_wrap/three/node-editor/math/NormalizeEditor.js +69 -0
  183. data/lib-opal/js_wrap/three/node-editor/math/OperatorEditor.js +91 -0
  184. data/lib-opal/js_wrap/three/node-editor/math/PowerEditor.js +73 -0
  185. data/lib-opal/js_wrap/three/node-editor/math/TrigonometryEditor.js +83 -0
  186. data/lib-opal/js_wrap/three/node-editor/procedural/CheckerEditor.js +69 -0
  187. data/lib-opal/js_wrap/three/node-editor/utils/OscillatorEditor.js +87 -0
  188. data/lib-opal/js_wrap/three/node-editor/utils/TimerEditor.js +89 -0
  189. data/lib-opal/js_wrap/three/nodes/Nodes.js +481 -0
  190. data/lib-opal/js_wrap/three/nodes/accessors/CameraNode.js +222 -0
  191. data/lib-opal/js_wrap/three/nodes/accessors/ColorsNode.js +99 -0
  192. data/lib-opal/js_wrap/three/nodes/accessors/LightNode.js +100 -0
  193. data/lib-opal/js_wrap/three/nodes/accessors/NormalNode.js +152 -0
  194. data/lib-opal/js_wrap/three/nodes/accessors/PositionNode.js +163 -0
  195. data/lib-opal/js_wrap/three/nodes/accessors/ReflectNode.js +161 -0
  196. data/lib-opal/js_wrap/three/nodes/accessors/ResolutionNode.js +99 -0
  197. data/lib-opal/js_wrap/three/nodes/accessors/ScreenUVNode.js +101 -0
  198. data/lib-opal/js_wrap/three/nodes/accessors/UVNode.js +105 -0
  199. data/lib-opal/js_wrap/three/nodes/core/AttributeNode.js +106 -0
  200. data/lib-opal/js_wrap/three/nodes/core/ConstNode.js +149 -0
  201. data/lib-opal/js_wrap/three/nodes/core/ExpressionNode.js +57 -0
  202. data/lib-opal/js_wrap/three/nodes/core/FunctionCallNode.js +138 -0
  203. data/lib-opal/js_wrap/three/nodes/core/FunctionNode.js +259 -0
  204. data/lib-opal/js_wrap/three/nodes/core/InputNode.js +124 -0
  205. data/lib-opal/js_wrap/three/nodes/core/Node.js +193 -0
  206. data/lib-opal/js_wrap/three/nodes/core/NodeBuilder.js +782 -0
  207. data/lib-opal/js_wrap/three/nodes/core/NodeFrame.js +69 -0
  208. data/lib-opal/js_wrap/three/nodes/core/NodeLib.js +56 -0
  209. data/lib-opal/js_wrap/three/nodes/core/NodeUniform.js +53 -0
  210. data/lib-opal/js_wrap/three/nodes/core/NodeUtils.js +60 -0
  211. data/lib-opal/js_wrap/three/nodes/core/StructNode.js +131 -0
  212. data/lib-opal/js_wrap/three/nodes/core/TempNode.js +160 -0
  213. data/lib-opal/js_wrap/three/nodes/core/VarNode.js +105 -0
  214. data/lib-opal/js_wrap/three/nodes/effects/BlurNode.js +160 -0
  215. data/lib-opal/js_wrap/three/nodes/effects/ColorAdjustmentNode.js +139 -0
  216. data/lib-opal/js_wrap/three/nodes/effects/LuminanceNode.js +106 -0
  217. data/lib-opal/js_wrap/three/nodes/inputs/BoolNode.js +95 -0
  218. data/lib-opal/js_wrap/three/nodes/inputs/ColorNode.js +99 -0
  219. data/lib-opal/js_wrap/three/nodes/inputs/CubeTextureNode.js +136 -0
  220. data/lib-opal/js_wrap/three/nodes/inputs/FloatNode.js +95 -0
  221. data/lib-opal/js_wrap/three/nodes/inputs/IntNode.js +95 -0
  222. data/lib-opal/js_wrap/three/nodes/inputs/Matrix3Node.js +102 -0
  223. data/lib-opal/js_wrap/three/nodes/inputs/Matrix4Node.js +102 -0
  224. data/lib-opal/js_wrap/three/nodes/inputs/PropertyNode.js +85 -0
  225. data/lib-opal/js_wrap/three/nodes/inputs/RTTNode.js +164 -0
  226. data/lib-opal/js_wrap/three/nodes/inputs/ReflectorNode.js +111 -0
  227. data/lib-opal/js_wrap/three/nodes/inputs/ScreenNode.js +69 -0
  228. data/lib-opal/js_wrap/three/nodes/inputs/TextureNode.js +140 -0
  229. data/lib-opal/js_wrap/three/nodes/inputs/Vector2Node.js +98 -0
  230. data/lib-opal/js_wrap/three/nodes/inputs/Vector3Node.js +99 -0
  231. data/lib-opal/js_wrap/three/nodes/inputs/Vector4Node.js +100 -0
  232. data/lib-opal/js_wrap/three/nodes/materials/BasicNodeMaterial.js +63 -0
  233. data/lib-opal/js_wrap/three/nodes/materials/MeshStandardNodeMaterial.js +63 -0
  234. data/lib-opal/js_wrap/three/nodes/materials/NodeMaterial.js +202 -0
  235. data/lib-opal/js_wrap/three/nodes/materials/PhongNodeMaterial.js +63 -0
  236. data/lib-opal/js_wrap/three/nodes/materials/SpriteNodeMaterial.js +63 -0
  237. data/lib-opal/js_wrap/three/nodes/materials/StandardNodeMaterial.js +63 -0
  238. data/lib-opal/js_wrap/three/nodes/materials/nodes/BasicNode.js +146 -0
  239. data/lib-opal/js_wrap/three/nodes/materials/nodes/MeshStandardNode.js +133 -0
  240. data/lib-opal/js_wrap/three/nodes/materials/nodes/PhongNode.js +273 -0
  241. data/lib-opal/js_wrap/three/nodes/materials/nodes/RawNode.js +101 -0
  242. data/lib-opal/js_wrap/three/nodes/materials/nodes/SpriteNode.js +176 -0
  243. data/lib-opal/js_wrap/three/nodes/materials/nodes/StandardNode.js +397 -0
  244. data/lib-opal/js_wrap/three/nodes/math/CondNode.js +151 -0
  245. data/lib-opal/js_wrap/three/nodes/math/MathNode.js +266 -0
  246. data/lib-opal/js_wrap/three/nodes/math/OperatorNode.js +120 -0
  247. data/lib-opal/js_wrap/three/nodes/misc/BumpMapNode.js +139 -0
  248. data/lib-opal/js_wrap/three/nodes/misc/NormalMapNode.js +122 -0
  249. data/lib-opal/js_wrap/three/nodes/misc/TextureCubeNode.js +107 -0
  250. data/lib-opal/js_wrap/three/nodes/misc/TextureCubeUVNode.js +191 -0
  251. data/lib-opal/js_wrap/three/nodes/postprocessing/NodePass.js +117 -0
  252. data/lib-opal/js_wrap/three/nodes/postprocessing/NodePostProcessing.js +128 -0
  253. data/lib-opal/js_wrap/three/nodes/procedural/CheckerNode.js +104 -0
  254. data/lib-opal/js_wrap/three/nodes/procedural/Fractal3DNode.js +121 -0
  255. data/lib-opal/js_wrap/three/nodes/procedural/Noise2DNode.js +115 -0
  256. data/lib-opal/js_wrap/three/nodes/procedural/Noise3DNode.js +112 -0
  257. data/lib-opal/js_wrap/three/nodes/utils/BypassNode.js +115 -0
  258. data/lib-opal/js_wrap/three/nodes/utils/ColorSpaceNode.js +214 -0
  259. data/lib-opal/js_wrap/three/nodes/utils/JoinNode.js +138 -0
  260. data/lib-opal/js_wrap/three/nodes/utils/MaxMIPLevelNode.js +88 -0
  261. data/lib-opal/js_wrap/three/nodes/utils/RemapNode.js +117 -0
  262. data/lib-opal/js_wrap/three/nodes/utils/SpecularMIPLevelNode.js +121 -0
  263. data/lib-opal/js_wrap/three/nodes/utils/SubSlotNode.js +112 -0
  264. data/lib-opal/js_wrap/three/nodes/utils/SwitchNode.js +129 -0
  265. data/lib-opal/js_wrap/three/nodes/utils/TimerNode.js +126 -0
  266. data/lib-opal/js_wrap/three/nodes/utils/UVTransformNode.js +104 -0
  267. data/lib-opal/js_wrap/three/nodes/utils/VelocityNode.js +181 -0
  268. data/lib-opal/js_wrap/three/objects/Lensflare.js +285 -0
  269. data/lib-opal/js_wrap/three/objects/LightningStorm.js +238 -0
  270. data/lib-opal/js_wrap/three/objects/MarchingCubes.js +667 -0
  271. data/lib-opal/js_wrap/three/objects/Reflector.js +205 -0
  272. data/lib-opal/js_wrap/three/objects/ReflectorForSSRPass.js +288 -0
  273. data/lib-opal/js_wrap/three/objects/ReflectorRTT.js +63 -0
  274. data/lib-opal/js_wrap/three/objects/Refractor.js +243 -0
  275. data/lib-opal/js_wrap/three/objects/ShadowMesh.js +100 -0
  276. data/lib-opal/js_wrap/three/objects/Sky.js +107 -0
  277. data/lib-opal/js_wrap/three/objects/Water.js +246 -0
  278. data/lib-opal/js_wrap/three/objects/Water2.js +238 -0
  279. data/lib-opal/js_wrap/three/offscreen/jank.js +51 -0
  280. data/lib-opal/js_wrap/three/offscreen/offscreen.js +24 -0
  281. data/lib-opal/js_wrap/three/offscreen/scene.js +99 -0
  282. data/lib-opal/js_wrap/three/physics/AmmoPhysics.js +266 -0
  283. data/lib-opal/js_wrap/three/physics/OimoPhysics.js +214 -0
  284. data/lib-opal/js_wrap/three/postprocessing/AdaptiveToneMappingPass.js +307 -0
  285. data/lib-opal/js_wrap/three/postprocessing/AfterimagePass.js +116 -0
  286. data/lib-opal/js_wrap/three/postprocessing/BloomPass.js +132 -0
  287. data/lib-opal/js_wrap/three/postprocessing/BokehPass.js +143 -0
  288. data/lib-opal/js_wrap/three/postprocessing/ClearPass.js +85 -0
  289. data/lib-opal/js_wrap/three/postprocessing/CubeTexturePass.js +104 -0
  290. data/lib-opal/js_wrap/three/postprocessing/DotScreenPass.js +90 -0
  291. data/lib-opal/js_wrap/three/postprocessing/EffectComposer.js +272 -0
  292. data/lib-opal/js_wrap/three/postprocessing/FilmPass.js +91 -0
  293. data/lib-opal/js_wrap/three/postprocessing/GlitchPass.js +140 -0
  294. data/lib-opal/js_wrap/three/postprocessing/HalftonePass.js +108 -0
  295. data/lib-opal/js_wrap/three/postprocessing/LUTPass.js +132 -0
  296. data/lib-opal/js_wrap/three/postprocessing/MaskPass.js +142 -0
  297. data/lib-opal/js_wrap/three/postprocessing/OutlinePass.js +480 -0
  298. data/lib-opal/js_wrap/three/postprocessing/Pass.js +101 -0
  299. data/lib-opal/js_wrap/three/postprocessing/RenderPass.js +109 -0
  300. data/lib-opal/js_wrap/three/postprocessing/SAOPass.js +384 -0
  301. data/lib-opal/js_wrap/three/postprocessing/SMAAPass.js +199 -0
  302. data/lib-opal/js_wrap/three/postprocessing/SSAARenderPass.js +186 -0
  303. data/lib-opal/js_wrap/three/postprocessing/SSAOPass.js +388 -0
  304. data/lib-opal/js_wrap/three/postprocessing/SSRPass.js +537 -0
  305. data/lib-opal/js_wrap/three/postprocessing/SSRrPass.js +481 -0
  306. data/lib-opal/js_wrap/three/postprocessing/SavePass.js +96 -0
  307. data/lib-opal/js_wrap/three/postprocessing/ShaderPass.js +98 -0
  308. data/lib-opal/js_wrap/three/postprocessing/TAARenderPass.js +159 -0
  309. data/lib-opal/js_wrap/three/postprocessing/TexturePass.js +91 -0
  310. data/lib-opal/js_wrap/three/postprocessing/UnrealBloomPass.js +335 -0
  311. data/lib-opal/js_wrap/three/renderers/CSS2DRenderer.js +213 -0
  312. data/lib-opal/js_wrap/three/renderers/CSS3DRenderer.js +277 -0
  313. data/lib-opal/js_wrap/three/renderers/Projector.js +733 -0
  314. data/lib-opal/js_wrap/three/renderers/SVGRenderer.js +470 -0
  315. data/lib-opal/js_wrap/three/renderers/nodes/Nodes.js +531 -0
  316. data/lib-opal/js_wrap/three/renderers/nodes/ShaderNode.js +386 -0
  317. data/lib-opal/js_wrap/three/renderers/nodes/accessors/CameraNode.js +114 -0
  318. data/lib-opal/js_wrap/three/renderers/nodes/accessors/MaterialNode.js +140 -0
  319. data/lib-opal/js_wrap/three/renderers/nodes/accessors/MaterialReferenceNode.js +79 -0
  320. data/lib-opal/js_wrap/three/renderers/nodes/accessors/ModelNode.js +62 -0
  321. data/lib-opal/js_wrap/three/renderers/nodes/accessors/ModelViewProjectionNode.js +80 -0
  322. data/lib-opal/js_wrap/three/renderers/nodes/accessors/NormalNode.js +113 -0
  323. data/lib-opal/js_wrap/three/renderers/nodes/accessors/Object3DNode.js +136 -0
  324. data/lib-opal/js_wrap/three/renderers/nodes/accessors/PointUVNode.js +70 -0
  325. data/lib-opal/js_wrap/three/renderers/nodes/accessors/PositionNode.js +117 -0
  326. data/lib-opal/js_wrap/three/renderers/nodes/accessors/ReferenceNode.js +124 -0
  327. data/lib-opal/js_wrap/three/renderers/nodes/accessors/SkinningNode.js +129 -0
  328. data/lib-opal/js_wrap/three/renderers/nodes/accessors/UVNode.js +77 -0
  329. data/lib-opal/js_wrap/three/renderers/nodes/core/ArrayInputNode.js +74 -0
  330. data/lib-opal/js_wrap/three/renderers/nodes/core/AttributeNode.js +97 -0
  331. data/lib-opal/js_wrap/three/renderers/nodes/core/BypassNode.js +84 -0
  332. data/lib-opal/js_wrap/three/renderers/nodes/core/CodeNode.js +131 -0
  333. data/lib-opal/js_wrap/three/renderers/nodes/core/ContextNode.js +84 -0
  334. data/lib-opal/js_wrap/three/renderers/nodes/core/ExpressionNode.js +81 -0
  335. data/lib-opal/js_wrap/three/renderers/nodes/core/FunctionCallNode.js +123 -0
  336. data/lib-opal/js_wrap/three/renderers/nodes/core/FunctionNode.js +126 -0
  337. data/lib-opal/js_wrap/three/renderers/nodes/core/InputNode.js +103 -0
  338. data/lib-opal/js_wrap/three/renderers/nodes/core/Node.js +120 -0
  339. data/lib-opal/js_wrap/three/renderers/nodes/core/NodeAttribute.js +37 -0
  340. data/lib-opal/js_wrap/three/renderers/nodes/core/NodeBuilder.js +650 -0
  341. data/lib-opal/js_wrap/three/renderers/nodes/core/NodeCode.js +42 -0
  342. data/lib-opal/js_wrap/three/renderers/nodes/core/NodeFrame.js +70 -0
  343. data/lib-opal/js_wrap/three/renderers/nodes/core/NodeFunction.js +55 -0
  344. data/lib-opal/js_wrap/three/renderers/nodes/core/NodeFunctionInput.js +44 -0
  345. data/lib-opal/js_wrap/three/renderers/nodes/core/NodeKeywords.js +117 -0
  346. data/lib-opal/js_wrap/three/renderers/nodes/core/NodeParser.js +46 -0
  347. data/lib-opal/js_wrap/three/renderers/nodes/core/NodeUniform.js +55 -0
  348. data/lib-opal/js_wrap/three/renderers/nodes/core/NodeVar.js +37 -0
  349. data/lib-opal/js_wrap/three/renderers/nodes/core/NodeVary.js +37 -0
  350. data/lib-opal/js_wrap/three/renderers/nodes/core/PropertyNode.js +90 -0
  351. data/lib-opal/js_wrap/three/renderers/nodes/core/TempNode.js +89 -0
  352. data/lib-opal/js_wrap/three/renderers/nodes/core/VarNode.js +101 -0
  353. data/lib-opal/js_wrap/three/renderers/nodes/core/VaryNode.js +101 -0
  354. data/lib-opal/js_wrap/three/renderers/nodes/core/constants.js +42 -0
  355. data/lib-opal/js_wrap/three/renderers/nodes/display/ColorSpaceNode.js +165 -0
  356. data/lib-opal/js_wrap/three/renderers/nodes/display/NormalMapNode.js +120 -0
  357. data/lib-opal/js_wrap/three/renderers/nodes/functions/BSDFs.js +133 -0
  358. data/lib-opal/js_wrap/three/renderers/nodes/inputs/BufferNode.js +78 -0
  359. data/lib-opal/js_wrap/three/renderers/nodes/inputs/ColorNode.js +67 -0
  360. data/lib-opal/js_wrap/three/renderers/nodes/inputs/FloatNode.js +67 -0
  361. data/lib-opal/js_wrap/three/renderers/nodes/inputs/IntNode.js +67 -0
  362. data/lib-opal/js_wrap/three/renderers/nodes/inputs/Matrix3Node.js +67 -0
  363. data/lib-opal/js_wrap/three/renderers/nodes/inputs/Matrix4Node.js +67 -0
  364. data/lib-opal/js_wrap/three/renderers/nodes/inputs/TextureNode.js +120 -0
  365. data/lib-opal/js_wrap/three/renderers/nodes/inputs/Vector2Node.js +67 -0
  366. data/lib-opal/js_wrap/three/renderers/nodes/inputs/Vector3Node.js +67 -0
  367. data/lib-opal/js_wrap/three/renderers/nodes/inputs/Vector4Node.js +67 -0
  368. data/lib-opal/js_wrap/three/renderers/nodes/lights/LightContextNode.js +103 -0
  369. data/lib-opal/js_wrap/three/renderers/nodes/lights/LightNode.js +115 -0
  370. data/lib-opal/js_wrap/three/renderers/nodes/lights/LightsNode.js +117 -0
  371. data/lib-opal/js_wrap/three/renderers/nodes/materials/LineBasicNodeMaterial.js +82 -0
  372. data/lib-opal/js_wrap/three/renderers/nodes/materials/Materials.js +49 -0
  373. data/lib-opal/js_wrap/three/renderers/nodes/materials/MeshBasicNodeMaterial.js +82 -0
  374. data/lib-opal/js_wrap/three/renderers/nodes/materials/MeshStandardNodeMaterial.js +96 -0
  375. data/lib-opal/js_wrap/three/renderers/nodes/materials/PointsNodeMaterial.js +84 -0
  376. data/lib-opal/js_wrap/three/renderers/nodes/math/CondNode.js +98 -0
  377. data/lib-opal/js_wrap/three/renderers/nodes/math/MathNode.js +255 -0
  378. data/lib-opal/js_wrap/three/renderers/nodes/math/OperatorNode.js +163 -0
  379. data/lib-opal/js_wrap/three/renderers/nodes/parsers/GLSLNodeFunction.js +158 -0
  380. data/lib-opal/js_wrap/three/renderers/nodes/parsers/GLSLNodeParser.js +68 -0
  381. data/lib-opal/js_wrap/three/renderers/nodes/parsers/WGSLNodeFunction.js +126 -0
  382. data/lib-opal/js_wrap/three/renderers/nodes/parsers/WGSLNodeParser.js +68 -0
  383. data/lib-opal/js_wrap/three/renderers/nodes/procedural/CheckerNode.js +84 -0
  384. data/lib-opal/js_wrap/three/renderers/nodes/utils/ArrayElementNode.js +79 -0
  385. data/lib-opal/js_wrap/three/renderers/nodes/utils/ConvertNode.js +82 -0
  386. data/lib-opal/js_wrap/three/renderers/nodes/utils/JoinNode.js +88 -0
  387. data/lib-opal/js_wrap/three/renderers/nodes/utils/OscNode.js +105 -0
  388. data/lib-opal/js_wrap/three/renderers/nodes/utils/SplitNode.js +96 -0
  389. data/lib-opal/js_wrap/three/renderers/nodes/utils/SpriteSheetUVNode.js +98 -0
  390. data/lib-opal/js_wrap/three/renderers/nodes/utils/TimerNode.js +93 -0
  391. data/lib-opal/js_wrap/three/renderers/webgl/nodes/SlotNode.js +72 -0
  392. data/lib-opal/js_wrap/three/renderers/webgl/nodes/WebGLNodeBuilder.js +463 -0
  393. data/lib-opal/js_wrap/three/renderers/webgl/nodes/WebGLNodes.js +62 -0
  394. data/lib-opal/js_wrap/three/renderers/webgl/nodes/WebGLPhysicalContextNode.js +95 -0
  395. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPU.js +62 -0
  396. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUAttributes.js +118 -0
  397. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUBackground.js +109 -0
  398. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUBinding.js +52 -0
  399. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUBindings.js +254 -0
  400. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUBufferUtils.js +39 -0
  401. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUComputePipelines.js +82 -0
  402. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUGeometries.js +84 -0
  403. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUInfo.js +86 -0
  404. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUObjects.js +64 -0
  405. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUProgrammableStage.js +46 -0
  406. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUProperties.js +63 -0
  407. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPURenderLists.js +180 -0
  408. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPURenderPipeline.js +662 -0
  409. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPURenderPipelines.js +275 -0
  410. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPURenderer.js +883 -0
  411. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUSampledTexture.js +139 -0
  412. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUSampler.js +76 -0
  413. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUStorageBuffer.js +69 -0
  414. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUTextureRenderer.js +64 -0
  415. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUTextureUtils.js +125 -0
  416. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUTextures.js +681 -0
  417. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUUniform.js +237 -0
  418. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUUniformBuffer.js +90 -0
  419. data/lib-opal/js_wrap/three/renderers/webgpu/WebGPUUniformsGroup.js +294 -0
  420. data/lib-opal/js_wrap/three/renderers/webgpu/constants.js +263 -0
  421. data/lib-opal/js_wrap/three/renderers/webgpu/nodes/WebGPUNodeBuilder.js +619 -0
  422. data/lib-opal/js_wrap/three/renderers/webgpu/nodes/WebGPUNodeSampledTexture.js +67 -0
  423. data/lib-opal/js_wrap/three/renderers/webgpu/nodes/WebGPUNodeSampler.js +71 -0
  424. data/lib-opal/js_wrap/three/renderers/webgpu/nodes/WebGPUNodeUniform.js +229 -0
  425. data/lib-opal/js_wrap/three/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +68 -0
  426. data/lib-opal/js_wrap/three/renderers/webgpu/nodes/WebGPUNodes.js +106 -0
  427. data/lib-opal/js_wrap/three/shaders/ACESFilmicToneMappingShader.js +45 -0
  428. data/lib-opal/js_wrap/three/shaders/AfterimageShader.js +46 -0
  429. data/lib-opal/js_wrap/three/shaders/BasicShader.js +34 -0
  430. data/lib-opal/js_wrap/three/shaders/BleachBypassShader.js +43 -0
  431. data/lib-opal/js_wrap/three/shaders/BlendShader.js +47 -0
  432. data/lib-opal/js_wrap/three/shaders/BokehShader.js +65 -0
  433. data/lib-opal/js_wrap/three/shaders/BokehShader2.js +125 -0
  434. data/lib-opal/js_wrap/three/shaders/BrightnessContrastShader.js +47 -0
  435. data/lib-opal/js_wrap/three/shaders/ColorCorrectionShader.js +47 -0
  436. data/lib-opal/js_wrap/three/shaders/ColorifyShader.js +41 -0
  437. data/lib-opal/js_wrap/three/shaders/ConvolutionShader.js +75 -0
  438. data/lib-opal/js_wrap/three/shaders/CopyShader.js +41 -0
  439. data/lib-opal/js_wrap/three/shaders/DOFMipMapShader.js +49 -0
  440. data/lib-opal/js_wrap/three/shaders/DepthLimitedBlurShader.js +95 -0
  441. data/lib-opal/js_wrap/three/shaders/DigitalGlitch.js +79 -0
  442. data/lib-opal/js_wrap/three/shaders/DotScreenShader.js +52 -0
  443. data/lib-opal/js_wrap/three/shaders/FXAAShader.js +78 -0
  444. data/lib-opal/js_wrap/three/shaders/FilmShader.js +69 -0
  445. data/lib-opal/js_wrap/three/shaders/FocusShader.js +52 -0
  446. data/lib-opal/js_wrap/three/shaders/FreiChenShader.js +44 -0
  447. data/lib-opal/js_wrap/three/shaders/GammaCorrectionShader.js +39 -0
  448. data/lib-opal/js_wrap/three/shaders/GodRaysShader.js +140 -0
  449. data/lib-opal/js_wrap/three/shaders/HalftoneShader.js +77 -0
  450. data/lib-opal/js_wrap/three/shaders/HorizontalBlurShader.js +47 -0
  451. data/lib-opal/js_wrap/three/shaders/HorizontalTiltShiftShader.js +49 -0
  452. data/lib-opal/js_wrap/three/shaders/HueSaturationShader.js +47 -0
  453. data/lib-opal/js_wrap/three/shaders/KaleidoShader.js +50 -0
  454. data/lib-opal/js_wrap/three/shaders/LuminosityHighPassShader.js +52 -0
  455. data/lib-opal/js_wrap/three/shaders/LuminosityShader.js +39 -0
  456. data/lib-opal/js_wrap/three/shaders/MMDToonShader.js +48 -0
  457. data/lib-opal/js_wrap/three/shaders/MirrorShader.js +44 -0
  458. data/lib-opal/js_wrap/three/shaders/NormalMapShader.js +48 -0
  459. data/lib-opal/js_wrap/three/shaders/PixelShader.js +44 -0
  460. data/lib-opal/js_wrap/three/shaders/RGBShiftShader.js +50 -0
  461. data/lib-opal/js_wrap/three/shaders/SAOShader.js +85 -0
  462. data/lib-opal/js_wrap/three/shaders/SMAAShader.js +95 -0
  463. data/lib-opal/js_wrap/three/shaders/SSAOShader.js +113 -0
  464. data/lib-opal/js_wrap/three/shaders/SSRShader.js +126 -0
  465. data/lib-opal/js_wrap/three/shaders/SSRrShader.js +106 -0
  466. data/lib-opal/js_wrap/three/shaders/SepiaShader.js +43 -0
  467. data/lib-opal/js_wrap/three/shaders/SobelOperatorShader.js +44 -0
  468. data/lib-opal/js_wrap/three/shaders/SubsurfaceScatteringShader.js +64 -0
  469. data/lib-opal/js_wrap/three/shaders/TechnicolorShader.js +41 -0
  470. data/lib-opal/js_wrap/three/shaders/ToneMapShader.js +53 -0
  471. data/lib-opal/js_wrap/three/shaders/ToonShader.js +148 -0
  472. data/lib-opal/js_wrap/three/shaders/TriangleBlurShader.js +47 -0
  473. data/lib-opal/js_wrap/three/shaders/UnpackDepthRGBAShader.js +42 -0
  474. data/lib-opal/js_wrap/three/shaders/VerticalBlurShader.js +47 -0
  475. data/lib-opal/js_wrap/three/shaders/VerticalTiltShiftShader.js +49 -0
  476. data/lib-opal/js_wrap/three/shaders/VignetteShader.js +46 -0
  477. data/lib-opal/js_wrap/three/shaders/VolumeShader.js +55 -0
  478. data/lib-opal/js_wrap/three/shaders/WaterRefractionShader.js +46 -0
  479. data/lib-opal/js_wrap/three/textures/FlakesTexture.js +61 -0
  480. data/lib-opal/js_wrap/three/utils/BufferGeometryUtils.js +683 -0
  481. data/lib-opal/js_wrap/three/utils/CameraUtils.js +97 -0
  482. data/lib-opal/js_wrap/three/utils/GPUStatsPanel.js +154 -0
  483. data/lib-opal/js_wrap/three/utils/GeometryCompressionUtils.js +468 -0
  484. data/lib-opal/js_wrap/three/utils/GeometryUtils.js +192 -0
  485. data/lib-opal/js_wrap/three/utils/PackedPhongMaterial.js +77 -0
  486. data/lib-opal/js_wrap/three/utils/RoughnessMipmapper.js +169 -0
  487. data/lib-opal/js_wrap/three/utils/SceneUtils.js +62 -0
  488. data/lib-opal/js_wrap/three/utils/ShadowMapViewer.js +182 -0
  489. data/lib-opal/js_wrap/three/utils/SkeletonUtils.js +400 -0
  490. data/lib-opal/js_wrap/three/utils/UVsDebug.js +132 -0
  491. data/lib-opal/js_wrap/three/utils/WorkerPool.js +130 -0
  492. data/lib-opal/js_wrap/three/webxr/ARButton.js +203 -0
  493. data/lib-opal/js_wrap/three/webxr/OculusHandModel.js +131 -0
  494. data/lib-opal/js_wrap/three/webxr/OculusHandPointerModel.js +328 -0
  495. data/lib-opal/js_wrap/three/webxr/Text2D.js +54 -0
  496. data/lib-opal/js_wrap/three/webxr/VRButton.js +181 -0
  497. data/lib-opal/js_wrap/three/webxr/XRControllerModelFactory.js +266 -0
  498. data/lib-opal/js_wrap/three/webxr/XREstimatedLight.js +221 -0
  499. data/lib-opal/js_wrap/three/webxr/XRHandMeshModel.js +93 -0
  500. data/lib-opal/js_wrap/three/webxr/XRHandModelFactory.js +127 -0
  501. data/lib-opal/js_wrap/three/webxr/XRHandPrimitiveModel.js +85 -0
  502. data/opal-js_wrap-three.gemspec +4 -4
  503. metadata +502 -5
@@ -0,0 +1,831 @@
1
+ (function (global, factory) {
2
+ if (typeof define === "function" && define.amd) {
3
+ define(["exports", "three", "./lwo/IFFParser.js"], factory);
4
+ } else if (typeof exports !== "undefined") {
5
+ factory(exports, require("three"), require("./lwo/IFFParser.js"));
6
+ } else {
7
+ var mod = {
8
+ exports: {}
9
+ };
10
+ factory(mod.exports, global.three, global.IFFParser);
11
+ global.LWOLoader = mod.exports;
12
+ }
13
+ })(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _three, _IFFParser) {
14
+ "use strict";
15
+
16
+ Object.defineProperty(_exports, "__esModule", {
17
+ value: true
18
+ });
19
+ _exports.LWOLoader = void 0;
20
+
21
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
22
+
23
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
24
+
25
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
26
+
27
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } Object.defineProperty(subClass, "prototype", { value: Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }), writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
28
+
29
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
30
+
31
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
32
+
33
+ function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
34
+
35
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
36
+
37
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
38
+
39
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
40
+
41
+ var _lwoTree;
42
+
43
+ var LWOLoader = /*#__PURE__*/function (_Loader) {
44
+ _inherits(LWOLoader, _Loader);
45
+
46
+ var _super = _createSuper(LWOLoader);
47
+
48
+ function LWOLoader(manager) {
49
+ var _this;
50
+
51
+ var parameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
52
+
53
+ _classCallCheck(this, LWOLoader);
54
+
55
+ _this = _super.call(this, manager);
56
+ _this.resourcePath = parameters.resourcePath !== undefined ? parameters.resourcePath : '';
57
+ return _this;
58
+ }
59
+
60
+ _createClass(LWOLoader, [{
61
+ key: "load",
62
+ value: function load(url, onLoad, onProgress, onError) {
63
+ var scope = this;
64
+ var path = scope.path === '' ? extractParentUrl(url, 'Objects') : scope.path; // give the mesh a default name based on the filename
65
+
66
+ var modelName = url.split(path).pop().split('.')[0];
67
+ var loader = new _three.FileLoader(this.manager);
68
+ loader.setPath(scope.path);
69
+ loader.setResponseType('arraybuffer');
70
+ loader.load(url, function (buffer) {
71
+ // console.time( 'Total parsing: ' );
72
+ try {
73
+ onLoad(scope.parse(buffer, path, modelName));
74
+ } catch (e) {
75
+ if (onError) {
76
+ onError(e);
77
+ } else {
78
+ console.error(e);
79
+ }
80
+
81
+ scope.manager.itemError(url);
82
+ } // console.timeEnd( 'Total parsing: ' );
83
+
84
+ }, onProgress, onError);
85
+ }
86
+ }, {
87
+ key: "parse",
88
+ value: function parse(iffBuffer, path, modelName) {
89
+ _lwoTree = new _IFFParser.IFFParser().parse(iffBuffer); // console.log( 'lwoTree', lwoTree );
90
+
91
+ var textureLoader = new _three.TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);
92
+ return new LWOTreeParser(textureLoader).parse(modelName);
93
+ }
94
+ }]);
95
+
96
+ return LWOLoader;
97
+ }(_three.Loader); // Parse the lwoTree object
98
+
99
+
100
+ _exports.LWOLoader = LWOLoader;
101
+
102
+ var LWOTreeParser = /*#__PURE__*/function () {
103
+ function LWOTreeParser(textureLoader) {
104
+ _classCallCheck(this, LWOTreeParser);
105
+
106
+ this.textureLoader = textureLoader;
107
+ }
108
+
109
+ _createClass(LWOTreeParser, [{
110
+ key: "parse",
111
+ value: function parse(modelName) {
112
+ this.materials = new MaterialParser(this.textureLoader).parse();
113
+ this.defaultLayerName = modelName;
114
+ this.meshes = this.parseLayers();
115
+ return {
116
+ materials: this.materials,
117
+ meshes: this.meshes
118
+ };
119
+ }
120
+ }, {
121
+ key: "parseLayers",
122
+ value: function parseLayers() {
123
+ // array of all meshes for building hierarchy
124
+ var meshes = []; // final array containing meshes with scene graph hierarchy set up
125
+
126
+ var finalMeshes = [];
127
+ var geometryParser = new GeometryParser();
128
+ var scope = this;
129
+
130
+ _lwoTree.layers.forEach(function (layer) {
131
+ var geometry = geometryParser.parse(layer.geometry, layer);
132
+ var mesh = scope.parseMesh(geometry, layer);
133
+ meshes[layer.number] = mesh;
134
+ if (layer.parent === -1) finalMeshes.push(mesh);else meshes[layer.parent].add(mesh);
135
+ });
136
+
137
+ this.applyPivots(finalMeshes);
138
+ return finalMeshes;
139
+ }
140
+ }, {
141
+ key: "parseMesh",
142
+ value: function parseMesh(geometry, layer) {
143
+ var mesh;
144
+ var materials = this.getMaterials(geometry.userData.matNames, layer.geometry.type);
145
+ this.duplicateUVs(geometry, materials);
146
+ if (layer.geometry.type === 'points') mesh = new _three.Points(geometry, materials);else if (layer.geometry.type === 'lines') mesh = new _three.LineSegments(geometry, materials);else mesh = new _three.Mesh(geometry, materials);
147
+ if (layer.name) mesh.name = layer.name;else mesh.name = this.defaultLayerName + '_layer_' + layer.number;
148
+ mesh.userData.pivot = layer.pivot;
149
+ return mesh;
150
+ } // TODO: may need to be reversed in z to convert LWO to three.js coordinates
151
+
152
+ }, {
153
+ key: "applyPivots",
154
+ value: function applyPivots(meshes) {
155
+ meshes.forEach(function (mesh) {
156
+ mesh.traverse(function (child) {
157
+ var pivot = child.userData.pivot;
158
+ child.position.x += pivot[0];
159
+ child.position.y += pivot[1];
160
+ child.position.z += pivot[2];
161
+
162
+ if (child.parent) {
163
+ var parentPivot = child.parent.userData.pivot;
164
+ child.position.x -= parentPivot[0];
165
+ child.position.y -= parentPivot[1];
166
+ child.position.z -= parentPivot[2];
167
+ }
168
+ });
169
+ });
170
+ }
171
+ }, {
172
+ key: "getMaterials",
173
+ value: function getMaterials(namesArray, type) {
174
+ var materials = [];
175
+ var scope = this;
176
+ namesArray.forEach(function (name, i) {
177
+ materials[i] = scope.getMaterialByName(name);
178
+ }); // convert materials to line or point mats if required
179
+
180
+ if (type === 'points' || type === 'lines') {
181
+ materials.forEach(function (mat, i) {
182
+ var spec = {
183
+ color: mat.color
184
+ };
185
+
186
+ if (type === 'points') {
187
+ spec.size = 0.1;
188
+ spec.map = mat.map;
189
+ materials[i] = new _three.PointsMaterial(spec);
190
+ } else if (type === 'lines') {
191
+ materials[i] = new _three.LineBasicMaterial(spec);
192
+ }
193
+ });
194
+ } // if there is only one material, return that directly instead of array
195
+
196
+
197
+ var filtered = materials.filter(Boolean);
198
+ if (filtered.length === 1) return filtered[0];
199
+ return materials;
200
+ }
201
+ }, {
202
+ key: "getMaterialByName",
203
+ value: function getMaterialByName(name) {
204
+ return this.materials.filter(function (m) {
205
+ return m.name === name;
206
+ })[0];
207
+ } // If the material has an aoMap, duplicate UVs
208
+
209
+ }, {
210
+ key: "duplicateUVs",
211
+ value: function duplicateUVs(geometry, materials) {
212
+ var duplicateUVs = false;
213
+
214
+ if (!Array.isArray(materials)) {
215
+ if (materials.aoMap) duplicateUVs = true;
216
+ } else {
217
+ materials.forEach(function (material) {
218
+ if (material.aoMap) duplicateUVs = true;
219
+ });
220
+ }
221
+
222
+ if (!duplicateUVs) return;
223
+ geometry.setAttribute('uv2', new _three.BufferAttribute(geometry.attributes.uv.array, 2));
224
+ }
225
+ }]);
226
+
227
+ return LWOTreeParser;
228
+ }();
229
+
230
+ var MaterialParser = /*#__PURE__*/function () {
231
+ function MaterialParser(textureLoader) {
232
+ _classCallCheck(this, MaterialParser);
233
+
234
+ this.textureLoader = textureLoader;
235
+ }
236
+
237
+ _createClass(MaterialParser, [{
238
+ key: "parse",
239
+ value: function parse() {
240
+ var materials = [];
241
+ this.textures = {};
242
+
243
+ for (var name in _lwoTree.materials) {
244
+ if (_lwoTree.format === 'LWO3') {
245
+ materials.push(this.parseMaterial(_lwoTree.materials[name], name, _lwoTree.textures));
246
+ } else if (_lwoTree.format === 'LWO2') {
247
+ materials.push(this.parseMaterialLwo2(_lwoTree.materials[name], name, _lwoTree.textures));
248
+ }
249
+ }
250
+
251
+ return materials;
252
+ }
253
+ }, {
254
+ key: "parseMaterial",
255
+ value: function parseMaterial(materialData, name, textures) {
256
+ var params = {
257
+ name: name,
258
+ side: this.getSide(materialData.attributes),
259
+ flatShading: this.getSmooth(materialData.attributes)
260
+ };
261
+ var connections = this.parseConnections(materialData.connections, materialData.nodes);
262
+ var maps = this.parseTextureNodes(connections.maps);
263
+ this.parseAttributeImageMaps(connections.attributes, textures, maps, materialData.maps);
264
+ var attributes = this.parseAttributes(connections.attributes, maps);
265
+ this.parseEnvMap(connections, maps, attributes);
266
+ params = Object.assign(maps, params);
267
+ params = Object.assign(params, attributes);
268
+ var materialType = this.getMaterialType(connections.attributes);
269
+ return new materialType(params);
270
+ }
271
+ }, {
272
+ key: "parseMaterialLwo2",
273
+ value: function parseMaterialLwo2(materialData, name
274
+ /*, textures*/
275
+ ) {
276
+ var params = {
277
+ name: name,
278
+ side: this.getSide(materialData.attributes),
279
+ flatShading: this.getSmooth(materialData.attributes)
280
+ };
281
+ var attributes = this.parseAttributes(materialData.attributes, {});
282
+ params = Object.assign(params, attributes);
283
+ return new _three.MeshPhongMaterial(params);
284
+ } // Note: converting from left to right handed coords by switching x -> -x in vertices, and
285
+ // then switching mat FrontSide -> BackSide
286
+ // NB: this means that FrontSide and BackSide have been switched!
287
+
288
+ }, {
289
+ key: "getSide",
290
+ value: function getSide(attributes) {
291
+ if (!attributes.side) return _three.BackSide;
292
+
293
+ switch (attributes.side) {
294
+ case 0:
295
+ case 1:
296
+ return _three.BackSide;
297
+
298
+ case 2:
299
+ return _three.FrontSide;
300
+
301
+ case 3:
302
+ return _three.DoubleSide;
303
+ }
304
+ }
305
+ }, {
306
+ key: "getSmooth",
307
+ value: function getSmooth(attributes) {
308
+ if (!attributes.smooth) return true;
309
+ return !attributes.smooth;
310
+ }
311
+ }, {
312
+ key: "parseConnections",
313
+ value: function parseConnections(connections, nodes) {
314
+ var materialConnections = {
315
+ maps: {}
316
+ };
317
+ var inputName = connections.inputName;
318
+ var inputNodeName = connections.inputNodeName;
319
+ var nodeName = connections.nodeName;
320
+ var scope = this;
321
+ inputName.forEach(function (name, index) {
322
+ if (name === 'Material') {
323
+ var matNode = scope.getNodeByRefName(inputNodeName[index], nodes);
324
+ materialConnections.attributes = matNode.attributes;
325
+ materialConnections.envMap = matNode.fileName;
326
+ materialConnections.name = inputNodeName[index];
327
+ }
328
+ });
329
+ nodeName.forEach(function (name, index) {
330
+ if (name === materialConnections.name) {
331
+ materialConnections.maps[inputName[index]] = scope.getNodeByRefName(inputNodeName[index], nodes);
332
+ }
333
+ });
334
+ return materialConnections;
335
+ }
336
+ }, {
337
+ key: "getNodeByRefName",
338
+ value: function getNodeByRefName(refName, nodes) {
339
+ for (var name in nodes) {
340
+ if (nodes[name].refName === refName) return nodes[name];
341
+ }
342
+ }
343
+ }, {
344
+ key: "parseTextureNodes",
345
+ value: function parseTextureNodes(textureNodes) {
346
+ var maps = {};
347
+
348
+ for (var name in textureNodes) {
349
+ var node = textureNodes[name];
350
+ var path = node.fileName;
351
+ if (!path) return;
352
+ var texture = this.loadTexture(path);
353
+ if (node.widthWrappingMode !== undefined) texture.wrapS = this.getWrappingType(node.widthWrappingMode);
354
+ if (node.heightWrappingMode !== undefined) texture.wrapT = this.getWrappingType(node.heightWrappingMode);
355
+
356
+ switch (name) {
357
+ case 'Color':
358
+ maps.map = texture;
359
+ break;
360
+
361
+ case 'Roughness':
362
+ maps.roughnessMap = texture;
363
+ maps.roughness = 1;
364
+ break;
365
+
366
+ case 'Specular':
367
+ maps.specularMap = texture;
368
+ maps.specular = 0xffffff;
369
+ break;
370
+
371
+ case 'Luminous':
372
+ maps.emissiveMap = texture;
373
+ maps.emissive = 0x808080;
374
+ break;
375
+
376
+ case 'Luminous Color':
377
+ maps.emissive = 0x808080;
378
+ break;
379
+
380
+ case 'Metallic':
381
+ maps.metalnessMap = texture;
382
+ maps.metalness = 1;
383
+ break;
384
+
385
+ case 'Transparency':
386
+ case 'Alpha':
387
+ maps.alphaMap = texture;
388
+ maps.transparent = true;
389
+ break;
390
+
391
+ case 'Normal':
392
+ maps.normalMap = texture;
393
+ if (node.amplitude !== undefined) maps.normalScale = new _three.Vector2(node.amplitude, node.amplitude);
394
+ break;
395
+
396
+ case 'Bump':
397
+ maps.bumpMap = texture;
398
+ break;
399
+ }
400
+ } // LWO BSDF materials can have both spec and rough, but this is not valid in three
401
+
402
+
403
+ if (maps.roughnessMap && maps.specularMap) delete maps.specularMap;
404
+ return maps;
405
+ } // maps can also be defined on individual material attributes, parse those here
406
+ // This occurs on Standard (Phong) surfaces
407
+
408
+ }, {
409
+ key: "parseAttributeImageMaps",
410
+ value: function parseAttributeImageMaps(attributes, textures, maps) {
411
+ for (var name in attributes) {
412
+ var attribute = attributes[name];
413
+
414
+ if (attribute.maps) {
415
+ var mapData = attribute.maps[0];
416
+ var path = this.getTexturePathByIndex(mapData.imageIndex, textures);
417
+ if (!path) return;
418
+ var texture = this.loadTexture(path);
419
+ if (mapData.wrap !== undefined) texture.wrapS = this.getWrappingType(mapData.wrap.w);
420
+ if (mapData.wrap !== undefined) texture.wrapT = this.getWrappingType(mapData.wrap.h);
421
+
422
+ switch (name) {
423
+ case 'Color':
424
+ maps.map = texture;
425
+ break;
426
+
427
+ case 'Diffuse':
428
+ maps.aoMap = texture;
429
+ break;
430
+
431
+ case 'Roughness':
432
+ maps.roughnessMap = texture;
433
+ maps.roughness = 1;
434
+ break;
435
+
436
+ case 'Specular':
437
+ maps.specularMap = texture;
438
+ maps.specular = 0xffffff;
439
+ break;
440
+
441
+ case 'Luminosity':
442
+ maps.emissiveMap = texture;
443
+ maps.emissive = 0x808080;
444
+ break;
445
+
446
+ case 'Metallic':
447
+ maps.metalnessMap = texture;
448
+ maps.metalness = 1;
449
+ break;
450
+
451
+ case 'Transparency':
452
+ case 'Alpha':
453
+ maps.alphaMap = texture;
454
+ maps.transparent = true;
455
+ break;
456
+
457
+ case 'Normal':
458
+ maps.normalMap = texture;
459
+ break;
460
+
461
+ case 'Bump':
462
+ maps.bumpMap = texture;
463
+ break;
464
+ }
465
+ }
466
+ }
467
+ }
468
+ }, {
469
+ key: "parseAttributes",
470
+ value: function parseAttributes(attributes, maps) {
471
+ var params = {}; // don't use color data if color map is present
472
+
473
+ if (attributes.Color && !maps.map) {
474
+ params.color = new _three.Color().fromArray(attributes.Color.value);
475
+ } else params.color = new _three.Color();
476
+
477
+ if (attributes.Transparency && attributes.Transparency.value !== 0) {
478
+ params.opacity = 1 - attributes.Transparency.value;
479
+ params.transparent = true;
480
+ }
481
+
482
+ if (attributes['Bump Height']) params.bumpScale = attributes['Bump Height'].value * 0.1;
483
+ if (attributes['Refraction Index']) params.refractionRatio = 0.98 / attributes['Refraction Index'].value;
484
+ this.parsePhysicalAttributes(params, attributes, maps);
485
+ this.parseStandardAttributes(params, attributes, maps);
486
+ this.parsePhongAttributes(params, attributes, maps);
487
+ return params;
488
+ }
489
+ }, {
490
+ key: "parsePhysicalAttributes",
491
+ value: function parsePhysicalAttributes(params, attributes
492
+ /*, maps*/
493
+ ) {
494
+ if (attributes.Clearcoat && attributes.Clearcoat.value > 0) {
495
+ params.clearcoat = attributes.Clearcoat.value;
496
+
497
+ if (attributes['Clearcoat Gloss']) {
498
+ params.clearcoatRoughness = 0.5 * (1 - attributes['Clearcoat Gloss'].value);
499
+ }
500
+ }
501
+ }
502
+ }, {
503
+ key: "parseStandardAttributes",
504
+ value: function parseStandardAttributes(params, attributes, maps) {
505
+ if (attributes.Luminous) {
506
+ params.emissiveIntensity = attributes.Luminous.value;
507
+
508
+ if (attributes['Luminous Color'] && !maps.emissive) {
509
+ params.emissive = new _three.Color().fromArray(attributes['Luminous Color'].value);
510
+ } else {
511
+ params.emissive = new _three.Color(0x808080);
512
+ }
513
+ }
514
+
515
+ if (attributes.Roughness && !maps.roughnessMap) params.roughness = attributes.Roughness.value;
516
+ if (attributes.Metallic && !maps.metalnessMap) params.metalness = attributes.Metallic.value;
517
+ }
518
+ }, {
519
+ key: "parsePhongAttributes",
520
+ value: function parsePhongAttributes(params, attributes, maps) {
521
+ if (attributes.Diffuse) params.color.multiplyScalar(attributes.Diffuse.value);
522
+
523
+ if (attributes.Reflection) {
524
+ params.reflectivity = attributes.Reflection.value;
525
+ params.combine = _three.AddOperation;
526
+ }
527
+
528
+ if (attributes.Luminosity) {
529
+ params.emissiveIntensity = attributes.Luminosity.value;
530
+
531
+ if (!maps.emissiveMap && !maps.map) {
532
+ params.emissive = params.color;
533
+ } else {
534
+ params.emissive = new _three.Color(0x808080);
535
+ }
536
+ } // parse specular if there is no roughness - we will interpret the material as 'Phong' in this case
537
+
538
+
539
+ if (!attributes.Roughness && attributes.Specular && !maps.specularMap) {
540
+ if (attributes['Color Highlight']) {
541
+ params.specular = new _three.Color().setScalar(attributes.Specular.value).lerp(params.color.clone().multiplyScalar(attributes.Specular.value), attributes['Color Highlight'].value);
542
+ } else {
543
+ params.specular = new _three.Color().setScalar(attributes.Specular.value);
544
+ }
545
+ }
546
+
547
+ if (params.specular && attributes.Glossiness) params.shininess = 7 + Math.pow(2, attributes.Glossiness.value * 12 + 2);
548
+ }
549
+ }, {
550
+ key: "parseEnvMap",
551
+ value: function parseEnvMap(connections, maps, attributes) {
552
+ if (connections.envMap) {
553
+ var envMap = this.loadTexture(connections.envMap);
554
+
555
+ if (attributes.transparent && attributes.opacity < 0.999) {
556
+ envMap.mapping = _three.EquirectangularRefractionMapping; // Reflectivity and refraction mapping don't work well together in Phong materials
557
+
558
+ if (attributes.reflectivity !== undefined) {
559
+ delete attributes.reflectivity;
560
+ delete attributes.combine;
561
+ }
562
+
563
+ if (attributes.metalness !== undefined) {
564
+ attributes.metalness = 1; // For most transparent materials metalness should be set to 1 if not otherwise defined. If set to 0 no refraction will be visible
565
+ }
566
+
567
+ attributes.opacity = 1; // transparency fades out refraction, forcing opacity to 1 ensures a closer visual match to the material in Lightwave.
568
+ } else envMap.mapping = _three.EquirectangularReflectionMapping;
569
+
570
+ maps.envMap = envMap;
571
+ }
572
+ } // get texture defined at top level by its index
573
+
574
+ }, {
575
+ key: "getTexturePathByIndex",
576
+ value: function getTexturePathByIndex(index) {
577
+ var fileName = '';
578
+ if (!_lwoTree.textures) return fileName;
579
+
580
+ _lwoTree.textures.forEach(function (texture) {
581
+ if (texture.index === index) fileName = texture.fileName;
582
+ });
583
+
584
+ return fileName;
585
+ }
586
+ }, {
587
+ key: "loadTexture",
588
+ value: function loadTexture(path) {
589
+ if (!path) return null;
590
+ var texture = this.textureLoader.load(path, undefined, undefined, function () {
591
+ console.warn('LWOLoader: non-standard resource hierarchy. Use \`resourcePath\` parameter to specify root content directory.');
592
+ });
593
+ return texture;
594
+ } // 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge
595
+
596
+ }, {
597
+ key: "getWrappingType",
598
+ value: function getWrappingType(num) {
599
+ switch (num) {
600
+ case 0:
601
+ console.warn('LWOLoader: "Reset" texture wrapping type is not supported in three.js');
602
+ return _three.ClampToEdgeWrapping;
603
+
604
+ case 1:
605
+ return _three.RepeatWrapping;
606
+
607
+ case 2:
608
+ return _three.MirroredRepeatWrapping;
609
+
610
+ case 3:
611
+ return _three.ClampToEdgeWrapping;
612
+ }
613
+ }
614
+ }, {
615
+ key: "getMaterialType",
616
+ value: function getMaterialType(nodeData) {
617
+ if (nodeData.Clearcoat && nodeData.Clearcoat.value > 0) return _three.MeshPhysicalMaterial;
618
+ if (nodeData.Roughness) return _three.MeshStandardMaterial;
619
+ return _three.MeshPhongMaterial;
620
+ }
621
+ }]);
622
+
623
+ return MaterialParser;
624
+ }();
625
+
626
+ var GeometryParser = /*#__PURE__*/function () {
627
+ function GeometryParser() {
628
+ _classCallCheck(this, GeometryParser);
629
+ }
630
+
631
+ _createClass(GeometryParser, [{
632
+ key: "parse",
633
+ value: function parse(geoData, layer) {
634
+ var geometry = new _three.BufferGeometry();
635
+ geometry.setAttribute('position', new _three.Float32BufferAttribute(geoData.points, 3));
636
+ var indices = this.splitIndices(geoData.vertexIndices, geoData.polygonDimensions);
637
+ geometry.setIndex(indices);
638
+ this.parseGroups(geometry, geoData);
639
+ geometry.computeVertexNormals();
640
+ this.parseUVs(geometry, layer, indices);
641
+ this.parseMorphTargets(geometry, layer, indices); // TODO: z may need to be reversed to account for coordinate system change
642
+
643
+ geometry.translate(-layer.pivot[0], -layer.pivot[1], -layer.pivot[2]); // let userData = geometry.userData;
644
+ // geometry = geometry.toNonIndexed()
645
+ // geometry.userData = userData;
646
+
647
+ return geometry;
648
+ } // split quads into tris
649
+
650
+ }, {
651
+ key: "splitIndices",
652
+ value: function splitIndices(indices, polygonDimensions) {
653
+ var remappedIndices = [];
654
+ var i = 0;
655
+ polygonDimensions.forEach(function (dim) {
656
+ if (dim < 4) {
657
+ for (var k = 0; k < dim; k++) {
658
+ remappedIndices.push(indices[i + k]);
659
+ }
660
+ } else if (dim === 4) {
661
+ remappedIndices.push(indices[i], indices[i + 1], indices[i + 2], indices[i], indices[i + 2], indices[i + 3]);
662
+ } else if (dim > 4) {
663
+ for (var _k = 1; _k < dim - 1; _k++) {
664
+ remappedIndices.push(indices[i], indices[i + _k], indices[i + _k + 1]);
665
+ }
666
+
667
+ console.warn('LWOLoader: polygons with greater than 4 sides are not supported');
668
+ }
669
+
670
+ i += dim;
671
+ });
672
+ return remappedIndices;
673
+ } // NOTE: currently ignoring poly indices and assuming that they are intelligently ordered
674
+
675
+ }, {
676
+ key: "parseGroups",
677
+ value: function parseGroups(geometry, geoData) {
678
+ var tags = _lwoTree.tags;
679
+ var matNames = [];
680
+ var elemSize = 3;
681
+ if (geoData.type === 'lines') elemSize = 2;
682
+ if (geoData.type === 'points') elemSize = 1;
683
+ var remappedIndices = this.splitMaterialIndices(geoData.polygonDimensions, geoData.materialIndices);
684
+ var indexNum = 0; // create new indices in numerical order
685
+
686
+ var indexPairs = {}; // original indices mapped to numerical indices
687
+
688
+ var prevMaterialIndex;
689
+ var materialIndex;
690
+ var prevStart = 0;
691
+ var currentCount = 0;
692
+
693
+ for (var i = 0; i < remappedIndices.length; i += 2) {
694
+ materialIndex = remappedIndices[i + 1];
695
+ if (i === 0) matNames[indexNum] = tags[materialIndex];
696
+ if (prevMaterialIndex === undefined) prevMaterialIndex = materialIndex;
697
+
698
+ if (materialIndex !== prevMaterialIndex) {
699
+ var currentIndex = void 0;
700
+
701
+ if (indexPairs[tags[prevMaterialIndex]]) {
702
+ currentIndex = indexPairs[tags[prevMaterialIndex]];
703
+ } else {
704
+ currentIndex = indexNum;
705
+ indexPairs[tags[prevMaterialIndex]] = indexNum;
706
+ matNames[indexNum] = tags[prevMaterialIndex];
707
+ indexNum++;
708
+ }
709
+
710
+ geometry.addGroup(prevStart, currentCount, currentIndex);
711
+ prevStart += currentCount;
712
+ prevMaterialIndex = materialIndex;
713
+ currentCount = 0;
714
+ }
715
+
716
+ currentCount += elemSize;
717
+ } // the loop above doesn't add the last group, do that here.
718
+
719
+
720
+ if (geometry.groups.length > 0) {
721
+ var _currentIndex;
722
+
723
+ if (indexPairs[tags[materialIndex]]) {
724
+ _currentIndex = indexPairs[tags[materialIndex]];
725
+ } else {
726
+ _currentIndex = indexNum;
727
+ indexPairs[tags[materialIndex]] = indexNum;
728
+ matNames[indexNum] = tags[materialIndex];
729
+ }
730
+
731
+ geometry.addGroup(prevStart, currentCount, _currentIndex);
732
+ } // Mat names from TAGS chunk, used to build up an array of materials for this geometry
733
+
734
+
735
+ geometry.userData.matNames = matNames;
736
+ }
737
+ }, {
738
+ key: "splitMaterialIndices",
739
+ value: function splitMaterialIndices(polygonDimensions, indices) {
740
+ var remappedIndices = [];
741
+ polygonDimensions.forEach(function (dim, i) {
742
+ if (dim <= 3) {
743
+ remappedIndices.push(indices[i * 2], indices[i * 2 + 1]);
744
+ } else if (dim === 4) {
745
+ remappedIndices.push(indices[i * 2], indices[i * 2 + 1], indices[i * 2], indices[i * 2 + 1]);
746
+ } else {
747
+ // ignore > 4 for now
748
+ for (var k = 0; k < dim - 2; k++) {
749
+ remappedIndices.push(indices[i * 2], indices[i * 2 + 1]);
750
+ }
751
+ }
752
+ });
753
+ return remappedIndices;
754
+ } // UV maps:
755
+ // 1: are defined via index into an array of points, not into a geometry
756
+ // - the geometry is also defined by an index into this array, but the indexes may not match
757
+ // 2: there can be any number of UV maps for a single geometry. Here these are combined,
758
+ // with preference given to the first map encountered
759
+ // 3: UV maps can be partial - that is, defined for only a part of the geometry
760
+ // 4: UV maps can be VMAP or VMAD (discontinuous, to allow for seams). In practice, most
761
+ // UV maps are defined as partially VMAP and partially VMAD
762
+ // VMADs are currently not supported
763
+
764
+ }, {
765
+ key: "parseUVs",
766
+ value: function parseUVs(geometry, layer) {
767
+ // start by creating a UV map set to zero for the whole geometry
768
+ var remappedUVs = Array.from(Array(geometry.attributes.position.count * 2), function () {
769
+ return 0;
770
+ });
771
+
772
+ var _loop = function _loop(name) {
773
+ var uvs = layer.uvs[name].uvs;
774
+ var uvIndices = layer.uvs[name].uvIndices;
775
+ uvIndices.forEach(function (i, j) {
776
+ remappedUVs[i * 2] = uvs[j * 2];
777
+ remappedUVs[i * 2 + 1] = uvs[j * 2 + 1];
778
+ });
779
+ };
780
+
781
+ for (var name in layer.uvs) {
782
+ _loop(name);
783
+ }
784
+
785
+ geometry.setAttribute('uv', new _three.Float32BufferAttribute(remappedUVs, 2));
786
+ }
787
+ }, {
788
+ key: "parseMorphTargets",
789
+ value: function parseMorphTargets(geometry, layer) {
790
+ var num = 0;
791
+
792
+ var _loop2 = function _loop2(name) {
793
+ var remappedPoints = geometry.attributes.position.array.slice();
794
+ if (!geometry.morphAttributes.position) geometry.morphAttributes.position = [];
795
+ var morphPoints = layer.morphTargets[name].points;
796
+ var morphIndices = layer.morphTargets[name].indices;
797
+ var type = layer.morphTargets[name].type;
798
+ morphIndices.forEach(function (i, j) {
799
+ if (type === 'relative') {
800
+ remappedPoints[i * 3] += morphPoints[j * 3];
801
+ remappedPoints[i * 3 + 1] += morphPoints[j * 3 + 1];
802
+ remappedPoints[i * 3 + 2] += morphPoints[j * 3 + 2];
803
+ } else {
804
+ remappedPoints[i * 3] = morphPoints[j * 3];
805
+ remappedPoints[i * 3 + 1] = morphPoints[j * 3 + 1];
806
+ remappedPoints[i * 3 + 2] = morphPoints[j * 3 + 2];
807
+ }
808
+ });
809
+ geometry.morphAttributes.position[num] = new _three.Float32BufferAttribute(remappedPoints, 3);
810
+ geometry.morphAttributes.position[num].name = name;
811
+ num++;
812
+ };
813
+
814
+ for (var name in layer.morphTargets) {
815
+ _loop2(name);
816
+ }
817
+
818
+ geometry.morphTargetsRelative = false;
819
+ }
820
+ }]);
821
+
822
+ return GeometryParser;
823
+ }(); // ************** UTILITY FUNCTIONS **************
824
+
825
+
826
+ function extractParentUrl(url, dir) {
827
+ var index = url.indexOf(dir);
828
+ if (index === -1) return './';
829
+ return url.substr(0, index);
830
+ }
831
+ });