x_ite 5.0.2 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. package/.vscode/settings.json +12 -5
  2. package/.vscode/tasks.json +21 -0
  3. package/Makefile +10 -15
  4. package/README.md +6 -11
  5. package/build/bin/dist.pl +0 -6
  6. package/build/bin/version.pl +1 -4
  7. package/dist/assets/components/annotation.js +2 -2
  8. package/dist/assets/components/annotation.min.js +1 -1
  9. package/dist/assets/components/cad-geometry.js +2 -2
  10. package/dist/assets/components/cad-geometry.min.js +1 -1
  11. package/dist/assets/components/cube-map-texturing.js +6 -19
  12. package/dist/assets/components/cube-map-texturing.min.js +1 -1
  13. package/dist/assets/components/dis.js +2 -2
  14. package/dist/assets/components/dis.min.js +1 -1
  15. package/dist/assets/components/event-utilities.js +3 -3
  16. package/dist/assets/components/event-utilities.min.js +1 -1
  17. package/dist/assets/components/geometry2d.js +4 -4
  18. package/dist/assets/components/geometry2d.min.js +1 -1
  19. package/dist/assets/components/geospatial.js +32 -1685
  20. package/dist/assets/components/geospatial.min.js +1 -1
  21. package/dist/assets/components/h-anim.js +70 -77
  22. package/dist/assets/components/h-anim.min.js +1 -1
  23. package/dist/assets/components/key-device-sensor.js +3 -3
  24. package/dist/assets/components/key-device-sensor.min.js +1 -1
  25. package/dist/assets/components/layout.js +38 -52
  26. package/dist/assets/components/layout.min.js +1 -1
  27. package/dist/assets/components/nurbs.js +277 -194
  28. package/dist/assets/components/nurbs.min.js +1 -1
  29. package/dist/assets/components/particle-systems.js +1918 -1658
  30. package/dist/assets/components/particle-systems.min.js +1 -1
  31. package/dist/assets/components/picking.js +33 -41
  32. package/dist/assets/components/picking.min.js +1 -1
  33. package/dist/assets/components/projective-texture-mapping.js +72 -86
  34. package/dist/assets/components/projective-texture-mapping.min.js +1 -1
  35. package/dist/assets/components/rigid-body-physics.js +36 -57
  36. package/dist/assets/components/rigid-body-physics.min.js +1 -1
  37. package/dist/assets/components/scripting.js +2 -2
  38. package/dist/assets/components/scripting.min.js +1 -1
  39. package/dist/assets/components/texturing-3d.js +26 -75
  40. package/dist/assets/components/texturing-3d.min.js +3 -3
  41. package/dist/assets/components/volume-rendering.js +10 -10
  42. package/dist/assets/components/volume-rendering.min.js +1 -1
  43. package/dist/assets/components/x_ite.js +2 -2
  44. package/dist/assets/components/x_ite.min.js +1 -1
  45. package/dist/assets/linetype/1.png +0 -0
  46. package/dist/assets/linetype/10.png +0 -0
  47. package/dist/assets/linetype/11.png +0 -0
  48. package/dist/assets/linetype/12.png +0 -0
  49. package/dist/assets/linetype/13.png +0 -0
  50. package/dist/assets/linetype/14.png +0 -0
  51. package/dist/assets/linetype/15.png +0 -0
  52. package/dist/assets/linetype/16.png +0 -0
  53. package/dist/assets/linetype/2.png +0 -0
  54. package/dist/assets/linetype/3.png +0 -0
  55. package/dist/assets/linetype/4.png +0 -0
  56. package/dist/assets/linetype/5.png +0 -0
  57. package/dist/assets/linetype/6.png +0 -0
  58. package/dist/assets/linetype/7.png +0 -0
  59. package/dist/assets/linetype/8.png +0 -0
  60. package/dist/assets/linetype/9.png +0 -0
  61. package/dist/assets/shaders/webgl1/Line.fs +0 -21
  62. package/dist/assets/shaders/webgl1/Line.vs +0 -10
  63. package/dist/assets/shaders/webgl1/PBR.vs +1 -1
  64. package/dist/assets/shaders/webgl2/Depth.vs +29 -1
  65. package/dist/assets/shaders/webgl2/Gouraud.vs +31 -3
  66. package/dist/assets/shaders/webgl2/Line.fs +24 -12
  67. package/dist/assets/shaders/webgl2/Line.vs +36 -11
  68. package/dist/assets/shaders/webgl2/LineTransform.fs +4 -0
  69. package/dist/assets/shaders/webgl2/LineTransform.vs +57 -0
  70. package/dist/assets/shaders/webgl2/PBR.vs +35 -7
  71. package/dist/assets/shaders/webgl2/Phong.vs +31 -3
  72. package/dist/assets/shaders/webgl2/Point.vs +29 -1
  73. package/dist/assets/shaders/webgl2/Unlit.vs +31 -3
  74. package/dist/example.html +6 -6
  75. package/dist/x_ite.css +180 -208
  76. package/dist/x_ite.js +16477 -16629
  77. package/dist/x_ite.min.js +17 -17
  78. package/dist/x_ite.zip +0 -0
  79. package/docs/404.md +6 -0
  80. package/docs/Accessing-the-External-Browser.md +20 -14
  81. package/docs/Browser-Support.md +6 -0
  82. package/docs/Custom-Shaders.md +17 -24
  83. package/docs/Features.md +7 -1
  84. package/docs/Gemfile +44 -0
  85. package/docs/Gemfile.lock +122 -0
  86. package/docs/Glossary.md +6 -0
  87. package/docs/How-To-Configure-Your-Web-Server.md +6 -0
  88. package/docs/Supported-Nodes.md +9 -1
  89. package/docs/What's-New.md +31 -0
  90. package/docs/XHTML-DOM-Integration.md +6 -0
  91. package/docs/_config.yml +1 -1
  92. package/docs/assets/css/main.scss +26 -0
  93. package/docs/index.md +38 -46
  94. package/docs/reference/Browser-Services.md +9 -3
  95. package/docs/reference/Constants-Services.md +6 -0
  96. package/docs/reference/ECMAScript-Object-and-Function-Definitions.md +6 -0
  97. package/docs/reference/Field-Services-and-Objects.md +6 -0
  98. package/docs/reference/Prototype-Services.md +6 -0
  99. package/docs/reference/Route-Services.md +6 -0
  100. package/docs/reference/Scene-Services.md +8 -2
  101. package/docs/reference/Script-Node-Authoring-Interface.md +7 -1
  102. package/docs/tutorials/Adding-backgrounds.md +6 -0
  103. package/docs/tutorials/Adding-fog.md +6 -0
  104. package/docs/tutorials/Adding-sound.md +6 -0
  105. package/docs/tutorials/Animating-transforms.md +6 -0
  106. package/docs/tutorials/Basic-Nodes.md +6 -0
  107. package/docs/tutorials/Building-a-X3D-world.md +6 -0
  108. package/docs/tutorials/Building-elevation-grids.md +6 -0
  109. package/docs/tutorials/Building-extruded-shapes.md +6 -0
  110. package/docs/tutorials/Building-primitive-shapes.md +6 -0
  111. package/docs/tutorials/Building-shapes-out-of-points,-lines,-and-faces.md +6 -0
  112. package/docs/tutorials/Controlling-appearance-with-materials.md +6 -0
  113. package/docs/tutorials/Controlling-color-on-coordinate-based-geometry.md +6 -0
  114. package/docs/tutorials/Controlling-detail.md +6 -0
  115. package/docs/tutorials/Controlling-how-textures-are-mapped.md +6 -0
  116. package/docs/tutorials/Controlling-navigation.md +6 -0
  117. package/docs/tutorials/Controlling-shading-on-coordinate-based-geometry.md +6 -0
  118. package/docs/tutorials/Controlling-the-viewpoint.md +6 -0
  119. package/docs/tutorials/Creating-new-node-types.md +6 -0
  120. package/docs/tutorials/Grouping-nodes.md +6 -0
  121. package/docs/tutorials/Hello,-World!.md +6 -0
  122. package/docs/tutorials/Improving-Performance.md +6 -0
  123. package/docs/tutorials/Increasing-Rendering-Speed.md +6 -0
  124. package/docs/tutorials/Introducing-X3D.md +6 -0
  125. package/docs/tutorials/Introducing-animation.md +6 -0
  126. package/docs/tutorials/Introducing-script-use.md +6 -0
  127. package/docs/tutorials/Lighting-your-world.md +6 -0
  128. package/docs/tutorials/Mapping-textures.md +6 -0
  129. package/docs/tutorials/Naming-nodes.md +6 -0
  130. package/docs/tutorials/Providing-information-about-your-world.md +6 -0
  131. package/docs/tutorials/Sensing-the-viewer.md +6 -0
  132. package/docs/tutorials/Sensing-viewer-actions.md +6 -0
  133. package/docs/tutorials/Transforming-Shapes.md +6 -0
  134. package/docs/tutorials/Writing-program-scripts-with-ECMAScript.md +6 -0
  135. package/docs/tutorials/index.md +6 -0
  136. package/package.json +6 -7
  137. package/src/assets/components/geometry2d.js +1 -1
  138. package/src/assets/components/key-device-sensor.js +1 -1
  139. package/src/assets/components/layout.js +1 -1
  140. package/src/assets/components/particle-systems.js +1 -1
  141. package/src/assets/components/volume-rendering.js +1 -1
  142. package/src/assets/linetype/1.png +0 -0
  143. package/src/assets/linetype/10.png +0 -0
  144. package/src/assets/linetype/11.png +0 -0
  145. package/src/assets/linetype/12.png +0 -0
  146. package/src/assets/linetype/13.png +0 -0
  147. package/src/assets/linetype/14.png +0 -0
  148. package/src/assets/linetype/15.png +0 -0
  149. package/src/assets/linetype/16.png +0 -0
  150. package/src/assets/linetype/2.png +0 -0
  151. package/src/assets/linetype/3.png +0 -0
  152. package/src/assets/linetype/4.png +0 -0
  153. package/src/assets/linetype/5.png +0 -0
  154. package/src/assets/linetype/6.png +0 -0
  155. package/src/assets/linetype/7.png +0 -0
  156. package/src/assets/linetype/8.png +0 -0
  157. package/src/assets/linetype/9.png +0 -0
  158. package/src/assets/shaders/Types.glsl +1 -9
  159. package/src/assets/shaders/webgl1/Line.fs +3 -28
  160. package/src/assets/shaders/webgl1/Line.vs +5 -19
  161. package/src/assets/shaders/webgl1/PBR.vs +1 -1
  162. package/src/assets/shaders/webgl1/Point.vs +2 -3
  163. package/src/assets/shaders/webgl2/Depth.vs +4 -1
  164. package/src/assets/shaders/webgl2/Gouraud.vs +5 -3
  165. package/src/assets/shaders/webgl2/Line.fs +11 -17
  166. package/src/assets/shaders/webgl2/Line.vs +16 -20
  167. package/src/assets/shaders/webgl2/LineTransform.fs +6 -0
  168. package/src/assets/shaders/webgl2/LineTransform.vs +77 -0
  169. package/src/assets/shaders/webgl2/PBR.vs +10 -7
  170. package/src/assets/shaders/webgl2/Phong.vs +6 -3
  171. package/src/assets/shaders/webgl2/Point.vs +6 -6
  172. package/src/assets/shaders/webgl2/Unlit.vs +6 -3
  173. package/src/assets/shaders/webgl2/include/Line2.glsl +20 -0
  174. package/src/assets/shaders/webgl2/include/Particle.glsl +36 -0
  175. package/src/example.html +6 -6
  176. package/src/standard/Math/Algorithm.js +12 -28
  177. package/src/standard/Math/Geometry/Plane3.js +0 -2
  178. package/src/standard/Math/Geometry/ViewVolume.js +88 -83
  179. package/src/standard/Math/Numbers/Color3.js +6 -0
  180. package/src/standard/Math/Numbers/Color4.js +7 -0
  181. package/src/standard/Math/Numbers/Complex.js +5 -0
  182. package/src/standard/Math/Numbers/Matrix2.js +20 -2
  183. package/src/standard/Math/Numbers/Matrix3.js +129 -110
  184. package/src/standard/Math/Numbers/Matrix4.js +138 -119
  185. package/src/standard/Math/Numbers/Quaternion.js +7 -0
  186. package/src/standard/Math/Numbers/Rotation4.js +7 -0
  187. package/src/standard/Math/Numbers/Vector2.js +8 -5
  188. package/src/standard/Math/Numbers/Vector3.js +16 -10
  189. package/src/standard/Math/Numbers/Vector4.js +12 -7
  190. package/src/standard/Math/Utility/BVH.js +45 -17
  191. package/src/tests.js +6 -1
  192. package/src/x_ite/Base/X3DBaseNode.js +22 -11
  193. package/src/x_ite/Base/X3DField.js +1 -1
  194. package/src/x_ite/Browser/Core/BrowserOptions.js +2 -2
  195. package/src/x_ite/Browser/Core/BrowserTimings.js +4 -2
  196. package/src/x_ite/Browser/Core/Context.js +185 -0
  197. package/src/x_ite/Browser/Core/ContextMenu.js +299 -193
  198. package/src/x_ite/Browser/Core/Notification.js +1 -0
  199. package/src/x_ite/Browser/Core/X3DCoreContext.js +35 -146
  200. package/src/x_ite/Browser/Layout/ScreenText.js +11 -4
  201. package/src/x_ite/Browser/Layout/X3DLayoutContext.js +4 -15
  202. package/src/x_ite/Browser/Navigation/ExamineViewer.js +12 -19
  203. package/src/x_ite/Browser/Navigation/LookAtViewer.js +0 -3
  204. package/src/x_ite/Browser/Navigation/PlaneViewer.js +0 -3
  205. package/src/x_ite/Browser/Navigation/X3DFlyViewer.js +14 -7
  206. package/src/x_ite/Browser/Navigation/X3DViewer.js +12 -20
  207. package/src/x_ite/Browser/Networking/X3DNetworkingContext.js +11 -7
  208. package/src/x_ite/Browser/ParticleSystems/BVH.glsl +183 -0
  209. package/src/x_ite/Browser/ParticleSystems/Box3.glsl +47 -0
  210. package/src/x_ite/Browser/ParticleSystems/GeometryTypes.js +66 -0
  211. package/src/x_ite/Browser/ParticleSystems/Line3.glsl +55 -0
  212. package/src/x_ite/Browser/ParticleSystems/Plane3.glsl +160 -0
  213. package/src/x_ite/Browser/PointingDeviceSensor/PointingDevice.js +27 -3
  214. package/src/x_ite/Browser/PointingDeviceSensor/X3DPointingDeviceSensorContext.js +37 -37
  215. package/src/x_ite/Browser/Rendering/X3DRenderingContext.js +19 -13
  216. package/src/x_ite/Browser/Shaders/Shader.js +33 -12
  217. package/src/x_ite/Browser/Shaders/ShaderSource.js +6 -0
  218. package/src/x_ite/Browser/Shaders/ShaderTest.js +16 -10
  219. package/src/x_ite/Browser/Shape/X3DShapeContext.js +50 -9
  220. package/src/x_ite/Browser/Text/X3DTextContext.js +4 -13
  221. package/src/x_ite/Browser/Texturing/X3DTexturingContext.js +23 -33
  222. package/src/x_ite/Browser/Texturing3D/DICOMParser.js +2 -2
  223. package/src/x_ite/Browser/Time/X3DTimeContext.js +3 -1
  224. package/src/x_ite/Browser/VERSION.js +1 -1
  225. package/src/x_ite/Browser/X3DBrowser.js +7 -6
  226. package/src/x_ite/Browser/X3DBrowserContext.js +35 -10
  227. package/src/x_ite/Components/Core/X3DNode.js +4 -0
  228. package/src/x_ite/Components/Core/X3DPrototypeInstance.js +0 -2
  229. package/src/x_ite/Components/CubeMapTexturing/ComposedCubeMapTexture.js +3 -4
  230. package/src/x_ite/Components/CubeMapTexturing/GeneratedCubeMapTexture.js +1 -12
  231. package/src/x_ite/Components/CubeMapTexturing/ImageCubeMapTexture.js +0 -1
  232. package/src/x_ite/Components/EnvironmentalEffects/TextureBackground.js +1 -1
  233. package/src/x_ite/Components/EnvironmentalEffects/X3DBackgroundNode.js +76 -77
  234. package/src/x_ite/Components/EnvironmentalEffects/X3DFogObject.js +2 -9
  235. package/src/x_ite/Components/EnvironmentalSensor/ProximitySensor.js +51 -65
  236. package/src/x_ite/Components/EventUtilities/X3DSequencerNode.js +1 -1
  237. package/src/x_ite/Components/Followers/X3DChaserNode.js +18 -32
  238. package/src/x_ite/Components/Followers/X3DDamperNode.js +1 -6
  239. package/src/x_ite/Components/Geometry2D/TriangleSet2D.js +1 -1
  240. package/src/x_ite/Components/Geometry3D/ElevationGrid.js +12 -4
  241. package/src/x_ite/Components/Geometry3D/IndexedFaceSet.js +4 -4
  242. package/src/x_ite/Components/Geospatial/GeoCoordinate.js +10 -27
  243. package/src/x_ite/Components/Geospatial/GeoPositionInterpolator.js +5 -10
  244. package/src/x_ite/Components/Geospatial/GeoTouchSensor.js +9 -16
  245. package/src/x_ite/Components/Geospatial/GeoTransform.js +6 -18
  246. package/src/x_ite/Components/Geospatial/X3DGeospatialObject.js +20 -27
  247. package/src/x_ite/Components/Grouping/X3DGroupingNode.js +8 -8
  248. package/src/x_ite/Components/Grouping/X3DTransformNode.js +0 -4
  249. package/src/x_ite/Components/HAnim/HAnimHumanoid.js +68 -75
  250. package/src/x_ite/Components/Interpolation/OrientationInterpolator.js +4 -11
  251. package/src/x_ite/Components/Interpolation/X3DInterpolatorNode.js +1 -1
  252. package/src/x_ite/Components/Layout/LayoutGroup.js +4 -9
  253. package/src/x_ite/Components/Layout/ScreenFontStyle.js +1 -1
  254. package/src/x_ite/Components/Layout/ScreenGroup.js +18 -23
  255. package/src/x_ite/Components/Lighting/DirectionalLight.js +28 -36
  256. package/src/x_ite/Components/Lighting/PointLight.js +32 -47
  257. package/src/x_ite/Components/Lighting/SpotLight.js +33 -48
  258. package/src/x_ite/Components/Navigation/Billboard.js +49 -56
  259. package/src/x_ite/Components/Navigation/LOD.js +1 -1
  260. package/src/x_ite/Components/Navigation/X3DViewpointNode.js +82 -111
  261. package/src/x_ite/Components/Networking/Anchor.js +10 -4
  262. package/src/x_ite/Components/ParticleSystems/BoundedPhysicsModel.js +6 -6
  263. package/src/x_ite/Components/ParticleSystems/ConeEmitter.js +44 -36
  264. package/src/x_ite/Components/ParticleSystems/ExplosionEmitter.js +26 -17
  265. package/src/x_ite/Components/ParticleSystems/ForcePhysicsModel.js +20 -7
  266. package/src/x_ite/Components/ParticleSystems/ParticleSystem.js +461 -876
  267. package/src/x_ite/Components/ParticleSystems/PointEmitter.js +39 -35
  268. package/src/x_ite/Components/ParticleSystems/PolylineEmitter.js +112 -128
  269. package/src/x_ite/Components/ParticleSystems/SurfaceEmitter.js +105 -112
  270. package/src/x_ite/Components/ParticleSystems/VolumeEmitter.js +138 -176
  271. package/src/x_ite/Components/ParticleSystems/WindPhysicsModel.js +16 -11
  272. package/src/x_ite/Components/ParticleSystems/X3DParticleEmitterNode.js +807 -217
  273. package/src/x_ite/Components/Picking/LinePickSensor.js +31 -39
  274. package/src/x_ite/Components/PointingDeviceSensor/CylinderSensor.js +90 -107
  275. package/src/x_ite/Components/PointingDeviceSensor/PlaneSensor.js +48 -55
  276. package/src/x_ite/Components/PointingDeviceSensor/SphereSensor.js +53 -70
  277. package/src/x_ite/Components/PointingDeviceSensor/TouchSensor.js +8 -15
  278. package/src/x_ite/Components/ProjectiveTextureMapping/TextureProjectorParallel.js +43 -50
  279. package/src/x_ite/Components/ProjectiveTextureMapping/TextureProjectorPerspective.js +32 -39
  280. package/src/x_ite/Components/Rendering/ClipPlane.js +3 -11
  281. package/src/x_ite/Components/Rendering/Color.js +12 -37
  282. package/src/x_ite/Components/Rendering/ColorRGBA.js +13 -38
  283. package/src/x_ite/Components/Rendering/IndexedLineSet.js +12 -4
  284. package/src/x_ite/Components/Rendering/LineSet.js +21 -13
  285. package/src/x_ite/Components/Rendering/PointSet.js +21 -13
  286. package/src/x_ite/Components/Rendering/X3DColorNode.js +13 -0
  287. package/src/x_ite/Components/Rendering/X3DComposedGeometryNode.js +13 -5
  288. package/src/x_ite/Components/Rendering/X3DGeometryNode.js +248 -325
  289. package/src/x_ite/Components/Rendering/X3DLineGeometryNode.js +305 -134
  290. package/src/x_ite/Components/Rendering/X3DPointGeometryNode.js +99 -122
  291. package/src/x_ite/Components/RigidBodyPhysics/DoubleAxisHingeJoint.js +24 -38
  292. package/src/x_ite/Components/RigidBodyPhysics/SingleAxisHingeJoint.js +10 -17
  293. package/src/x_ite/Components/Shaders/ComposedShader.js +35 -75
  294. package/src/x_ite/Components/Shaders/FloatVertexAttribute.js +5 -15
  295. package/src/x_ite/Components/Shaders/Matrix3VertexAttribute.js +7 -24
  296. package/src/x_ite/Components/Shaders/Matrix4VertexAttribute.js +7 -24
  297. package/src/x_ite/Components/Shaders/ShaderPart.js +1 -10
  298. package/src/x_ite/Components/Shaders/X3DProgrammableShaderObject.js +219 -209
  299. package/src/x_ite/Components/Shaders/X3DShaderNode.js +1 -1
  300. package/src/x_ite/Components/Shaders/X3DVertexAttributeNode.js +23 -1
  301. package/src/x_ite/Components/Shape/Appearance.js +12 -0
  302. package/src/x_ite/Components/Shape/FillProperties.js +12 -1
  303. package/src/x_ite/Components/Shape/LineProperties.js +33 -1
  304. package/src/x_ite/Components/Shape/PointProperties.js +23 -1
  305. package/src/x_ite/Components/Shape/Shape.js +27 -34
  306. package/src/x_ite/Components/Sound/Sound.js +30 -40
  307. package/src/x_ite/Components/Text/Text.js +6 -20
  308. package/src/x_ite/Components/Texturing/TextureCoordinate.js +5 -26
  309. package/src/x_ite/Components/Texturing/TextureProperties.js +4 -4
  310. package/src/x_ite/Components/Texturing/X3DSingleTextureCoordinateNode.js +21 -0
  311. package/src/x_ite/Components/Texturing/X3DSingleTextureNode.js +5 -4
  312. package/src/x_ite/Components/Texturing/X3DTexture2DNode.js +24 -33
  313. package/src/x_ite/Components/Texturing3D/TextureCoordinate3D.js +5 -26
  314. package/src/x_ite/Components/Texturing3D/TextureCoordinate4D.js +5 -26
  315. package/src/x_ite/Components/Texturing3D/X3DTexture3DNode.js +12 -19
  316. package/src/x_ite/Components/VolumeRendering/X3DVolumeDataNode.js +7 -7
  317. package/src/x_ite/Components.js +2 -2
  318. package/src/x_ite/Fallback.js +9 -3
  319. package/src/x_ite/Fields/SFColor.js +4 -0
  320. package/src/x_ite/Fields/SFColorRGBA.js +4 -0
  321. package/src/x_ite/Fields/SFMatrixPrototypeTemplate.js +4 -0
  322. package/src/x_ite/Fields/SFRotation.js +4 -0
  323. package/src/x_ite/Fields/SFString.js +4 -0
  324. package/src/x_ite/Fields/SFVecPrototypeTemplate.js +4 -0
  325. package/src/x_ite/Parser/XMLParser.js +1 -1
  326. package/src/x_ite/Rendering/TextureBuffer.js +43 -36
  327. package/src/x_ite/Rendering/VertexArray.js +101 -0
  328. package/src/x_ite/Rendering/X3DRenderObject.js +123 -144
  329. package/src/x_ite/X3D.js +32 -26
  330. package/src/x_ite.config.js +0 -5
  331. package/src/x_ite.css +200 -162
  332. package/src/x_ite.html +26 -10
  333. package/src/x_ite.js +42 -0
  334. package/x_ite.min.html +26 -10
  335. package/dist/assets/hatching/0.png +0 -0
  336. package/dist/assets/linetype/0.png +0 -0
  337. package/src/assets/hatching/0.png +0 -0
  338. package/src/assets/linetype/0.png +0 -0
  339. package/src/spinner.css +0 -67
  340. package/src/x_ite/Browser/Shape/LineStipples.xcf +0 -0
@@ -70,25 +70,38 @@ function (Fields,
70
70
 
71
71
  this .addType (X3DConstants .PointEmitter);
72
72
 
73
- this ._position .setUnit ("length");
74
- this ._speed .setUnit ("speed");
75
- this ._mass .setUnit ("mass");
76
- this ._surfaceArea .setUnit ("area");
73
+ this ._position .setUnit ("length");
77
74
 
78
- this .direction = new Vector3 (0, 0, 0);
75
+ this .addUniform ("position", "uniform vec3 position;");
76
+ this .addUniform ("direction", "uniform vec3 direction;");
77
+
78
+ this .addFunction (/* glsl */ `vec3 getRandomVelocity ()
79
+ {
80
+ if (direction == vec3 (0.0))
81
+ return getRandomSphericalVelocity ();
82
+
83
+ else
84
+ return direction * getRandomSpeed ();
85
+ }`);
86
+
87
+ this .addFunction (/* glsl */ `vec4 getRandomPosition ()
88
+ {
89
+ return vec4 (position, 1.0);
90
+ }`);
79
91
  }
80
92
 
81
93
  PointEmitter .prototype = Object .assign (Object .create (X3DParticleEmitterNode .prototype),
82
94
  {
83
95
  constructor: PointEmitter,
84
96
  [Symbol .for ("X_ITE.X3DBaseNode.fieldDefinitions")]: new FieldDefinitionArray ([
85
- new X3DFieldDefinition (X3DConstants .inputOutput, "metadata", new Fields .SFNode ()),
86
- new X3DFieldDefinition (X3DConstants .inputOutput, "position", new Fields .SFVec3f ()),
87
- new X3DFieldDefinition (X3DConstants .inputOutput, "direction", new Fields .SFVec3f (0, 1, 0)),
88
- new X3DFieldDefinition (X3DConstants .inputOutput, "speed", new Fields .SFFloat ()),
89
- new X3DFieldDefinition (X3DConstants .inputOutput, "variation", new Fields .SFFloat (0.25)),
90
- new X3DFieldDefinition (X3DConstants .initializeOnly, "mass", new Fields .SFFloat ()),
91
- new X3DFieldDefinition (X3DConstants .initializeOnly, "surfaceArea", new Fields .SFFloat ()),
97
+ new X3DFieldDefinition (X3DConstants .inputOutput, "metadata", new Fields .SFNode ()),
98
+ new X3DFieldDefinition (X3DConstants .inputOutput, "on", new Fields .SFBool (true)),
99
+ new X3DFieldDefinition (X3DConstants .inputOutput, "position", new Fields .SFVec3f ()),
100
+ new X3DFieldDefinition (X3DConstants .inputOutput, "direction", new Fields .SFVec3f (0, 1, 0)),
101
+ new X3DFieldDefinition (X3DConstants .inputOutput, "speed", new Fields .SFFloat ()),
102
+ new X3DFieldDefinition (X3DConstants .inputOutput, "variation", new Fields .SFFloat (0.25)),
103
+ new X3DFieldDefinition (X3DConstants .inputOutput, "mass", new Fields .SFFloat ()),
104
+ new X3DFieldDefinition (X3DConstants .inputOutput, "surfaceArea", new Fields .SFFloat ()),
92
105
  ]),
93
106
  getTypeName: function ()
94
107
  {
@@ -106,7 +119,10 @@ function (Fields,
106
119
  {
107
120
  X3DParticleEmitterNode .prototype .initialize .call (this);
108
121
 
109
- this ._position .addInterest ("set_position__", this);
122
+ if (this .getBrowser () .getContext () .getVersion () < 2)
123
+ return;
124
+
125
+ this ._position .addInterest ("set_position__", this);
110
126
  this ._direction .addInterest ("set_direction__", this);
111
127
 
112
128
  this .set_position__ ();
@@ -114,33 +130,21 @@ function (Fields,
114
130
  },
115
131
  set_position__: function ()
116
132
  {
117
- this .position = this ._position .getValue ()
118
- },
119
- set_direction__: function ()
120
- {
121
- this .direction .assign (this ._direction .getValue ()) .normalize ();
133
+ const position = this ._position .getValue ();
122
134
 
123
- if (this .direction .equals (Vector3 .Zero))
124
- this .getRandomVelocity = this .getSphericalRandomVelocity;
125
- else
126
- delete this .getRandomVelocity;
127
- },
128
- getRandomPosition: function (position)
129
- {
130
- return position .assign (this .position);
135
+ this .setUniform ("uniform3f", "position", position .x, position .y, position .z);
131
136
  },
132
- getRandomVelocity: function (velocity)
137
+ set_direction__: (function ()
133
138
  {
134
- var
135
- direction = this .direction,
136
- speed = this .getRandomSpeed ();
139
+ const direction = new Vector3 (0, 0, 0);
137
140
 
138
- velocity .x = direction .x * speed;
139
- velocity .y = direction .y * speed;
140
- velocity .z = direction .z * speed;
141
+ return function ()
142
+ {
143
+ direction .assign (this ._direction .getValue ()) .normalize ();
141
144
 
142
- return velocity;
143
- },
145
+ this .setUniform ("uniform3f", "direction", direction .x, direction .y, direction .z);
146
+ };
147
+ })(),
144
148
  });
145
149
 
146
150
  return PointEmitter;
@@ -55,7 +55,6 @@ define ([
55
55
  "x_ite/Components/Rendering/IndexedLineSet",
56
56
  "x_ite/Base/X3DConstants",
57
57
  "standard/Math/Numbers/Vector3",
58
- "standard/Math/Algorithm",
59
58
  ],
60
59
  function (Fields,
61
60
  X3DFieldDefinition,
@@ -63,8 +62,7 @@ function (Fields,
63
62
  X3DParticleEmitterNode,
64
63
  IndexedLineSet,
65
64
  X3DConstants,
66
- Vector3,
67
- Algorithm)
65
+ Vector3)
68
66
  {
69
67
  "use strict";
70
68
 
@@ -74,28 +72,69 @@ function (Fields,
74
72
 
75
73
  this .addType (X3DConstants .PolylineEmitter);
76
74
 
77
- this ._speed .setUnit ("speed");
78
- this ._mass .setUnit ("mass");
79
- this ._surfaceArea .setUnit ("area");
75
+ this .polylinesNode = new IndexedLineSet (executionContext);
76
+ this .polylinesArray = new Float32Array ();
80
77
 
81
- this .direction = new Vector3 (0, 0, 0);
82
- this .polylineNode = new IndexedLineSet (executionContext);
83
- this .polylines = [ ];
84
- this .lengthSoFarArray = [ 0 ];
78
+ this .addSampler ("polylines");
79
+
80
+ this .addUniform ("direction", "uniform vec3 direction;");
81
+ this .addUniform ("verticesIndex", "uniform int verticesIndex;");
82
+ this .addUniform ("polylines", "uniform sampler2D polylines;");
83
+
84
+ this .addFunction (/* glsl */ `vec3 getRandomVelocity ()
85
+ {
86
+ if (direction == vec3 (0.0))
87
+ return getRandomSphericalVelocity ();
88
+
89
+ else
90
+ return direction * getRandomSpeed ();
91
+ }`);
92
+
93
+ this .addFunction (/* glsl */ `vec4 getRandomPosition ()
94
+ {
95
+ if (verticesIndex < 0)
96
+ {
97
+ return vec4 (NaN);
98
+ }
99
+ else
100
+ {
101
+ // Determine index0, index1 and weight.
102
+
103
+ float lastLengthSoFar = texelFetch (polylines, verticesIndex - 1, 0) .x;
104
+ float fraction = random () * lastLengthSoFar;
105
+
106
+ int index0 = 0;
107
+ int index1 = 0;
108
+ float weight = 0.0;
109
+
110
+ interpolate (polylines, verticesIndex, fraction, index0, index1, weight);
111
+
112
+ // Interpolate and return position.
113
+
114
+ index0 *= 2;
115
+ index1 = index0 + 1;
116
+
117
+ vec4 vertex0 = texelFetch (polylines, verticesIndex + index0, 0);
118
+ vec4 vertex1 = texelFetch (polylines, verticesIndex + index1, 0);
119
+
120
+ return mix (vertex0, vertex1, weight);
121
+ }
122
+ }`);
85
123
  }
86
124
 
87
125
  PolylineEmitter .prototype = Object .assign (Object .create (X3DParticleEmitterNode .prototype),
88
126
  {
89
127
  constructor: PolylineEmitter,
90
128
  [Symbol .for ("X_ITE.X3DBaseNode.fieldDefinitions")]: new FieldDefinitionArray ([
91
- new X3DFieldDefinition (X3DConstants .inputOutput, "metadata", new Fields .SFNode ()),
92
- new X3DFieldDefinition (X3DConstants .inputOutput, "direction", new Fields .SFVec3f (0, 1, 0)),
93
- new X3DFieldDefinition (X3DConstants .inputOutput, "speed", new Fields .SFFloat ()),
94
- new X3DFieldDefinition (X3DConstants .inputOutput, "variation", new Fields .SFFloat (0.25)),
95
- new X3DFieldDefinition (X3DConstants .initializeOnly, "mass", new Fields .SFFloat ()),
96
- new X3DFieldDefinition (X3DConstants .initializeOnly, "surfaceArea", new Fields .SFFloat ()),
97
- new X3DFieldDefinition (X3DConstants .inputOutput, "coordIndex", new Fields .MFInt32 (-1)),
98
- new X3DFieldDefinition (X3DConstants .inputOutput, "coord", new Fields .SFNode ()),
129
+ new X3DFieldDefinition (X3DConstants .inputOutput, "metadata", new Fields .SFNode ()),
130
+ new X3DFieldDefinition (X3DConstants .inputOutput, "on", new Fields .SFBool (true)),
131
+ new X3DFieldDefinition (X3DConstants .inputOutput, "direction", new Fields .SFVec3f (0, 1, 0)),
132
+ new X3DFieldDefinition (X3DConstants .inputOutput, "speed", new Fields .SFFloat ()),
133
+ new X3DFieldDefinition (X3DConstants .inputOutput, "variation", new Fields .SFFloat (0.25)),
134
+ new X3DFieldDefinition (X3DConstants .inputOutput, "mass", new Fields .SFFloat ()),
135
+ new X3DFieldDefinition (X3DConstants .inputOutput, "surfaceArea", new Fields .SFFloat ()),
136
+ new X3DFieldDefinition (X3DConstants .inputOutput, "coordIndex", new Fields .MFInt32 (-1)),
137
+ new X3DFieldDefinition (X3DConstants .inputOutput, "coord", new Fields .SFNode ()),
99
138
  ]),
100
139
  getTypeName: function ()
101
140
  {
@@ -113,147 +152,92 @@ function (Fields,
113
152
  {
114
153
  X3DParticleEmitterNode .prototype .initialize .call (this);
115
154
 
155
+ const browser = this .getBrowser ();
156
+
157
+ if (browser .getContext () .getVersion () < 2)
158
+ return;
159
+
160
+ // Create GL stuff.
161
+
162
+ this .polylinesTexture = this .createTexture ();
163
+
164
+ // Initialize fields.
165
+
116
166
  this ._direction .addInterest ("set_direction__", this);
117
167
 
118
- this ._coordIndex .addFieldInterest (this .polylineNode ._coordIndex);
119
- this ._coord .addFieldInterest (this .polylineNode ._coord);
168
+ this ._coordIndex .addFieldInterest (this .polylinesNode ._coordIndex);
169
+ this ._coord .addFieldInterest (this .polylinesNode ._coord);
120
170
 
121
- this .polylineNode ._coordIndex = this ._coordIndex;
122
- this .polylineNode ._coord = this ._coord;
171
+ this .polylinesNode ._coordIndex = this ._coordIndex;
172
+ this .polylinesNode ._coord = this ._coord;
123
173
 
124
- this .polylineNode ._rebuild .addInterest ("set_polyline", this);
125
- this .polylineNode .setPrivate (true);
126
- this .polylineNode .setup ();
174
+ this .polylinesNode ._rebuild .addInterest ("set_polyline", this);
175
+ this .polylinesNode .setPrivate (true);
176
+ this .polylinesNode .setup ();
127
177
 
128
178
  this .set_direction__ ();
129
179
  this .set_polyline ();
130
180
  },
131
- set_direction__: function ()
181
+ set_direction__: (function ()
132
182
  {
133
- this .direction .assign (this ._direction .getValue ()) .normalize ();
183
+ const direction = new Vector3 (0, 0, 0);
134
184
 
135
- if (this .direction .equals (Vector3 .Zero))
136
- this .getRandomVelocity = this .getSphericalRandomVelocity;
137
- else
138
- delete this .getRandomVelocity;
139
- },
185
+ return function ()
186
+ {
187
+ direction .assign (this ._direction .getValue ()) .normalize ();
188
+
189
+ this .setUniform ("uniform3f", "direction", direction .x, direction .y, direction .z);
190
+ };
191
+ })(),
140
192
  set_polyline: (function ()
141
193
  {
142
- var
194
+ const
143
195
  vertex1 = new Vector3 (0, 0, 0),
144
196
  vertex2 = new Vector3 (0, 0, 0);
145
197
 
146
198
  return function ()
147
199
  {
148
- var vertices = this .vertices = this .polylineNode .getVertices () .getValue ();
200
+ const
201
+ gl = this .getBrowser () .getContext (),
202
+ vertices = this .polylinesNode .getVertices () .getValue (),
203
+ numVertices = vertices .length / 4,
204
+ numLengthSoFar = numVertices / 2 + 1,
205
+ polylineArraySize = Math .ceil (Math .sqrt (numLengthSoFar + numVertices));
149
206
 
150
- if (vertices .length)
151
- {
152
- delete this .getRandomPosition;
207
+ const verticesIndex = numLengthSoFar;
153
208
 
154
- var
155
- lengthSoFar = 0,
156
- lengthSoFarArray = this .lengthSoFarArray;
209
+ let polylinesArray = this .polylinesArray;
157
210
 
158
- lengthSoFarArray .length = 1;
211
+ if (polylinesArray .length < polylineArraySize * polylineArraySize * 4)
212
+ polylinesArray = this .polylinesArray = new Float32Array (polylineArraySize * polylineArraySize * 4);
159
213
 
160
- for (var i = 0, length = vertices .length; i < length; i += 8)
161
- {
162
- vertex1 .set (vertices [i], vertices [i + 1], vertices [i + 2]);
163
- vertex2 .set (vertices [i + 4], vertices [i + 5], vertices [i + 6]);
214
+ let lengthSoFar = 0;
164
215
 
165
- lengthSoFar += vertex2 .subtract (vertex1) .abs ();
166
- lengthSoFarArray .push (lengthSoFar);
167
- }
168
- }
169
- else
216
+ for (let i = 0, length = vertices .length; i < length; i += 8)
170
217
  {
171
- this .getRandomPosition = getPosition;
172
- }
173
- };
174
- })(),
175
- getRandomPosition: function (position)
176
- {
177
- // Determine index0 and weight.
218
+ vertex1 .set (vertices [i], vertices [i + 1], vertices [i + 2]);
219
+ vertex2 .set (vertices [i + 4], vertices [i + 5], vertices [i + 6]);
178
220
 
179
- var
180
- lengthSoFarArray = this .lengthSoFarArray,
181
- length = lengthSoFarArray .length,
182
- fraction = Math .random () * lengthSoFarArray .at (-1),
183
- index0 = 0,
184
- index1 = 0,
185
- weight = 0;
186
-
187
- if (length == 1 || fraction <= lengthSoFarArray [0])
188
- {
189
- index0 = 0;
190
- weight = 0;
191
- }
192
- else if (fraction >= lengthSoFarArray .at (-1))
193
- {
194
- index0 = length - 2;
195
- weight = 1;
196
- }
197
- else
198
- {
199
- var index = Algorithm .upperBound (lengthSoFarArray, 0, length, fraction, Algorithm .less);
221
+ polylinesArray [i / 2 + 4] = lengthSoFar += vertex2 .subtract (vertex1) .abs ();
222
+ }
200
223
 
201
- if (index < length)
202
- {
203
- index1 = index;
204
- index0 = index - 1;
224
+ polylinesArray .set (vertices, verticesIndex * 4);
205
225
 
206
- var
207
- key0 = lengthSoFarArray [index0],
208
- key1 = lengthSoFarArray [index1];
226
+ this .setUniform ("uniform1i", "verticesIndex", numVertices ? verticesIndex : -1);
209
227
 
210
- weight = Algorithm .clamp ((fraction - key0) / (key1 - key0), 0, 1);
211
- }
212
- else
228
+ if (polylineArraySize)
213
229
  {
214
- index0 = 0;
215
- weight = 0;
230
+ gl .bindTexture (gl .TEXTURE_2D, this .polylinesTexture);
231
+ gl .texImage2D (gl .TEXTURE_2D, 0, gl .RGBA32F, polylineArraySize, polylineArraySize, 0, gl .RGBA, gl .FLOAT, polylinesArray);
216
232
  }
217
- }
218
-
219
- // Interpolate and set position.
220
-
221
- index0 *= 8;
222
- index1 = index0 + 4;
223
-
224
- var
225
- vertices = this .vertices,
226
- x1 = vertices [index0],
227
- y1 = vertices [index0 + 1],
228
- z1 = vertices [index0 + 2],
229
- x2 = vertices [index1],
230
- y2 = vertices [index1 + 1],
231
- z2 = vertices [index1 + 2];
232
-
233
- position .x = x1 + weight * (x2 - x1);
234
- position .y = y1 + weight * (y2 - y1);
235
- position .z = z1 + weight * (z2 - z1);
236
-
237
- return position;
238
- },
239
- getRandomVelocity: function (velocity)
233
+ };
234
+ })(),
235
+ activateTextures: function (gl, program)
240
236
  {
241
- var
242
- direction = this .direction,
243
- speed = this .getRandomSpeed ();
244
-
245
- velocity .x = direction .x * speed;
246
- velocity .y = direction .y * speed;
247
- velocity .z = direction .z * speed;
248
-
249
- return velocity;
250
- },
237
+ gl .activeTexture (gl .TEXTURE0 + program .polylinesTextureUnit);
238
+ gl .bindTexture (gl .TEXTURE_2D, this .polylinesTexture);
239
+ },
251
240
  });
252
241
 
253
- function getPosition (position)
254
- {
255
- return position .set (0, 0, 0);
256
- }
257
-
258
242
  return PolylineEmitter;
259
243
  });