@openglobus/og 0.13.5 → 0.13.8

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 (78) hide show
  1. package/css/og.css +66 -25
  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 +1 -1
  8. package/src/og/Events.js +188 -188
  9. package/src/og/Extent.js +1 -9
  10. package/src/og/Globe.js +1 -0
  11. package/src/og/Object3d.js +384 -0
  12. package/src/og/arial.js +1705 -1703
  13. package/src/og/camera/Camera.js +640 -640
  14. package/src/og/control/DebugInfo.js +15 -4
  15. package/src/og/control/EarthCoordinates.js +151 -160
  16. package/src/og/control/KeyboardNavigation.js +48 -2
  17. package/src/og/control/LayerAnimation.js +115 -0
  18. package/src/og/control/MouseNavigation.js +460 -460
  19. package/src/og/control/Sun.js +170 -170
  20. package/src/og/control/TouchNavigation.js +13 -13
  21. package/src/og/control/ZoomControl.js +1 -3
  22. package/src/og/control/index.js +3 -1
  23. package/src/og/control/ruler/Ruler.js +43 -0
  24. package/src/og/control/ruler/RulerScene.js +370 -0
  25. package/src/og/control/visibleExtent/Segment.js +1 -4
  26. package/src/og/ellipsoid/Ellipsoid.js +20 -1
  27. package/src/og/entity/Entity.js +1 -1
  28. package/src/og/entity/GeoObject.js +1 -1
  29. package/src/og/entity/LabelHandler.js +3 -2
  30. package/src/og/input/input.js +7 -1
  31. package/src/og/layer/CanvasTiles.js +8 -8
  32. package/src/og/layer/KML.js +181 -12
  33. package/src/og/layer/Layer.js +27 -42
  34. package/src/og/layer/Vector.js +80 -14
  35. package/src/og/layer/XYZ.js +8 -2
  36. package/src/og/math/Vec3.js +1 -1
  37. package/src/og/math.js +4 -4
  38. package/src/og/quadTree/Node.js +2 -1
  39. package/src/og/renderer/Renderer.js +1 -2
  40. package/src/og/renderer/RendererEvents.js +17 -3
  41. package/src/og/res/images.js +0 -2
  42. package/src/og/scene/Planet.js +92 -32
  43. package/src/og/segment/Segment.js +1 -8
  44. package/src/og/shaders/label.js +30 -42
  45. package/src/og/terrain/EmptyTerrain.js +164 -146
  46. package/src/og/terrain/Geoid.js +246 -241
  47. package/src/og/terrain/GlobusTerrain.js +23 -24
  48. package/src/og/terrain/MapboxTerrain.js +292 -294
  49. package/src/og/utils/FontAtlas.js +1 -2
  50. package/src/og/utils/Loader.js +160 -112
  51. package/src/og/utils/PlainSegmentWorker.js +38 -26
  52. package/src/og/utils/VectorTileCreator.js +1 -1
  53. package/src/og/utils/units.js +78 -0
  54. package/src/og/webgl/ProgramController.js +143 -143
  55. package/types/Object3d.d.ts +21 -0
  56. package/types/arial.d.ts +1 -0
  57. package/types/control/EarthCoordinates.d.ts +27 -30
  58. package/types/control/KeyboardNavigation.d.ts +3 -0
  59. package/types/control/Sun.d.ts +1 -1
  60. package/types/control/index.d.ts +2 -1
  61. package/types/control/ruler/Ruler.d.ts +13 -0
  62. package/types/control/ruler/RulerScene.d.ts +48 -0
  63. package/types/ellipsoid/Ellipsoid.d.ts +8 -0
  64. package/types/input/input.d.ts +6 -0
  65. package/types/layer/KML.d.ts +26 -1
  66. package/types/layer/Layer.d.ts +23 -31
  67. package/types/layer/Vector.d.ts +2 -0
  68. package/types/layer/XYZ.d.ts +1 -0
  69. package/types/math.d.ts +1 -1
  70. package/types/renderer/RendererEvents.d.ts +2 -0
  71. package/types/res/images.d.ts +0 -1
  72. package/types/scene/Planet.d.ts +12 -3
  73. package/types/terrain/EmptyTerrain.d.ts +4 -1
  74. package/types/terrain/Geoid.d.ts +1 -10
  75. package/types/terrain/GlobusTerrain.d.ts +0 -2
  76. package/types/terrain/MapboxTerrain.d.ts +1 -1
  77. package/types/utils/Loader.d.ts +4 -0
  78. package/types/utils/units.d.ts +20 -0
@@ -0,0 +1,384 @@
1
+ /* eslint-disable no-param-reassign */
2
+ 'use strict';
3
+
4
+ import { htmlColorToFloat32Array } from './utils/shared.js';
5
+ import { Vec3 } from './math/Vec3.js';
6
+
7
+ function getColor(color) {
8
+ if (color instanceof Array) {
9
+ return color;
10
+ } else if (typeof color === 'string') {
11
+ return htmlColorToFloat32Array(color);
12
+ }
13
+ return [1.0, 1.0, 1.0, 1.0];
14
+ }
15
+
16
+ class Object3d {
17
+ constructor(data) {
18
+
19
+ this._name = data.name || "noname";
20
+ this._vertices = data.vertices || [];
21
+ this._texCoords = [];
22
+
23
+ this.color = getColor(data.color);
24
+
25
+ if (data.scale) {
26
+ Object3d.scale(this._vertices, data.scale);
27
+ }
28
+
29
+ if (data.indexes) {
30
+ this._indexes = data.indexes || [];
31
+ this._normals = data.normals || [];
32
+ } else {
33
+ this._normals = Object3d.getNormals(this._vertices);
34
+ }
35
+ }
36
+
37
+ get name() {
38
+ return this._name;
39
+ }
40
+
41
+ get vertices() {
42
+ return this._vertices;
43
+ }
44
+
45
+ get normals() {
46
+ return this._normals;
47
+ }
48
+
49
+ get indexes() {
50
+ return this._indexes;
51
+ }
52
+
53
+ static scale(vertices, s) {
54
+ for (let i = 0; i < vertices.length; i++) {
55
+ vertices[i] *= s;
56
+ }
57
+ }
58
+
59
+ static centroid(vertices) {
60
+ let minX = 1000.0, minY = 1000.0, minZ = 1000.0,
61
+ maxX = -1000.0, maxY = -1000.0, maxZ = -1000.0;
62
+
63
+ for (let i = 0; i < vertices.length; i += 3) {
64
+ let x = vertices[i],
65
+ y = vertices[i + 1],
66
+ z = vertices[i + 2];
67
+ if (x < minX) minX = x;
68
+ if (y < minY) minY = y;
69
+ if (z < minZ) minZ = z;
70
+ if (x > maxX) maxX = x;
71
+ if (y > maxY) maxY = y;
72
+ if (z > maxZ) maxZ = z;
73
+ }
74
+
75
+ return [
76
+ minX + (maxX - minX) * 0.5,
77
+ minY + (maxY - minY) * 0.5,
78
+ minZ + (maxZ - minZ) * 0.5
79
+ ];
80
+ }
81
+
82
+ static translate(vertices, v) {
83
+ for (let i = 0; i < vertices.length; i += 3) {
84
+ vertices[i] -= v[0];
85
+ vertices[i + 1] -= v[1];
86
+ vertices[i + 2] -= v[2];
87
+ }
88
+ }
89
+
90
+ static getNormals(vertices) {
91
+ let res = new Array(vertices.length);
92
+
93
+ for (var i = 0; i < vertices.length; i += 9) {
94
+
95
+ let t03 = i,
96
+ t13 = i + 3,
97
+ t23 = i + 6,
98
+ v0_x = vertices[t03],
99
+ v0_y = vertices[t03 + 1],
100
+ v0_z = vertices[t03 + 2],
101
+ v1_x = vertices[t13],
102
+ v1_y = vertices[t13 + 1],
103
+ v1_z = vertices[t13 + 2],
104
+ v2_x = vertices[t23],
105
+ v2_y = vertices[t23 + 1],
106
+ v2_z = vertices[t23 + 2],
107
+ vv0_x = v1_x - v0_x,
108
+ vv0_y = v1_y - v0_y,
109
+ vv0_z = v1_z - v0_z,
110
+ vv1_x = v2_x - v0_x,
111
+ vv1_y = v2_y - v0_y,
112
+ vv1_z = v2_z - v0_z,
113
+ n_x = vv0_y * vv1_z - vv0_z * vv1_y,
114
+ n_y = vv0_z * vv1_x - vv0_x * vv1_z,
115
+ n_z = vv0_x * vv1_y - vv0_y * vv1_x;
116
+
117
+ let l = Math.sqrt(n_x * n_x + n_y * n_y + n_z * n_z);
118
+
119
+ n_x /= l;
120
+ n_y /= l;
121
+ n_z /= l;
122
+
123
+ res[t03] = n_x;
124
+ res[t03 + 1] = n_y;
125
+ res[t03 + 2] = n_z;
126
+
127
+ res[t13] = n_x;
128
+ res[t13 + 1] = n_y;
129
+ res[t13 + 2] = n_z;
130
+
131
+ res[t23] = n_x;
132
+ res[t23 + 1] = n_y;
133
+ res[t23 + 2] = n_z;
134
+ }
135
+
136
+ return res;
137
+ }
138
+
139
+ static createSphere(lonBands = 16, latBands = 16, radius = 1.0, offsetX = 0, offsetY = 0, offsetZ = 0) {
140
+
141
+ let vertices = [],
142
+ indexes = [],
143
+ normals = [];
144
+
145
+ for (let latNumber = 0; latNumber <= latBands; latNumber++) {
146
+ var theta = latNumber * Math.PI / latBands;
147
+ var sinTheta = Math.sin(theta);
148
+ var cosTheta = Math.cos(theta);
149
+
150
+ for (let longNumber = 0; longNumber <= lonBands; longNumber++) {
151
+ var phi = longNumber * 2 * Math.PI / lonBands;
152
+ var sinPhi = Math.sin(phi);
153
+ var cosPhi = Math.cos(phi);
154
+ var x = cosPhi * sinTheta + offsetX;
155
+ var y = cosTheta + offsetY;
156
+ var z = sinPhi * sinTheta + offsetZ;
157
+ //var u = 1 - (longNumber / lonBands);
158
+ //var v = latNumber / latBands;
159
+ normals.push(x);
160
+ normals.push(y);
161
+ normals.push(z);
162
+ //texCoords.push(u);
163
+ //texCoords.push(v);
164
+ vertices.push(radius * x);
165
+ vertices.push(radius * y);
166
+ vertices.push(radius * z);
167
+ }
168
+ }
169
+
170
+ for (let latNumber = 0; latNumber < latBands; latNumber++) {
171
+ for (let longNumber = 0; longNumber < lonBands; longNumber++) {
172
+ var first = (latNumber * (lonBands + 1)) + longNumber;
173
+ var second = first + lonBands + 1;
174
+
175
+ indexes.push(first);
176
+ indexes.push(first + 1);
177
+ indexes.push(second);
178
+
179
+ indexes.push(second);
180
+ indexes.push(first + 1);
181
+ indexes.push(second + 1);
182
+ }
183
+ }
184
+
185
+ return new Object3d({
186
+ 'vertices': vertices,
187
+ 'normals': normals,
188
+ 'indexes': indexes
189
+ });
190
+ }
191
+
192
+ static createDisc(radius = 1.0, height = 0.0, radialSegments = 8, isTop = true, startIndex = 0, offsetX = 0, offsetY, offsetZ = 0) {
193
+
194
+ let vertices = [],
195
+ indexes = [],
196
+ normals = [];
197
+
198
+ let thetaStart = 0.0,
199
+ thetaLength = Math.PI * 2;
200
+
201
+ let sign = (isTop === true) ? 1.0 : -1.0;
202
+
203
+ let centerIndexStart = startIndex;
204
+
205
+ for (let x = 1; x <= radialSegments; x++) {
206
+ vertices.push(0 + offsetX, height * sign + offsetY, 0 + offsetZ);
207
+ normals.push(0, sign, 0);
208
+ //texCoords.push(0.5, 0.5);
209
+ startIndex++;
210
+ }
211
+
212
+ let centerIndexEnd = startIndex;
213
+
214
+ for (let x = 0; x <= radialSegments; x++) {
215
+
216
+ let u = x / radialSegments;
217
+ let theta = u * thetaLength + thetaStart;
218
+
219
+ let cosTheta = Math.cos(theta);
220
+ let sinTheta = Math.sin(theta);
221
+
222
+ vertices.push(radius * sinTheta + offsetX, height * sign + offsetY, radius * cosTheta + offsetZ);
223
+ normals.push(0, sign, 0);
224
+ //texCoords.push((cosTheta * 0.5) + 0.5, (sinTheta * 0.5 * sign) + 0.5);
225
+
226
+ startIndex++;
227
+ }
228
+
229
+ for (let x = 0; x < radialSegments; x++) {
230
+ let c = centerIndexStart + x,
231
+ i = centerIndexEnd + x;
232
+ if (isTop === true) {
233
+ indexes.push(i, i + 1, c);
234
+ } else {
235
+ indexes.push(i + 1, i, c);
236
+ }
237
+ }
238
+
239
+ return new Object3d({
240
+ 'vertices': vertices,
241
+ 'normals': normals,
242
+ 'indexes': indexes
243
+ });
244
+ }
245
+
246
+ 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) {
247
+
248
+ let vertices = [],
249
+ indexes = [],
250
+ normals = [];
251
+
252
+ let thetaStart = 0.0,
253
+ thetaLength = Math.PI * 2;
254
+
255
+ let index = 0;
256
+ let indexArray = [];
257
+
258
+ let normal = new Vec3();
259
+
260
+ var slope = (radiusBottom - radiusTop) / height;
261
+
262
+ for (let y = 0; y <= heightSegments; y++) {
263
+
264
+ let indexRow = [];
265
+
266
+ let v = y / heightSegments;
267
+
268
+ let radius = v * (radiusBottom - radiusTop) + radiusTop;
269
+
270
+ for (let x = 0; x <= radialSegments; x++) {
271
+
272
+ let u = x / radialSegments;
273
+
274
+ let theta = u * thetaLength + thetaStart;
275
+
276
+ let sinTheta = Math.sin(theta),
277
+ cosTheta = Math.cos(theta);
278
+
279
+ vertices.push(radius * sinTheta + offsetX, -v * height + height + offsetY, radius * cosTheta + offsetZ);
280
+
281
+ normal.set(sinTheta, slope, cosTheta).normalize();
282
+ normals.push(normal.x, normal.y, normal.z);
283
+
284
+ //texCoords.push(u, 1 - v);
285
+
286
+ indexRow.push(index++);
287
+ }
288
+ indexArray.push(indexRow);
289
+ }
290
+
291
+ for (let x = 0; x < radialSegments; x++) {
292
+ for (let y = 0; y < heightSegments; y++) {
293
+
294
+ let a = indexArray[y][x],
295
+ b = indexArray[y + 1][x],
296
+ c = indexArray[y + 1][x + 1],
297
+ d = indexArray[y][x + 1];
298
+
299
+ indexes.push(a, b, d);
300
+ indexes.push(b, c, d);
301
+ }
302
+ }
303
+
304
+ if (radiusTop !== 0.0 && isTop) {
305
+ let cap = Object3d.createDisc(radiusTop, height, radialSegments, true, index, offsetX, offsetY, offsetZ);
306
+ vertices.push(...cap.vertices);
307
+ normals.push(...cap.normals);
308
+ indexes.push(...cap.indexes);
309
+ }
310
+
311
+ if (radiusBottom !== 0.0 && isBottom) {
312
+ let cap = Object3d.createDisc(radiusBottom, 0, radialSegments, false, index + (isTop ? (1 + 2 * radialSegments) : 0), offsetX, offsetY, offsetZ);
313
+ vertices.push(...cap.vertices);
314
+ normals.push(...cap.normals);
315
+ indexes.push(...cap.indexes);
316
+ }
317
+
318
+ return new Object3d({
319
+ 'vertices': vertices,
320
+ 'normals': normals,
321
+ 'indexes': indexes
322
+ });
323
+ }
324
+
325
+ static createCube(length = 1, height = 1, depth = 1, xOffset = 0, yOffset = 0, zOffset = 0) {
326
+ let l = length * 0.5 + xOffset,
327
+ h = height * 0.5 + yOffset,
328
+ d = depth * 0.5 + zOffset;
329
+
330
+ return new Object3d({
331
+ vertices: [
332
+ //bottom
333
+ -l, -h, d,
334
+ l, -h, -d,
335
+ l, -h, d,
336
+ -l, -h, d,
337
+ -l, -h, -d,
338
+ l, -h, -d,
339
+
340
+ //top
341
+ -l, h, d,
342
+ l, h, d,
343
+ l, h, -d,
344
+ -l, h, d,
345
+ l, h, -d,
346
+ -l, h, -d,
347
+
348
+ //front
349
+ -l, -h, d,
350
+ l, -h, d,
351
+ -l, h, d,
352
+ -l, h, d,
353
+ l, -h, d,
354
+ l, h, d,
355
+
356
+ //back
357
+ -l, -h, -d,
358
+ -l, h, -d,
359
+ l, -h, -d,
360
+ -l, h, -d,
361
+ l, h, -d,
362
+ l, -h, -d,
363
+
364
+ //left
365
+ l, -h, d,
366
+ l, -h, -d,
367
+ l, h, d,
368
+ l, h, d,
369
+ l, -h, -d,
370
+ l, h, -d,
371
+
372
+ //right
373
+ -l, -h, d,
374
+ -l, h, d,
375
+ -l, -h, -d,
376
+ -l, h, d,
377
+ -l, h, -d,
378
+ -l, -h, -d
379
+ ]
380
+ });
381
+ }
382
+ }
383
+
384
+ export { Object3d };