x_ite 5.0.3 → 6.1.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 (385) hide show
  1. package/.vscode/settings.json +12 -5
  2. package/.vscode/tasks.json +25 -1
  3. package/Makefile +36 -28
  4. package/README.md +6 -11
  5. package/build/bin/dist.pl +0 -6
  6. package/build/bin/examples-and-tests.pl +75 -0
  7. package/build/bin/tests-menu.pl +57 -0
  8. package/build/bin/version.pl +7 -4
  9. package/build/parts/default.start.frag.js +3 -2
  10. package/dist/assets/components/annotation.js +3 -2
  11. package/dist/assets/components/annotation.min.js +1 -1
  12. package/dist/assets/components/cad-geometry.js +3 -2
  13. package/dist/assets/components/cad-geometry.min.js +1 -1
  14. package/dist/assets/components/cube-map-texturing.js +8 -20
  15. package/dist/assets/components/cube-map-texturing.min.js +1 -1
  16. package/dist/assets/components/dis.js +3 -2
  17. package/dist/assets/components/dis.min.js +1 -1
  18. package/dist/assets/components/event-utilities.js +4 -3
  19. package/dist/assets/components/event-utilities.min.js +1 -1
  20. package/dist/assets/components/geometry2d.js +38 -52
  21. package/dist/assets/components/geometry2d.min.js +1 -1
  22. package/dist/assets/components/geospatial.js +34 -1686
  23. package/dist/assets/components/geospatial.min.js +1 -1
  24. package/dist/assets/components/h-anim.js +71 -77
  25. package/dist/assets/components/h-anim.min.js +1 -1
  26. package/dist/assets/components/key-device-sensor.js +4 -3
  27. package/dist/assets/components/key-device-sensor.min.js +1 -1
  28. package/dist/assets/components/layout.js +101 -173
  29. package/dist/assets/components/layout.min.js +1 -1
  30. package/dist/assets/components/nurbs.js +3 -2
  31. package/dist/assets/components/nurbs.min.js +1 -1
  32. package/dist/assets/components/particle-systems.js +1926 -1669
  33. package/dist/assets/components/particle-systems.min.js +1 -1
  34. package/dist/assets/components/picking.js +34 -41
  35. package/dist/assets/components/picking.min.js +1 -1
  36. package/dist/assets/components/projective-texture-mapping.js +73 -86
  37. package/dist/assets/components/projective-texture-mapping.min.js +1 -1
  38. package/dist/assets/components/rigid-body-physics.js +37 -57
  39. package/dist/assets/components/rigid-body-physics.min.js +1 -1
  40. package/dist/assets/components/scripting.js +3 -2
  41. package/dist/assets/components/scripting.min.js +1 -1
  42. package/dist/assets/components/texturing-3d.js +27 -33
  43. package/dist/assets/components/texturing-3d.min.js +3 -3
  44. package/dist/assets/components/volume-rendering.js +12 -11
  45. package/dist/assets/components/volume-rendering.min.js +1 -1
  46. package/dist/assets/components/x_ite.js +3 -2
  47. package/dist/assets/components/x_ite.min.js +1 -1
  48. package/dist/assets/images/Shading.png +0 -0
  49. package/dist/assets/linetype/1.png +0 -0
  50. package/dist/assets/linetype/10.png +0 -0
  51. package/dist/assets/linetype/11.png +0 -0
  52. package/dist/assets/linetype/12.png +0 -0
  53. package/dist/assets/linetype/13.png +0 -0
  54. package/dist/assets/linetype/14.png +0 -0
  55. package/dist/assets/linetype/15.png +0 -0
  56. package/dist/assets/linetype/16.png +0 -0
  57. package/dist/assets/linetype/2.png +0 -0
  58. package/dist/assets/linetype/3.png +0 -0
  59. package/dist/assets/linetype/4.png +0 -0
  60. package/dist/assets/linetype/5.png +0 -0
  61. package/dist/assets/linetype/6.png +0 -0
  62. package/dist/assets/linetype/7.png +0 -0
  63. package/dist/assets/linetype/8.png +0 -0
  64. package/dist/assets/linetype/9.png +0 -0
  65. package/dist/assets/shaders/webgl1/Gouraud.vs +1 -1
  66. package/dist/assets/shaders/webgl1/Line.fs +0 -21
  67. package/dist/assets/shaders/webgl1/Line.vs +0 -10
  68. package/dist/assets/shaders/webgl1/PBR.fs +1 -1
  69. package/dist/assets/shaders/webgl1/PBR.vs +1 -1
  70. package/dist/assets/shaders/webgl1/Phong.fs +1 -1
  71. package/dist/assets/shaders/webgl1/Point.vs +1 -1
  72. package/dist/assets/shaders/webgl2/Depth.vs +29 -1
  73. package/dist/assets/shaders/webgl2/Gouraud.vs +32 -4
  74. package/dist/assets/shaders/webgl2/Line.fs +24 -12
  75. package/dist/assets/shaders/webgl2/Line.vs +36 -11
  76. package/dist/assets/shaders/webgl2/LineTransform.fs +4 -0
  77. package/dist/assets/shaders/webgl2/LineTransform.vs +57 -0
  78. package/dist/assets/shaders/webgl2/PBR.fs +1 -1
  79. package/dist/assets/shaders/webgl2/PBR.vs +35 -7
  80. package/dist/assets/shaders/webgl2/Phong.fs +1 -1
  81. package/dist/assets/shaders/webgl2/Phong.vs +31 -3
  82. package/dist/assets/shaders/webgl2/Point.vs +30 -2
  83. package/dist/assets/shaders/webgl2/Unlit.vs +31 -3
  84. package/dist/example.html +6 -6
  85. package/dist/x_ite.css +199 -224
  86. package/dist/x_ite.js +16335 -15917
  87. package/dist/x_ite.min.js +17 -17
  88. package/dist/x_ite.zip +0 -0
  89. package/docs/404.md +6 -0
  90. package/docs/Accessing-the-External-Browser.md +21 -15
  91. package/docs/Browser-Support.md +6 -0
  92. package/docs/Custom-Shaders.md +18 -25
  93. package/docs/Features.md +11 -5
  94. package/docs/Gemfile +44 -0
  95. package/docs/Gemfile.lock +122 -0
  96. package/docs/Glossary.md +6 -0
  97. package/docs/How-To-Configure-Your-Web-Server.md +6 -0
  98. package/docs/Supported-Nodes.md +9 -1
  99. package/docs/What's-New.md +93 -39
  100. package/docs/XHTML-DOM-Integration.md +6 -0
  101. package/docs/_config.yml +2 -2
  102. package/docs/assets/css/main.scss +26 -0
  103. package/docs/index.md +42 -50
  104. package/docs/reference/Browser-Services.md +9 -3
  105. package/docs/reference/Constants-Services.md +6 -0
  106. package/docs/reference/ECMAScript-Object-and-Function-Definitions.md +12 -6
  107. package/docs/reference/Field-Services-and-Objects.md +105 -1
  108. package/docs/reference/Prototype-Services.md +11 -0
  109. package/docs/reference/Route-Services.md +9 -0
  110. package/docs/reference/Scene-Services.md +17 -2
  111. package/docs/reference/Script-Node-Authoring-Interface.md +7 -1
  112. package/docs/tutorials/Adding-backgrounds.md +6 -0
  113. package/docs/tutorials/Adding-fog.md +6 -0
  114. package/docs/tutorials/Adding-sound.md +6 -0
  115. package/docs/tutorials/Animating-transforms.md +6 -0
  116. package/docs/tutorials/Basic-Nodes.md +6 -0
  117. package/docs/tutorials/Building-a-X3D-world.md +6 -0
  118. package/docs/tutorials/Building-elevation-grids.md +6 -0
  119. package/docs/tutorials/Building-extruded-shapes.md +6 -0
  120. package/docs/tutorials/Building-primitive-shapes.md +6 -0
  121. package/docs/tutorials/Building-shapes-out-of-points,-lines,-and-faces.md +6 -0
  122. package/docs/tutorials/Controlling-appearance-with-materials.md +6 -0
  123. package/docs/tutorials/Controlling-color-on-coordinate-based-geometry.md +6 -0
  124. package/docs/tutorials/Controlling-detail.md +6 -0
  125. package/docs/tutorials/Controlling-how-textures-are-mapped.md +6 -0
  126. package/docs/tutorials/Controlling-navigation.md +6 -0
  127. package/docs/tutorials/Controlling-shading-on-coordinate-based-geometry.md +6 -0
  128. package/docs/tutorials/Controlling-the-viewpoint.md +6 -0
  129. package/docs/tutorials/Creating-new-node-types.md +6 -0
  130. package/docs/tutorials/Grouping-nodes.md +6 -0
  131. package/docs/tutorials/Hello,-World!.md +6 -0
  132. package/docs/tutorials/Improving-Performance.md +6 -0
  133. package/docs/tutorials/Increasing-Rendering-Speed.md +6 -0
  134. package/docs/tutorials/Introducing-X3D.md +6 -0
  135. package/docs/tutorials/Introducing-animation.md +6 -0
  136. package/docs/tutorials/Introducing-script-use.md +6 -0
  137. package/docs/tutorials/Lighting-your-world.md +6 -0
  138. package/docs/tutorials/Mapping-textures.md +6 -0
  139. package/docs/tutorials/Naming-nodes.md +6 -0
  140. package/docs/tutorials/Providing-information-about-your-world.md +6 -0
  141. package/docs/tutorials/Sensing-the-viewer.md +6 -0
  142. package/docs/tutorials/Sensing-viewer-actions.md +6 -0
  143. package/docs/tutorials/Transforming-Shapes.md +6 -0
  144. package/docs/tutorials/Writing-program-scripts-with-ECMAScript.md +6 -0
  145. package/docs/tutorials/index.md +42 -36
  146. package/package.json +6 -7
  147. package/src/assets/components/geometry2d.js +1 -1
  148. package/src/assets/components/key-device-sensor.js +1 -1
  149. package/src/assets/components/layout.js +1 -1
  150. package/src/assets/components/particle-systems.js +1 -1
  151. package/src/assets/components/volume-rendering.js +1 -1
  152. package/src/assets/images/Shading.png +0 -0
  153. package/src/assets/linetype/1.png +0 -0
  154. package/src/assets/linetype/10.png +0 -0
  155. package/src/assets/linetype/11.png +0 -0
  156. package/src/assets/linetype/12.png +0 -0
  157. package/src/assets/linetype/13.png +0 -0
  158. package/src/assets/linetype/14.png +0 -0
  159. package/src/assets/linetype/15.png +0 -0
  160. package/src/assets/linetype/16.png +0 -0
  161. package/src/assets/linetype/2.png +0 -0
  162. package/src/assets/linetype/3.png +0 -0
  163. package/src/assets/linetype/4.png +0 -0
  164. package/src/assets/linetype/5.png +0 -0
  165. package/src/assets/linetype/6.png +0 -0
  166. package/src/assets/linetype/7.png +0 -0
  167. package/src/assets/linetype/8.png +0 -0
  168. package/src/assets/linetype/9.png +0 -0
  169. package/src/assets/shaders/Types.glsl +1 -9
  170. package/src/assets/shaders/webgl1/Gouraud.fs +1 -1
  171. package/src/assets/shaders/webgl1/Gouraud.vs +2 -3
  172. package/src/assets/shaders/webgl1/Line.fs +3 -28
  173. package/src/assets/shaders/webgl1/Line.vs +6 -20
  174. package/src/assets/shaders/webgl1/PBR.fs +6 -6
  175. package/src/assets/shaders/webgl1/PBR.vs +1 -1
  176. package/src/assets/shaders/webgl1/Phong.fs +10 -10
  177. package/src/assets/shaders/webgl1/Point.vs +2 -2
  178. package/src/assets/shaders/webgl1/Unlit.fs +4 -4
  179. package/src/assets/shaders/webgl1/include/Normal.glsl +1 -1
  180. package/src/assets/shaders/webgl1/include/Texture.glsl +3 -8
  181. package/src/assets/shaders/webgl2/Depth.vs +4 -1
  182. package/src/assets/shaders/webgl2/Gouraud.fs +1 -1
  183. package/src/assets/shaders/webgl2/Gouraud.vs +8 -6
  184. package/src/assets/shaders/webgl2/Line.fs +11 -17
  185. package/src/assets/shaders/webgl2/Line.vs +17 -21
  186. package/src/assets/shaders/webgl2/LineTransform.fs +6 -0
  187. package/src/assets/shaders/webgl2/LineTransform.vs +77 -0
  188. package/src/assets/shaders/webgl2/PBR.fs +6 -6
  189. package/src/assets/shaders/webgl2/PBR.vs +10 -7
  190. package/src/assets/shaders/webgl2/Phong.fs +11 -11
  191. package/src/assets/shaders/webgl2/Phong.vs +6 -3
  192. package/src/assets/shaders/webgl2/Point.vs +5 -4
  193. package/src/assets/shaders/webgl2/Unlit.fs +5 -5
  194. package/src/assets/shaders/webgl2/Unlit.vs +6 -3
  195. package/src/assets/shaders/webgl2/include/Line2.glsl +20 -0
  196. package/src/assets/shaders/webgl2/include/Normal.glsl +1 -1
  197. package/src/assets/shaders/webgl2/include/Particle.glsl +36 -0
  198. package/src/assets/shaders/webgl2/include/Texture.glsl +3 -3
  199. package/src/example.html +6 -6
  200. package/src/examples.js +5 -4
  201. package/src/standard/Math/Algorithm.js +12 -28
  202. package/src/standard/Math/Geometry/Line2.js +163 -0
  203. package/src/standard/Math/Geometry/Line3.js +3 -5
  204. package/src/standard/Math/Geometry/Plane3.js +0 -2
  205. package/src/standard/Math/Geometry/Triangle3.js +1 -1
  206. package/src/standard/Math/Geometry/ViewVolume.js +121 -103
  207. package/src/standard/Math/Numbers/Color3.js +6 -0
  208. package/src/standard/Math/Numbers/Color4.js +7 -0
  209. package/src/standard/Math/Numbers/Complex.js +48 -34
  210. package/src/standard/Math/Numbers/Matrix2.js +62 -2
  211. package/src/standard/Math/Numbers/Matrix3.js +129 -110
  212. package/src/standard/Math/Numbers/Matrix4.js +138 -119
  213. package/src/standard/Math/Numbers/Quaternion.js +12 -5
  214. package/src/standard/Math/Numbers/Rotation4.js +8 -1
  215. package/src/standard/Math/Numbers/Vector2.js +42 -9
  216. package/src/standard/Math/Numbers/Vector3.js +50 -14
  217. package/src/standard/Math/Numbers/Vector4.js +48 -11
  218. package/src/standard/Math/Utility/BVH.js +45 -17
  219. package/src/tests.js +68 -66
  220. package/src/x_ite/Base/X3DBaseNode.js +22 -11
  221. package/src/x_ite/Base/X3DField.js +1 -1
  222. package/src/x_ite/Browser/Core/BrowserOptions.js +24 -143
  223. package/src/x_ite/Browser/Core/BrowserTimings.js +6 -4
  224. package/src/x_ite/Browser/Core/Context.js +185 -0
  225. package/src/x_ite/Browser/Core/ContextMenu.js +398 -211
  226. package/src/x_ite/Browser/Core/Notification.js +1 -0
  227. package/src/x_ite/Browser/Core/X3DCoreContext.js +35 -146
  228. package/src/x_ite/Browser/Followers/X3DArrayFollowerTemplate.js +1 -1
  229. package/src/x_ite/Browser/Geometry2D/Disk2DOptions.js +1 -0
  230. package/src/x_ite/Browser/Geometry2D/X3DGeometry2DContext.js +2 -2
  231. package/src/x_ite/Browser/Geometry3D/X3DGeometry3DContext.js +41 -2
  232. package/src/x_ite/Browser/Geospatial/Geocentric.js +2 -2
  233. package/src/x_ite/Browser/Interpolation/CatmullRomSplineInterpolatorTemplate.js +1 -1
  234. package/src/x_ite/Browser/Layout/ScreenText.js +18 -65
  235. package/src/x_ite/Browser/Layout/X3DLayoutContext.js +59 -16
  236. package/src/x_ite/Browser/Navigation/ExamineViewer.js +13 -20
  237. package/src/x_ite/Browser/Navigation/LookAtViewer.js +1 -4
  238. package/src/x_ite/Browser/Navigation/PlaneViewer.js +0 -3
  239. package/src/x_ite/Browser/Navigation/X3DFlyViewer.js +15 -8
  240. package/src/x_ite/Browser/Navigation/X3DViewer.js +12 -20
  241. package/src/x_ite/Browser/Networking/X3DNetworkingContext.js +11 -7
  242. package/src/x_ite/Browser/ParticleSystems/BVH.glsl +183 -0
  243. package/src/x_ite/Browser/ParticleSystems/Box3.glsl +47 -0
  244. package/src/x_ite/Browser/ParticleSystems/GeometryTypes.js +66 -0
  245. package/src/x_ite/Browser/ParticleSystems/Line3.glsl +55 -0
  246. package/src/x_ite/Browser/ParticleSystems/Plane3.glsl +160 -0
  247. package/src/x_ite/Browser/PointingDeviceSensor/PointingDevice.js +27 -3
  248. package/src/x_ite/Browser/PointingDeviceSensor/X3DPointingDeviceSensorContext.js +41 -37
  249. package/src/x_ite/Browser/Rendering/X3DRenderingContext.js +21 -13
  250. package/src/x_ite/Browser/Shaders/Shader.js +33 -12
  251. package/src/x_ite/Browser/Shaders/ShaderSource.js +6 -0
  252. package/src/x_ite/Browser/Shaders/ShaderTest.js +16 -10
  253. package/src/x_ite/Browser/Shape/X3DShapeContext.js +50 -9
  254. package/src/x_ite/Browser/Text/X3DTextContext.js +4 -13
  255. package/src/x_ite/Browser/Text/X3DTextGeometry.js +2 -1
  256. package/src/x_ite/Browser/Texturing/X3DTexturingContext.js +71 -34
  257. package/src/x_ite/Browser/Texturing3D/DICOMParser.js +2 -2
  258. package/src/x_ite/Browser/Time/X3DTimeContext.js +4 -2
  259. package/src/x_ite/Browser/VERSION.js +1 -1
  260. package/src/x_ite/Browser/X3DBrowser.js +7 -6
  261. package/src/x_ite/Browser/X3DBrowserContext.js +43 -10
  262. package/src/x_ite/Components/Core/X3DNode.js +4 -0
  263. package/src/x_ite/Components/Core/X3DPrototypeInstance.js +0 -2
  264. package/src/x_ite/Components/CubeMapTexturing/ComposedCubeMapTexture.js +3 -4
  265. package/src/x_ite/Components/CubeMapTexturing/GeneratedCubeMapTexture.js +1 -12
  266. package/src/x_ite/Components/CubeMapTexturing/ImageCubeMapTexture.js +1 -2
  267. package/src/x_ite/Components/EnvironmentalEffects/TextureBackground.js +1 -1
  268. package/src/x_ite/Components/EnvironmentalEffects/X3DBackgroundNode.js +76 -77
  269. package/src/x_ite/Components/EnvironmentalEffects/X3DFogObject.js +2 -9
  270. package/src/x_ite/Components/EnvironmentalSensor/ProximitySensor.js +51 -65
  271. package/src/x_ite/Components/EventUtilities/X3DSequencerNode.js +1 -1
  272. package/src/x_ite/Components/Followers/ColorDamper.js +1 -1
  273. package/src/x_ite/Components/Followers/X3DChaserNode.js +18 -32
  274. package/src/x_ite/Components/Followers/X3DDamperNode.js +1 -6
  275. package/src/x_ite/Components/Followers/X3DFollowerNode.js +1 -1
  276. package/src/x_ite/Components/Geometry2D/Disk2D.js +30 -46
  277. package/src/x_ite/Components/Geometry2D/TriangleSet2D.js +1 -1
  278. package/src/x_ite/Components/Geometry3D/ElevationGrid.js +12 -4
  279. package/src/x_ite/Components/Geometry3D/IndexedFaceSet.js +4 -4
  280. package/src/x_ite/Components/Geospatial/GeoCoordinate.js +10 -27
  281. package/src/x_ite/Components/Geospatial/GeoLOD.js +1 -1
  282. package/src/x_ite/Components/Geospatial/GeoPositionInterpolator.js +5 -10
  283. package/src/x_ite/Components/Geospatial/GeoTouchSensor.js +9 -16
  284. package/src/x_ite/Components/Geospatial/GeoTransform.js +6 -18
  285. package/src/x_ite/Components/Geospatial/GeoViewpoint.js +26 -30
  286. package/src/x_ite/Components/Geospatial/X3DGeospatialObject.js +20 -27
  287. package/src/x_ite/Components/Grouping/X3DGroupingNode.js +8 -8
  288. package/src/x_ite/Components/Grouping/X3DTransformNode.js +0 -4
  289. package/src/x_ite/Components/HAnim/HAnimHumanoid.js +68 -75
  290. package/src/x_ite/Components/Interpolation/OrientationInterpolator.js +4 -11
  291. package/src/x_ite/Components/Interpolation/X3DInterpolatorNode.js +1 -1
  292. package/src/x_ite/Components/Layout/LayoutGroup.js +4 -9
  293. package/src/x_ite/Components/Layout/ScreenFontStyle.js +1 -1
  294. package/src/x_ite/Components/Layout/ScreenGroup.js +16 -80
  295. package/src/x_ite/Components/Lighting/DirectionalLight.js +28 -36
  296. package/src/x_ite/Components/Lighting/PointLight.js +32 -47
  297. package/src/x_ite/Components/Lighting/SpotLight.js +33 -48
  298. package/src/x_ite/Components/Navigation/Billboard.js +49 -56
  299. package/src/x_ite/Components/Navigation/LOD.js +2 -2
  300. package/src/x_ite/Components/Navigation/OrthoViewpoint.js +29 -30
  301. package/src/x_ite/Components/Navigation/Viewpoint.js +16 -20
  302. package/src/x_ite/Components/Navigation/X3DViewpointNode.js +82 -111
  303. package/src/x_ite/Components/Networking/Anchor.js +18 -7
  304. package/src/x_ite/Components/ParticleSystems/BoundedPhysicsModel.js +6 -6
  305. package/src/x_ite/Components/ParticleSystems/ConeEmitter.js +44 -36
  306. package/src/x_ite/Components/ParticleSystems/ExplosionEmitter.js +26 -17
  307. package/src/x_ite/Components/ParticleSystems/ForcePhysicsModel.js +20 -7
  308. package/src/x_ite/Components/ParticleSystems/ParticleSystem.js +463 -882
  309. package/src/x_ite/Components/ParticleSystems/PointEmitter.js +39 -35
  310. package/src/x_ite/Components/ParticleSystems/PolylineEmitter.js +112 -128
  311. package/src/x_ite/Components/ParticleSystems/SurfaceEmitter.js +105 -112
  312. package/src/x_ite/Components/ParticleSystems/VolumeEmitter.js +138 -176
  313. package/src/x_ite/Components/ParticleSystems/WindPhysicsModel.js +16 -11
  314. package/src/x_ite/Components/ParticleSystems/X3DParticleEmitterNode.js +807 -217
  315. package/src/x_ite/Components/Picking/LinePickSensor.js +31 -39
  316. package/src/x_ite/Components/PointingDeviceSensor/CylinderSensor.js +91 -108
  317. package/src/x_ite/Components/PointingDeviceSensor/PlaneSensor.js +56 -59
  318. package/src/x_ite/Components/PointingDeviceSensor/SphereSensor.js +54 -71
  319. package/src/x_ite/Components/PointingDeviceSensor/TouchSensor.js +8 -15
  320. package/src/x_ite/Components/ProjectiveTextureMapping/TextureProjectorParallel.js +43 -50
  321. package/src/x_ite/Components/ProjectiveTextureMapping/TextureProjectorPerspective.js +32 -39
  322. package/src/x_ite/Components/Rendering/ClipPlane.js +3 -11
  323. package/src/x_ite/Components/Rendering/Color.js +12 -24
  324. package/src/x_ite/Components/Rendering/ColorRGBA.js +13 -25
  325. package/src/x_ite/Components/Rendering/IndexedLineSet.js +26 -4
  326. package/src/x_ite/Components/Rendering/LineSet.js +35 -13
  327. package/src/x_ite/Components/Rendering/PointSet.js +35 -13
  328. package/src/x_ite/Components/Rendering/X3DComposedGeometryNode.js +13 -5
  329. package/src/x_ite/Components/Rendering/X3DGeometryNode.js +331 -387
  330. package/src/x_ite/Components/Rendering/X3DLineGeometryNode.js +350 -140
  331. package/src/x_ite/Components/Rendering/X3DPointGeometryNode.js +116 -126
  332. package/src/x_ite/Components/RigidBodyPhysics/DoubleAxisHingeJoint.js +24 -38
  333. package/src/x_ite/Components/RigidBodyPhysics/SingleAxisHingeJoint.js +10 -17
  334. package/src/x_ite/Components/Shaders/ComposedShader.js +35 -75
  335. package/src/x_ite/Components/Shaders/FloatVertexAttribute.js +8 -11
  336. package/src/x_ite/Components/Shaders/Matrix3VertexAttribute.js +10 -14
  337. package/src/x_ite/Components/Shaders/Matrix4VertexAttribute.js +10 -14
  338. package/src/x_ite/Components/Shaders/ShaderPart.js +1 -10
  339. package/src/x_ite/Components/Shaders/X3DProgrammableShaderObject.js +220 -210
  340. package/src/x_ite/Components/Shaders/X3DShaderNode.js +28 -10
  341. package/src/x_ite/Components/Shaders/X3DVertexAttributeNode.js +15 -1
  342. package/src/x_ite/Components/Shape/Appearance.js +37 -4
  343. package/src/x_ite/Components/Shape/FillProperties.js +12 -1
  344. package/src/x_ite/Components/Shape/LineProperties.js +33 -1
  345. package/src/x_ite/Components/Shape/PointProperties.js +24 -3
  346. package/src/x_ite/Components/Shape/Shape.js +30 -39
  347. package/src/x_ite/Components/Shape/TwoSidedMaterial.js +3 -1
  348. package/src/x_ite/Components/Sound/Sound.js +31 -41
  349. package/src/x_ite/Components/Text/Text.js +6 -20
  350. package/src/x_ite/Components/Texturing/ImageTexture.js +1 -1
  351. package/src/x_ite/Components/Texturing/MovieTexture.js +1 -1
  352. package/src/x_ite/Components/Texturing/PixelTexture.js +2 -2
  353. package/src/x_ite/Components/Texturing/TextureCoordinate.js +5 -5
  354. package/src/x_ite/Components/Texturing/TextureProperties.js +4 -4
  355. package/src/x_ite/Components/Texturing/X3DSingleTextureNode.js +5 -4
  356. package/src/x_ite/Components/Texturing/X3DTexture2DNode.js +24 -33
  357. package/src/x_ite/Components/Texturing3D/TextureCoordinate3D.js +5 -5
  358. package/src/x_ite/Components/Texturing3D/TextureCoordinate4D.js +5 -5
  359. package/src/x_ite/Components/Texturing3D/X3DTexture3DNode.js +12 -19
  360. package/src/x_ite/Components/VolumeRendering/X3DVolumeDataNode.js +8 -8
  361. package/src/x_ite/Components.js +2 -2
  362. package/src/x_ite/Fallback.js +9 -3
  363. package/src/x_ite/Fields/SFColor.js +4 -0
  364. package/src/x_ite/Fields/SFColorRGBA.js +4 -0
  365. package/src/x_ite/Fields/SFImage.js +2 -11
  366. package/src/x_ite/Fields/SFMatrixPrototypeTemplate.js +4 -0
  367. package/src/x_ite/Fields/SFRotation.js +4 -0
  368. package/src/x_ite/Fields/SFString.js +4 -0
  369. package/src/x_ite/Fields/SFVecPrototypeTemplate.js +22 -2
  370. package/src/x_ite/Parser/XMLParser.js +1 -1
  371. package/src/x_ite/Rendering/TextureBuffer.js +43 -36
  372. package/src/x_ite/Rendering/VertexArray.js +103 -0
  373. package/src/x_ite/Rendering/X3DRenderObject.js +127 -148
  374. package/src/x_ite/X3D.js +32 -26
  375. package/src/x_ite.config.js +0 -5
  376. package/src/x_ite.css +216 -175
  377. package/src/x_ite.html +15 -10
  378. package/src/x_ite.js +49 -1
  379. package/x_ite.min.html +15 -10
  380. package/dist/assets/hatching/0.png +0 -0
  381. package/dist/assets/linetype/0.png +0 -0
  382. package/src/assets/hatching/0.png +0 -0
  383. package/src/assets/linetype/0.png +0 -0
  384. package/src/spinner.css +0 -67
  385. package/src/x_ite/Browser/Shape/LineStipples.xcf +0 -0
@@ -173,9 +173,6 @@ function ($,
173
173
  },
174
174
  mousedown: function (event)
175
175
  {
176
- if (this .getBrowser () .getContextMenu () .getActive ())
177
- return;
178
-
179
176
  if (this .button >= 0)
180
177
  return;
181
178
 
@@ -382,7 +379,7 @@ function ($,
382
379
  viewpoint .transitionStop ();
383
380
 
384
381
  step = this .getDistanceToCenter (step) .multiply (event .zoomFactor || SCROLL_FACTOR),
385
- translation = viewpoint .getUserOrientation () .multVecRot (translation .set (0, 0, step .abs ()));
382
+ translation = viewpoint .getUserOrientation () .multVecRot (translation .set (0, 0, step .magnitude ()));
386
383
 
387
384
  if (event .deltaY > 0)
388
385
  this .addMove (translation .negate (), Vector3 .Zero);
@@ -449,21 +446,24 @@ function ($,
449
446
  // End rotate (button 0).
450
447
 
451
448
  event .button = 0;
449
+ event .pageX = this .touch1 .x;
450
+ event .pageY = this .touch1 .y;
452
451
 
453
452
  this .mouseup (event);
454
453
 
455
454
  // Start dblclick (button 0).
456
455
 
457
- if (this .getBrowser () .getCurrentTime () - this .tapStart < this .dblTapInterval)
456
+ if (this .tapedTwice)
458
457
  {
459
- event .button = 0;
460
- event .pageX = this .touch1 .x;
461
- event .pageY = this .touch1 .y;
462
-
463
458
  this .dblclick (event);
464
459
  }
460
+ else
461
+ {
462
+ this .tapedTwice = true;
463
+
464
+ setTimeout (function () { this .tapedTwice = false; } .bind (this), 300);
465
+ }
465
466
 
466
- this .tapStart = this .getBrowser () .getCurrentTime ();
467
467
  break;
468
468
  }
469
469
  case 1:
@@ -650,17 +650,10 @@ function ($,
650
650
 
651
651
  return function (rotationChange)
652
652
  {
653
- try
654
- {
655
- this .disconnect ();
656
- this .getBrowser () .prepareEvents () .addInterest ("spin", this);
653
+ this .disconnect ();
654
+ this .getBrowser () .prepareEvents () .addInterest ("spin", this);
657
655
 
658
- this .rotation .assign (rotation .assign (Rotation4 .Identity) .slerp (rotationChange, SPIN_FACTOR));
659
- }
660
- catch (error)
661
- {
662
- console .error (error);
663
- }
656
+ this .rotation .assign (rotation .assign (Rotation4 .Identity) .slerp (rotationChange, SPIN_FACTOR));
664
657
  };
665
658
  })(),
666
659
  addMove: (function ()
@@ -139,9 +139,6 @@ function ($,
139
139
  },
140
140
  mousedown: function (event)
141
141
  {
142
- if (this .getBrowser () .getContextMenu () .getActive ())
143
- return;
144
-
145
142
  if (this .button >= 0)
146
143
  return;
147
144
 
@@ -263,7 +260,7 @@ function ($,
263
260
  viewpoint .transitionStop ();
264
261
 
265
262
  step = this .getDistanceToCenter (step) .multiply (event .zoomFactor || SCROLL_FACTOR),
266
- translation = viewpoint .getUserOrientation () .multVecRot (translation .set (0, 0, step .abs ()));
263
+ translation = viewpoint .getUserOrientation () .multVecRot (translation .set (0, 0, step .magnitude ()));
267
264
 
268
265
  if (event .deltaY > 0)
269
266
  this .addMove (translation .negate (), Vector3 .Zero);
@@ -108,9 +108,6 @@ function ($,
108
108
  },
109
109
  mousedown: function (event)
110
110
  {
111
- if (this .getBrowser () .getContextMenu () .getActive ())
112
- return;
113
-
114
111
  if (this .button >= 0)
115
112
  return;
116
113
 
@@ -51,6 +51,7 @@ define ([
51
51
  "jquery",
52
52
  "x_ite/Browser/Navigation/X3DViewer",
53
53
  "x_ite/Components/Followers/OrientationChaser",
54
+ "x_ite/Rendering/VertexArray",
54
55
  "standard/Math/Numbers/Vector3",
55
56
  "standard/Math/Numbers/Rotation4",
56
57
  "standard/Math/Numbers/Matrix4",
@@ -60,6 +61,7 @@ define ([
60
61
  function ($,
61
62
  X3DViewer,
62
63
  OrientationChaser,
64
+ VertexArray,
63
65
  Vector3,
64
66
  Rotation4,
65
67
  Matrix4,
@@ -94,10 +96,11 @@ function ($,
94
96
  this .toVector = new Vector3 (0, 0, 0);
95
97
  this .direction = new Vector3 (0, 0, 0);
96
98
  this .startTime = 0;
97
- this .lineBuffer = gl .createBuffer ();
98
99
  this .lineCount = 2;
99
100
  this .lineVertices = new Array (this .lineCount * 4);
100
101
  this .lineArray = new Float32Array (this .lineVertices);
102
+ this .lineBuffer = gl .createBuffer ();
103
+ this .lineArrayObject = new VertexArray ();
101
104
  this .event = null;
102
105
  this .lookAround = false;
103
106
  this .orientationChaser = new OrientationChaser (executionContext);
@@ -156,9 +159,6 @@ function ($,
156
159
  },
157
160
  mousedown: function (event)
158
161
  {
159
- if (this .getBrowser () .getContextMenu () .getActive ())
160
- return;
161
-
162
162
  if (this .button >= 0)
163
163
  return;
164
164
 
@@ -453,7 +453,7 @@ function ($,
453
453
  else
454
454
  rubberBandRotation .setFromToVec (up .multVecRot (axis .set (0, 0, -1)), up .multVecRot (direction .assign (this .direction)));
455
455
 
456
- var rubberBandLength = this .direction .abs ();
456
+ var rubberBandLength = this .direction .magnitude ();
457
457
 
458
458
  // Determine positionOffset.
459
459
 
@@ -691,10 +691,12 @@ function ($,
691
691
  shaderNode = browser .getLineShader (),
692
692
  lineWidth = gl .getParameter (gl .LINE_WIDTH);
693
693
 
694
- if (shaderNode .getValid ())
694
+ if (shaderNode .isValid ())
695
695
  {
696
696
  shaderNode .enable (gl);
697
- shaderNode .enableVertexAttribute (gl, this .lineBuffer);
697
+
698
+ if (this .lineArrayObject .enable (gl, shaderNode))
699
+ shaderNode .enableVertexAttribute (gl, this .lineBuffer, 0, 0);
698
700
 
699
701
  gl .uniform1i (shaderNode .x3d_NumClipPlanes, 0);
700
702
  gl .uniform1i (shaderNode .x3d_FogType, 0);
@@ -744,7 +746,7 @@ function ($,
744
746
  // Transfer line.
745
747
 
746
748
  gl .bindBuffer (gl .ARRAY_BUFFER, this .lineBuffer);
747
- gl .bufferData (gl .ARRAY_BUFFER, this .lineArray, gl .STATIC_DRAW);
749
+ gl .bufferData (gl .ARRAY_BUFFER, this .lineArray, gl .DYNAMIC_DRAW);
748
750
  },
749
751
  disconnect: function ()
750
752
  {
@@ -762,6 +764,11 @@ function ($,
762
764
  },
763
765
  dispose: function ()
764
766
  {
767
+ const gl = this .getBrowser () .getContext ();
768
+
769
+ gl .deleteBuffer (this .lineBuffer);
770
+ this .lineArrayObject .delete (gl);
771
+
765
772
  this .disconnect ();
766
773
  this .getBrowser () ._controlKey .removeInterest ("set_controlKey__", this);
767
774
  this .getBrowser () .getSurface () .unbind (".X3DFlyViewer");
@@ -122,29 +122,21 @@ function (X3DBaseNode,
122
122
 
123
123
  return function (x, y, result)
124
124
  {
125
- try
126
- {
127
- const
128
- navigationInfo = this .getNavigationInfo (),
129
- viewpoint = this .getActiveViewpoint (),
130
- viewport = this .getViewport () .getRectangle (this .getBrowser ()),
131
- projectionMatrix = viewpoint .getProjectionMatrixWithLimits (navigationInfo .getNearValue (), navigationInfo .getFarValue (viewpoint), viewport);
125
+ const
126
+ navigationInfo = this .getNavigationInfo (),
127
+ viewpoint = this .getActiveViewpoint (),
128
+ viewport = this .getViewport () .getRectangle (this .getBrowser ()),
129
+ projectionMatrix = viewpoint .getProjectionMatrixWithLimits (navigationInfo .getNearValue (), navigationInfo .getFarValue (viewpoint), viewport);
132
130
 
133
- // Far plane point
134
- ViewVolume .unProjectPoint (x, this .getBrowser () .getViewport () [3] - y, 0.9, Matrix4 .Identity, projectionMatrix, viewport, far);
131
+ // Far plane point
132
+ ViewVolume .unProjectPoint (x, this .getBrowser () .getViewport () [3] - y, 0.9, Matrix4 .Identity, projectionMatrix, viewport, far);
135
133
 
136
- if (viewpoint instanceof OrthoViewpoint)
137
- return result .set (far .x, far .y, -this .getDistanceToCenter (distance) .abs ());
134
+ if (viewpoint instanceof OrthoViewpoint)
135
+ return result .set (far .x, far .y, -this .getDistanceToCenter (distance) .magnitude ());
138
136
 
139
- const direction = far .normalize ();
137
+ const direction = far .normalize ();
140
138
 
141
- return result .assign (direction) .multiply (this .getDistanceToCenter (distance) .abs () / direction .dot (axis));
142
- }
143
- catch (error)
144
- {
145
- console .error (error);
146
- return result .set (0, 0, 0);
147
- }
139
+ return result .assign (direction) .multiply (this .getDistanceToCenter (distance) .magnitude () / direction .dot (axis));
148
140
  };
149
141
  })(),
150
142
  getDistanceToCenter: function (distance, positionOffset)
@@ -194,7 +186,7 @@ function (X3DBaseNode,
194
186
  })(),
195
187
  touch: function (x, y)
196
188
  {
197
- this .getBrowser () .touch (x, y);
189
+ this .getBrowser () .touch (x, y, false);
198
190
 
199
191
  return this .getBrowser () .getHits () .length;
200
192
  },
@@ -85,10 +85,13 @@ function (Fields,
85
85
  this [_loading] = false;
86
86
  this [_location] = getBaseURI (this .getElement () [0]);
87
87
 
88
- this .getCanvas () .fadeOut (0);
88
+ this .getCanvas () .hide ();
89
89
 
90
90
  if (this .getBrowserOptions () .getSplashScreen ())
91
- this .getSplashScreen () .fadeIn (0);
91
+ {
92
+ this .getContextMenu () .hide ();
93
+ this .getSplashScreen () .show ();
94
+ }
92
95
  }
93
96
 
94
97
  X3DNetworkingContext .prototype =
@@ -127,28 +130,29 @@ function (Fields,
127
130
  {
128
131
  this .resetLoadCount ();
129
132
 
130
- this .getElement () .find (".x_ite-private-world-info") .remove ();
133
+ this .getShadow () .find (".x_ite-private-world-info") .remove ();
131
134
 
132
135
  if (this .getBrowserOptions () .getSplashScreen ())
133
136
  {
137
+ this .getContextMenu () .hide ();
134
138
  this .getCanvas () .stop (true, true) .animate ({ "delay": 1 }, 1) .fadeOut (0);
135
139
  this .getSplashScreen () .stop (true, true) .animate ({ "delay": 1 }, 1) .fadeIn (0);
136
140
  }
137
141
  else
138
142
  {
139
- this .getCanvas () .fadeOut (0);
143
+ this .getCanvas () .hide ();
140
144
  }
141
145
  }
142
146
  else
143
147
  {
144
148
  if (this .getBrowserOptions () .getSplashScreen ())
145
149
  {
146
- this .getSplashScreen () .stop (true, true) .fadeIn (0) .fadeOut (2000);
147
- this .getCanvas () .stop (true, true) .fadeOut (0) .fadeIn (2000);
150
+ this .getSplashScreen () .stop (true, true) .show () .fadeOut (2000);
151
+ this .getCanvas () .stop (true, true) .hide () .fadeIn (2000);
148
152
  }
149
153
  else
150
154
  {
151
- this .getCanvas () .fadeIn (0);
155
+ this .getCanvas () .show ();
152
156
  }
153
157
  }
154
158
  },
@@ -0,0 +1,183 @@
1
+ #define BVH_NODE 0
2
+ #define BVH_TRIANGLE 1
3
+ #define BVH_STACK_SIZE 32
4
+
5
+ int bvhNodeIndex = 0;
6
+
7
+ void
8
+ setBVHIndex (const in int index)
9
+ {
10
+ bvhNodeIndex = index;
11
+ }
12
+
13
+ int
14
+ getBVHRoot (const in sampler2D volume, const in int hierarchyIndex, const in int rootIndex)
15
+ {
16
+ return int (texelFetch (volume, rootIndex, 0) .x) + hierarchyIndex;
17
+ }
18
+
19
+ int
20
+ getBVHType (const in sampler2D volume)
21
+ {
22
+ return int (texelFetch (volume, bvhNodeIndex, 0) .x);
23
+ }
24
+
25
+ vec3
26
+ getBVHMin (const in sampler2D volume)
27
+ {
28
+ return texelFetch (volume, bvhNodeIndex + 1, 0) .xyz;
29
+ }
30
+
31
+ vec3
32
+ getBVHMax (const in sampler2D volume)
33
+ {
34
+ return texelFetch (volume, bvhNodeIndex + 2, 0) .xyz;
35
+ }
36
+
37
+ int
38
+ getBVHLeft (const in sampler2D volume, const in int hierarchyIndex)
39
+ {
40
+ return int (texelFetch (volume, bvhNodeIndex, 0) .y) + hierarchyIndex;
41
+ }
42
+
43
+ int
44
+ getBVHRight (const in sampler2D volume, const in int hierarchyIndex)
45
+ {
46
+ return int (texelFetch (volume, bvhNodeIndex, 0) .z) + hierarchyIndex;
47
+ }
48
+
49
+ int
50
+ getBVHTriangle (const in sampler2D volume)
51
+ {
52
+ return int (texelFetch (volume, bvhNodeIndex, 0) .y);
53
+ }
54
+
55
+ /* Ray triangle intersection test */
56
+
57
+ int
58
+ getIntersections (const in sampler2D volume, const in int verticesIndex, const in int hierarchyIndex, const in int rootIndex, const in Line3 line, out vec4 points [ARRAY_SIZE])
59
+ {
60
+ int current = getBVHRoot (volume, hierarchyIndex, rootIndex);
61
+ int count = 0;
62
+ int stackIndex = -1;
63
+ int stack [BVH_STACK_SIZE];
64
+
65
+ while (stackIndex >= 0 || current >= 0)
66
+ {
67
+ if (current >= 0)
68
+ {
69
+ setBVHIndex (current);
70
+
71
+ if (getBVHType (volume) == BVH_NODE)
72
+ {
73
+ // Node
74
+
75
+ if (intersects (getBVHMin (volume), getBVHMax (volume), line))
76
+ {
77
+ stack [++ stackIndex] = current;
78
+
79
+ current = getBVHLeft (volume, hierarchyIndex);
80
+ }
81
+ else
82
+ {
83
+ current = -1;
84
+ }
85
+ }
86
+ else
87
+ {
88
+ // Triangle
89
+
90
+ int t = getBVHTriangle (volume);
91
+ int v = verticesIndex + t;
92
+ vec3 r = vec3 (0.0);
93
+
94
+ vec3 a = texelFetch (volume, v, 0) .xyz;
95
+ vec3 b = texelFetch (volume, v + 1, 0) .xyz;
96
+ vec3 c = texelFetch (volume, v + 2, 0) .xyz;
97
+
98
+ if (intersects (line, a, b, c, r))
99
+ points [count ++] = vec4 (r .z * a + r .x * b + r .y * c, 1.0);
100
+
101
+ current = -1;
102
+ }
103
+ }
104
+ else
105
+ {
106
+ setBVHIndex (stack [stackIndex --]);
107
+
108
+ current = getBVHRight (volume, hierarchyIndex);
109
+ }
110
+ }
111
+
112
+ return count;
113
+ }
114
+
115
+ int
116
+ getIntersections (const in sampler2D volume, const in int verticesIndex, const in int normalsIndex, const in int hierarchyIndex, const in int rootIndex, const in Line3 line, out vec4 points [ARRAY_SIZE], out vec3 normals [ARRAY_SIZE])
117
+ {
118
+ int current = getBVHRoot (volume, hierarchyIndex, rootIndex);
119
+ int count = 0;
120
+ int stackIndex = -1;
121
+ int stack [BVH_STACK_SIZE];
122
+
123
+ while (stackIndex >= 0 || current >= 0)
124
+ {
125
+ if (current >= 0)
126
+ {
127
+ setBVHIndex (current);
128
+
129
+ if (getBVHType (volume) == BVH_NODE)
130
+ {
131
+ // Node
132
+
133
+ if (intersects (getBVHMin (volume), getBVHMax (volume), line))
134
+ {
135
+ stack [++ stackIndex] = current;
136
+
137
+ current = getBVHLeft (volume, hierarchyIndex);
138
+ }
139
+ else
140
+ {
141
+ current = -1;
142
+ }
143
+ }
144
+ else
145
+ {
146
+ // Triangle
147
+
148
+ int t = getBVHTriangle (volume);
149
+ int v = verticesIndex + t;
150
+ vec3 r = vec3 (0.0);
151
+
152
+ vec3 a = texelFetch (volume, v, 0) .xyz;
153
+ vec3 b = texelFetch (volume, v + 1, 0) .xyz;
154
+ vec3 c = texelFetch (volume, v + 2, 0) .xyz;
155
+
156
+ if (intersects (line, a, b, c, r))
157
+ {
158
+ points [count] = vec4 (r .z * a + r .x * b + r .y * c, 1.0);
159
+
160
+ int n = normalsIndex + t;
161
+
162
+ vec3 n0 = texelFetch (volume, n, 0) .xyz;
163
+ vec3 n1 = texelFetch (volume, n + 1, 0) .xyz;
164
+ vec3 n2 = texelFetch (volume, n + 2, 0) .xyz;
165
+
166
+ normals [count] = save_normalize (r .z * n0 + r .x * n1 + r .y * n2);
167
+
168
+ ++ count;
169
+ }
170
+
171
+ current = -1;
172
+ }
173
+ }
174
+ else
175
+ {
176
+ setBVHIndex (stack [stackIndex --]);
177
+
178
+ current = getBVHRight (volume, hierarchyIndex);
179
+ }
180
+ }
181
+
182
+ return count;
183
+ }
@@ -0,0 +1,47 @@
1
+ bool
2
+ intersects (const in vec3 min, const in vec3 max, const in Line3 line)
3
+ {
4
+ vec3 intersection;
5
+
6
+ // front
7
+
8
+ if (intersects (plane3 (max, vec3 (0.0, 0.0, 1.0)), line, intersection))
9
+ {
10
+ if (all (greaterThanEqual (vec4 (intersection .xy, max .xy), vec4 (min .xy, intersection .xy))))
11
+ return true;
12
+ }
13
+
14
+ // back
15
+
16
+ if (intersects (plane3 (min, vec3 (0.0, 0.0, -1.0)), line, intersection))
17
+ {
18
+ if (all (greaterThanEqual (vec4 (intersection .xy, max .xy), vec4 (min .xy, intersection .xy))))
19
+ return true;
20
+ }
21
+
22
+ // top
23
+
24
+ if (intersects (plane3 (max, vec3 (0.0, 1.0, 0.0)), line, intersection))
25
+ {
26
+ if (all (greaterThanEqual (vec4 (intersection .xz, max .xz), vec4 (min .xz, intersection .xz))))
27
+ return true;
28
+ }
29
+
30
+ // bottom
31
+
32
+ if (intersects (plane3 (min, vec3 (0.0, -1.0, 0.0)), line, intersection))
33
+ {
34
+ if (all (greaterThanEqual (vec4 (intersection .xz, max .xz), vec4 (min .xz, intersection .xz))))
35
+ return true;
36
+ }
37
+
38
+ // right
39
+
40
+ if (intersects (plane3 (max, vec3 (1.0, 0.0, 0.0)), line, intersection))
41
+ {
42
+ if (all (greaterThanEqual (vec4 (intersection .yz, max .yz), vec4 (min .yz, intersection .yz))))
43
+ return true;
44
+ }
45
+
46
+ return false;
47
+ }
@@ -0,0 +1,66 @@
1
+ /* -*- Mode: JavaScript; coding: utf-8; tab-width: 3; indent-tabs-mode: tab; c-basic-offset: 3 -*-
2
+ *******************************************************************************
3
+ *
4
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5
+ *
6
+ * Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011.
7
+ *
8
+ * All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
9
+ *
10
+ * The copyright notice above does not evidence any actual of intended
11
+ * publication of such source code, and is an unpublished work by create3000.
12
+ * This material contains CONFIDENTIAL INFORMATION that is the property of
13
+ * create3000.
14
+ *
15
+ * No permission is granted to copy, distribute, or create derivative works from
16
+ * the contents of this software, in whole or in part, without the prior written
17
+ * permission of create3000.
18
+ *
19
+ * NON-MILITARY USE ONLY
20
+ *
21
+ * All create3000 software are effectively free software with a non-military use
22
+ * restriction. It is free. Well commented source is provided. You may reuse the
23
+ * source in any way you please with the exception anything that uses it must be
24
+ * marked to indicate is contains 'non-military use only' components.
25
+ *
26
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
27
+ *
28
+ * Copyright 2015, 2016 Holger Seelig <holger.seelig@yahoo.de>.
29
+ *
30
+ * This file is part of the X_ITE Project.
31
+ *
32
+ * X_ITE is free software: you can redistribute it and/or modify it under the
33
+ * terms of the GNU General Public License version 3 only, as published by the
34
+ * Free Software Foundation.
35
+ *
36
+ * X_ITE is distributed in the hope that it will be useful, but WITHOUT ANY
37
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
38
+ * A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
39
+ * details (a copy is included in the LICENSE file that accompanied this code).
40
+ *
41
+ * You should have received a copy of the GNU General Public License version 3
42
+ * along with X_ITE. If not, see <http://www.gnu.org/licenses/gpl.html> for a
43
+ * copy of the GPLv3 License.
44
+ *
45
+ * For Silvio, Joy and Adi.
46
+ *
47
+ ******************************************************************************/
48
+
49
+
50
+ define (function ()
51
+ {
52
+ "use strict";
53
+
54
+ let i = 0;
55
+
56
+ const GeometryTypes = {
57
+ POINT: i ++,
58
+ LINE: i ++,
59
+ TRIANGLE: i ++,
60
+ QUAD: i ++,
61
+ SPRITE: i ++,
62
+ GEOMETRY: i ++,
63
+ };
64
+
65
+ return GeometryTypes;
66
+ });
@@ -0,0 +1,55 @@
1
+ struct Line3 {
2
+ vec3 point;
3
+ vec3 direction;
4
+ };
5
+
6
+ // Line3
7
+ // line3 (const in vec3 point1, const in vec3 point2)
8
+ // {
9
+ // return Line3 (point1, normalize (point2 - point1));
10
+ // }
11
+
12
+ /* Line intersect triangle */
13
+
14
+ bool
15
+ intersects (const in Line3 line, const in vec3 a, const in vec3 b, const in vec3 c, out vec3 r)
16
+ {
17
+ // find vectors for two edges sharing vert0
18
+ vec3 edge1 = b - a;
19
+ vec3 edge2 = c - a;
20
+
21
+ // begin calculating determinant - also used to calculate U parameter
22
+ vec3 pvec = cross (line .direction, edge2);
23
+
24
+ // if determinant is near zero, ray lies in plane of triangle
25
+ float det = dot (edge1, pvec);
26
+
27
+ // Non culling intersection
28
+
29
+ if (det == 0.0)
30
+ return false;
31
+
32
+ float inv_det = 1.0 / det;
33
+
34
+ // calculate distance from vert0 to ray point
35
+ vec3 tvec = line .point - a;
36
+
37
+ // calculate U parameter and test bounds
38
+ float u = dot (tvec, pvec) * inv_det;
39
+
40
+ if (u < 0.0 || u > 1.0)
41
+ return false;
42
+
43
+ // prepare to test V parameter
44
+ vec3 qvec = cross (tvec, edge1);
45
+
46
+ // calculate V parameter and test bounds
47
+ float v = dot (line .direction, qvec) * inv_det;
48
+
49
+ if (v < 0.0 || u + v > 1.0)
50
+ return false;
51
+
52
+ r = vec3 (u, v, 1.0 - u - v);
53
+
54
+ return true;
55
+ }