@openglobus/og 0.11.7 → 0.12.3

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 (211) hide show
  1. package/css/og.css +5 -2
  2. package/dist/@openglobus/og.css +1 -0
  3. package/dist/@openglobus/og.esm.js +21 -0
  4. package/dist/@openglobus/og.esm.js.map +1 -0
  5. package/dist/@openglobus/og.umd.js +21 -0
  6. package/dist/@openglobus/og.umd.js.map +1 -0
  7. package/package.json +11 -11
  8. package/src/og/Globe.js +18 -6
  9. package/src/og/camera/Camera.js +70 -79
  10. package/src/og/camera/PlanetCamera.js +25 -30
  11. package/src/og/control/DebugInfo.js +2 -2
  12. package/src/og/control/EarthNavigation.js +26 -17
  13. package/src/og/control/Lighting.js +52 -73
  14. package/src/og/control/MouseNavigation.js +30 -29
  15. package/src/og/control/MouseWheelZoomControl.js +257 -0
  16. package/src/og/control/Sun.js +3 -3
  17. package/src/og/control/index.js +2 -0
  18. package/src/og/control/visibleExtent/Segment.js +1862 -0
  19. package/src/og/control/visibleExtent/VisibleExtent.js +80 -0
  20. package/src/og/control/visibleExtent/drawnode.js +751 -0
  21. package/src/og/entity/BaseBillboard.js +9 -9
  22. package/src/og/entity/Entity.js +742 -742
  23. package/src/og/entity/GeoObjectHandler.js +138 -134
  24. package/src/og/entity/Label.js +7 -7
  25. package/src/og/entity/LabelHandler.js +2 -1
  26. package/src/og/layer/CanvasTiles.js +8 -12
  27. package/src/og/layer/GeoImage.js +2 -10
  28. package/src/og/layer/GeoTexture2d.js +2 -10
  29. package/src/og/layer/GeoVideo.js +2 -10
  30. package/src/og/layer/KML.js +19 -12
  31. package/src/og/layer/Layer.js +4 -23
  32. package/src/og/layer/WMS.js +0 -2
  33. package/src/og/layer/XYZ.js +31 -33
  34. package/src/og/math/Vec3.js +18 -2
  35. package/src/og/quadTree/Node.js +48 -93
  36. package/src/og/quadTree/quadTree.js +1 -1
  37. package/src/og/renderer/Renderer.js +69 -96
  38. package/src/og/renderer/RendererEvents.js +3 -1
  39. package/src/og/scene/Planet.js +171 -173
  40. package/src/og/segment/Segment.js +99 -268
  41. package/src/og/segment/Slice.js +45 -0
  42. package/src/og/shaders/drawnode.js +171 -350
  43. package/src/og/shaders/geoObject.js +15 -6
  44. package/src/og/terrain/EmptyTerrain.js +3 -2
  45. package/src/og/terrain/GlobusTerrain.js +2 -0
  46. package/src/og/utils/GeoImageCreator.js +5 -1
  47. package/src/og/utils/Loader.js +1 -1
  48. package/src/og/utils/PlainSegmentWorker.js +0 -13
  49. package/src/og/webgl/Handler.js +14 -10
  50. package/types/Clock.d.ts +94 -0
  51. package/types/Deferred.d.ts +6 -0
  52. package/types/Events.d.ts +77 -0
  53. package/types/Extent.d.ts +166 -0
  54. package/types/Globe.d.ts +85 -0
  55. package/types/ImageCanvas.d.ts +123 -0
  56. package/types/Lock.d.ts +12 -0
  57. package/types/LonLat.d.ts +108 -0
  58. package/types/Popup.d.ts +42 -0
  59. package/types/QueueArray.d.ts +19 -0
  60. package/types/Rectangle.d.ts +80 -0
  61. package/types/Stack.d.ts +19 -0
  62. package/types/ajax.d.ts +24 -0
  63. package/types/arial.d.ts +48 -0
  64. package/types/astro/astro.d.ts +38 -0
  65. package/types/astro/earth.d.ts +7 -0
  66. package/types/astro/jd.d.ts +254 -0
  67. package/types/bv/Box.d.ts +30 -0
  68. package/types/bv/Sphere.d.ts +38 -0
  69. package/types/bv/index.d.ts +3 -0
  70. package/types/camera/Camera.d.ts +312 -0
  71. package/types/camera/Frustum.d.ts +133 -0
  72. package/types/camera/PlanetCamera.d.ts +219 -0
  73. package/types/camera/index.d.ts +3 -0
  74. package/types/cons.d.ts +40 -0
  75. package/types/control/CompassButton.d.ts +17 -0
  76. package/types/control/Control.d.ts +104 -0
  77. package/types/control/DebugInfo.d.ts +15 -0
  78. package/types/control/EarthCoordinates.d.ts +47 -0
  79. package/types/control/EarthNavigation.d.ts +43 -0
  80. package/types/control/GeoImageDragControl.d.ts +6 -0
  81. package/types/control/KeyboardNavigation.d.ts +21 -0
  82. package/types/control/LayerSwitcher.d.ts +21 -0
  83. package/types/control/Lighting.d.ts +16 -0
  84. package/types/control/MouseNavigation.d.ts +48 -0
  85. package/types/control/MouseWheelZoomControl.d.ts +45 -0
  86. package/types/control/ScaleControl.d.ts +22 -0
  87. package/types/control/ShowFps.d.ts +11 -0
  88. package/types/control/SimpleNavigation.d.ts +25 -0
  89. package/types/control/Sun.d.ts +50 -0
  90. package/types/control/ToggleWireframe.d.ts +12 -0
  91. package/types/control/TouchNavigation.d.ts +48 -0
  92. package/types/control/ZoomControl.d.ts +27 -0
  93. package/types/control/index.d.ts +18 -0
  94. package/types/ellipsoid/Ellipsoid.d.ts +146 -0
  95. package/types/ellipsoid/index.d.ts +3 -0
  96. package/types/ellipsoid/wgs84.d.ts +6 -0
  97. package/types/entity/BaseBillboard.d.ts +215 -0
  98. package/types/entity/Billboard.d.ts +94 -0
  99. package/types/entity/BillboardHandler.d.ts +79 -0
  100. package/types/entity/Entity.d.ts +348 -0
  101. package/types/entity/EntityCollection.d.ts +317 -0
  102. package/types/entity/GeoObject.d.ts +111 -0
  103. package/types/entity/GeoObjectHandler.d.ts +81 -0
  104. package/types/entity/Geometry.d.ts +74 -0
  105. package/types/entity/GeometryHandler.d.ts +76 -0
  106. package/types/entity/Label.d.ts +189 -0
  107. package/types/entity/LabelHandler.d.ts +31 -0
  108. package/types/entity/LabelWorker.d.ts +11 -0
  109. package/types/entity/PointCloud.d.ts +174 -0
  110. package/types/entity/PointCloudHandler.d.ts +38 -0
  111. package/types/entity/Polyline.d.ts +306 -0
  112. package/types/entity/PolylineHandler.d.ts +18 -0
  113. package/types/entity/Ray.d.ts +124 -0
  114. package/types/entity/RayHandler.d.ts +67 -0
  115. package/types/entity/ShapeHandler.d.ts +22 -0
  116. package/types/entity/Strip.d.ts +119 -0
  117. package/types/entity/StripHandler.d.ts +38 -0
  118. package/types/entity/index.d.ts +8 -0
  119. package/types/index.core.d.ts +65 -0
  120. package/types/index.d.ts +45 -0
  121. package/types/index.webgl.d.ts +7 -0
  122. package/types/input/KeyboardHandler.d.ts +10 -0
  123. package/types/input/MouseHandler.d.ts +5 -0
  124. package/types/input/TouchHandler.d.ts +5 -0
  125. package/types/input/input.d.ts +34 -0
  126. package/types/layer/BaseGeoImage.d.ts +94 -0
  127. package/types/layer/CanvasTiles.d.ts +67 -0
  128. package/types/layer/GeoImage.d.ts +52 -0
  129. package/types/layer/GeoTexture2d.d.ts +8 -0
  130. package/types/layer/GeoVideo.d.ts +55 -0
  131. package/types/layer/KML.d.ts +68 -0
  132. package/types/layer/Layer.d.ts +310 -0
  133. package/types/layer/Material.d.ts +45 -0
  134. package/types/layer/Vector.d.ts +208 -0
  135. package/types/layer/WMS.d.ts +61 -0
  136. package/types/layer/XYZ.d.ts +119 -0
  137. package/types/layer/index.d.ts +10 -0
  138. package/types/light/LightSource.d.ts +178 -0
  139. package/types/math/Line2.d.ts +11 -0
  140. package/types/math/Line3.d.ts +10 -0
  141. package/types/math/Mat3.d.ts +65 -0
  142. package/types/math/Mat4.d.ts +176 -0
  143. package/types/math/Plane.d.ts +18 -0
  144. package/types/math/Quat.d.ts +379 -0
  145. package/types/math/Ray.d.ts +82 -0
  146. package/types/math/Vec2.d.ts +309 -0
  147. package/types/math/Vec3.d.ts +467 -0
  148. package/types/math/Vec4.d.ts +162 -0
  149. package/types/math/coder.d.ts +43 -0
  150. package/types/math/index.d.ts +11 -0
  151. package/types/math.d.ts +261 -0
  152. package/types/mercator.d.ts +92 -0
  153. package/types/proj/EPSG3857.d.ts +6 -0
  154. package/types/proj/EPSG4326.d.ts +6 -0
  155. package/types/proj/Proj.d.ts +42 -0
  156. package/types/quadTree/EntityCollectionNode.d.ts +34 -0
  157. package/types/quadTree/Node.d.ts +60 -0
  158. package/types/quadTree/quadTree.d.ts +40 -0
  159. package/types/renderer/Renderer.d.ts +290 -0
  160. package/types/renderer/RendererEvents.d.ts +237 -0
  161. package/types/res/images.d.ts +3 -0
  162. package/types/scene/Axes.d.ts +11 -0
  163. package/types/scene/BaseNode.d.ts +60 -0
  164. package/types/scene/Planet.d.ts +576 -0
  165. package/types/scene/RenderNode.d.ts +142 -0
  166. package/types/scene/SkyBox.d.ts +10 -0
  167. package/types/scene/index.d.ts +4 -0
  168. package/types/segment/Segment.d.ts +275 -0
  169. package/types/segment/SegmentLonLat.d.ts +17 -0
  170. package/types/segment/Slice.d.ts +10 -0
  171. package/types/segment/segmentHelper.d.ts +13 -0
  172. package/types/shaders/billboard.d.ts +3 -0
  173. package/types/shaders/depth.d.ts +2 -0
  174. package/types/shaders/drawnode.d.ts +7 -0
  175. package/types/shaders/geoObject.d.ts +3 -0
  176. package/types/shaders/label.d.ts +4 -0
  177. package/types/shaders/pointCloud.d.ts +2 -0
  178. package/types/shaders/polyline.d.ts +3 -0
  179. package/types/shaders/ray.d.ts +2 -0
  180. package/types/shaders/screenFrame.d.ts +2 -0
  181. package/types/shaders/shape.d.ts +4 -0
  182. package/types/shaders/skybox.d.ts +2 -0
  183. package/types/shaders/toneMapping.d.ts +2 -0
  184. package/types/shapes/BaseShape.d.ts +250 -0
  185. package/types/shapes/Sphere.d.ts +41 -0
  186. package/types/terrain/BilTerrain.d.ts +7 -0
  187. package/types/terrain/EmptyTerrain.d.ts +73 -0
  188. package/types/terrain/Geoid.d.ts +26 -0
  189. package/types/terrain/GlobusTerrain.d.ts +116 -0
  190. package/types/terrain/MapboxTerrain.d.ts +7 -0
  191. package/types/terrain/index.d.ts +5 -0
  192. package/types/utils/FontAtlas.d.ts +15 -0
  193. package/types/utils/GeoImageCreator.d.ts +30 -0
  194. package/types/utils/ImagesCacheManager.d.ts +10 -0
  195. package/types/utils/Loader.d.ts +25 -0
  196. package/types/utils/NormalMapCreator.d.ts +39 -0
  197. package/types/utils/PlainSegmentWorker.d.ts +10 -0
  198. package/types/utils/TerrainWorker.d.ts +9 -0
  199. package/types/utils/TextureAtlas.d.ts +111 -0
  200. package/types/utils/VectorTileCreator.d.ts +16 -0
  201. package/types/utils/colorTable.d.ts +143 -0
  202. package/types/utils/earcut.d.ts +6 -0
  203. package/types/utils/shared.d.ts +231 -0
  204. package/types/webgl/Framebuffer.d.ts +135 -0
  205. package/types/webgl/Handler.d.ts +417 -0
  206. package/types/webgl/Multisample.d.ts +89 -0
  207. package/types/webgl/Program.d.ts +161 -0
  208. package/types/webgl/ProgramController.d.ts +89 -0
  209. package/types/webgl/callbacks.d.ts +1 -0
  210. package/types/webgl/index.d.ts +6 -0
  211. package/types/webgl/types.d.ts +2 -0
@@ -29,22 +29,9 @@ const TEMPLATE = `<div class="og-lighing">
29
29
  </div>
30
30
  <div class="og-value exposure"></div>
31
31
  </div>
32
- </div>
33
-
34
- <div class="og-layers">
35
- <div class="og-caption">Select layer:</div>
36
- <select id="layers"></select>
37
- </div>
32
+ </div>
38
33
 
39
34
  <div class="og-color-options">
40
- <div class="og-caption">Opacity</div>
41
- <div class="og-option">
42
- <div class="og-label">A</div>
43
- <div class="og-slider">
44
- <input type="range" id="opacity" name="opacity" value="0.0" min="0.0" max="2.0" step="0.01" />
45
- </div>
46
- <div class="og-value opacity"></div>
47
- </div>
48
35
  <div class="og-caption">Ambient</div>
49
36
  <div class="og-option">
50
37
  <div class="og-label">R</div>
@@ -123,6 +110,21 @@ const TEMPLATE = `<div class="og-lighing">
123
110
  <div class="og-value shininess"></div>
124
111
  </div>
125
112
  </div>
113
+
114
+ <div class="og-layers">
115
+ <div class="og-caption">Select layer:</div>
116
+ <select id="layers"></select>
117
+ </div>
118
+
119
+ <div class="og-caption">Opacity</div>
120
+ <div class="og-option">
121
+ <div class="og-label">A</div>
122
+ <div class="og-slider">
123
+ <input type="range" id="opacity" name="opacity" value="0.0" min="0.0" max="2.0" step="0.01" />
124
+ </div>
125
+ <div class="og-value opacity"></div>
126
+ </div>
127
+
126
128
  </div>`;
127
129
 
128
130
  /**
@@ -142,36 +144,7 @@ class Lighting extends Control {
142
144
  this._selectedLayer = layer;
143
145
 
144
146
  document.getElementById("opacity").value = layer.opacity;
145
-
146
- document.getElementById("ambient-r").value = layer.ambient.x;
147
- document.getElementById("ambient-g").value = layer.ambient.y;
148
- document.getElementById("ambient-b").value = layer.ambient.z;
149
-
150
- document.getElementById("diffuse-r").value = layer.diffuse.x;
151
- document.getElementById("diffuse-g").value = layer.diffuse.y;
152
- document.getElementById("diffuse-b").value = layer.diffuse.z;
153
-
154
- document.getElementById("specular-r").value = layer.specular.x;
155
- document.getElementById("specular-g").value = layer.specular.y;
156
- document.getElementById("specular-b").value = layer.specular.z;
157
-
158
- document.getElementById("shininess").value = layer.shininess;
159
-
160
147
  document.querySelector(".og-value.opacity").innerHTML = layer.opacity.toString();
161
-
162
- document.querySelector(".og-value.ambient-r").innerHTML = layer.ambient.x.toString();
163
- document.querySelector(".og-value.ambient-g").innerHTML = layer.ambient.y.toString();
164
- document.querySelector(".og-value.ambient-b").innerHTML = layer.ambient.z.toString();
165
-
166
- document.querySelector(".og-value.diffuse-r").innerHTML = layer.diffuse.x.toString();
167
- document.querySelector(".og-value.diffuse-g").innerHTML = layer.diffuse.y.toString();
168
- document.querySelector(".og-value.diffuse-b").innerHTML = layer.diffuse.z.toString();
169
-
170
- document.querySelector(".og-value.specular-r").innerHTML = layer.specular.x.toString();
171
- document.querySelector(".og-value.specular-g").innerHTML = layer.specular.y.toString();
172
- document.querySelector(".og-value.specular-b").innerHTML = layer.specular.z.toString();
173
-
174
- document.querySelector(".og-value.shininess").innerHTML = layer.shininess.toString();
175
148
  }
176
149
 
177
150
  oninit() {
@@ -215,72 +188,78 @@ class Lighting extends Control {
215
188
  });
216
189
 
217
190
  document.getElementById("ambient-r").addEventListener("input", function (e) {
218
- if (_this._selectedLayer) {
219
- _this._selectedLayer.ambient.x = Number(this.value);
220
- }
191
+ _this.planet._ambient[0] = Number(this.value);
221
192
  document.querySelector(".og-value.ambient-r").innerHTML = this.value;
222
193
  });
223
194
  document.getElementById("ambient-g").addEventListener("input", function (e) {
224
- if (_this._selectedLayer) {
225
- _this._selectedLayer.ambient.y = Number(this.value);
226
- }
195
+ _this.planet._ambient[1] = Number(this.value);
227
196
  document.querySelector(".og-value.ambient-g").innerHTML = this.value;
228
197
  });
229
198
  document.getElementById("ambient-b").addEventListener("input", function (e) {
230
- if (_this._selectedLayer) {
231
- _this._selectedLayer.ambient.z = Number(this.value);
232
- }
199
+ _this.planet._ambient[2] = Number(this.value);
233
200
  document.querySelector(".og-value.ambient-b").innerHTML = this.value;
234
201
  });
235
202
 
236
203
  document.getElementById("diffuse-r").addEventListener("input", function (e) {
237
- if (_this._selectedLayer) {
238
- _this._selectedLayer.diffuse.x = Number(this.value);
239
- }
204
+ _this.planet._diffuse[0] = Number(this.value);
240
205
  document.querySelector(".og-value.diffuse-r").innerHTML = this.value;
241
206
  });
242
207
  document.getElementById("diffuse-g").addEventListener("input", function (e) {
243
- if (_this._selectedLayer) {
244
- _this._selectedLayer.diffuse.y = Number(this.value);
245
- }
208
+ _this.planet._diffuse[1] = Number(this.value);
246
209
  document.querySelector(".og-value.diffuse-g").innerHTML = this.value;
247
210
  });
248
211
  document.getElementById("diffuse-b").addEventListener("input", function (e) {
249
- if (_this._selectedLayer) {
250
- _this._selectedLayer.diffuse.z = Number(this.value);
251
- }
212
+ _this.planet._diffuse[2] = Number(this.value);
252
213
  document.querySelector(".og-value.diffuse-b").innerHTML = this.value;
253
214
  });
254
215
 
255
216
  document.getElementById("specular-r").addEventListener("input", function (e) {
256
- if (_this._selectedLayer) {
257
- _this._selectedLayer.specular.x = Number(this.value);
258
- }
217
+ _this.planet._specular[0] = Number(this.value);
259
218
  document.querySelector(".og-value.specular-r").innerHTML = this.value;
260
219
  });
261
220
  document.getElementById("specular-g").addEventListener("input", function (e) {
262
- if (_this._selectedLayer) {
263
- _this._selectedLayer.specular.y = Number(this.value);
264
- }
221
+ _this.planet._specular[1] = Number(this.value);
265
222
  document.querySelector(".og-value.specular-g").innerHTML = this.value;
266
223
  });
267
224
  document.getElementById("specular-b").addEventListener("input", function (e) {
268
- if (_this._selectedLayer) {
269
- _this._selectedLayer.specular.z = Number(this.value);
270
- }
225
+ _this.planet._specular[2] = Number(this.value);
271
226
  document.querySelector(".og-value.specular-b").innerHTML = this.value;
272
227
  });
273
228
 
274
229
  document.getElementById("shininess").addEventListener("input", function (e) {
275
- if (_this._selectedLayer) {
276
- _this._selectedLayer.shininess = Number(this.value);
277
- }
230
+ _this.planet._specular[3] = Number(this.value);
278
231
  document.querySelector(".og-value.shininess").innerHTML = this.value;
279
232
  });
280
233
 
281
234
  if (this.planet) {
282
235
  this.planet.events.on("layeradd", this._onLayerAdd, this);
283
236
  this.planet.events.on("layerremove", this._onLayerRemove, this);
237
+
238
+ document.getElementById("ambient-r").value = this.planet._ambient[0];
239
+ document.getElementById("ambient-g").value = this.planet._ambient[1];
240
+ document.getElementById("ambient-b").value = this.planet._ambient[2];
241
+
242
+ document.getElementById("diffuse-r").value = this.planet._diffuse[0];
243
+ document.getElementById("diffuse-g").value = this.planet._diffuse[1];
244
+ document.getElementById("diffuse-b").value = this.planet._diffuse[2];
245
+
246
+ document.getElementById("specular-r").value = this.planet._specular[0];
247
+ document.getElementById("specular-g").value = this.planet._specular[1];
248
+ document.getElementById("specular-b").value = this.planet._specular[2];
249
+ document.getElementById("shininess").value = this.planet._specular[3];
250
+
251
+ document.querySelector(".og-value.ambient-r").innerHTML = this.planet._ambient[0].toString();
252
+ document.querySelector(".og-value.ambient-g").innerHTML = this.planet._ambient[1].toString();
253
+ document.querySelector(".og-value.ambient-b").innerHTML = this.planet._ambient[2].toString();
254
+
255
+ document.querySelector(".og-value.diffuse-r").innerHTML = this.planet._diffuse[0].toString();
256
+ document.querySelector(".og-value.diffuse-g").innerHTML = this.planet._diffuse[1].toString();
257
+ document.querySelector(".og-value.diffuse-b").innerHTML = this.planet._diffuse[2].toString();
258
+
259
+ document.querySelector(".og-value.specular-r").innerHTML = this.planet._specular[0].toString();
260
+ document.querySelector(".og-value.specular-g").innerHTML = this.planet._specular[1].toString();
261
+ document.querySelector(".og-value.specular-b").innerHTML = this.planet._specular[2].toString();
262
+ document.querySelector(".og-value.shininess").innerHTML = this.planet._specular[3].toString();
284
263
  }
285
264
 
286
265
  this._fetchLayers();
@@ -46,7 +46,9 @@ class MouseNavigation extends Control {
46
46
 
47
47
  this._lmbDoubleClickActive = true;
48
48
 
49
- this.minSlope = options.minSlope || 0.1;
49
+ this.minSlope = options.minSlope || 0.1;
50
+
51
+ this._wheelDirection = +1;
50
52
 
51
53
  this._keyLock = new Key();
52
54
  }
@@ -55,9 +57,9 @@ class MouseNavigation extends Control {
55
57
  var steps = [];
56
58
 
57
59
  var eye = cam.eye.clone(),
58
- n = cam._n.clone(),
59
- u = cam._u.clone(),
60
- v = cam._v.clone();
60
+ n = cam._b.clone(),
61
+ u = cam._r.clone(),
62
+ v = cam._u.clone();
61
63
 
62
64
  var a = planet.getCartesianFromPixelTerrain(point, true);
63
65
 
@@ -73,7 +75,7 @@ class MouseNavigation extends Control {
73
75
  var d = a ? (delta * cam.eye.distance(a)) / stepsCount : 1000;
74
76
 
75
77
  if (forward) {
76
- d = -d;
78
+ d = -1.25*d;
77
79
  } else {
78
80
  d *= 2;
79
81
  }
@@ -224,7 +226,10 @@ class MouseNavigation extends Control {
224
226
  ms,
225
227
  event.wheelDelta > 0,
226
228
  ms.direction
227
- );
229
+ );
230
+
231
+ this._wheelDirection = event.wheelDelta;
232
+
228
233
  if (this.stepsForward) {
229
234
  this.stepIndex = this.stepsCount;
230
235
  }
@@ -240,7 +245,7 @@ class MouseNavigation extends Control {
240
245
  onMouseLeftButtonDoubleClick() {
241
246
  this.planet.stopFlying();
242
247
  this.stopRotation();
243
- var p = this.planet.getCartesianFromPixelTerrain(this.renderer.events.mouseState, true);
248
+ var p = this.planet.getCartesianFromPixelTerrain(this.renderer.events.mouseState);
244
249
  if (p) {
245
250
  var g = this.planet.ellipsoid.cartesianToLonLat(p);
246
251
  if (this.renderer.events.isKeyPressed(input.KEY_ALT)) {
@@ -258,8 +263,8 @@ class MouseNavigation extends Control {
258
263
  onMouseLeftButtonClick() {
259
264
  if (this._active) {
260
265
  this.renderer.handler.canvas.classList.add("ogGrabbingPoiner");
261
- this.grabbedPoint = this.planet.getCartesianFromMouseTerrain(true);
262
- if (this.grabbedPoint) {
266
+ this.grabbedPoint = this.planet.getCartesianFromMouseTerrain();
267
+ if (this.grabbedPoint) {
263
268
  this._eye0.copy(this.renderer.activeCamera.eye);
264
269
  this.grabbedSpheroid.radius = this.grabbedPoint.length();
265
270
  this.stopRotation();
@@ -274,7 +279,7 @@ class MouseNavigation extends Control {
274
279
  this.planet._normalMapCreator.free(this._keyLock);
275
280
  }
276
281
 
277
- onMouseLeftButtonUp(e) {
282
+ onMouseLeftButtonUp(e) {
278
283
  this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner");
279
284
  if (e.x === e.prev_x && e.y === e.prev_y) {
280
285
  this.scaleRot = 0.0;
@@ -302,9 +307,9 @@ class MouseNavigation extends Control {
302
307
  );
303
308
  var rot = this.qRot;
304
309
  cam.eye = rot.mulVec3(cam.eye);
305
- cam._v = rot.mulVec3(cam._v);
306
310
  cam._u = rot.mulVec3(cam._u);
307
- cam._n = rot.mulVec3(cam._n);
311
+ cam._r = rot.mulVec3(cam._r);
312
+ cam._b = rot.mulVec3(cam._b);
308
313
 
309
314
  cam.checkTerrainCollision();
310
315
 
@@ -312,7 +317,7 @@ class MouseNavigation extends Control {
312
317
  }
313
318
  } else {
314
319
  var p0 = this.grabbedPoint,
315
- p1 = Vec3.add(p0, cam._u),
320
+ p1 = Vec3.add(p0, cam._r),
316
321
  p2 = Vec3.add(p0, p0.normal());
317
322
 
318
323
  var px = new Vec3();
@@ -331,20 +336,14 @@ class MouseNavigation extends Control {
331
336
  onMouseRightButtonClick(e) {
332
337
  this.stopRotation();
333
338
  this.planet.stopFlying();
334
- this.pointOnEarth = this.planet.getCartesianFromPixelTerrain(
335
- {
336
- x: e.x,
337
- y: e.y
338
- },
339
- true
340
- );
339
+ this.pointOnEarth = this.planet.getCartesianFromPixelTerrain(e);
341
340
  if (this.pointOnEarth) {
342
341
  this.earthUp = this.pointOnEarth.normal();
343
342
  }
344
343
  }
345
344
 
346
345
  onMouseRightButtonDown(e) {
347
- var cam = this.renderer.activeCamera;
346
+ var cam = this.renderer.activeCamera;
348
347
 
349
348
  if (this.pointOnEarth && this.renderer.events.mouseState.moving) {
350
349
  this.renderer.controlsBag.scaleRot = 1.0;
@@ -385,16 +384,18 @@ class MouseNavigation extends Control {
385
384
  r.controlsBag.scaleRot = 1.0;
386
385
  var sf = this.stepsForward[this.stepsCount - this.stepIndex--];
387
386
 
388
- let maxAlt = cam.maxAltitude + this.planet.ellipsoid._a;
389
-
390
- if (sf.eye.length() > maxAlt) {
387
+ let maxAlt = cam.maxAltitude + this.planet.ellipsoid._b;
388
+ let minAlt = cam.minAltitude + this.planet.ellipsoid._b;
389
+ const camAlt = sf.eye.length();
390
+ if (camAlt > maxAlt || camAlt < minAlt && this._wheelDirection > 0) {
391
+ this._wheelDirection = +1;
391
392
  return;
392
393
  }
393
394
 
394
395
  cam.eye = sf.eye;
395
- cam._v = sf.v;
396
- cam._u = sf.u;
397
- cam._n = sf.n;
396
+ cam._u = sf.v;
397
+ cam._r = sf.u;
398
+ cam._b = sf.n;
398
399
 
399
400
  cam.checkTerrainCollision();
400
401
 
@@ -425,9 +426,9 @@ class MouseNavigation extends Control {
425
426
  this.scaleRot = 0.0;
426
427
  }
427
428
  cam.eye = rot.mulVec3(cam.eye);
428
- cam._v = rot.mulVec3(cam._v);
429
429
  cam._u = rot.mulVec3(cam._u);
430
- cam._n = rot.mulVec3(cam._n);
430
+ cam._r = rot.mulVec3(cam._r);
431
+ cam._b = rot.mulVec3(cam._b);
431
432
 
432
433
  cam.checkTerrainCollision();
433
434
 
@@ -0,0 +1,257 @@
1
+ /**
2
+ * @module og/control/MouseWheelZoomControl
3
+ */
4
+
5
+ "use strict";
6
+
7
+ import { Control } from "./Control.js";
8
+ import { Key } from "../Lock.js";
9
+ import { Quat } from "../math/Quat.js";
10
+ import { Sphere } from "../bv/Sphere.js";
11
+ import { Vec3 } from "../math/Vec3.js";
12
+ import { MouseNavigation } from "./MouseNavigation.js";
13
+
14
+ /**
15
+ * Planet zoom buttons control.
16
+ * @class
17
+ * @extends {Control}
18
+ * @params {Object} [options] - Control options.
19
+ */
20
+ class MouseWheelZoomControl extends Control {
21
+ constructor(options) {
22
+ super(options);
23
+
24
+ this._name = "MouseWheelZoomControl";
25
+
26
+ options = options || {};
27
+
28
+ this.grabbedPoint = new Vec3();
29
+ this._eye0 = new Vec3();
30
+ this.pointOnEarth = new Vec3();
31
+ this.earthUp = new Vec3();
32
+ this.inertia = 0.007;
33
+ this.grabbedSpheroid = new Sphere();
34
+ this.planet = null;
35
+ this.qRot = new Quat();
36
+ this.scaleRot = 0.0;
37
+
38
+ this.distDiff = 0.3;
39
+ this.stepsCount = 8;
40
+ this.stepsForward = null;
41
+ this.stepIndex = 0;
42
+
43
+ this._lmbDoubleClickActive = true;
44
+
45
+ this.minSlope = options.minSlope || 0.1;
46
+
47
+ this._keyLock = new Key();
48
+ }
49
+
50
+ oninit() {
51
+ var zoomDiv = document.createElement("div"),
52
+ btnZoomIn = document.createElement("button"),
53
+ btnZoomOut = document.createElement("button");
54
+
55
+ zoomDiv.className = "ogZoomControl";
56
+ btnZoomIn.className = "ogZoomButton ogZoomIn";
57
+ btnZoomOut.className = "ogZoomButton ogZoomOut";
58
+
59
+ zoomDiv.appendChild(btnZoomIn);
60
+ zoomDiv.appendChild(btnZoomOut);
61
+
62
+ this.renderer.div.appendChild(zoomDiv);
63
+
64
+ btnZoomIn.addEventListener("mousedown", (e) => this.zoomIn());
65
+ btnZoomIn.addEventListener("mouseup", (e) => this.stopZoom());
66
+
67
+ btnZoomOut.addEventListener("mousedown", (e) => this.zoomOut());
68
+ btnZoomOut.addEventListener("mouseup", (e) => this.stopZoom());
69
+
70
+ btnZoomIn.addEventListener("touchstart", (e) => {
71
+ e.preventDefault();
72
+ this.zoomIn();
73
+ });
74
+ btnZoomIn.addEventListener("touchend", (e) => {
75
+ e.preventDefault();
76
+ this.stopZoom();
77
+ });
78
+ btnZoomIn.addEventListener("touchcancel", (e) => {
79
+ e.preventDefault();
80
+ this.stopZoom();
81
+ });
82
+
83
+ btnZoomOut.addEventListener("touchstart", (e) => {
84
+ e.preventDefault();
85
+ this.zoomOut();
86
+ });
87
+ btnZoomOut.addEventListener("touchend", (e) => {
88
+ e.preventDefault();
89
+ this.stopZoom();
90
+ });
91
+ btnZoomOut.addEventListener("touchcancel", (e) => {
92
+ e.preventDefault();
93
+ this.stopZoom();
94
+ });
95
+
96
+ this.renderer.events.on("draw", this._draw, this);
97
+ }
98
+
99
+ /**
100
+ * Planet zoom in.
101
+ * @public
102
+ */
103
+ zoomIn() {
104
+ if (this.stepIndex) {
105
+ return;
106
+ }
107
+
108
+ this.planet.stopFlying();
109
+
110
+ this.stopRotation();
111
+
112
+ this._deactivate = true;
113
+
114
+ this.planet.layerLock.lock(this._keyLock);
115
+ this.planet.terrainLock.lock(this._keyLock);
116
+ this.planet._normalMapCreator.lock(this._keyLock);
117
+
118
+ this.stepsForward = MouseNavigation.getMovePointsFromPixelTerrain(
119
+ this.renderer.activeCamera,
120
+ this.planet,
121
+ this.stepsCount,
122
+ this.distDiff,
123
+ this.renderer.getCenter(),
124
+ true,
125
+ null
126
+ );
127
+ if (this.stepsForward) {
128
+ this.stepIndex = this.stepsCount;
129
+ }
130
+ }
131
+
132
+ /**
133
+ * Planet zoom out.
134
+ * @public
135
+ */
136
+ zoomOut() {
137
+ if (this.stepIndex) {
138
+ return;
139
+ }
140
+
141
+ this.planet.stopFlying();
142
+
143
+ this.stopRotation();
144
+
145
+ this._deactivate = true;
146
+
147
+ this.planet.layerLock.lock(this._keyLock);
148
+ this.planet.terrainLock.lock(this._keyLock);
149
+ this.planet._normalMapCreator.lock(this._keyLock);
150
+
151
+ this.stepsForward = MouseNavigation.getMovePointsFromPixelTerrain(
152
+ this.renderer.activeCamera,
153
+ this.planet,
154
+ this.stepsCount,
155
+ this.distDiff,
156
+ this.renderer.getCenter(),
157
+ false,
158
+ null
159
+ );
160
+ if (this.stepsForward) {
161
+ this.stepIndex = this.stepsCount;
162
+ }
163
+ }
164
+
165
+ stopRotation() {
166
+ this.qRot.clear();
167
+ this.planet.layerLock.free(this._keyLock);
168
+ this.planet.terrainLock.free(this._keyLock);
169
+ this.planet._normalMapCreator.free(this._keyLock);
170
+ }
171
+
172
+ stopZoom() {
173
+ this._move = 0;
174
+
175
+ this.planet.layerLock.free(this._keyLock);
176
+ this.planet.terrainLock.free(this._keyLock);
177
+ this.planet._normalMapCreator.free(this._keyLock);
178
+ }
179
+
180
+ _draw(e) {
181
+ if (this._active) {
182
+ var r = this.renderer;
183
+ var cam = r.activeCamera;
184
+ var prevEye = cam.eye.clone();
185
+
186
+ if (this.stepIndex) {
187
+ r.controlsBag.scaleRot = 1.0;
188
+ var sf = this.stepsForward[this.stepsCount - this.stepIndex--];
189
+
190
+ let maxAlt = cam.maxAltitude + this.planet.ellipsoid._a;
191
+ let minAlt = cam.minAltitude + this.planet.ellipsoid._a;
192
+ const camAlt = sf.eye.length();
193
+ if (camAlt > maxAlt || camAlt < minAlt) {
194
+ return;
195
+ }
196
+
197
+ cam.eye = sf.eye;
198
+ cam._u = sf.v;
199
+ cam._r = sf.u;
200
+ cam._b = sf.n;
201
+
202
+ cam.checkTerrainCollision();
203
+
204
+ cam.update();
205
+ } else {
206
+ if (this._deactivate) {
207
+ this._deactivate = false;
208
+
209
+ this.planet.layerLock.free(this._keyLock);
210
+ this.planet.terrainLock.free(this._keyLock);
211
+ this.planet._normalMapCreator.free(this._keyLock);
212
+ }
213
+ }
214
+
215
+ if (r.events.mouseState.leftButtonDown || !this.scaleRot) {
216
+ return;
217
+ }
218
+
219
+ this.scaleRot -= this.inertia;
220
+ if (this.scaleRot <= 0.0) {
221
+ this.scaleRot = 0.0;
222
+ } else {
223
+ r.controlsBag.scaleRot = this.scaleRot;
224
+ var rot = this.qRot
225
+ .slerp(Quat.IDENTITY, 1.0 - this.scaleRot * this.scaleRot * this.scaleRot)
226
+ .normalize();
227
+ if (!(rot.x || rot.y || rot.z)) {
228
+ this.scaleRot = 0.0;
229
+ }
230
+ cam.eye = rot.mulVec3(cam.eye);
231
+ cam._u = rot.mulVec3(cam._u);
232
+ cam._r = rot.mulVec3(cam._r);
233
+ cam._b = rot.mulVec3(cam._b);
234
+
235
+ cam.checkTerrainCollision();
236
+
237
+ cam.update();
238
+ }
239
+
240
+ if (cam.eye.distance(prevEye) / cam._terrainAltitude > 0.01) {
241
+ this.planet.layerLock.lock(this._keyLock);
242
+ this.planet.terrainLock.lock(this._keyLock);
243
+ this.planet._normalMapCreator.lock(this._keyLock);
244
+ } else {
245
+ this.planet.layerLock.free(this._keyLock);
246
+ this.planet.terrainLock.free(this._keyLock);
247
+ this.planet._normalMapCreator.free(this._keyLock);
248
+ }
249
+ }
250
+ }
251
+ }
252
+
253
+ export function mouseWheelZoomControl(options) {
254
+ return new MouseWheelZoomControl(options);
255
+ }
256
+
257
+ export { MouseWheelZoomControl };
@@ -112,14 +112,14 @@ class Sun extends Control {
112
112
  var n = cam.eye.normal(),
113
113
  u = cam.getForward();
114
114
 
115
- u.scale(Math.sign(cam._v.dot(n))); // up
115
+ u.scale(Math.sign(cam._u.dot(n))); // up
116
116
 
117
117
  if (cam.slope > 0.99) {
118
- u = cam._v;
118
+ u = cam._u;
119
119
  }
120
120
 
121
121
  var tu = Vec3.proj_b_to_plane(u, n, u).normalize().scale(this.offsetVertical);
122
- var tr = Vec3.proj_b_to_plane(cam._u, n, cam._u)
122
+ var tr = Vec3.proj_b_to_plane(cam._r, n, cam._r)
123
123
  .normalize()
124
124
  .scale(this.offsetHorizontal); // right
125
125
  var d = tu.add(tr);
@@ -13,6 +13,7 @@ import { SimpleNavigation } from "./SimpleNavigation.js";
13
13
  import { ShowFps } from "./ShowFps.js";
14
14
  import { Sun } from "./Sun.js";
15
15
  import { ZoomControl } from "./ZoomControl.js";
16
+ import { MouseWheelZoomControl } from "./MouseWheelZoomControl.js";
16
17
  import { Lighting } from "./Lighting.js";
17
18
 
18
19
  export {
@@ -31,5 +32,6 @@ export {
31
32
  ShowFps,
32
33
  Sun,
33
34
  ZoomControl,
35
+ MouseWheelZoomControl,
34
36
  Lighting
35
37
  };