@openglobus/og 0.14.10 → 0.15.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 (140) hide show
  1. package/css/og.css +378 -275
  2. package/dist/@openglobus/og.css +1 -1
  3. package/dist/@openglobus/og.esm.js +2 -2
  4. package/dist/@openglobus/og.esm.js.map +1 -1
  5. package/dist/@openglobus/og.umd.js +2 -2
  6. package/dist/@openglobus/og.umd.js.map +1 -1
  7. package/package.json +18 -17
  8. package/src/og/Clock.js +218 -194
  9. package/src/og/Globe.js +5 -5
  10. package/src/og/Object3d.js +104 -145
  11. package/src/og/camera/Camera.js +31 -27
  12. package/src/og/camera/PlanetCamera.js +22 -14
  13. package/src/og/cons.js +107 -107
  14. package/src/og/control/Atmosphere.js +396 -0
  15. package/src/og/control/CompassButton.js +11 -18
  16. package/src/og/control/Control.js +187 -188
  17. package/src/og/control/GeoImageDragControl.js +84 -66
  18. package/src/og/control/LayerSwitcher.js +56 -138
  19. package/src/og/control/Lighting.js +314 -186
  20. package/src/og/control/MouseNavigation.js +2 -2
  21. package/src/og/control/RulerSwitcher.js +24 -19
  22. package/src/og/control/ScaleControl.js +30 -10
  23. package/src/og/control/SimpleSkyBackground.js +210 -0
  24. package/src/og/control/Sun.js +2 -0
  25. package/src/og/control/ZoomControl.js +30 -42
  26. package/src/og/control/index.js +6 -0
  27. package/src/og/control/ruler/RulerScene.js +5 -23
  28. package/src/og/control/selection/Selection.js +99 -0
  29. package/src/og/control/selection/SelectionScene.js +350 -0
  30. package/src/og/control/timeline/TimelineControl.js +99 -0
  31. package/src/og/control/timeline/TimelineModel.js +133 -0
  32. package/src/og/control/timeline/TimelineView.js +449 -0
  33. package/src/og/control/timeline/timelineUtils.js +132 -0
  34. package/src/og/ellipsoid/Ellipsoid.js +120 -93
  35. package/src/og/ellipsoid/wgs84.js +13 -13
  36. package/src/og/entity/Entity.js +36 -9
  37. package/src/og/entity/EntityCollection.js +0 -2
  38. package/src/og/entity/GeoObject.js +72 -56
  39. package/src/og/entity/GeoObjectHandler.js +487 -656
  40. package/src/og/entity/GeometryHandler.js +1341 -1337
  41. package/src/og/entity/Polyline.js +0 -16
  42. package/src/og/entity/Ray.js +0 -10
  43. package/src/og/entity/RayHandler.js +3 -44
  44. package/src/og/entity/Strip.js +1 -6
  45. package/src/og/index.js +10 -6
  46. package/src/og/input/input.js +3 -1
  47. package/src/og/layer/CanvasTiles.js +39 -34
  48. package/src/og/layer/Layer.js +69 -9
  49. package/src/og/layer/Material.js +1 -8
  50. package/src/og/layer/WMS.js +16 -5
  51. package/src/og/light/LightSource.js +2 -0
  52. package/src/og/math/Line3.js +140 -139
  53. package/src/og/math/Plane.js +118 -117
  54. package/src/og/math/Ray.js +242 -239
  55. package/src/og/math/Vec3.js +56 -37
  56. package/src/og/math/Vec4.js +3 -4
  57. package/src/og/math.js +21 -21
  58. package/src/og/quadTree/Node.js +5 -4
  59. package/src/og/quadTree/index.js +12 -0
  60. package/src/og/renderer/Renderer.js +64 -37
  61. package/src/og/renderer/RendererEvents.js +1071 -1065
  62. package/src/og/scene/Planet.js +352 -172
  63. package/src/og/scene/RenderNode.js +27 -12
  64. package/src/og/segment/Segment.js +0 -5
  65. package/src/og/shaders/atmos.js +332 -0
  66. package/src/og/shaders/drawnode.js +475 -109
  67. package/src/og/shaders/geoObject.js +96 -51
  68. package/src/og/shaders/polyline.js +212 -17
  69. package/src/og/shaders/ray.js +13 -6
  70. package/src/og/shaders/toneMapping.js +5 -5
  71. package/src/og/shaders/utils.js +88 -0
  72. package/src/og/terrain/GlobusTerrain.js +5 -4
  73. package/src/og/terrain/MapboxTerrain.js +231 -52
  74. package/src/og/ui/Button.js +106 -0
  75. package/src/og/ui/ButtonGroup.js +57 -0
  76. package/src/og/ui/Dialog.js +242 -0
  77. package/src/og/ui/Slider.js +144 -0
  78. package/src/og/ui/ToggleButton.js +51 -0
  79. package/src/og/{control → ui}/UIhelpers.js +11 -2
  80. package/src/og/ui/View.js +190 -0
  81. package/src/og/utils/shared.js +960 -942
  82. package/src/og/webgl/Framebuffer.js +308 -387
  83. package/src/og/webgl/Handler.js +90 -30
  84. package/src/og/webgl/Multisample.js +8 -0
  85. package/types/Clock.d.ts +7 -2
  86. package/types/Object3d.d.ts +14 -3
  87. package/types/camera/Camera.d.ts +18 -17
  88. package/types/camera/PlanetCamera.d.ts +3 -1
  89. package/types/control/Atmosphere.d.ts +15 -0
  90. package/types/control/CompassButton.d.ts +1 -2
  91. package/types/control/GeoImageDragControl.d.ts +7 -1
  92. package/types/control/LayerSwitcher.d.ts +5 -6
  93. package/types/control/Lighting.d.ts +32 -7
  94. package/types/control/ScaleControl.d.ts +2 -1
  95. package/types/control/SimpleSkyBackground.d.ts +15 -0
  96. package/types/control/ZoomControl.d.ts +0 -1
  97. package/types/control/index.d.ts +4 -1
  98. package/types/control/ruler/RulerScene.d.ts +0 -1
  99. package/types/control/selection/Selection.d.ts +49 -0
  100. package/types/control/selection/SelectionScene.d.ts +34 -0
  101. package/types/ellipsoid/Ellipsoid.d.ts +3 -2
  102. package/types/entity/Entity.d.ts +8 -0
  103. package/types/entity/GeoObject.d.ts +28 -22
  104. package/types/entity/GeoObjectHandler.d.ts +16 -56
  105. package/types/entity/Ray.d.ts +0 -3
  106. package/types/entity/RayHandler.d.ts +0 -4
  107. package/types/index.d.ts +7 -5
  108. package/types/input/input.d.ts +2 -0
  109. package/types/layer/CanvasTiles.d.ts +1 -0
  110. package/types/layer/Layer.d.ts +9 -0
  111. package/types/layer/WMS.d.ts +7 -3
  112. package/types/math/Plane.d.ts +1 -1
  113. package/types/math/Vec3.d.ts +19 -16
  114. package/types/math/Vec4.d.ts +2 -3
  115. package/types/math.d.ts +20 -20
  116. package/types/quadTree/index.d.ts +10 -0
  117. package/types/renderer/Renderer.d.ts +11 -37
  118. package/types/scene/Planet.d.ts +27 -1
  119. package/types/scene/RenderNode.d.ts +2 -1
  120. package/types/segment/Segment.d.ts +1 -1
  121. package/types/shaders/atmos.d.ts +4 -0
  122. package/types/shaders/drawnode.d.ts +3 -2
  123. package/types/shaders/utils.d.ts +1 -0
  124. package/types/terrain/GlobusTerrain.d.ts +1 -1
  125. package/types/terrain/MapboxTerrain.d.ts +2 -1
  126. package/types/ui/Button.d.ts +21 -0
  127. package/types/ui/Dialog.d.ts +41 -0
  128. package/types/ui/Slider.d.ts +30 -0
  129. package/types/ui/ToggleButton.d.ts +10 -0
  130. package/types/{control → ui}/UIhelpers.d.ts +1 -1
  131. package/types/ui/View.d.ts +32 -0
  132. package/types/utils/shared.d.ts +16 -14
  133. package/types/webgl/Framebuffer.d.ts +2 -5
  134. package/types/webgl/Handler.d.ts +15 -10
  135. package/types/webgl/Multisample.d.ts +2 -0
  136. package/src/og/ajax.js +0 -204
  137. package/src/og/entity/Object3d.js +0 -504
  138. package/src/og/utils/quadTreeType.js +0 -11
  139. package/types/ajax.d.ts +0 -24
  140. package/types/utils/quadTreeType.d.ts +0 -8
@@ -1995,14 +1995,6 @@ class Polyline {
1995
1995
 
1996
1996
  sh.activate();
1997
1997
 
1998
- gl.enable(gl.BLEND);
1999
- gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);
2000
- gl.blendFuncSeparate(
2001
- gl.SRC_ALPHA,
2002
- gl.ONE_MINUS_SRC_ALPHA,
2003
- gl.ONE,
2004
- gl.ONE_MINUS_SRC_ALPHA
2005
- );
2006
1998
  gl.disable(gl.CULL_FACE);
2007
1999
 
2008
2000
  gl.uniform1f(shu.depthOffset, ec.polygonOffsetUnits + window.POLYLINE_DEPTH_OFFSET);
@@ -2058,14 +2050,6 @@ class Polyline {
2058
2050
 
2059
2051
  sh.activate();
2060
2052
 
2061
- gl.enable(gl.BLEND);
2062
- gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);
2063
- gl.blendFuncSeparate(
2064
- gl.SRC_ALPHA,
2065
- gl.ONE_MINUS_SRC_ALPHA,
2066
- gl.ONE,
2067
- gl.ONE_MINUS_SRC_ALPHA
2068
- );
2069
2053
  gl.disable(gl.CULL_FACE);
2070
2054
 
2071
2055
  gl.uniform1f(shu.depthOffset, this._handler._entityCollection.polygonOffsetUnits + window.POLYLINE_DEPTH_OFFSET);
@@ -34,11 +34,6 @@ class Ray {
34
34
  // Thickenss
35
35
  this._thickness = options.thickness || 2.0;
36
36
 
37
- // RTE length
38
- this._length = options.length || 0.0;
39
- this._lengthHighLow = new Float32Array(2);
40
- doubleToTwoFloats2(this._length, this._lengthHighLow);
41
-
42
37
  // RTE start position
43
38
  this._startPosition = utils.createVector3(options.startPosition);
44
39
  this._startPositionHigh = new Vec3();
@@ -172,11 +167,6 @@ class Ray {
172
167
  );
173
168
  }
174
169
 
175
- setLength(length) {
176
- this._length = length;
177
- this._handler && this._handler.setLengthArr(this._handlerIndex, length);
178
- }
179
-
180
170
  setThickness(thickness) {
181
171
  this._thickness = thickness;
182
172
  this._handler && this._handler.setThicknessArr(this._handlerIndex, thickness);
@@ -6,10 +6,9 @@ import { concatArrays, makeArrayTyped, spliceArray } from "../utils/shared.js";
6
6
  const PICKINGCOLOR_BUFFER = 0;
7
7
  const START_POSITION_BUFFER = 1;
8
8
  const END_POSITION_BUFFER = 2;
9
- const LENGTH_BUFFER = 3;
10
- const RGBA_BUFFER = 4;
11
- const THICKNESS_BUFFER = 5;
12
- const VERTEX_BUFFER = 6;
9
+ const RGBA_BUFFER = 3;
10
+ const THICKNESS_BUFFER = 4;
11
+ const VERTEX_BUFFER = 5;
13
12
 
14
13
  /*
15
14
  * og.RayHandler
@@ -36,7 +35,6 @@ class RayHandler {
36
35
  this._startPositionLowBuffer = null;
37
36
  this._endPositionHighBuffer = null;
38
37
  this._endPositionLowBuffer = null;
39
- this._lengthBuffer = null;
40
38
  this._thicknessBuffer = null;
41
39
  this._rgbaBuffer = null;
42
40
 
@@ -45,7 +43,6 @@ class RayHandler {
45
43
  this._startPositionLowArr = [];
46
44
  this._endPositionHighArr = [];
47
45
  this._endPositionLowArr = [];
48
- this._lengthArr = [];
49
46
  this._thicknessArr = [];
50
47
  this._rgbaArr = [];
51
48
 
@@ -56,7 +53,6 @@ class RayHandler {
56
53
  this._buffersUpdateCallbacks[VERTEX_BUFFER] = this.createVertexBuffer;
57
54
  this._buffersUpdateCallbacks[START_POSITION_BUFFER] = this.createStartPositionBuffer;
58
55
  this._buffersUpdateCallbacks[END_POSITION_BUFFER] = this.createEndPositionBuffer;
59
- this._buffersUpdateCallbacks[LENGTH_BUFFER] = this.createLengthBuffer;
60
56
  this._buffersUpdateCallbacks[THICKNESS_BUFFER] = this.createThicknessBuffer;
61
57
  this._buffersUpdateCallbacks[RGBA_BUFFER] = this.createRgbaBuffer;
62
58
  this._buffersUpdateCallbacks[PICKINGCOLOR_BUFFER] = this.createPickingColorBuffer;
@@ -124,7 +120,6 @@ class RayHandler {
124
120
  this._startPositionLowArr = null;
125
121
  this._endPositionHighArr = null;
126
122
  this._endPositionLowArr = null;
127
- this._lengthArr = null;
128
123
  this._thicknessArr = null;
129
124
  this._rgbaArr = null;
130
125
 
@@ -133,7 +128,6 @@ class RayHandler {
133
128
  this._startPositionLowArr = new Float32Array();
134
129
  this._endPositionHighArr = new Float32Array();
135
130
  this._endPositionLowArr = new Float32Array();
136
- this._lengthArr = new Float32Array();
137
131
  this._thicknessArr = new Float32Array();
138
132
  this._rgbaArr = new Float32Array();
139
133
 
@@ -150,7 +144,6 @@ class RayHandler {
150
144
  gl.deleteBuffer(this._startPositionLowBuffer);
151
145
  gl.deleteBuffer(this._endPositionHighBuffer);
152
146
  gl.deleteBuffer(this._endPositionLowBuffer);
153
- gl.deleteBuffer(this._lengthBuffer);
154
147
  gl.deleteBuffer(this._thicknessBuffer);
155
148
  gl.deleteBuffer(this._rgbaBuffer);
156
149
  gl.deleteBuffer(this._vertexBuffer);
@@ -159,7 +152,6 @@ class RayHandler {
159
152
  this._startPositionLowBuffer = null;
160
153
  this._endPositionHighBuffer = null;
161
154
  this._endPositionLowBuffer = null;
162
- this._lengthBuffer = null;
163
155
  this._thicknessBuffer = null;
164
156
  this._rgbaBuffer = null;
165
157
  this._vertexBuffer = null;
@@ -300,9 +292,6 @@ class RayHandler {
300
292
  x = ray._thickness;
301
293
  this._thicknessArr = concatArrays(this._thicknessArr, [x, x, x, x, x, x]);
302
294
 
303
- x = ray._length;
304
- this._lengthArr = concatArrays(this._lengthArr, [x, x, x, x, x, x]);
305
-
306
295
  let r0 = ray._startColor.x,
307
296
  g0 = ray._startColor.y,
308
297
  b0 = ray._startColor.z,
@@ -439,9 +428,6 @@ class RayHandler {
439
428
  0
440
429
  );
441
430
 
442
- gl.bindBuffer(gl.ARRAY_BUFFER, this._lengthBuffer);
443
- gl.vertexAttribPointer(sha.a_length, this._lengthBuffer.itemSize, gl.FLOAT, false, 0, 0);
444
-
445
431
  gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer);
446
432
  gl.vertexAttribPointer(sha.a_vertices, this._vertexBuffer.itemSize, gl.FLOAT, false, 0, 0);
447
433
 
@@ -492,7 +478,6 @@ class RayHandler {
492
478
 
493
479
  i = ri * 6;
494
480
  this._thicknessArr = spliceArray(this._thicknessArr, i, 6);
495
- this._lengthArr = spliceArray(this._lengthArr, i, 6);
496
481
 
497
482
  this.reindexRaysArray(ri);
498
483
  this.refresh();
@@ -732,20 +717,6 @@ class RayHandler {
732
717
  this._changedBuffers[THICKNESS_BUFFER] = true;
733
718
  }
734
719
 
735
- setLengthArr(index, length) {
736
- var i = index * 6;
737
- var a = this._lengthArr;
738
-
739
- a[i] = length;
740
- a[i + 1] = length;
741
- a[i + 2] = length;
742
- a[i + 3] = length;
743
- a[i + 4] = length;
744
- a[i + 5] = length;
745
-
746
- this._changedBuffers[LENGTH_BUFFER] = true;
747
- }
748
-
749
720
  setVisibility(index, visibility) {
750
721
  var vArr;
751
722
  if (visibility) {
@@ -839,18 +810,6 @@ class RayHandler {
839
810
  );
840
811
  }
841
812
 
842
- createLengthBuffer() {
843
- var h = this._renderer.handler;
844
- h.gl.deleteBuffer(this._lengthBuffer);
845
- this._lengthArr = makeArrayTyped(this._lengthArr);
846
- this._lengthBuffer = h.createArrayBuffer(
847
- this._lengthArr,
848
- 1,
849
- this._lengthArr.length,
850
- h.gl.DYNAMIC_DRAW
851
- );
852
- }
853
-
854
813
  createVertexBuffer() {
855
814
  var h = this._renderer.handler;
856
815
  h.gl.deleteBuffer(this._vertexBuffer);
@@ -203,9 +203,6 @@ class Strip {
203
203
  shu = p.uniforms;
204
204
 
205
205
  gl.disable(gl.CULL_FACE);
206
- gl.blendEquation(gl.FUNC_ADD);
207
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
208
- gl.enable(gl.BLEND);
209
206
  sh.activate();
210
207
 
211
208
  gl.uniformMatrix4fv(shu.viewMatrix, false, r.activeCamera.getViewMatrix());
@@ -257,9 +254,7 @@ class Strip {
257
254
  shu = p.uniforms;
258
255
 
259
256
  gl.disable(gl.CULL_FACE);
260
- gl.blendEquation(gl.FUNC_ADD);
261
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
262
- gl.enable(gl.BLEND);
257
+
263
258
  sh.activate();
264
259
 
265
260
  gl.uniformMatrix4fv(shu.viewMatrix, false, r.activeCamera.getViewMatrix());
package/src/og/index.js CHANGED
@@ -37,16 +37,18 @@ import { RenderNode } from './scene/RenderNode.js';
37
37
 
38
38
  import { Popup } from './Popup.js';
39
39
 
40
- import { QuadTreeStrategy } from './quadTree/QuadTreeStrategy.js';
41
- import { MarsQuadTreeStrategy } from './quadTree/MarsQuadTreeStrategy.js';
42
- import { EarthQuadTreeStrategy } from './quadTree/EarthQuadTreeStrategy.js';
43
- import { Wgs84QuadTreeStrategy } from './quadTree/Wgs84QuadTreeStrategy.js';
44
- import { quadTreeStrategyType } from './utils/quadTreeType.js';
40
+ import {
41
+ EarthQuadTreeStrategy,
42
+ MarsQuadTreeStrategy,
43
+ QuadTreeStrategy,
44
+ quadTreeStrategyType,
45
+ Wgs84QuadTreeStrategy
46
+ } from './quadTree/index.js';
45
47
 
46
48
  import pkg from "../../package.json";
47
49
 
48
50
  const { Handler } = webgl, { Control } = control;
49
- const { Layer } = layer;
51
+ const { Layer, Vector, XYZ} = layer;
50
52
  const {
51
53
  EntityCollection,
52
54
  Entity
@@ -65,6 +67,8 @@ export {
65
67
  utils,
66
68
  input,
67
69
  Layer,
70
+ XYZ,
71
+ Vector,
68
72
  layer,
69
73
  terrain,
70
74
  Control,
@@ -42,5 +42,7 @@ export const input = {
42
42
  KEY_APOSTROPHE: 192,
43
43
  MB_LEFT: 0,
44
44
  MB_RIGHT: 2,
45
- MB_MIDDLE: 1
45
+ MB_MIDDLE: 1,
46
+ KEY_BACK_SLASH: 220,
47
+ KEY_SINGLE_QUOTE: 222
46
48
  };
@@ -13,19 +13,17 @@ import { Layer } from "./Layer.js";
13
13
  * @type {number}
14
14
  */
15
15
 
16
- const EVENT_NAMES = [
17
- /**
18
- * Triggered when current tile image has loaded before rendereing.
19
- * @event og.layer.CanvasTiles#load
20
- */
16
+ const EVENT_NAMES = [/**
17
+ * Triggered when current tile image has loaded before rendereing.
18
+ * @event og.layer.CanvasTiles#load
19
+ */
21
20
  "load",
22
21
 
23
22
  /**
24
23
  * Triggered when all tiles have loaded or loading has stopped.
25
24
  * @event og.layer.CanvasTiles#loadend
26
25
  */
27
- "loadend"
28
- ];
26
+ "loadend"];
29
27
 
30
28
  /**
31
29
  * Layer used to rendering each tile as a separate canvas object.
@@ -50,6 +48,8 @@ class CanvasTiles extends Layer {
50
48
 
51
49
  this.events.registerNames(EVENT_NAMES);
52
50
 
51
+ this.animated = options.animated || false;
52
+
53
53
  this.minNativeZoom = options.minNativeZoom || 0;
54
54
  /**
55
55
  * Current creating tiles couter.
@@ -176,22 +176,19 @@ class CanvasTiles extends Layer {
176
176
  that.events.dispatch(e, material);
177
177
  }
178
178
  requestAnimationFrame(() => {
179
- that.drawTile(
180
- material,
181
- /**
182
- * Apply canvas.
183
- * @callback applyCanvasCallback
184
- * @param {Object} canvas -
185
- */
186
- function (canvas) {
187
- that._counter--;
188
- CanvasTiles.__requestsCounter--;
189
- if (material.isLoading) {
190
- material.applyImage(canvas);
191
- }
192
- that._dequeueRequest();
179
+ that.drawTile(material, /**
180
+ * Apply canvas.
181
+ * @callback applyCanvasCallback
182
+ * @param {Object} canvas -
183
+ */
184
+ function (canvas) {
185
+ that._counter--;
186
+ CanvasTiles.__requestsCounter--;
187
+ if (material.isLoading) {
188
+ material.applyImage(canvas);
193
189
  }
194
- );
190
+ that._dequeueRequest();
191
+ });
195
192
  });
196
193
  } else {
197
194
  material.textureNotExists();
@@ -231,10 +228,7 @@ class CanvasTiles extends Layer {
231
228
  while (this._pendingsQueue.length) {
232
229
  var pmat = this._pendingsQueue.pop();
233
230
  if (pmat.segment.node) {
234
- if (
235
- pmat.segment.initialized &&
236
- pmat.segment.node.getState() === quadTree.RENDERING
237
- ) {
231
+ if (pmat.segment.initialized && pmat.segment.node.getState() === quadTree.RENDERING) {
238
232
  return pmat;
239
233
  }
240
234
  pmat.isLoading = false;
@@ -245,14 +239,20 @@ class CanvasTiles extends Layer {
245
239
 
246
240
  applyMaterial(material) {
247
241
  if (material.isReady) {
242
+ if (material.layer.animated) {
243
+ requestAnimationFrame(() => {
244
+ this.drawTile(material, function (canvas) {
245
+ material.applyImage(canvas);
246
+ });
247
+ });
248
+ }
248
249
  return [0, 0, 1, 1];
249
250
  } else if (material.segment.tileZoom < this.minNativeZoom) {
250
251
  material.textureNotExists();
251
252
  } else {
252
253
 
253
254
  let segment = material.segment;
254
- let pn = segment.node,
255
- notEmpty = false;
255
+ let pn = segment.node, notEmpty = false;
256
256
 
257
257
  if (segment.passReady && !material.isLoading) {
258
258
  this.loadMaterial(material);
@@ -270,15 +270,20 @@ class CanvasTiles extends Layer {
270
270
  }
271
271
 
272
272
  if (notEmpty) {
273
+
274
+ if (material.layer.animated) {
275
+ requestAnimationFrame(() => {
276
+ this.drawTile(material, function (canvas) {
277
+ material.applyImage(canvas);
278
+ });
279
+ });
280
+ }
281
+
273
282
  material.appliedNodeId = pn.nodeId;
274
283
  material.texture = psegm.texture;
284
+
275
285
  let dZ2 = 1.0 / (2 << (segment.tileZoom - pn.segment.tileZoom - 1));
276
- return [
277
- segment.tileX * dZ2 - pn.segment.tileX,
278
- segment.tileY * dZ2 - pn.segment.tileY,
279
- dZ2,
280
- dZ2
281
- ];
286
+ return [segment.tileX * dZ2 - pn.segment.tileX, segment.tileY * dZ2 - pn.segment.tileY, dZ2, dZ2];
282
287
  } else {
283
288
  material.texture = segment.planet.transparentTexture;
284
289
  return [0, 0, 1, 1];
@@ -11,6 +11,7 @@ import { Extent } from "../Extent.js";
11
11
  import { LonLat } from "../LonLat.js";
12
12
  import { Material } from "./Material.js";
13
13
  import { Vec3 } from "../math/Vec3.js";
14
+ import { createColorRGB } from "../utils/shared.js";
14
15
 
15
16
  const FADING_RATIO = 15.8;
16
17
 
@@ -208,6 +209,65 @@ class Layer {
208
209
  * @type {Events}
209
210
  */
210
211
  this.events = new Events(options.events ? [...EVENT_NAMES, ...options.events] : EVENT_NAMES, this);
212
+
213
+ this._ambient = null;
214
+ this._diffuse = null;
215
+ this._specular = null;
216
+
217
+ if (options.ambient) {
218
+ let a = utils.createColorRGB(options.ambient, new Vec3(0.2, 0.2, 0.2));
219
+ this._ambient = new Float32Array([a.x, a.y, a.z]);
220
+ }
221
+
222
+ if (options.diffuse) {
223
+ let d = utils.createColorRGB(options.diffuse, new Vec3(0.8, 0.8, 0.8));
224
+ this._diffuse = new Float32Array([d.x, d.y, d.z]);
225
+ }
226
+
227
+ if (options.specular) {
228
+ let s = utils.createColorRGB(options.specular, new Vec3(0.0003, 0.0003, 0.0003));
229
+ let shininess = options.shininess || 20.0;
230
+ this._specular = new Float32Array([s.x, s.y, s.z, shininess]);
231
+ }
232
+
233
+ this.nightTextureCoefficient = options.nightTextureCoefficient || null;
234
+ }
235
+
236
+ set diffuse(rgb) {
237
+ if (rgb) {
238
+ let vec = createColorRGB(rgb);
239
+ this._diffuse = new Float32Array(vec.toArray());
240
+ } else {
241
+ this._diffuse = null;
242
+ }
243
+ }
244
+
245
+ set ambient(rgb) {
246
+ if (rgb) {
247
+ let vec = createColorRGB(rgb);
248
+ this._ambient = new Float32Array(vec.toArray());
249
+ } else {
250
+ this._ambient = null;
251
+ }
252
+ }
253
+
254
+ set specular(rgb) {
255
+ if (rgb) {
256
+ let vec = createColorRGB(rgb);
257
+ this._specular = new Float32Array([vec.x, vec.y, vec.y, this._specular[3]]);
258
+ } else {
259
+ this._specular = null;
260
+ }
261
+ }
262
+
263
+ set shininess(v) {
264
+ if (this._specular) {
265
+ this._specular[3] = v;
266
+ }
267
+ }
268
+
269
+ get normalMapCreator() {
270
+ return this._normalMapCreator;
211
271
  }
212
272
 
213
273
  static getTMS(x, y, z) {
@@ -655,24 +715,24 @@ class Layer {
655
715
  redraw() {
656
716
  if (this._planet) {
657
717
  this._planet._quadTree.traverseTree((n) => {
658
- if (n.segment.materials[this._id]) {
659
- n.segment.materials[this._id].clear();
718
+ if (n.segment.materials[this._id]) {
719
+ n.segment.materials[this._id].clear();
720
+ }
660
721
  }
661
- }
662
722
  );
663
723
 
664
724
  this._planet._quadTreeNorth.traverseTree((n) => {
665
- if (n.segment.materials[this._id]) {
666
- n.segment.materials[this._id].clear();
725
+ if (n.segment.materials[this._id]) {
726
+ n.segment.materials[this._id].clear();
727
+ }
667
728
  }
668
- }
669
729
  );
670
730
 
671
731
  this._planet._quadTreeSouth.traverseTree((n) => {
672
- if (n.segment.materials[this._id]) {
673
- n.segment.materials[this._id].clear();
732
+ if (n.segment.materials[this._id]) {
733
+ n.segment.materials[this._id].clear();
734
+ }
674
735
  }
675
- }
676
736
  );
677
737
  }
678
738
  }
@@ -29,13 +29,6 @@ class Material {
29
29
  this.pickingReady = false;
30
30
  }
31
31
 
32
- ///**
33
- // * @param {*} layer
34
- // */
35
- //assignLayer(layer) {
36
- // this.layer = layer;
37
- //}
38
-
39
32
  /**
40
33
  *
41
34
  */
@@ -44,7 +37,7 @@ class Material {
44
37
  }
45
38
 
46
39
  _createTexture(img) {
47
- return this.layer._planet && this.layer.createTexture(img, this.layer._internalFormat);
40
+ return this.layer._planet && this.layer.createTexture(img, this.layer._internalFormat, this.isReady ? this.texture : null);
48
41
  }
49
42
 
50
43
  /**
@@ -27,6 +27,7 @@ import { XYZ } from "./XYZ.js";
27
27
  * @param {number} [options.height=256] - Tile height.
28
28
  * @param {string} options.layers - WMS layers string.
29
29
  * @param {string} [options.version="1.1.1"] - WMS version.
30
+ * @param {Object} extra - Extra parameters (by WMS rreference or by WMS service vendors) to pass to WMS service.
30
31
  * @example:
31
32
  * new og.layer.WMS("USA States", {
32
33
  * isBaseLayer: false,
@@ -36,16 +37,23 @@ import { XYZ } from "./XYZ.js";
36
37
  * zIndex: 50,
37
38
  * attribution: 'USA states - geoserver WMS example',
38
39
  * version: "1.1.1",
39
- * visibility: false }
40
+ * visibility: false }, {
41
+ * transparent: true,
42
+ * sld: "style.sld"}
40
43
  * );
41
44
  *
42
45
  * @fires og.layer.XYZ#load
43
46
  * @fires og.layer.XYZ#loadend
44
47
  */
45
48
  class WMS extends XYZ {
46
- constructor(name, options) {
49
+
50
+
51
+ constructor(name, options, extra) {
47
52
  super(name, options);
48
53
 
54
+ this._extra = new URLSearchParams(extra).toString();
55
+
56
+
49
57
  if (!options.extent) {
50
58
  this.setExtent(new Extent(new LonLat(-180.0, -90), new LonLat(180.0, 90)));
51
59
  }
@@ -85,10 +93,12 @@ class WMS extends XYZ {
85
93
  srs,
86
94
  bbox,
87
95
  width = 256,
88
- height = 256
96
+ height = 256,
97
+ extra
98
+
89
99
  ) {
90
100
  return `${url}/wms?LAYERS=${layers}&FORMAT=${format}&SERVICE=WMS&VERSION=${version}&REQUEST=${request}
91
- &SRS=${srs}&BBOX=${bbox}&WIDTH=${width}&HEIGHT=${height}`;
101
+ &SRS=${srs}&BBOX=${bbox}&WIDTH=${width}&HEIGHT=${height}&` + extra;
92
102
  }
93
103
 
94
104
  static get_bbox_v1_1_1(extent) {
@@ -133,7 +143,8 @@ class WMS extends XYZ {
133
143
  segment._projection.code,
134
144
  this._getBbox(segment.getExtent()),
135
145
  this.imageWidth,
136
- this.imageHeight
146
+ this.imageHeight,
147
+ this._extra
137
148
  );
138
149
  }
139
150
 
@@ -127,9 +127,11 @@ class LightSource {
127
127
  this._ambient.x = rn._lightsParamsv[index] = this._tempAmbient.x;
128
128
  this._ambient.y = rn._lightsParamsv[index + 1] = this._tempAmbient.y;
129
129
  this._ambient.z = rn._lightsParamsv[index + 2] = this._tempAmbient.z;
130
+
130
131
  this._diffuse.x = rn._lightsParamsv[index + 3] = this._tempDiffuse.x;
131
132
  this._diffuse.y = rn._lightsParamsv[index + 4] = this._tempDiffuse.y;
132
133
  this._diffuse.z = rn._lightsParamsv[index + 5] = this._tempDiffuse.z;
134
+
133
135
  this._specular.x = rn._lightsParamsv[index + 6] = this._tempSpecular.x;
134
136
  this._specular.y = rn._lightsParamsv[index + 7] = this._tempSpecular.y;
135
137
  this._specular.z = rn._lightsParamsv[index + 8] = this._tempSpecular.z;