@openglobus/og 0.22.2 → 0.24.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 (205) hide show
  1. package/css/og.css +137 -1
  2. package/lib/@openglobus/js/Globe.d.ts +0 -1
  3. package/lib/@openglobus/js/Object3d.d.ts +20 -10
  4. package/lib/@openglobus/js/camera/Camera.d.ts +57 -15
  5. package/lib/@openglobus/js/camera/Frustum.d.ts +3 -0
  6. package/lib/@openglobus/js/camera/PlanetCamera.d.ts +13 -0
  7. package/lib/@openglobus/js/control/CameraLock.d.ts +38 -0
  8. package/lib/@openglobus/js/control/MouseNavigation.d.ts +62 -51
  9. package/lib/@openglobus/js/control/OldMouseNavigation.d.ts +64 -0
  10. package/lib/@openglobus/js/control/SimpleNavigation.d.ts +27 -10
  11. package/lib/@openglobus/js/control/geoObjectEditor/ArrowEntity.d.ts +15 -0
  12. package/lib/@openglobus/js/control/geoObjectEditor/AxisTrackEntity.d.ts +9 -0
  13. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditor.d.ts +13 -0
  14. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorDialog.d.ts +69 -0
  15. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +78 -9
  16. package/lib/@openglobus/js/control/geoObjectEditor/MoveAxisEntity.d.ts +17 -0
  17. package/lib/@openglobus/js/control/geoObjectEditor/MovePlaneEntity.d.ts +7 -0
  18. package/lib/@openglobus/js/control/geoObjectEditor/RotateEntity.d.ts +9 -0
  19. package/lib/@openglobus/js/control/geoObjectEditor/colors.d.ts +8 -0
  20. package/lib/@openglobus/js/control/index.d.ts +3 -2
  21. package/lib/@openglobus/js/entity/Entity.d.ts +282 -19
  22. package/lib/@openglobus/js/entity/EntityCollection.d.ts +8 -9
  23. package/lib/@openglobus/js/entity/GeoObject.d.ts +135 -39
  24. package/lib/@openglobus/js/entity/GeoObjectHandler.d.ts +39 -63
  25. package/lib/@openglobus/js/entity/InstanceData.d.ts +76 -0
  26. package/lib/@openglobus/js/entity/Polyline.d.ts +19 -6
  27. package/lib/@openglobus/js/entity/PolylineHandler.d.ts +7 -0
  28. package/lib/@openglobus/js/index.d.ts +2 -1
  29. package/lib/@openglobus/js/input/MouseHandler.d.ts +1 -0
  30. package/lib/@openglobus/js/layer/Vector.d.ts +4 -0
  31. package/lib/@openglobus/js/light/LightSource.d.ts +1 -139
  32. package/lib/@openglobus/js/math/Mat3.d.ts +1 -1
  33. package/lib/@openglobus/js/math/Mat4.d.ts +10 -1
  34. package/lib/@openglobus/js/math/Plane.d.ts +3 -1
  35. package/lib/@openglobus/js/math/Quat.d.ts +47 -33
  36. package/lib/@openglobus/js/math/Ray.d.ts +10 -14
  37. package/lib/@openglobus/js/math/Vec2.d.ts +22 -0
  38. package/lib/@openglobus/js/math/Vec3.d.ts +15 -0
  39. package/lib/@openglobus/js/math.d.ts +2 -2
  40. package/lib/@openglobus/js/quadTree/EntityCollectionNode.d.ts +2 -2
  41. package/lib/@openglobus/js/quadTree/Node.d.ts +1 -1
  42. package/lib/@openglobus/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +1 -1
  43. package/lib/@openglobus/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +1 -1
  44. package/lib/@openglobus/js/renderer/Renderer.d.ts +63 -44
  45. package/lib/@openglobus/js/renderer/RendererEvents.d.ts +2 -0
  46. package/lib/@openglobus/js/scene/Planet.d.ts +15 -7
  47. package/lib/@openglobus/js/scene/RenderNode.d.ts +10 -25
  48. package/lib/@openglobus/js/shaders/drawnode.d.ts +1 -0
  49. package/lib/@openglobus/js/shaders/geoObject.d.ts +1 -0
  50. package/lib/@openglobus/js/shaders/utils.d.ts +1 -1
  51. package/lib/@openglobus/js/ui/Checkbox.d.ts +31 -0
  52. package/lib/@openglobus/js/ui/Dialog.d.ts +3 -0
  53. package/lib/@openglobus/js/ui/Input.d.ts +32 -0
  54. package/lib/@openglobus/js/ui/View.d.ts +3 -1
  55. package/lib/@openglobus/js/utils/objParser.d.ts +44 -12
  56. package/lib/@openglobus/js/utils/shared.d.ts +22 -0
  57. package/lib/@openglobus/js/webgl/BaseFramebuffer.d.ts +0 -1
  58. package/lib/@openglobus/js/webgl/Framebuffer.d.ts +35 -8
  59. package/lib/@openglobus/js/webgl/Handler.d.ts +22 -12
  60. package/lib/@openglobus/og.css +1 -1
  61. package/lib/@openglobus/og.esm.js +1 -1
  62. package/lib/@openglobus/og.esm.js.map +1 -1
  63. package/lib/@openglobus/og.umd.js +1 -1
  64. package/lib/@openglobus/og.umd.js.map +1 -1
  65. package/lib/js/Globe.d.ts +0 -1
  66. package/lib/js/Globe.js +4 -2
  67. package/lib/js/Object3d.d.ts +20 -10
  68. package/lib/js/Object3d.js +124 -48
  69. package/lib/js/Popup.js +1 -1
  70. package/lib/js/camera/Camera.d.ts +57 -15
  71. package/lib/js/camera/Camera.js +109 -29
  72. package/lib/js/camera/Frustum.d.ts +3 -0
  73. package/lib/js/camera/Frustum.js +7 -0
  74. package/lib/js/camera/PlanetCamera.d.ts +13 -0
  75. package/lib/js/camera/PlanetCamera.js +52 -5
  76. package/lib/js/control/Atmosphere.js +10 -6
  77. package/lib/js/control/CameraLock.d.ts +38 -0
  78. package/lib/js/control/CameraLock.js +216 -0
  79. package/lib/js/control/Control.js +1 -1
  80. package/lib/js/control/DebugInfo.js +38 -8
  81. package/lib/js/control/KeyboardNavigation.js +9 -9
  82. package/lib/js/control/MouseNavigation.d.ts +62 -51
  83. package/lib/js/control/MouseNavigation.js +361 -305
  84. package/lib/js/control/MouseWheelZoomControl.d.ts +0 -44
  85. package/lib/js/control/MouseWheelZoomControl.js +270 -181
  86. package/lib/js/control/OldMouseNavigation.d.ts +64 -0
  87. package/lib/js/control/OldMouseNavigation.js +368 -0
  88. package/lib/js/control/ScaleControl.js +11 -5
  89. package/lib/js/control/SimpleNavigation.d.ts +27 -10
  90. package/lib/js/control/SimpleNavigation.js +149 -49
  91. package/lib/js/control/Sun.js +6 -6
  92. package/lib/js/control/TouchNavigation.js +11 -8
  93. package/lib/js/control/elevationProfile/ElevationProfileScene.js +6 -5
  94. package/lib/js/control/geoObjectEditor/ArrowEntity.d.ts +15 -0
  95. package/lib/js/control/geoObjectEditor/ArrowEntity.js +59 -0
  96. package/lib/js/control/geoObjectEditor/AxisTrackEntity.d.ts +9 -0
  97. package/lib/js/control/geoObjectEditor/AxisTrackEntity.js +93 -0
  98. package/lib/js/control/geoObjectEditor/GeoObjectEditor.d.ts +13 -0
  99. package/lib/js/control/geoObjectEditor/GeoObjectEditor.js +30 -0
  100. package/lib/js/control/geoObjectEditor/GeoObjectEditorDialog.d.ts +69 -0
  101. package/lib/js/control/geoObjectEditor/GeoObjectEditorDialog.js +488 -0
  102. package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +78 -9
  103. package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.js +487 -43
  104. package/lib/js/control/geoObjectEditor/MoveAxisEntity.d.ts +17 -0
  105. package/lib/js/control/geoObjectEditor/MoveAxisEntity.js +107 -0
  106. package/lib/js/control/geoObjectEditor/MovePlaneEntity.d.ts +7 -0
  107. package/lib/js/control/geoObjectEditor/MovePlaneEntity.js +31 -0
  108. package/lib/js/control/geoObjectEditor/RotateEntity.d.ts +9 -0
  109. package/lib/js/control/geoObjectEditor/RotateEntity.js +105 -0
  110. package/lib/js/control/geoObjectEditor/colors.d.ts +8 -0
  111. package/lib/js/control/geoObjectEditor/colors.js +8 -0
  112. package/lib/js/control/index.d.ts +3 -2
  113. package/lib/js/control/index.js +3 -2
  114. package/lib/js/control/timeline/TimelineControl.js +2 -0
  115. package/lib/js/control/visibleExtent/Segment.js +4 -4
  116. package/lib/js/entity/Entity.d.ts +282 -19
  117. package/lib/js/entity/Entity.js +497 -62
  118. package/lib/js/entity/EntityCollection.d.ts +8 -9
  119. package/lib/js/entity/EntityCollection.js +48 -45
  120. package/lib/js/entity/GeoObject.d.ts +135 -39
  121. package/lib/js/entity/GeoObject.js +150 -90
  122. package/lib/js/entity/GeoObjectHandler.d.ts +39 -63
  123. package/lib/js/entity/GeoObjectHandler.js +198 -295
  124. package/lib/js/entity/InstanceData.d.ts +76 -0
  125. package/lib/js/entity/InstanceData.js +347 -0
  126. package/lib/js/entity/Polyline.d.ts +19 -6
  127. package/lib/js/entity/Polyline.js +76 -36
  128. package/lib/js/entity/PolylineHandler.d.ts +7 -0
  129. package/lib/js/entity/PolylineHandler.js +26 -1
  130. package/lib/js/index.d.ts +2 -1
  131. package/lib/js/index.js +2 -1
  132. package/lib/js/input/MouseHandler.d.ts +1 -0
  133. package/lib/js/input/MouseHandler.js +12 -1
  134. package/lib/js/layer/Bing.js +2 -2
  135. package/lib/js/layer/Vector.d.ts +4 -0
  136. package/lib/js/layer/Vector.js +16 -0
  137. package/lib/js/light/LightSource.d.ts +1 -139
  138. package/lib/js/light/LightSource.js +21 -227
  139. package/lib/js/math/Mat3.d.ts +1 -1
  140. package/lib/js/math/Mat3.js +1 -1
  141. package/lib/js/math/Mat4.d.ts +10 -1
  142. package/lib/js/math/Mat4.js +17 -1
  143. package/lib/js/math/Plane.d.ts +3 -1
  144. package/lib/js/math/Plane.js +11 -1
  145. package/lib/js/math/Quat.d.ts +47 -33
  146. package/lib/js/math/Quat.js +92 -90
  147. package/lib/js/math/Ray.d.ts +10 -14
  148. package/lib/js/math/Ray.js +56 -33
  149. package/lib/js/math/Vec2.d.ts +22 -0
  150. package/lib/js/math/Vec2.js +32 -0
  151. package/lib/js/math/Vec3.d.ts +15 -0
  152. package/lib/js/math/Vec3.js +30 -1
  153. package/lib/js/math.d.ts +2 -2
  154. package/lib/js/math.js +3 -3
  155. package/lib/js/quadTree/EntityCollectionNode.d.ts +2 -2
  156. package/lib/js/quadTree/EntityCollectionNode.js +8 -8
  157. package/lib/js/quadTree/Node.d.ts +1 -1
  158. package/lib/js/quadTree/Node.js +2 -2
  159. package/lib/js/quadTree/QuadTreeStrategy.js +1 -1
  160. package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +1 -1
  161. package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.js +2 -2
  162. package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +1 -1
  163. package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.js +2 -2
  164. package/lib/js/renderer/Renderer.d.ts +63 -44
  165. package/lib/js/renderer/Renderer.js +267 -266
  166. package/lib/js/renderer/RendererEvents.d.ts +2 -0
  167. package/lib/js/renderer/RendererEvents.js +5 -2
  168. package/lib/js/scene/Planet.d.ts +15 -7
  169. package/lib/js/scene/Planet.js +133 -90
  170. package/lib/js/scene/RenderNode.d.ts +10 -25
  171. package/lib/js/scene/RenderNode.js +70 -58
  172. package/lib/js/segment/Segment.js +4 -4
  173. package/lib/js/shaders/depth.js +2 -5
  174. package/lib/js/shaders/drawnode.d.ts +1 -0
  175. package/lib/js/shaders/drawnode.js +51 -52
  176. package/lib/js/shaders/geoObject.d.ts +1 -0
  177. package/lib/js/shaders/geoObject.js +154 -91
  178. package/lib/js/shaders/polyline.js +68 -51
  179. package/lib/js/shaders/utils.d.ts +1 -1
  180. package/lib/js/shaders/utils.js +11 -0
  181. package/lib/js/terrain/GlobusTerrain.js +2 -2
  182. package/lib/js/ui/Checkbox.d.ts +31 -0
  183. package/lib/js/ui/Checkbox.js +110 -0
  184. package/lib/js/ui/Color.js +2 -1
  185. package/lib/js/ui/Dialog.d.ts +3 -0
  186. package/lib/js/ui/Dialog.js +20 -0
  187. package/lib/js/ui/Input.d.ts +32 -0
  188. package/lib/js/ui/Input.js +107 -0
  189. package/lib/js/ui/View.d.ts +3 -1
  190. package/lib/js/ui/View.js +6 -0
  191. package/lib/js/utils/objParser.d.ts +44 -12
  192. package/lib/js/utils/objParser.js +241 -149
  193. package/lib/js/utils/shared.d.ts +22 -0
  194. package/lib/js/utils/shared.js +34 -0
  195. package/lib/js/webgl/BaseFramebuffer.d.ts +0 -1
  196. package/lib/js/webgl/Framebuffer.d.ts +35 -8
  197. package/lib/js/webgl/Framebuffer.js +136 -29
  198. package/lib/js/webgl/Handler.d.ts +22 -12
  199. package/lib/js/webgl/Handler.js +53 -34
  200. package/lib/js/webgl/Program.js +0 -8
  201. package/package.json +5 -3
  202. package/lib/@openglobus/js/control/EarthNavigation.d.ts +0 -50
  203. package/lib/@openglobus/js/control/MouseWheelZoomControl.d.ts +0 -44
  204. package/lib/js/control/EarthNavigation.d.ts +0 -50
  205. package/lib/js/control/EarthNavigation.js +0 -202
@@ -1,4 +1,5 @@
1
1
  import { BaseNode } from "./BaseNode";
2
+ import { Quat } from "../math/Quat";
2
3
  /**
3
4
  * Render node is a logical part of a render mechanism. Represents scene rendering.
4
5
  * For example one scene node for rendering the Earth, another one for rendering the Moon, another node for rendering stars etc.
@@ -18,14 +19,16 @@ class RenderNode extends BaseNode {
18
19
  this.show = true;
19
20
  this._isActive = true;
20
21
  this.lightEnabled = false;
21
- this._lights = [];
22
- this._lightsNames = [];
23
- this._lightsPositions = [];
24
- this._lightsParamsv = [];
25
- this._lightsParamsf = [];
22
+ this._lightPosition = new Float32Array([100, 100, 100]);
23
+ this._lightParams = new Float32Array(9);
24
+ this._lightShininess = 100.0;
26
25
  this.entityCollections = [];
26
+ this._entityCollectionsByDepthOrder = [];
27
27
  this._pickingId = -1;
28
28
  }
29
+ getFrameRotation(cartesian) {
30
+ return Quat.IDENTITY;
31
+ }
29
32
  /**
30
33
  * Adds node to the current hierarchy.
31
34
  * @public
@@ -87,8 +90,17 @@ class RenderNode extends BaseNode {
87
90
  * @returns {RenderNode} -
88
91
  */
89
92
  addEntityCollection(entityCollection, isHidden) {
90
- entityCollection.addTo(this, isHidden);
91
- return this;
93
+ if (!entityCollection.renderNode) {
94
+ entityCollection.renderNode = this;
95
+ if (!isHidden) {
96
+ this.entityCollections.push(entityCollection);
97
+ this.updateEntityCollectionsDepthOrder();
98
+ }
99
+ //@ts-ignore
100
+ this.ellipsoid && entityCollection._updateGeodeticCoordinates(this.ellipsoid);
101
+ entityCollection.bindRenderNode(this);
102
+ entityCollection.events.dispatch(entityCollection.events.add, this);
103
+ }
92
104
  }
93
105
  /**
94
106
  * Removes entity collection.
@@ -96,7 +108,29 @@ class RenderNode extends BaseNode {
96
108
  * @param {EntityCollection} entityCollection - Entity collection for remove.
97
109
  */
98
110
  removeEntityCollection(entityCollection) {
99
- entityCollection.remove();
111
+ for (let i = 0; i < this.entityCollections.length; i++) {
112
+ if (this.entityCollections[i].isEqual(entityCollection)) {
113
+ this.entityCollections.splice(i, 1);
114
+ this.updateEntityCollectionsDepthOrder();
115
+ return;
116
+ }
117
+ }
118
+ }
119
+ updateEntityCollectionsDepthOrder() {
120
+ let grouped = { 0: [] };
121
+ for (const ec of this.entityCollections) {
122
+ if (ec.getVisibility()) {
123
+ if (!grouped[ec.depthOrder]) {
124
+ grouped[ec.depthOrder] = [];
125
+ }
126
+ grouped[ec.depthOrder].push(ec);
127
+ }
128
+ }
129
+ this._entityCollectionsByDepthOrder.length = 0;
130
+ this._entityCollectionsByDepthOrder = [];
131
+ this._entityCollectionsByDepthOrder = Object.keys(grouped)
132
+ .sort((a, b) => Number(a) - Number(b))
133
+ .map(key => grouped[Number(key)]);
100
134
  }
101
135
  /**
102
136
  * Adds point light source.
@@ -108,24 +142,6 @@ class RenderNode extends BaseNode {
108
142
  light.addTo(this);
109
143
  return this;
110
144
  }
111
- /**
112
- * Gets light object by its name.
113
- * @public
114
- * @param {string} name - Point light name.
115
- * @returns {LightSource}
116
- */
117
- getLightByName(name) {
118
- let li = this._lightsNames.indexOf(name);
119
- return this._lights[li];
120
- }
121
- /**
122
- * Removes light source.
123
- * @public
124
- * @param {LightSource} light - Light source object.
125
- */
126
- removeLight(light) {
127
- light.remove();
128
- }
129
145
  /**
130
146
  * Calls render frame node's callback. Used in renderer.
131
147
  * @public
@@ -181,34 +197,26 @@ class RenderNode extends BaseNode {
181
197
  this.childNodes[i].setDrawMode(mode);
182
198
  }
183
199
  }
184
- /**
185
- * IMPORTANT: This function have to be called manually in each render node frame callback, before drawing scene geometry.
186
- * @public
187
- */
188
- transformLights() {
189
- for (let i = 0; i < this._lights.length; i++) {
190
- let ii = i * 3;
191
- let tp;
192
- tp = this._lights[i]._position;
193
- this._lightsPositions[ii] = tp.x;
194
- this._lightsPositions[ii + 1] = tp.y;
195
- this._lightsPositions[ii + 2] = tp.z;
196
- }
197
- // for (let i = 0; i < this._lights.length; i++) {
198
- // var ii = i * 4;
199
- // var tp;
200
- // if (this._lights[i].directional) {
201
- // tp = r.activeCamera._normalMatrix.mulVec(this._lights[i]._position);
202
- // this._lightsTransformedPositions[ii + 3] = 0;
203
- // } else {
204
- // tp = r.activeCamera._viewMatrix.mulVec3(this._lights[i]._position);
205
- // this._lightsTransformedPositions[ii + 3] = 1;
206
- // }
207
- // this._lightsTransformedPositions[ii] = tp.x;
208
- // this._lightsTransformedPositions[ii + 1] = tp.y;
209
- // this._lightsTransformedPositions[ii + 2] = tp.z;
210
- // }
211
- }
200
+ // /**
201
+ // * IMPORTANT: This function have to be called manually in each render node frame callback, before drawing scene geometry.
202
+ // * @public
203
+ // */
204
+ // public transformLights() {
205
+ // // for (let i = 0; i < this._lights.length; i++) {
206
+ // // var ii = i * 4;
207
+ // // var tp;
208
+ // // if (this._lights[i].directional) {
209
+ // // tp = r.activeCamera._normalMatrix.mulVec(this._lights[i]._position);
210
+ // // this._lightsTransformedPositions[ii + 3] = 0;
211
+ // // } else {
212
+ // // tp = r.activeCamera._viewMatrix.mulVec3(this._lights[i]._position);
213
+ // // this._lightsTransformedPositions[ii + 3] = 1;
214
+ // // }
215
+ // // this._lightsTransformedPositions[ii] = tp.x;
216
+ // // this._lightsTransformedPositions[ii + 1] = tp.y;
217
+ // // this._lightsTransformedPositions[ii + 2] = tp.z;
218
+ // // }
219
+ // }
212
220
  updateBillboardsTexCoords() {
213
221
  for (let i = 0; i < this.entityCollections.length; i++) {
214
222
  this.entityCollections[i].billboardHandler.refreshTexCoordsArr();
@@ -234,7 +242,9 @@ class RenderNode extends BaseNode {
234
242
  if (this.show) {
235
243
  //this.lightEnabled && this.transformLights();
236
244
  this.preFrame();
237
- this.drawEntityCollections(this.entityCollections);
245
+ for (let i = 0; i < this._entityCollectionsByDepthOrder.length; i++) {
246
+ this.drawEntityCollections(this._entityCollectionsByDepthOrder[i], i);
247
+ }
238
248
  }
239
249
  }
240
250
  _drawNodes() {
@@ -247,8 +257,8 @@ class RenderNode extends BaseNode {
247
257
  this.frame();
248
258
  }
249
259
  }
250
- drawEntityCollections(ec) {
251
- this.renderer.enqueueEntityCollectionsToDraw(ec);
260
+ drawEntityCollections(ec, depthOrder = 0) {
261
+ this.renderer.enqueueEntityCollectionsToDraw(ec, depthOrder);
252
262
  }
253
263
  /**
254
264
  * Draw entity collections picking frame.
@@ -295,7 +305,9 @@ class RenderNode extends BaseNode {
295
305
  }
296
306
  }
297
307
  _entityCollectionPickingCallback() {
298
- this.drawPickingEntityCollections(this.entityCollections);
308
+ // for (let i = 0; i < this._entityCollectionsByDepthOrder.length; i++) {
309
+ // this.drawPickingEntityCollections(this._entityCollectionsByDepthOrder[i]);
310
+ // }
299
311
  }
300
312
  }
301
313
  export { RenderNode };
@@ -175,25 +175,25 @@ class Segment {
175
175
  _v0.set(verts[ind_v0], verts[ind_v0 + 1], verts[ind_v0 + 2]);
176
176
  _v1.set(verts[ind_v0 + 3], verts[ind_v0 + 4], verts[ind_v0 + 5]);
177
177
  _v2.set(verts[ind_v2], verts[ind_v2 + 1], verts[ind_v2 + 2]);
178
- let d = _ray.hitTriangle(_v0, _v1, _v2, res);
178
+ let d = _ray.hitTriangleRes(_v0, _v1, _v2, res);
179
179
  if (d === Ray.INSIDE) {
180
180
  return xyz.distance(res);
181
181
  }
182
182
  else if (d === Ray.AWAY) {
183
183
  _rayEx.set(xyz, norm);
184
- let d = _rayEx.hitTriangle(_v0, _v1, _v2, res);
184
+ let d = _rayEx.hitTriangleRes(_v0, _v1, _v2, res);
185
185
  if (d === Ray.INSIDE) {
186
186
  return -xyz.distance(res);
187
187
  }
188
188
  }
189
189
  _v3.set(verts[ind_v2 + 3], verts[ind_v2 + 4], verts[ind_v2 + 5]);
190
- d = _ray.hitTriangle(_v1, _v3, _v2, res);
190
+ d = _ray.hitTriangleRes(_v1, _v3, _v2, res);
191
191
  if (d === Ray.INSIDE) {
192
192
  return xyz.distance(res);
193
193
  }
194
194
  else if (d === Ray.AWAY) {
195
195
  _rayEx.set(xyz, norm);
196
- let d = _rayEx.hitTriangle(_v1, _v3, _v2, res);
196
+ let d = _rayEx.hitTriangleRes(_v1, _v3, _v2, res);
197
197
  if (d === Ray.INSIDE) {
198
198
  return -xyz.distance(res);
199
199
  }
@@ -2,7 +2,7 @@ import { Program } from '../webgl/Program';
2
2
  export function depth() {
3
3
  return new Program("depth", {
4
4
  uniforms: {
5
- depthTexture: "sampler2d"
5
+ depthTexture: "sampler2D"
6
6
  },
7
7
  attributes: {
8
8
  corners: "vec2"
@@ -21,8 +21,6 @@ export function depth() {
21
21
 
22
22
  precision highp float;
23
23
 
24
- #define MAX_FRUSTUMS 4
25
-
26
24
  uniform sampler2D depthTexture;
27
25
 
28
26
  in vec2 tc;
@@ -31,8 +29,7 @@ export function depth() {
31
29
 
32
30
  float LinearizeDepth(in vec2 uv)
33
31
  {
34
- float depth = texture(depthTexture, tc).x;
35
- return depth;//(2.0 * zNear) / (zFar + zNear - depth * (zFar - zNear));
32
+ return texture(depthTexture, tc).r;
36
33
  }
37
34
 
38
35
  void main(void) {
@@ -1,5 +1,6 @@
1
1
  import { AtmosphereParameters } from "./atmos";
2
2
  import { Program } from "../webgl/Program";
3
+ export declare const ENCODE24 = "vec3 encode24(highp float f) {\n float F = abs(f);\n float s = step( 0.0, -f );\n float e = floor( log2(F) );\n float m = exp2(- e) * F;\n e = floor( log2(F) + 127.0 ) + floor( log2(m) );\n return vec3(\n ( 128.0 * s + floor( e * exp2(-1.0) ) ) / 255.0,\n ( 128.0 * mod( e, 2.0 ) + mod( floor( m * 128.0 ), 128.0 ) ) / 255.0,\n floor( mod( floor( m * exp2( 23.0 - 8.0) ), exp2(8.0) ) ) / 255.0);\n }";
3
4
  export declare function drawnode_screen_nl(): Program;
4
5
  export declare function drawnode_screen_wl_webgl1NoAtmos(): Program;
5
6
  export declare function drawnode_screen_wl_webgl2NoAtmos(): Program;
@@ -19,6 +19,17 @@ const DEF_BLEND_PICKING = `#define blendPicking(DEST, OFFSET, SAMPLER, MASK, COL
19
19
  p = texture2D(MASK, tc); \
20
20
  DEST = mix(DEST, vec4(max(COLOR.rgb, p.rgb), OPACITY), (t.a == 0.0 ? 0.0 : 1.0) * COLOR.a);`;
21
21
  const SLICE_SIZE = 4;
22
+ export const ENCODE24 = `vec3 encode24(highp float f) {
23
+ float F = abs(f);
24
+ float s = step( 0.0, -f );
25
+ float e = floor( log2(F) );
26
+ float m = exp2(- e) * F;
27
+ e = floor( log2(F) + 127.0 ) + floor( log2(m) );
28
+ return vec3(
29
+ ( 128.0 * s + floor( e * exp2(-1.0) ) ) / 255.0,
30
+ ( 128.0 * mod( e, 2.0 ) + mod( floor( m * 128.0 ), 128.0 ) ) / 255.0,
31
+ floor( mod( floor( m * exp2( 23.0 - 8.0) ), exp2(8.0) ) ) / 255.0);
32
+ }`;
22
33
  export function drawnode_screen_nl() {
23
34
  return new Program("drawnode_screen_nl", {
24
35
  uniforms: {
@@ -117,7 +128,7 @@ export function drawnode_screen_wl_webgl1NoAtmos() {
117
128
  uNormalMap: "sampler2d",
118
129
  nightTexture: "sampler2d",
119
130
  specularTexture: "sampler2d",
120
- lightsPositions: "vec3",
131
+ lightPosition: "vec3",
121
132
  diffuse: "vec3",
122
133
  ambient: "vec3",
123
134
  specular: "vec4",
@@ -172,7 +183,6 @@ export function drawnode_screen_wl_webgl1NoAtmos() {
172
183
  fragmentShader: `
173
184
  precision highp float;
174
185
 
175
- #define MAX_POINT_LIGHTS 1
176
186
  #define SLICE_SIZE ${SLICE_SIZE + 1}
177
187
 
178
188
  uniform vec4 specular;
@@ -186,7 +196,7 @@ export function drawnode_screen_wl_webgl1NoAtmos() {
186
196
  uniform sampler2D samplerArr[SLICE_SIZE];
187
197
 
188
198
  uniform vec4 tileOffsetArr[SLICE_SIZE];
189
- uniform vec3 lightsPositions[MAX_POINT_LIGHTS];
199
+ uniform vec3 lightPosition;
190
200
  uniform float layerOpacityArr[SLICE_SIZE];
191
201
 
192
202
  uniform int samplerCount;
@@ -209,7 +219,7 @@ export function drawnode_screen_wl_webgl1NoAtmos() {
209
219
 
210
220
  void main(void) {
211
221
 
212
- sunPos = lightsPositions[0];
222
+ sunPos = lightPosition;
213
223
 
214
224
  vec3 texNormal = texture2D(uNormalMap, vTextureCoord.zw).rgb;
215
225
  vec3 normal = normalize((texNormal - 0.5) * 2.0);
@@ -293,7 +303,7 @@ export function drawnode_screen_wl_webgl2NoAtmos() {
293
303
  uNormalMap: "sampler2d",
294
304
  nightTexture: "sampler2d",
295
305
  specularTexture: "sampler2d",
296
- lightsPositions: "vec3",
306
+ lightPosition: "vec3",
297
307
  diffuse: "vec3",
298
308
  ambient: "vec3",
299
309
  specular: "vec4",
@@ -353,7 +363,7 @@ export function drawnode_screen_wl_webgl2NoAtmos() {
353
363
 
354
364
  precision highp float;
355
365
 
356
- #define MAX_POINT_LIGHTS 1
366
+
357
367
  #define SLICE_SIZE ${SLICE_SIZE + 1}
358
368
 
359
369
  uniform vec4 specular;
@@ -367,7 +377,7 @@ export function drawnode_screen_wl_webgl2NoAtmos() {
367
377
  uniform sampler2D samplerArr[SLICE_SIZE];
368
378
 
369
379
  uniform vec4 tileOffsetArr[SLICE_SIZE];
370
- uniform vec3 lightsPositions[MAX_POINT_LIGHTS];
380
+ uniform vec3 lightPosition;
371
381
  uniform float layerOpacityArr[SLICE_SIZE];
372
382
 
373
383
  uniform int samplerCount;
@@ -395,7 +405,7 @@ export function drawnode_screen_wl_webgl2NoAtmos() {
395
405
 
396
406
  void main(void) {
397
407
 
398
- sunPos = lightsPositions[0];
408
+ sunPos = lightPosition;
399
409
 
400
410
  vec3 texNormal = texture(uNormalMap, vTextureCoord.zw).rgb;
401
411
  vec3 normal = normalize((texNormal - 0.5) * 2.0);
@@ -486,7 +496,7 @@ export function drawnode_screen_wl_webgl2Atmos(atmosParams) {
486
496
  uNormalMap: "sampler2d",
487
497
  nightTexture: "sampler2d",
488
498
  specularTexture: "sampler2d",
489
- lightsPositions: "vec3",
499
+ lightPosition: "vec3",
490
500
  diffuse: "vec3",
491
501
  ambient: "vec3",
492
502
  specular: "vec4",
@@ -549,14 +559,13 @@ export function drawnode_screen_wl_webgl2Atmos(atmosParams) {
549
559
 
550
560
  precision highp float;
551
561
 
552
- #define MAX_POINT_LIGHTS 1
553
562
  #define SLICE_SIZE ${SLICE_SIZE + 1}
554
563
 
555
564
  uniform vec4 specular;
556
565
  uniform vec3 diffuse;
557
566
  uniform vec3 ambient;
558
567
 
559
- uniform vec3 lightsPositions[MAX_POINT_LIGHTS];
568
+ uniform vec3 lightPosition;
560
569
 
561
570
  uniform sampler2D uNormalMap;
562
571
  uniform sampler2D nightTexture;
@@ -720,7 +729,7 @@ export function drawnode_screen_wl_webgl2Atmos(atmosParams) {
720
729
 
721
730
  void main(void) {
722
731
 
723
- sunPos = lightsPositions[0];
732
+ sunPos = lightPosition;
724
733
 
725
734
  vec3 texNormal = texture(uNormalMap, vTextureCoord.zw).rgb;
726
735
  vec3 normal = normalize((texNormal - 0.5) * 2.0);
@@ -908,50 +917,34 @@ export function drawnode_heightPicking() {
908
917
  uniform vec3 eyePositionHigh;
909
918
  uniform vec3 eyePositionLow;
910
919
  uniform float height;
911
-
912
- varying vec3 eyePosition;
913
- varying vec3 vertexPosition;
920
+
921
+ varying vec4 vert;
914
922
 
915
923
  void main(void) {
916
924
 
917
- // This code is works for Mac Chrome and Safari
918
- // any other code probably will produce jittering
919
-
920
925
  mat4 viewMatrixRTE = viewMatrix;
921
926
  viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
922
927
 
923
- mat4 m = projectionMatrix * viewMatrixRTE;
924
-
925
928
  vec3 nh = height * normalize(aVertexPositionHigh + aVertexPositionLow);
926
929
 
927
- eyePosition = eyePositionHigh + eyePositionLow;
928
- vertexPosition = aVertexPositionHigh + aVertexPositionLow;
930
+ vec3 eyePosition = eyePositionHigh + eyePositionLow;
931
+ vec3 vertexPosition = aVertexPositionHigh + aVertexPositionLow;
929
932
 
930
933
  vec3 highDiff = aVertexPositionHigh - eyePositionHigh;
931
934
  vec3 lowDiff = aVertexPositionLow - eyePositionLow + nh;
932
935
 
933
- gl_Position = m * vec4(highDiff * step(1.0, length(highDiff)) + lowDiff, 1.0);
936
+ vert = viewMatrixRTE * vec4(highDiff * step(1.0, length(highDiff)) + lowDiff, 1.0);
937
+
938
+ gl_Position = projectionMatrix * vert;
934
939
  }`,
935
940
  fragmentShader: `precision highp float;
941
+
942
+ varying vec4 vert;
936
943
 
937
- varying vec3 eyePosition;
938
- varying vec3 vertexPosition;
939
-
940
- vec3 encode24(highp float f) {
941
- float F = abs(f);
942
- float s = step( 0.0, -f );
943
- float e = floor( log2(F) );
944
- float m = exp2(- e) * F;
945
- e = floor( log2(F) + 127.0 ) + floor( log2(m) );
946
- return vec3(
947
- ( 128.0 * s + floor( e * exp2(-1.0) ) ) / 255.0,
948
- ( 128.0 * mod( e, 2.0 ) + mod( floor( m * 128.0 ), 128.0 ) ) / 255.0,
949
- floor( mod( floor( m * exp2( 23.0 - 8.0) ), exp2(8.0) ) ) / 255.0);
950
- }
944
+ ${ENCODE24}
951
945
 
952
946
  void main(void) {
953
- float range = distance(eyePosition, vertexPosition);
954
- gl_FragColor = vec4(encode24(range), 1.0);
947
+ gl_FragColor = vec4(encode24(length(vert.xyz)), 1.0);
955
948
  }`
956
949
  });
957
950
  }
@@ -963,14 +956,17 @@ export function drawnode_depth() {
963
956
  height: "float",
964
957
  eyePositionHigh: "vec3",
965
958
  eyePositionLow: "vec3",
966
- frustumPickingColor: "vec3"
959
+ frustumPickingColor: "float"
967
960
  }, attributes: {
968
- aVertexPositionHigh: "vec3", aVertexPositionLow: "vec3"
961
+ aVertexPositionHigh: "vec3",
962
+ aVertexPositionLow: "vec3"
969
963
  },
970
- vertexShader: `precision highp float;
964
+ vertexShader: `#version 300 es
965
+
966
+ precision highp float;
971
967
 
972
- attribute vec3 aVertexPositionHigh;
973
- attribute vec3 aVertexPositionLow;
968
+ in vec3 aVertexPositionHigh;
969
+ in vec3 aVertexPositionLow;
974
970
 
975
971
  uniform mat4 projectionMatrix;
976
972
  uniform mat4 viewMatrix;
@@ -980,10 +976,6 @@ export function drawnode_depth() {
980
976
 
981
977
  void main(void) {
982
978
 
983
- // @hack
984
- // This code is works for Mac Chrome and Safari
985
- // any other code probably will produce jittering
986
-
987
979
  mat4 viewMatrixRTE = viewMatrix;
988
980
  viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
989
981
 
@@ -999,11 +991,18 @@ export function drawnode_depth() {
999
991
 
1000
992
  gl_Position = m * vec4(highDiff * step(1.0, length(highDiff)) + lowDiff, 1.0);
1001
993
  }`,
1002
- fragmentShader: `precision highp float;
1003
- uniform vec3 frustumPickingColor;
994
+ fragmentShader: `#version 300 es
995
+
996
+ precision highp float;
997
+
998
+ uniform float frustumPickingColor;
999
+
1000
+ layout(location = 0) out vec4 frustumColor;
1001
+ layout(location = 1) out vec4 depthColor;
1004
1002
 
1005
1003
  void main(void) {
1006
- gl_FragColor = vec4(frustumPickingColor, 1.0);
1007
- } `
1004
+ frustumColor = vec4(frustumPickingColor, frustumPickingColor, frustumPickingColor, 1.0);
1005
+ depthColor = vec4(gl_FragCoord.z, gl_FragCoord.z, gl_FragCoord.z, 1.0);
1006
+ }`
1008
1007
  });
1009
1008
  }
@@ -1,3 +1,4 @@
1
1
  import { Program } from "../webgl/Program";
2
2
  export declare const geo_object: () => Program;
3
3
  export declare const geo_object_picking: () => Program;
4
+ export declare const geo_object_depth: () => Program;