@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
@@ -3,6 +3,7 @@
3
3
 
4
4
  import { htmlColorToFloat32Array } from './utils/shared.js';
5
5
  import { Vec3 } from './math/Vec3.js';
6
+ import { MIN, MAX } from './math.js';
6
7
 
7
8
  function getColor(color) {
8
9
  if (color instanceof Array) {
@@ -18,7 +19,19 @@ class Object3d {
18
19
 
19
20
  this._name = data.name || "noname";
20
21
  this._vertices = data.vertices || [];
21
- this._texCoords = [];
22
+ this._numVertices = this._vertices.length / 3;
23
+ this._texCoords = data.texCoords || new Array(2 * this._numVertices);
24
+
25
+ if (data.center) {
26
+ Object3d.centering(this._vertices);
27
+ }
28
+
29
+ /**
30
+ * Image src.
31
+ * @protected
32
+ * @type {string}
33
+ */
34
+ this._src = data.src || null;
22
35
 
23
36
  this.color = getColor(data.color);
24
37
 
@@ -26,18 +39,45 @@ class Object3d {
26
39
  Object3d.scale(this._vertices, data.scale);
27
40
  }
28
41
 
29
- if (data.indexes) {
30
- this._indexes = data.indexes || [];
42
+ if (data.indices) {
43
+ this._indices = data.indices || [];
31
44
  this._normals = data.normals || [];
32
45
  } else {
33
46
  this._normals = Object3d.getNormals(this._vertices);
34
- this._indexes = new Array(this._vertices.length);
35
- for (let i = 0, len = this._indexes.length; i < len; i++) {
36
- this._indexes[i] = i;
47
+ this._indices = new Array(this._vertices.length);
48
+ for (let i = 0, len = this._indices.length; i < len; i++) {
49
+ this._indices[i] = i;
37
50
  }
38
51
  }
39
52
  }
40
53
 
54
+ static centering(verts) {
55
+ let min_x = MAX, min_y = MAX, min_z = MAX, max_x = MIN, max_y = MIN, max_z = MIN;
56
+ for (let i = 0, len = verts.length; i < len; i += 3) {
57
+ let x = verts[i], y = verts[i + 1], z = verts[i + 2];
58
+ if (x < min_x) min_x = x;
59
+ if (y < min_y) min_y = y;
60
+ if (z < min_z) min_z = z;
61
+ if (x > max_x) max_x = x;
62
+ if (y > max_y) max_y = y;
63
+ if (z > max_z) max_z = z;
64
+ }
65
+
66
+ let c_x = min_x + (max_x - min_x) * 0.5;
67
+ let c_y = min_y + (max_y - min_y) * 0.5;
68
+ let c_z = min_z + (max_z - min_z) * 0.5;
69
+
70
+ for (let i = 0, len = verts.length; i < len; i += 3) {
71
+ verts[i] -= c_x;
72
+ verts[i + 1] -= c_y;
73
+ verts[i + 2] -= c_z;
74
+ }
75
+ }
76
+
77
+ get src() {
78
+ return this._src;
79
+ }
80
+
41
81
  get name() {
42
82
  return this._name;
43
83
  }
@@ -50,8 +90,16 @@ class Object3d {
50
90
  return this._normals;
51
91
  }
52
92
 
53
- get indexes() {
54
- return this._indexes;
93
+ get indices() {
94
+ return this._indices;
95
+ }
96
+
97
+ get texCoords() {
98
+ return this._texCoords;
99
+ }
100
+
101
+ get numVertices() {
102
+ return this._numVertices;
55
103
  }
56
104
 
57
105
  static scale(vertices, s) {
@@ -61,13 +109,10 @@ class Object3d {
61
109
  }
62
110
 
63
111
  static centroid(vertices) {
64
- let minX = 1000.0, minY = 1000.0, minZ = 1000.0,
65
- maxX = -1000.0, maxY = -1000.0, maxZ = -1000.0;
112
+ let minX = 1000.0, minY = 1000.0, minZ = 1000.0, maxX = -1000.0, maxY = -1000.0, maxZ = -1000.0;
66
113
 
67
114
  for (let i = 0; i < vertices.length; i += 3) {
68
- let x = vertices[i],
69
- y = vertices[i + 1],
70
- z = vertices[i + 2];
115
+ let x = vertices[i], y = vertices[i + 1], z = vertices[i + 2];
71
116
  if (x < minX) minX = x;
72
117
  if (y < minY) minY = y;
73
118
  if (z < minZ) minZ = z;
@@ -76,11 +121,7 @@ class Object3d {
76
121
  if (z > maxZ) maxZ = z;
77
122
  }
78
123
 
79
- return [
80
- minX + (maxX - minX) * 0.5,
81
- minY + (maxY - minY) * 0.5,
82
- minZ + (maxZ - minZ) * 0.5
83
- ];
124
+ return [minX + (maxX - minX) * 0.5, minY + (maxY - minY) * 0.5, minZ + (maxZ - minZ) * 0.5];
84
125
  }
85
126
 
86
127
  static translate(vertices, v) {
@@ -96,26 +137,11 @@ class Object3d {
96
137
 
97
138
  for (var i = 0; i < vertices.length; i += 9) {
98
139
 
99
- let t03 = i,
100
- t13 = i + 3,
101
- t23 = i + 6,
102
- v0_x = vertices[t03],
103
- v0_y = vertices[t03 + 1],
104
- v0_z = vertices[t03 + 2],
105
- v1_x = vertices[t13],
106
- v1_y = vertices[t13 + 1],
107
- v1_z = vertices[t13 + 2],
108
- v2_x = vertices[t23],
109
- v2_y = vertices[t23 + 1],
110
- v2_z = vertices[t23 + 2],
111
- vv0_x = v1_x - v0_x,
112
- vv0_y = v1_y - v0_y,
113
- vv0_z = v1_z - v0_z,
114
- vv1_x = v2_x - v0_x,
115
- vv1_y = v2_y - v0_y,
116
- vv1_z = v2_z - v0_z,
117
- n_x = vv0_y * vv1_z - vv0_z * vv1_y,
118
- n_y = vv0_z * vv1_x - vv0_x * vv1_z,
140
+ let t03 = i, t13 = i + 3, t23 = i + 6, v0_x = vertices[t03], v0_y = vertices[t03 + 1],
141
+ v0_z = vertices[t03 + 2], v1_x = vertices[t13], v1_y = vertices[t13 + 1], v1_z = vertices[t13 + 2],
142
+ v2_x = vertices[t23], v2_y = vertices[t23 + 1], v2_z = vertices[t23 + 2], vv0_x = v1_x - v0_x,
143
+ vv0_y = v1_y - v0_y, vv0_z = v1_z - v0_z, vv1_x = v2_x - v0_x, vv1_y = v2_y - v0_y, vv1_z = v2_z - v0_z,
144
+ n_x = vv0_y * vv1_z - vv0_z * vv1_y, n_y = vv0_z * vv1_x - vv0_x * vv1_z,
119
145
  n_z = vv0_x * vv1_y - vv0_y * vv1_x;
120
146
 
121
147
  let l = Math.sqrt(n_x * n_x + n_y * n_y + n_z * n_z);
@@ -142,9 +168,7 @@ class Object3d {
142
168
 
143
169
  static createSphere(lonBands = 16, latBands = 16, radius = 1.0, offsetX = 0, offsetY = 0, offsetZ = 0) {
144
170
 
145
- let vertices = [],
146
- indexes = [],
147
- normals = [];
171
+ let vertices = [], indices = [], normals = [];
148
172
 
149
173
  for (let latNumber = 0; latNumber <= latBands; latNumber++) {
150
174
  var theta = latNumber * Math.PI / latBands;
@@ -176,31 +200,26 @@ class Object3d {
176
200
  var first = (latNumber * (lonBands + 1)) + longNumber;
177
201
  var second = first + lonBands + 1;
178
202
 
179
- indexes.push(first);
180
- indexes.push(first + 1);
181
- indexes.push(second);
203
+ indices.push(first);
204
+ indices.push(first + 1);
205
+ indices.push(second);
182
206
 
183
- indexes.push(second);
184
- indexes.push(first + 1);
185
- indexes.push(second + 1);
207
+ indices.push(second);
208
+ indices.push(first + 1);
209
+ indices.push(second + 1);
186
210
  }
187
211
  }
188
212
 
189
213
  return new Object3d({
190
- 'vertices': vertices,
191
- 'normals': normals,
192
- 'indexes': indexes
214
+ 'vertices': vertices, 'normals': normals, 'indices': indices
193
215
  });
194
216
  }
195
217
 
196
218
  static createDisc(radius = 1.0, height = 0.0, radialSegments = 8, isTop = true, startIndex = 0, offsetX = 0, offsetY, offsetZ = 0) {
197
219
 
198
- let vertices = [],
199
- indexes = [],
200
- normals = [];
220
+ let vertices = [], indices = [], normals = [];
201
221
 
202
- let thetaStart = 0.0,
203
- thetaLength = Math.PI * 2;
222
+ let thetaStart = 0.0, thetaLength = Math.PI * 2;
204
223
 
205
224
  let sign = (isTop === true) ? 1.0 : -1.0;
206
225
 
@@ -231,30 +250,24 @@ class Object3d {
231
250
  }
232
251
 
233
252
  for (let x = 0; x < radialSegments; x++) {
234
- let c = centerIndexStart + x,
235
- i = centerIndexEnd + x;
253
+ let c = centerIndexStart + x, i = centerIndexEnd + x;
236
254
  if (isTop === true) {
237
- indexes.push(i, i + 1, c);
255
+ indices.push(i, i + 1, c);
238
256
  } else {
239
- indexes.push(i + 1, i, c);
257
+ indices.push(i + 1, i, c);
240
258
  }
241
259
  }
242
260
 
243
261
  return new Object3d({
244
- 'vertices': vertices,
245
- 'normals': normals,
246
- 'indexes': indexes
262
+ 'vertices': vertices, 'normals': normals, 'indices': indices
247
263
  });
248
264
  }
249
265
 
250
266
  static createCylinder(radiusTop = 1.0, radiusBottom = 1.0, height = 1.0, radialSegments = 32, heightSegments = 1.0, isTop = true, isBottom = true, offsetX = 0, offsetY = 0, offsetZ = 0) {
251
267
 
252
- let vertices = [],
253
- indexes = [],
254
- normals = [];
268
+ let vertices = [], indices = [], normals = [];
255
269
 
256
- let thetaStart = 0.0,
257
- thetaLength = Math.PI * 2;
270
+ let thetaStart = 0.0, thetaLength = Math.PI * 2;
258
271
 
259
272
  let index = 0;
260
273
  let indexArray = [];
@@ -277,8 +290,7 @@ class Object3d {
277
290
 
278
291
  let theta = u * thetaLength + thetaStart;
279
292
 
280
- let sinTheta = Math.sin(theta),
281
- cosTheta = Math.cos(theta);
293
+ let sinTheta = Math.sin(theta), cosTheta = Math.cos(theta);
282
294
 
283
295
  vertices.push(radius * sinTheta + offsetX, -v * height + height + offsetY, radius * cosTheta + offsetZ);
284
296
 
@@ -295,13 +307,11 @@ class Object3d {
295
307
  for (let x = 0; x < radialSegments; x++) {
296
308
  for (let y = 0; y < heightSegments; y++) {
297
309
 
298
- let a = indexArray[y][x],
299
- b = indexArray[y + 1][x],
300
- c = indexArray[y + 1][x + 1],
310
+ let a = indexArray[y][x], b = indexArray[y + 1][x], c = indexArray[y + 1][x + 1],
301
311
  d = indexArray[y][x + 1];
302
312
 
303
- indexes.push(a, b, d);
304
- indexes.push(b, c, d);
313
+ indices.push(a, b, d);
314
+ indices.push(b, c, d);
305
315
  }
306
316
  }
307
317
 
@@ -309,107 +319,56 @@ class Object3d {
309
319
  let cap = Object3d.createDisc(radiusTop, height, radialSegments, true, index, offsetX, offsetY, offsetZ);
310
320
  vertices.push(...cap.vertices);
311
321
  normals.push(...cap.normals);
312
- indexes.push(...cap.indexes);
322
+ indices.push(...cap.indices);
313
323
  }
314
324
 
315
325
  if (radiusBottom !== 0.0 && isBottom) {
316
326
  let cap = Object3d.createDisc(radiusBottom, 0, radialSegments, false, index + (isTop ? (1 + 2 * radialSegments) : 0), offsetX, offsetY, offsetZ);
317
327
  vertices.push(...cap.vertices);
318
328
  normals.push(...cap.normals);
319
- indexes.push(...cap.indexes);
329
+ indices.push(...cap.indices);
320
330
  }
321
331
 
322
332
  return new Object3d({
323
- 'vertices': vertices,
324
- 'normals': normals,
325
- 'indexes': indexes
333
+ 'vertices': vertices, 'normals': normals, 'indices': indices
326
334
  });
327
335
  }
328
336
 
329
337
  static createCube(length = 1, height = 1, depth = 1, xOffset = 0, yOffset = 0, zOffset = 0) {
330
- let l = length * 0.5 + xOffset,
331
- h = height * 0.5 + yOffset,
332
- d = depth * 0.5 + zOffset;
338
+ let l = length * 0.5 + xOffset, h = height * 0.5 + yOffset, d = depth * 0.5 + zOffset;
333
339
 
334
340
  return new Object3d({
335
- vertices: [
336
- //bottom
337
- -l, -h, d,
338
- l, -h, -d,
339
- l, -h, d,
340
- -l, -h, d,
341
- -l, -h, -d,
342
- l, -h, -d,
341
+ vertices: [//bottom
342
+ -l, -h, d, l, -h, -d, l, -h, d, -l, -h, d, -l, -h, -d, l, -h, -d,
343
343
 
344
344
  //top
345
- -l, h, d,
346
- l, h, d,
347
- l, h, -d,
348
- -l, h, d,
349
- l, h, -d,
350
- -l, h, -d,
345
+ -l, h, d, l, h, d, l, h, -d, -l, h, d, l, h, -d, -l, h, -d,
351
346
 
352
347
  //front
353
- -l, -h, d,
354
- l, -h, d,
355
- -l, h, d,
356
- -l, h, d,
357
- l, -h, d,
358
- l, h, d,
348
+ -l, -h, d, l, -h, d, -l, h, d, -l, h, d, l, -h, d, l, h, d,
359
349
 
360
350
  //back
361
- -l, -h, -d,
362
- -l, h, -d,
363
- l, -h, -d,
364
- -l, h, -d,
365
- l, h, -d,
366
- l, -h, -d,
351
+ -l, -h, -d, -l, h, -d, l, -h, -d, -l, h, -d, l, h, -d, l, -h, -d,
367
352
 
368
353
  //left
369
- l, -h, d,
370
- l, -h, -d,
371
- l, h, d,
372
- l, h, d,
373
- l, -h, -d,
374
- l, h, -d,
354
+ l, -h, d, l, -h, -d, l, h, d, l, h, d, l, -h, -d, l, h, -d,
375
355
 
376
356
  //right
377
- -l, -h, d,
378
- -l, h, d,
379
- -l, -h, -d,
380
- -l, h, d,
381
- -l, h, -d,
382
- -l, -h, -d
383
- ]
357
+ -l, -h, d, -l, h, d, -l, -h, -d, -l, h, d, -l, h, -d, -l, -h, -d]
384
358
  });
385
359
  }
386
360
 
387
361
  static createArrow(back = 0.0, height = 2.1, front = -15) {
388
362
  return new Object3d({
389
- vertices: [
390
- 0, height, 0,
391
- 7, 0, 6,
392
- 0, 0, front,
393
-
394
- 0, 0, back,
395
- 7, 0, 6,
396
- 0, height, 0,
397
-
398
- -7, 0, 6,
399
- 0, 0, back,
400
- 0, height, 0,
401
-
402
- -7, 0, 6,
403
- 0, height, 0,
404
- 0, 0, front,
405
-
406
- -7, 0, 6,
407
- 0, 0, front,
408
- 0, 0, back,
409
- 0, 0, back,
410
- 0, 0, front,
411
- 7, 0, 6
412
- ]
363
+ vertices: [0, height, 0, 7, 0, 6, 0, 0, front,
364
+
365
+ 0, 0, back, 7, 0, 6, 0, height, 0,
366
+
367
+ -7, 0, 6, 0, 0, back, 0, height, 0,
368
+
369
+ -7, 0, 6, 0, height, 0, 0, 0, front,
370
+
371
+ -7, 0, 6, 0, 0, front, 0, 0, back, 0, 0, back, 0, 0, front, 7, 0, 6]
413
372
  });
414
373
  }
415
374
  }
@@ -15,7 +15,7 @@ import { Mat4 } from "../math/Mat4.js";
15
15
  * @param {Renderer} [renderer] - Renderer uses the camera instance.
16
16
  * @param {Object} [options] - Camera options:
17
17
  * @param {Object} [options.name] - Camera name.
18
- * @param {number} [options.viewAngle=38] - Camera angle of view. Default is 30.0
18
+ * @param {number} [options.viewAngle=47] - Camera angle of view. Default is 47.0
19
19
  * @param {number} [options.near=1] - Camera near plane distance. Default is 1.0
20
20
  * @param {number} [options.far=og.math.MAX] - Camera far plane distance. Deafult is og.math.MAX
21
21
  * @param {Vec3} [options.eye=[0,0,0]] - Camera eye position. Default (0,0,0)
@@ -77,21 +77,21 @@ class Camera {
77
77
  * @protected
78
78
  * @type {Number}
79
79
  */
80
- this._viewAngle = options.viewAngle || 38.0;
80
+ this._viewAngle = options.viewAngle || 47.0;
81
81
 
82
82
  /**
83
- * Camera normal matrix.
83
+ * Camera view matrix.
84
84
  * @protected
85
- * @type {Mat3}
85
+ * @type {Mat4}
86
86
  */
87
- this._normalMatrix = new Mat3();
87
+ this._viewMatrix = new Mat4();
88
88
 
89
89
  /**
90
- * Camera view matrix.
90
+ * Camera normal matrix.
91
91
  * @protected
92
- * @type {Mat4}
92
+ * @type {Mat3}
93
93
  */
94
- this._viewMatrix = new Mat4();
94
+ this._normalMatrix = new Mat3();
95
95
 
96
96
  /**
97
97
  * Camera right vector.
@@ -119,7 +119,7 @@ class Camera {
119
119
  this._pv = this._u.clone();
120
120
  this._pn = this._b.clone();
121
121
  this._peye = this.eye.clone();
122
- this.isMoved = false;
122
+ this.isMoving = false;
123
123
 
124
124
  this._tanViewAngle_hrad = 0.0;
125
125
  this._tanViewAngle_hradOneByHeight = 0.0;
@@ -167,7 +167,9 @@ class Camera {
167
167
 
168
168
  this.FARTHEST_FRUSTUM_INDEX = this.frustums.length - 1;
169
169
 
170
- this._currentFrustum = 0;
170
+ this.currentFrustumIndex = 0;
171
+
172
+ this.isFirstPass = false;
171
173
 
172
174
  renderer && this._init(options);
173
175
  }
@@ -179,12 +181,12 @@ class Camera {
179
181
  eye = this.eye;
180
182
 
181
183
  if (this._peye.equal(eye) && this._pu.equal(u) && this._pv.equal(v) && this._pn.equal(n)) {
182
- if (this.isMoved) {
184
+ if (this.isMoving) {
183
185
  this.events.dispatch(this.events.moveend, this);
184
186
  }
185
- this.isMoved = false;
187
+ this.isMoving = false;
186
188
  } else {
187
- this.isMoved = true;
189
+ this.isMoving = true;
188
190
  }
189
191
 
190
192
  this._pu.copy(u);
@@ -198,7 +200,7 @@ class Camera {
198
200
  * @public
199
201
  * @param {Renderer} renderer - OpenGlobus renderer object.
200
202
  * @param {Object} [options] - Camera options:
201
- * @param {number} [options.viewAngle] - Camera angle of view. Default is 30.0
203
+ * @param {number} [options.viewAngle] - Camera angle of view.
202
204
  * @param {number} [options.near] - Camera near plane distance. Default is 1.0
203
205
  * @param {number} [options.far] - Camera far plane distance. Deafult is og.math.MAX
204
206
  * @param {Vec3} [options.eye] - Camera eye position. Default (0,0,0)
@@ -271,7 +273,8 @@ class Camera {
271
273
  1.0
272
274
  ]);
273
275
 
274
- this._normalMatrix = this._viewMatrix.toMatrix3(); // this._viewMatrix.toInverseMatrix3().transposeTo();
276
+ // do not cleanup, someday it will be using
277
+ //this._normalMatrix = this._viewMatrix.toMatrix3(); // this._viewMatrix.toInverseMatrix3().transposeTo();
275
278
 
276
279
  for (let i = 0, len = this.frustums.length; i < len; i++) {
277
280
  this.frustums[i].setViewMatrix(this._viewMatrix);
@@ -321,7 +324,7 @@ class Camera {
321
324
  this._tanViewAngle_hradOneByHeight =
322
325
  this._tanViewAngle_hrad * this.renderer.handler._oneByHeight;
323
326
  var c = this.renderer.handler.canvas;
324
- this._projSizeConst = Math.min(c.clientWidth < 256 ? 256 : c.clientWidth, c.clientHeight < 256 ? 256 : c.clientHeight) / (angle * math.RADIANS);
327
+ this._projSizeConst = Math.min(c.clientWidth < 512 ? 512 : c.clientWidth, c.clientHeight < 512 ? 512 : c.clientHeight) / (angle * math.RADIANS);
325
328
  for (let i = 0, len = this.frustums.length; i < len; i++) {
326
329
  this.frustums[i].setProjectionMatrix(
327
330
  angle,
@@ -557,33 +560,34 @@ class Camera {
557
560
  }
558
561
 
559
562
  /**
560
- * Returns normal matrix.
563
+ * Returns model matrix.
561
564
  * @public
562
- * @returns {Mat3} - Normal matrix.
565
+ * @returns {Mat4} - View matrix.
563
566
  */
564
- getNormalMatrix() {
565
- return this._normalMatrix._m;
567
+ getViewMatrix() {
568
+ return this._viewMatrix._m;
566
569
  }
567
570
 
568
571
  /**
569
- * Returns model matrix.
572
+ * Returns normal matrix.
570
573
  * @public
571
- * @returns {Mat4} - View matrix.
574
+ * @returns {Mat3} - Normal matrix.
572
575
  */
573
- getViewMatrix() {
574
- return this._viewMatrix._m;
576
+ getNormalMatrix() {
577
+ return this._normalMatrix._m;
575
578
  }
576
579
 
577
580
  setCurrentFrustum(k) {
578
- this._currentFrustum = k;
581
+ this.currentFrustumIndex = k;
582
+ this.isFirstPass = k === this.FARTHEST_FRUSTUM_INDEX;
579
583
  }
580
584
 
581
585
  getCurrentFrustum() {
582
- return this._currentFrustum;
586
+ return this.currentFrustumIndex;
583
587
  }
584
588
 
585
589
  get frustum() {
586
- return this.frustums[this._currentFrustum];
590
+ return this.frustums[this.currentFrustumIndex];
587
591
  }
588
592
 
589
593
  /**
@@ -21,7 +21,7 @@ import { Mat4 } from "../math/Mat4.js";
21
21
  * @param {RenderNode} planet - Planet render node.
22
22
  * @param {Object} [options] - Planet camera options:
23
23
  * @param {Object} [options.name] - Camera name.
24
- * @param {number} [options.viewAngle=37] - Camera angle of view. Default is 35.0
24
+ * @param {number} [options.viewAngle] - Camera angle of view.
25
25
  * @param {number} [options.near] - Camera near plane distance. Default is 1.0
26
26
  * @param {number} [options.far] - Camera far plane distance. Deafult is og.math.MAX
27
27
  * @param {number} [options.minAltitude] - Minimal altitude for the camera. Deafult is 5
@@ -37,14 +37,14 @@ class PlanetCamera extends Camera {
37
37
  */
38
38
  constructor(planet, options) {
39
39
  super(planet.renderer, {
40
- frustums: [
41
- [1, 100 + 0.075],
42
- [100, 1000 + 0.075],
43
- [1000, 1e6 + 10000],
44
- [1e6, 1e9]
45
- ], //[[1, 1e3 + 100], [1e3, 1e6 + 10000], [1e6, 1e9]]*/
46
- ...options
47
- }
40
+ frustums: [
41
+ [1, 100 + 0.075],
42
+ [100, 1000 + 0.075],
43
+ [1000, 1e6 + 10000],
44
+ [1e6, 1e9]
45
+ ], //[[1, 1e3 + 100], [1e3, 1e6 + 10000], [1e6, 1e9]]*/
46
+ ...options
47
+ }
48
48
  );
49
49
  /**
50
50
  * Assigned camera's planet.
@@ -120,6 +120,11 @@ class PlanetCamera extends Camera {
120
120
  this._numFrames = 50;
121
121
  this._completeCallback = null;
122
122
  this._flying = false;
123
+ this._checkTerrainCollision = true;
124
+ }
125
+
126
+ setTerrainCollisionActivity(isActive) {
127
+ this._checkTerrainCollision = isActive;
123
128
  }
124
129
 
125
130
  /**
@@ -363,7 +368,10 @@ class PlanetCamera extends Camera {
363
368
  * @param {cameraCallback} [startCallback] - Callback that calls befor the flying begins.
364
369
  * @param [frameCallback]
365
370
  */
366
- flyCartesian(cartesian, look = Vec3.ZERO, up = Vec3.UP, ampl = 1.0, completeCallback = () => { }, startCallback = () => { }, frameCallback = () => { }) {
371
+ flyCartesian(cartesian, look = Vec3.ZERO, up = Vec3.UP, ampl = 1.0, completeCallback = () => {
372
+ }, startCallback = () => {
373
+ }, frameCallback = () => {
374
+ }) {
367
375
 
368
376
  this.stopFlying();
369
377
 
@@ -620,7 +628,7 @@ class PlanetCamera extends Camera {
620
628
  this._insideSegmentPosition,
621
629
  this._terrainPoint
622
630
  );
623
- if (this._terrainAltitude < this.minAltitude) {
631
+ if (this._terrainAltitude < this.minAltitude && this._checkTerrainCollision) {
624
632
  this.setAltitude(this.minAltitude);
625
633
  }
626
634
  }
@@ -634,9 +642,9 @@ class PlanetCamera extends Camera {
634
642
  getHeading() {
635
643
  let u = this.eye.normal();
636
644
  let f = Vec3.proj_b_to_plane(
637
- this.slope >= 0.97 ? this.getUp() : this.getForward(),
638
- u
639
- ).normalize(),
645
+ this.slope >= 0.97 ? this.getUp() : this.getForward(),
646
+ u
647
+ ).normalize(),
640
648
  n = Vec3.proj_b_to_plane(Vec3.UP, u).normalize();
641
649
  let res = Math.sign(u.dot(f.cross(n))) * Math.acos(f.dot(n)) * math.DEGREES;
642
650
  if (res < 0.0) {