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
@@ -226,105 +226,98 @@ function (Fields,
226
226
 
227
227
  return function (layerNode, fromViewpointNode, toViewpointNode)
228
228
  {
229
- try
230
- {
231
- this .to = toViewpointNode;
229
+ this .to = toViewpointNode;
232
230
 
233
- if (toViewpointNode ._jump .getValue ())
234
- {
235
- if (! toViewpointNode ._retainUserOffsets .getValue ())
236
- toViewpointNode .resetUserOffsets ();
231
+ if (toViewpointNode ._jump .getValue ())
232
+ {
233
+ if (! toViewpointNode ._retainUserOffsets .getValue ())
234
+ toViewpointNode .resetUserOffsets ();
237
235
 
238
- // Copy from toViewpointNode all fields.
236
+ // Copy from toViewpointNode all fields.
239
237
 
240
- if (this !== toViewpointNode)
241
- {
242
- for (const field of toViewpointNode .getFields ())
243
- this .getField (field .getName ()) .assign (field);
244
- }
238
+ if (this !== toViewpointNode)
239
+ {
240
+ for (const field of toViewpointNode .getFields ())
241
+ this .getField (field .getName ()) .assign (field);
242
+ }
245
243
 
246
- // Respect NavigationInfo.
244
+ // Respect NavigationInfo.
247
245
 
248
- const
249
- navigationInfoNode = layerNode .getNavigationInfo (),
250
- transitionTime = navigationInfoNode ._transitionTime .getValue ();
246
+ const
247
+ navigationInfoNode = layerNode .getNavigationInfo (),
248
+ transitionTime = navigationInfoNode ._transitionTime .getValue ();
251
249
 
252
- let transitionType = navigationInfoNode .getTransitionType ();
250
+ let transitionType = navigationInfoNode .getTransitionType ();
253
251
 
254
- // VRML behavior
252
+ // VRML behavior
255
253
 
256
- if (this .getExecutionContext () .getSpecificationVersion () == "2.0")
257
- {
258
- if (toViewpointNode .getVRMLTransition ())
259
- transitionType = "LINEAR";
260
- else
261
- transitionType = "TELEPORT";
262
- }
254
+ if (this .getExecutionContext () .getSpecificationVersion () == "2.0")
255
+ {
256
+ if (toViewpointNode .getVRMLTransition ())
257
+ transitionType = "LINEAR";
258
+ else
259
+ transitionType = "TELEPORT";
260
+ }
263
261
 
264
- toViewpointNode .setVRMLTransition (false);
262
+ toViewpointNode .setVRMLTransition (false);
265
263
 
266
- // End VRML behavior
264
+ // End VRML behavior
267
265
 
268
- if (transitionTime <= 0)
269
- transitionType = "TELEPORT";
266
+ if (transitionTime <= 0)
267
+ transitionType = "TELEPORT";
270
268
 
271
- switch (transitionType)
269
+ switch (transitionType)
270
+ {
271
+ case "TELEPORT":
272
272
  {
273
- case "TELEPORT":
274
- {
275
- navigationInfoNode ._transitionComplete = true;
276
- return;
277
- }
278
- case "ANIMATE":
279
- {
280
- this .easeInEaseOut ._easeInEaseOut = new Fields .MFVec2f (new Fields .SFVec2f (0, 1), new Fields .SFVec2f (1, 0));
281
- break;
282
- }
283
- default:
284
- {
285
- // LINEAR
286
- this .easeInEaseOut ._easeInEaseOut = new Fields .MFVec2f (new Fields .SFVec2f (0, 0), new Fields .SFVec2f (0, 0));
287
- break;
288
- }
273
+ navigationInfoNode ._transitionComplete = true;
274
+ return;
289
275
  }
276
+ case "ANIMATE":
277
+ {
278
+ this .easeInEaseOut ._easeInEaseOut = new Fields .MFVec2f (new Fields .SFVec2f (0, 1), new Fields .SFVec2f (1, 0));
279
+ break;
280
+ }
281
+ default:
282
+ {
283
+ // LINEAR
284
+ this .easeInEaseOut ._easeInEaseOut = new Fields .MFVec2f (new Fields .SFVec2f (0, 0), new Fields .SFVec2f (0, 0));
285
+ break;
286
+ }
287
+ }
290
288
 
291
- this .timeSensor ._cycleInterval = transitionTime;
292
- this .timeSensor ._stopTime = this .getBrowser () .getCurrentTime ();
293
- this .timeSensor ._startTime = this .getBrowser () .getCurrentTime ();
294
-
295
- this .timeSensor ._isActive .addInterest ("set_active__", this, navigationInfoNode);
296
-
297
- toViewpointNode .getRelativeTransformation (fromViewpointNode, relativePosition, relativeOrientation, relativeScale, relativeScaleOrientation);
289
+ this .timeSensor ._cycleInterval = transitionTime;
290
+ this .timeSensor ._stopTime = this .getBrowser () .getCurrentTime ();
291
+ this .timeSensor ._startTime = this .getBrowser () .getCurrentTime ();
298
292
 
299
- this .positionInterpolator ._keyValue = new Fields .MFVec3f (relativePosition, toViewpointNode ._positionOffset);
300
- this .orientationInterpolator ._keyValue = new Fields .MFRotation (relativeOrientation, toViewpointNode ._orientationOffset);
301
- this .scaleInterpolator ._keyValue = new Fields .MFVec3f (relativeScale, toViewpointNode ._scaleOffset);
302
- this .scaleOrientationInterpolator ._keyValue = new Fields .MFRotation (relativeScaleOrientation, toViewpointNode ._scaleOrientationOffset);
293
+ this .timeSensor ._isActive .addInterest ("set_active__", this, navigationInfoNode);
303
294
 
304
- this ._positionOffset = relativePosition;
305
- this ._orientationOffset = relativeOrientation;
306
- this ._scaleOffset = relativeScale;
307
- this ._scaleOrientationOffset = relativeScaleOrientation;
295
+ toViewpointNode .getRelativeTransformation (fromViewpointNode, relativePosition, relativeOrientation, relativeScale, relativeScaleOrientation);
308
296
 
309
- this .setInterpolators (fromViewpointNode, toViewpointNode);
297
+ this .positionInterpolator ._keyValue = new Fields .MFVec3f (relativePosition, toViewpointNode ._positionOffset);
298
+ this .orientationInterpolator ._keyValue = new Fields .MFRotation (relativeOrientation, toViewpointNode ._orientationOffset);
299
+ this .scaleInterpolator ._keyValue = new Fields .MFVec3f (relativeScale, toViewpointNode ._scaleOffset);
300
+ this .scaleOrientationInterpolator ._keyValue = new Fields .MFRotation (relativeScaleOrientation, toViewpointNode ._scaleOrientationOffset);
310
301
 
311
- this ._transitionActive = true;
312
- }
313
- else
314
- {
315
- toViewpointNode .getRelativeTransformation (fromViewpointNode, relativePosition, relativeOrientation, relativeScale, relativeScaleOrientation);
302
+ this ._positionOffset = relativePosition;
303
+ this ._orientationOffset = relativeOrientation;
304
+ this ._scaleOffset = relativeScale;
305
+ this ._scaleOrientationOffset = relativeScaleOrientation;
316
306
 
317
- toViewpointNode ._positionOffset = relativePosition;
318
- toViewpointNode ._orientationOffset = relativeOrientation;
319
- toViewpointNode ._scaleOffset = relativeScale;
320
- toViewpointNode ._scaleOrientationOffset = relativeScaleOrientation;
307
+ this .setInterpolators (fromViewpointNode, toViewpointNode);
321
308
 
322
- toViewpointNode .setInterpolators (fromViewpointNode, toViewpointNode);
323
- }
309
+ this ._transitionActive = true;
324
310
  }
325
- catch (error)
311
+ else
326
312
  {
327
- console .error (error);
313
+ toViewpointNode .getRelativeTransformation (fromViewpointNode, relativePosition, relativeOrientation, relativeScale, relativeScaleOrientation);
314
+
315
+ toViewpointNode ._positionOffset = relativePosition;
316
+ toViewpointNode ._orientationOffset = relativeOrientation;
317
+ toViewpointNode ._scaleOffset = relativeScale;
318
+ toViewpointNode ._scaleOrientationOffset = relativeScaleOrientation;
319
+
320
+ toViewpointNode .setInterpolators (fromViewpointNode, toViewpointNode);
328
321
  }
329
322
  };
330
323
  })(),
@@ -343,7 +336,6 @@ function (Fields,
343
336
  this ._fieldOfViewScale = 1;
344
337
  },
345
338
  getRelativeTransformation: function (fromViewpointNode, relativePosition, relativeOrientation, relativeScale, relativeScaleOrientation)
346
- // throw
347
339
  {
348
340
  const differenceMatrix = this .modelMatrix .copy () .multRight (fromViewpointNode .getViewMatrix ()) .inverse ();
349
341
 
@@ -354,35 +346,21 @@ function (Fields,
354
346
  },
355
347
  lookAtPoint: function (layerNode, point, factor, straighten)
356
348
  {
357
- try
358
- {
359
- this .getCameraSpaceMatrix () .multVecMatrix (point);
349
+ this .getCameraSpaceMatrix () .multVecMatrix (point);
360
350
 
361
- Matrix4 .inverse (this .getModelMatrix ()) .multVecMatrix (point);
351
+ Matrix4 .inverse (this .getModelMatrix ()) .multVecMatrix (point);
362
352
 
363
- const minDistance = layerNode .getNavigationInfo () .getNearValue () * 2;
353
+ const minDistance = layerNode .getNavigationInfo () .getNearValue () * 2;
364
354
 
365
- this .lookAt (layerNode, point, minDistance, factor, straighten);
366
- }
367
- catch (error)
368
- {
369
- console .error (error);
370
- }
355
+ this .lookAt (layerNode, point, minDistance, factor, straighten);
371
356
  },
372
357
  lookAtBBox: function (layerNode, bbox, factor, straighten)
373
358
  {
374
- try
375
- {
376
- bbox = bbox .copy () .multRight (Matrix4 .inverse (this .getModelMatrix ()));
359
+ bbox = bbox .copy () .multRight (Matrix4 .inverse (this .getModelMatrix ()));
377
360
 
378
- const minDistance = layerNode .getNavigationInfo () .getNearValue () * 2;
361
+ const minDistance = layerNode .getNavigationInfo () .getNearValue () * 2;
379
362
 
380
- this .lookAt (layerNode, bbox .center, minDistance, factor, straighten);
381
- }
382
- catch (error)
383
- {
384
- console .error (error);
385
- }
363
+ this .lookAt (layerNode, bbox .center, minDistance, factor, straighten);
386
364
  },
387
365
  lookAt: function (layerNode, point, distance, factor, straighten)
388
366
  {
@@ -496,21 +474,14 @@ function (Fields,
496
474
  },
497
475
  update: function ()
498
476
  {
499
- try
500
- {
501
- this .cameraSpaceMatrix .set (this .getUserPosition (),
502
- this .getUserOrientation (),
503
- this ._scaleOffset .getValue (),
504
- this ._scaleOrientationOffset .getValue ());
477
+ this .cameraSpaceMatrix .set (this .getUserPosition (),
478
+ this .getUserOrientation (),
479
+ this ._scaleOffset .getValue (),
480
+ this ._scaleOrientationOffset .getValue ());
505
481
 
506
- this .cameraSpaceMatrix .multRight ((this .to || this) .modelMatrix);
482
+ this .cameraSpaceMatrix .multRight ((this .to || this) .modelMatrix);
507
483
 
508
- this .viewMatrix .assign (this .cameraSpaceMatrix) .inverse ();
509
- }
510
- catch (error)
511
- {
512
- console .error (error);
513
- }
484
+ this .viewMatrix .assign (this .cameraSpaceMatrix) .inverse ();
514
485
  }
515
486
  });
516
487
 
@@ -183,20 +183,26 @@ function (Fields,
183
183
  {
184
184
  if (type === TraverseType .POINTER)
185
185
  {
186
- const sensors = this .sensors;
186
+ const
187
+ sensorsStack = renderObject .getBrowser () .getSensors (),
188
+ sensors = this .sensors;
187
189
 
188
190
  sensors .clear ();
189
191
 
190
- renderObject .getBrowser () .getSensors () .push (sensors);
191
-
192
192
  this .touchSensorNode .push (renderObject, sensors);
193
193
 
194
+ if (sensors .size)
195
+ sensorsStack .push (sensors);
196
+
194
197
  X3DGroupingNode .prototype .traverse .call (this, type, renderObject);
195
198
 
196
- renderObject .getBrowser () .getSensors () .pop ();
199
+ if (sensors .size)
200
+ sensorsStack .pop ();
197
201
  }
198
202
  else
203
+ {
199
204
  X3DGroupingNode .prototype .traverse .call (this, type, renderObject);
205
+ }
200
206
  },
201
207
  });
202
208
 
@@ -111,17 +111,17 @@ function (Fields,
111
111
  },
112
112
  addGeometry: function (boundedNormals, boundedVertices)
113
113
  {
114
- if (this .geometryNode)
114
+ if (this .geometryNode && this ._enabled .getValue ())
115
115
  {
116
- var
116
+ const
117
117
  normals = this .geometryNode .getNormals () .getValue (),
118
118
  vertices = this .geometryNode .getVertices () .getValue ();
119
119
 
120
- for (var i = 0, length = normals .length; i < length; ++ i)
121
- boundedNormals .push (normals [i]);
120
+ for (const value of normals)
121
+ boundedNormals .push (value);
122
122
 
123
- for (var i = 0, length = vertices .length; i < length; ++ i)
124
- boundedVertices .push (vertices [i]);
123
+ for (const value of vertices)
124
+ boundedVertices .push (value);
125
125
  }
126
126
  },
127
127
  });
@@ -53,16 +53,12 @@ define ([
53
53
  "x_ite/Base/FieldDefinitionArray",
54
54
  "x_ite/Components/ParticleSystems/X3DParticleEmitterNode",
55
55
  "x_ite/Base/X3DConstants",
56
- "standard/Math/Numbers/Vector3",
57
- "standard/Math/Numbers/Rotation4",
58
56
  ],
59
57
  function (Fields,
60
58
  X3DFieldDefinition,
61
59
  FieldDefinitionArray,
62
60
  X3DParticleEmitterNode,
63
- X3DConstants,
64
- Vector3,
65
- Rotation4)
61
+ X3DConstants)
66
62
  {
67
63
  "use strict";
68
64
 
@@ -72,27 +68,47 @@ function (Fields,
72
68
 
73
69
  this .addType (X3DConstants .ConeEmitter);
74
70
 
75
- this ._position .setUnit ("length");
76
- this ._angle .setUnit ("angle");
77
- this ._speed .setUnit ("speed");
78
- this ._mass .setUnit ("mass");
79
- this ._surfaceArea .setUnit ("area");
71
+ this ._position .setUnit ("length");
72
+ this ._angle .setUnit ("angle");
80
73
 
81
- this .rotation = new Rotation4 (0, 0, 1, 0);
74
+ this .addUniform ("position", "uniform vec3 position;");
75
+ this .addUniform ("direction", "uniform vec3 direction;");
76
+ this .addUniform ("angle", "uniform float angle;");
77
+
78
+ this .addFunction (/* glsl */ `vec3 getRandomVelocity ()
79
+ {
80
+ if (direction == vec3 (0.0))
81
+ {
82
+ return getRandomSphericalVelocity ();
83
+ }
84
+ else
85
+ {
86
+ vec3 normal = getRandomNormalWithDirectionAndAngle (direction, angle);
87
+ float speed = getRandomSpeed ();
88
+
89
+ return normal * speed;
90
+ }
91
+ }`);
92
+
93
+ this .addFunction (/* glsl */ `vec4 getRandomPosition ()
94
+ {
95
+ return vec4 (position, 1.0);
96
+ }`);
82
97
  }
83
98
 
84
99
  ConeEmitter .prototype = Object .assign (Object .create (X3DParticleEmitterNode .prototype),
85
100
  {
86
101
  constructor: ConeEmitter,
87
102
  [Symbol .for ("X_ITE.X3DBaseNode.fieldDefinitions")]: new FieldDefinitionArray ([
88
- new X3DFieldDefinition (X3DConstants .inputOutput, "metadata", new Fields .SFNode ()),
89
- new X3DFieldDefinition (X3DConstants .inputOutput, "position", new Fields .SFVec3f ()),
90
- new X3DFieldDefinition (X3DConstants .inputOutput, "direction", new Fields .SFVec3f (0, 1, 0)),
91
- new X3DFieldDefinition (X3DConstants .inputOutput, "angle", new Fields .SFFloat (0.7854)),
92
- new X3DFieldDefinition (X3DConstants .inputOutput, "speed", new Fields .SFFloat ()),
93
- new X3DFieldDefinition (X3DConstants .inputOutput, "variation", new Fields .SFFloat (0.25)),
94
- new X3DFieldDefinition (X3DConstants .initializeOnly, "mass", new Fields .SFFloat ()),
95
- new X3DFieldDefinition (X3DConstants .initializeOnly, "surfaceArea", new Fields .SFFloat ()),
103
+ new X3DFieldDefinition (X3DConstants .inputOutput, "metadata", new Fields .SFNode ()),
104
+ new X3DFieldDefinition (X3DConstants .inputOutput, "on", new Fields .SFBool (true)),
105
+ new X3DFieldDefinition (X3DConstants .inputOutput, "position", new Fields .SFVec3f ()),
106
+ new X3DFieldDefinition (X3DConstants .inputOutput, "direction", new Fields .SFVec3f (0, 1, 0)),
107
+ new X3DFieldDefinition (X3DConstants .inputOutput, "angle", new Fields .SFFloat (0.7854)),
108
+ new X3DFieldDefinition (X3DConstants .inputOutput, "speed", new Fields .SFFloat ()),
109
+ new X3DFieldDefinition (X3DConstants .inputOutput, "variation", new Fields .SFFloat (0.25)),
110
+ new X3DFieldDefinition (X3DConstants .inputOutput, "mass", new Fields .SFFloat ()),
111
+ new X3DFieldDefinition (X3DConstants .inputOutput, "surfaceArea", new Fields .SFFloat ()),
96
112
  ]),
97
113
  getTypeName: function ()
98
114
  {
@@ -110,6 +126,9 @@ function (Fields,
110
126
  {
111
127
  X3DParticleEmitterNode .prototype .initialize .call (this);
112
128
 
129
+ if (this .getBrowser () .getContext () .getVersion () < 2)
130
+ return;
131
+
113
132
  this ._position .addInterest ("set_position__", this);
114
133
  this ._direction .addInterest ("set_direction__", this);
115
134
  this ._angle .addInterest ("set_angle__", this);
@@ -120,31 +139,20 @@ function (Fields,
120
139
  },
121
140
  set_position__: function ()
122
141
  {
123
- this .position = this ._position .getValue ()
142
+ const position = this ._position .getValue ();
143
+
144
+ this .setUniform ("uniform3f", "position", position .x, position .y, position .z);
124
145
  },
125
146
  set_direction__: function ()
126
147
  {
127
- var direction = this ._direction .getValue ();
128
-
129
- this .rotation .setFromToVec (Vector3 .zAxis, direction);
148
+ const direction = this ._direction .getValue ();
130
149
 
131
- if (direction .equals (Vector3 .Zero))
132
- this .getRandomVelocity = this .getSphericalRandomVelocity;
133
- else
134
- delete this .getRandomVelocity;
150
+ this .setUniform ("uniform3f", "direction", direction .x, direction .y, direction .z);
135
151
  },
136
152
  set_angle__: function ()
137
153
  {
138
- this .angle = this ._angle .getValue ()
154
+ this .setUniform ("uniform1f", "angle", this ._angle .getValue ());
139
155
  },
140
- getRandomPosition: function (position)
141
- {
142
- return position .assign (this .position);
143
- },
144
- getRandomVelocity: function (velocity)
145
- {
146
- return this .rotation .multVecRot (this .getRandomNormalWithAngle (this .angle, velocity) .multiply (this .getRandomSpeed ()));
147
- },
148
156
  });
149
157
 
150
158
  return ConeEmitter;
@@ -68,24 +68,32 @@ function (Fields,
68
68
 
69
69
  this .addType (X3DConstants .ExplosionEmitter);
70
70
 
71
- this ._position .setUnit ("length");
72
- this ._speed .setUnit ("speed");
73
- this ._mass .setUnit ("mass");
74
- this ._surfaceArea .setUnit ("area");
71
+ this ._position .setUnit ("length");
75
72
 
76
- this .getRandomVelocity = this .getSphericalRandomVelocity;
73
+ this .addUniform ("position", "uniform vec3 position;");
74
+
75
+ this .addFunction (/* glsl */ `vec3 getRandomVelocity ()
76
+ {
77
+ return getRandomSphericalVelocity ();
78
+ }`);
79
+
80
+ this .addFunction (/* glsl */ `vec4 getRandomPosition ()
81
+ {
82
+ return vec4 (position, 1.0);
83
+ }`);
77
84
  }
78
85
 
79
86
  ExplosionEmitter .prototype = Object .assign (Object .create (X3DParticleEmitterNode .prototype),
80
87
  {
81
88
  constructor: ExplosionEmitter,
82
89
  [Symbol .for ("X_ITE.X3DBaseNode.fieldDefinitions")]: new FieldDefinitionArray ([
83
- new X3DFieldDefinition (X3DConstants .inputOutput, "metadata", new Fields .SFNode ()),
84
- new X3DFieldDefinition (X3DConstants .inputOutput, "position", new Fields .SFVec3f ()),
85
- new X3DFieldDefinition (X3DConstants .inputOutput, "speed", new Fields .SFFloat ()),
86
- new X3DFieldDefinition (X3DConstants .inputOutput, "variation", new Fields .SFFloat (0.25)),
87
- new X3DFieldDefinition (X3DConstants .initializeOnly, "mass", new Fields .SFFloat ()),
88
- new X3DFieldDefinition (X3DConstants .initializeOnly, "surfaceArea", new Fields .SFFloat ()),
90
+ new X3DFieldDefinition (X3DConstants .inputOutput, "metadata", new Fields .SFNode ()),
91
+ new X3DFieldDefinition (X3DConstants .inputOutput, "on", new Fields .SFBool (true)),
92
+ new X3DFieldDefinition (X3DConstants .inputOutput, "position", new Fields .SFVec3f ()),
93
+ new X3DFieldDefinition (X3DConstants .inputOutput, "speed", new Fields .SFFloat ()),
94
+ new X3DFieldDefinition (X3DConstants .inputOutput, "variation", new Fields .SFFloat (0.25)),
95
+ new X3DFieldDefinition (X3DConstants .inputOutput, "mass", new Fields .SFFloat ()),
96
+ new X3DFieldDefinition (X3DConstants .inputOutput, "surfaceArea", new Fields .SFFloat ()),
89
97
  ]),
90
98
  getTypeName: function ()
91
99
  {
@@ -103,21 +111,22 @@ function (Fields,
103
111
  {
104
112
  X3DParticleEmitterNode .prototype .initialize .call (this);
105
113
 
114
+ if (this .getBrowser () .getContext () .getVersion () < 2)
115
+ return;
116
+
106
117
  this ._position .addInterest ("set_position__", this);
107
118
 
108
119
  this .set_position__ ();
109
120
  },
110
- set_position__: function ()
111
- {
112
- this .position = this ._position .getValue ()
113
- },
114
121
  isExplosive: function ()
115
122
  {
116
123
  return true;
117
124
  },
118
- getRandomPosition: function (position)
125
+ set_position__: function ()
119
126
  {
120
- return position .assign (this .position);
127
+ const position = this ._position .getValue ();
128
+
129
+ this .setUniform ("uniform3f", "position", position .x, position .y, position .z);
121
130
  },
122
131
  });
123
132
 
@@ -53,12 +53,14 @@ define ([
53
53
  "x_ite/Base/FieldDefinitionArray",
54
54
  "x_ite/Components/ParticleSystems/X3DParticlePhysicsModelNode",
55
55
  "x_ite/Base/X3DConstants",
56
+ "standard/Math/Numbers/Vector3",
56
57
  ],
57
58
  function (Fields,
58
59
  X3DFieldDefinition,
59
60
  FieldDefinitionArray,
60
61
  X3DParticlePhysicsModelNode,
61
- X3DConstants)
62
+ X3DConstants,
63
+ Vector3)
62
64
  {
63
65
  "use strict";
64
66
 
@@ -91,14 +93,25 @@ function (Fields,
91
93
  {
92
94
  return "physics";
93
95
  },
94
- addForce: function (i, emitterNode, forces, turbulences)
96
+ addForce: (function ()
95
97
  {
96
- if (this ._enabled .getValue ())
98
+ const force = new Vector3 (0, 0, 0);
99
+
100
+ return function (i, emitterNode, timeByMass, forces)
97
101
  {
98
- forces [i] .assign (this ._force .getValue ());
99
- turbulences [i] = 0;
100
- }
101
- },
102
+ if (this ._enabled .getValue ())
103
+ {
104
+ forces .set (force .assign (this ._force .getValue ()) .multiply (timeByMass), i * 4);
105
+ forces [i * 4 + 3] = 0;
106
+
107
+ return true;
108
+ }
109
+ else
110
+ {
111
+ return false;
112
+ }
113
+ };
114
+ })(),
102
115
  });
103
116
 
104
117
  return ForcePhysicsModel;