@openglobus/og 0.11.5 → 0.11.6

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 (145) hide show
  1. package/package.json +5 -7
  2. package/src/og/Clock.js +6 -10
  3. package/src/og/Events.js +5 -7
  4. package/src/og/Extent.js +73 -32
  5. package/src/og/ImageCanvas.js +18 -15
  6. package/src/og/LonLat.js +13 -10
  7. package/src/og/Popup.js +18 -17
  8. package/src/og/QueueArray.js +3 -4
  9. package/src/og/Rectangle.js +4 -6
  10. package/src/og/Stack.js +2 -4
  11. package/src/og/ajax.js +20 -14
  12. package/src/og/astro/earth.js +21 -15
  13. package/src/og/bv/Box.js +2 -3
  14. package/src/og/bv/Sphere.js +10 -7
  15. package/src/og/camera/Frustum.js +19 -12
  16. package/src/og/camera/PlanetCamera.js +0 -1
  17. package/src/og/control/CompassButton.js +1 -2
  18. package/src/og/control/Control.js +7 -9
  19. package/src/og/control/DebugInfo.js +0 -1
  20. package/src/og/control/KeyboardNavigation.js +9 -9
  21. package/src/og/control/LayerSwitcher.js +21 -20
  22. package/src/og/control/SegmentBoundVisualization.js +5 -6
  23. package/src/og/control/ShowFps.js +12 -7
  24. package/src/og/control/SimpleNavigation.js +5 -7
  25. package/src/og/control/Sun.js +22 -12
  26. package/src/og/control/ToggleWireframe.js +3 -3
  27. package/src/og/control/TouchNavigation.js +43 -32
  28. package/src/og/control/ZoomControl.js +40 -24
  29. package/src/og/ellipsoid/Ellipsoid.js +148 -56
  30. package/src/og/ellipsoid/wgs84.js +3 -3
  31. package/src/og/entity/BaseBillboard.js +65 -14
  32. package/src/og/entity/Billboard.js +9 -5
  33. package/src/og/entity/BillboardHandler.js +310 -64
  34. package/src/og/entity/Entity.js +39 -1
  35. package/src/og/entity/EntityCollection.js +47 -24
  36. package/src/og/entity/GeoObject.js +228 -0
  37. package/src/og/entity/GeoObjectHandler.js +910 -0
  38. package/src/og/entity/GeometryHandler.js +595 -123
  39. package/src/og/entity/Label.js +53 -18
  40. package/src/og/entity/LabelHandler.js +42 -244
  41. package/src/og/entity/LabelWorker.js +213 -0
  42. package/src/og/entity/Object3d.js +504 -0
  43. package/src/og/entity/PointCloud.js +76 -28
  44. package/src/og/entity/PointCloudHandler.js +5 -5
  45. package/src/og/entity/Ray.js +49 -16
  46. package/src/og/entity/Strip.js +72 -43
  47. package/src/og/entity/StripHandler.js +23 -23
  48. package/src/og/layer/BaseGeoImage.js +50 -19
  49. package/src/og/layer/CanvasTiles.js +16 -16
  50. package/src/og/layer/GeoImage.js +6 -6
  51. package/src/og/layer/KML.js +55 -33
  52. package/src/og/layer/Layer.js +3 -3
  53. package/src/og/layer/Vector.js +94 -48
  54. package/src/og/layer/WMS.js +33 -16
  55. package/src/og/light/LightSource.js +19 -12
  56. package/src/og/math/Mat3.js +24 -12
  57. package/src/og/math/Mat4.js +603 -603
  58. package/src/og/math/Plane.js +19 -18
  59. package/src/og/math/Ray.js +17 -12
  60. package/src/og/math/Vec2.js +24 -14
  61. package/src/og/math/Vec3.js +60 -30
  62. package/src/og/math/coder.js +7 -7
  63. package/src/og/proj/EPSG3857.js +3 -3
  64. package/src/og/proj/EPSG4326.js +3 -3
  65. package/src/og/proj/Proj.js +2 -4
  66. package/src/og/quadTree/Node.js +31 -17
  67. package/src/og/renderer/Renderer.js +23 -6
  68. package/src/og/renderer/RendererEvents.js +1 -1
  69. package/src/og/scene/BaseNode.js +2 -3
  70. package/src/og/scene/Planet.js +2 -2
  71. package/src/og/scene/RenderNode.js +15 -8
  72. package/src/og/shaders/geoObject.js +211 -0
  73. package/src/og/shaders/pointCloud.js +41 -41
  74. package/src/og/shaders/shape.js +12 -18
  75. package/src/og/shaders/skybox.js +36 -36
  76. package/src/og/shapes/BaseShape.js +107 -35
  77. package/src/og/shapes/Icosphere.js +25 -10
  78. package/src/og/shapes/Sphere.js +8 -11
  79. package/src/og/utils/TextureAtlas.js +16 -18
  80. package/src/og/utils/shared.js +1 -1
  81. package/src/og/webgl/Handler.js +68 -49
  82. package/src/og/webgl/Multisample.js +44 -16
  83. package/src/og/webgl/Program.js +78 -33
  84. package/src/og/webgl/callbacks.js +3 -3
  85. package/types/Deferred.d.ts +1 -1
  86. package/types/Events.d.ts +2 -2
  87. package/types/Extent.d.ts +1 -1
  88. package/types/Rectangle.d.ts +1 -1
  89. package/types/ajax.d.ts +1 -1
  90. package/types/bv/Box.d.ts +1 -1
  91. package/types/bv/Sphere.d.ts +1 -1
  92. package/types/camera/Camera.d.ts +5 -5
  93. package/types/camera/Frustum.d.ts +6 -6
  94. package/types/camera/PlanetCamera.d.ts +8 -8
  95. package/types/control/Control.d.ts +1 -1
  96. package/types/control/EarthCoordinates.d.ts +1 -1
  97. package/types/control/Sun.d.ts +1 -1
  98. package/types/entity/BaseBillboard.d.ts +15 -8
  99. package/types/entity/Entity.d.ts +24 -9
  100. package/types/entity/EntityCollection.d.ts +15 -9
  101. package/types/entity/GeoObject.d.ts +111 -0
  102. package/types/entity/GeoObjectHandler.d.ts +77 -0
  103. package/types/entity/Geometry.d.ts +1 -1
  104. package/types/entity/GeometryHandler.d.ts +1 -1
  105. package/types/entity/Label.d.ts +3 -3
  106. package/types/entity/LabelHandler.d.ts +2 -0
  107. package/types/entity/LabelWorker.d.ts +9 -0
  108. package/types/entity/PointCloud.d.ts +1 -1
  109. package/types/entity/Polyline.d.ts +5 -5
  110. package/types/entity/Ray.d.ts +1 -1
  111. package/types/entity/Strip.d.ts +1 -1
  112. package/types/layer/BaseGeoImage.d.ts +3 -3
  113. package/types/layer/CanvasTiles.d.ts +5 -5
  114. package/types/layer/GeoImage.d.ts +1 -1
  115. package/types/layer/GeoVideo.d.ts +1 -1
  116. package/types/layer/Layer.d.ts +5 -5
  117. package/types/layer/Vector.d.ts +9 -9
  118. package/types/layer/XYZ.d.ts +3 -3
  119. package/types/light/LightSource.d.ts +7 -7
  120. package/types/math/Plane.d.ts +1 -1
  121. package/types/math/Ray.d.ts +1 -1
  122. package/types/math/Vec2.d.ts +34 -34
  123. package/types/math/Vec3.d.ts +1 -1
  124. package/types/math/Vec4.d.ts +1 -1
  125. package/types/math/coder.d.ts +1 -1
  126. package/types/math.d.ts +1 -1
  127. package/types/proj/Proj.d.ts +2 -2
  128. package/types/quadTree/Node.d.ts +1 -1
  129. package/types/renderer/Renderer.d.ts +12 -10
  130. package/types/renderer/RendererEvents.d.ts +1 -1
  131. package/types/scene/BaseNode.d.ts +4 -4
  132. package/types/scene/Planet.d.ts +40 -40
  133. package/types/scene/RenderNode.d.ts +9 -9
  134. package/types/segment/Segment.d.ts +9 -9
  135. package/types/shaders/geoObject.d.ts +3 -0
  136. package/types/shapes/BaseShape.d.ts +5 -5
  137. package/types/terrain/EmptyTerrain.d.ts +2 -2
  138. package/types/terrain/GlobusTerrain.d.ts +4 -4
  139. package/types/utils/TextureAtlas.d.ts +4 -4
  140. package/types/utils/shared.d.ts +9 -9
  141. package/types/webgl/Framebuffer.d.ts +1 -1
  142. package/types/webgl/Handler.d.ts +16 -7
  143. package/types/webgl/Multisample.d.ts +2 -2
  144. package/types/webgl/Program.d.ts +6 -0
  145. package/types/webgl/ProgramController.d.ts +1 -1
@@ -0,0 +1,504 @@
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
+ this._name = data.name || "noname";
19
+ this._vertices = data.vertices || [];
20
+ this._texCoords = [];
21
+
22
+ this.color = getColor(data.color);
23
+
24
+ if (data.scale) {
25
+ Object3d.scale(this._vertices, data.scale);
26
+ }
27
+
28
+ if (data.indexes) {
29
+ this._indexes = data.indexes || [];
30
+ this._normals = data.normals || [];
31
+ } else {
32
+ this._normals = Object3d.getNormals(this._vertices);
33
+ }
34
+ }
35
+
36
+ get name() {
37
+ return this._name;
38
+ }
39
+
40
+ get vertices() {
41
+ return this._vertices;
42
+ }
43
+
44
+ get normals() {
45
+ return this._normals;
46
+ }
47
+
48
+ get indexes() {
49
+ return this._indexes;
50
+ }
51
+
52
+ get indices() {
53
+ return this._indexes;
54
+ }
55
+
56
+ static scale(vertices, s) {
57
+ for (let i = 0; i < vertices.length; i++) {
58
+ vertices[i] *= s;
59
+ }
60
+ }
61
+
62
+ static centroid(vertices) {
63
+ let minX = 1000.0,
64
+ minY = 1000.0,
65
+ minZ = 1000.0,
66
+ maxX = -1000.0,
67
+ maxY = -1000.0,
68
+ maxZ = -1000.0;
69
+
70
+ for (let i = 0; i < vertices.length; i += 3) {
71
+ let x = vertices[i],
72
+ y = vertices[i + 1],
73
+ z = vertices[i + 2];
74
+ if (x < minX) minX = x;
75
+ if (y < minY) minY = y;
76
+ if (z < minZ) minZ = z;
77
+ if (x > maxX) maxX = x;
78
+ if (y > maxY) maxY = y;
79
+ if (z > maxZ) maxZ = z;
80
+ }
81
+
82
+ return [minX + (maxX - minX) * 0.5, minY + (maxY - minY) * 0.5, minZ + (maxZ - minZ) * 0.5];
83
+ }
84
+
85
+ static translate(vertices, v) {
86
+ for (let i = 0; i < vertices.length; i += 3) {
87
+ vertices[i] -= v[0];
88
+ vertices[i + 1] -= v[1];
89
+ vertices[i + 2] -= v[2];
90
+ }
91
+ }
92
+
93
+ static getNormals(vertices) {
94
+ let res = new Array(vertices.length);
95
+
96
+ for (var i = 0; i < vertices.length; i += 9) {
97
+ let t03 = i,
98
+ t13 = i + 3,
99
+ t23 = i + 6,
100
+ v0_x = vertices[t03],
101
+ v0_y = vertices[t03 + 1],
102
+ v0_z = vertices[t03 + 2],
103
+ v1_x = vertices[t13],
104
+ v1_y = vertices[t13 + 1],
105
+ v1_z = vertices[t13 + 2],
106
+ v2_x = vertices[t23],
107
+ v2_y = vertices[t23 + 1],
108
+ v2_z = vertices[t23 + 2],
109
+ vv0_x = v1_x - v0_x,
110
+ vv0_y = v1_y - v0_y,
111
+ vv0_z = v1_z - v0_z,
112
+ vv1_x = v2_x - v0_x,
113
+ vv1_y = v2_y - v0_y,
114
+ vv1_z = v2_z - v0_z,
115
+ n_x = vv0_y * vv1_z - vv0_z * vv1_y,
116
+ n_y = vv0_z * vv1_x - vv0_x * vv1_z,
117
+ n_z = vv0_x * vv1_y - vv0_y * vv1_x;
118
+
119
+ let l = Math.sqrt(n_x * n_x + n_y * n_y + n_z * n_z);
120
+
121
+ n_x /= l;
122
+ n_y /= l;
123
+ n_z /= l;
124
+
125
+ res[t03] = n_x;
126
+ res[t03 + 1] = n_y;
127
+ res[t03 + 2] = n_z;
128
+
129
+ res[t13] = n_x;
130
+ res[t13 + 1] = n_y;
131
+ res[t13 + 2] = n_z;
132
+
133
+ res[t23] = n_x;
134
+ res[t23 + 1] = n_y;
135
+ res[t23 + 2] = n_z;
136
+ }
137
+
138
+ return res;
139
+ }
140
+
141
+ static createSphere(
142
+ lonBands = 16,
143
+ latBands = 16,
144
+ radius = 1.0,
145
+ offsetX = 0,
146
+ offsetY = 0,
147
+ offsetZ = 0
148
+ ) {
149
+ let vertices = [],
150
+ indexes = [],
151
+ normals = [];
152
+
153
+ for (let latNumber = 0; latNumber <= latBands; latNumber++) {
154
+ var theta = (latNumber * Math.PI) / latBands;
155
+ var sinTheta = Math.sin(theta);
156
+ var cosTheta = Math.cos(theta);
157
+
158
+ for (let longNumber = 0; longNumber <= lonBands; longNumber++) {
159
+ var phi = (longNumber * 2 * Math.PI) / lonBands;
160
+ var sinPhi = Math.sin(phi);
161
+ var cosPhi = Math.cos(phi);
162
+ var x = cosPhi * sinTheta + offsetX;
163
+ var y = cosTheta + offsetY;
164
+ var z = sinPhi * sinTheta + offsetZ;
165
+ //var u = 1 - (longNumber / lonBands);
166
+ //var v = latNumber / latBands;
167
+ normals.push(x);
168
+ normals.push(y);
169
+ normals.push(z);
170
+ //texCoords.push(u);
171
+ //texCoords.push(v);
172
+ vertices.push(radius * x);
173
+ vertices.push(radius * y);
174
+ vertices.push(radius * z);
175
+ }
176
+ }
177
+
178
+ for (let latNumber = 0; latNumber < latBands; latNumber++) {
179
+ for (let longNumber = 0; longNumber < lonBands; longNumber++) {
180
+ var first = latNumber * (lonBands + 1) + longNumber;
181
+ var second = first + lonBands + 1;
182
+
183
+ indexes.push(first);
184
+ indexes.push(first + 1);
185
+ indexes.push(second);
186
+
187
+ indexes.push(second);
188
+ indexes.push(first + 1);
189
+ indexes.push(second + 1);
190
+ }
191
+ }
192
+
193
+ return new Object3d({
194
+ vertices: vertices,
195
+ normals: normals,
196
+ indexes: indexes
197
+ });
198
+ }
199
+
200
+ static createDisc(
201
+ radius = 1.0,
202
+ height = 0.0,
203
+ radialSegments = 8,
204
+ isTop = true,
205
+ startIndex = 0,
206
+ offsetX = 0,
207
+ offsetY,
208
+ offsetZ = 0
209
+ ) {
210
+ let vertices = [],
211
+ indexes = [],
212
+ normals = [];
213
+
214
+ let thetaStart = 0.0,
215
+ thetaLength = Math.PI * 2;
216
+
217
+ let sign = isTop === true ? 1.0 : -1.0;
218
+
219
+ let centerIndexStart = startIndex;
220
+
221
+ for (let x = 1; x <= radialSegments; x++) {
222
+ vertices.push(0 + offsetX, height * sign + offsetY, 0 + offsetZ);
223
+ normals.push(0, sign, 0);
224
+ //texCoords.push(0.5, 0.5);
225
+ startIndex++;
226
+ }
227
+
228
+ let centerIndexEnd = startIndex;
229
+
230
+ for (let x = 0; x <= radialSegments; x++) {
231
+ let u = x / radialSegments;
232
+ let theta = u * thetaLength + thetaStart;
233
+
234
+ let cosTheta = Math.cos(theta);
235
+ let sinTheta = Math.sin(theta);
236
+
237
+ vertices.push(
238
+ radius * sinTheta + offsetX,
239
+ height * sign + offsetY,
240
+ radius * cosTheta + offsetZ
241
+ );
242
+ normals.push(0, sign, 0);
243
+ //texCoords.push((cosTheta * 0.5) + 0.5, (sinTheta * 0.5 * sign) + 0.5);
244
+
245
+ startIndex++;
246
+ }
247
+
248
+ for (let x = 0; x < radialSegments; x++) {
249
+ let c = centerIndexStart + x,
250
+ i = centerIndexEnd + x;
251
+ if (isTop === true) {
252
+ indexes.push(i, i + 1, c);
253
+ } else {
254
+ indexes.push(i + 1, i, c);
255
+ }
256
+ }
257
+
258
+ return new Object3d({
259
+ vertices: vertices,
260
+ normals: normals,
261
+ indexes: indexes
262
+ });
263
+ }
264
+
265
+ static createCylinder(
266
+ radiusTop = 1.0,
267
+ radiusBottom = 1.0,
268
+ height = 1.0,
269
+ radialSegments = 32,
270
+ heightSegments = 1.0,
271
+ isTop = true,
272
+ isBottom = true,
273
+ offsetX = 0,
274
+ offsetY = 0,
275
+ offsetZ = 0
276
+ ) {
277
+ let vertices = [],
278
+ indexes = [],
279
+ normals = [];
280
+
281
+ let thetaStart = 0.0,
282
+ thetaLength = Math.PI * 2;
283
+
284
+ let index = 0;
285
+ let indexArray = [];
286
+
287
+ let normal = new Vec3();
288
+
289
+ var slope = (radiusBottom - radiusTop) / height;
290
+
291
+ for (let y = 0; y <= heightSegments; y++) {
292
+ let indexRow = [];
293
+
294
+ let v = y / heightSegments;
295
+
296
+ let radius = v * (radiusBottom - radiusTop) + radiusTop;
297
+
298
+ for (let x = 0; x <= radialSegments; x++) {
299
+ let u = x / radialSegments;
300
+
301
+ let theta = u * thetaLength + thetaStart;
302
+
303
+ let sinTheta = Math.sin(theta),
304
+ cosTheta = Math.cos(theta);
305
+
306
+ vertices.push(
307
+ radius * sinTheta + offsetX,
308
+ -v * height + height + offsetY,
309
+ radius * cosTheta + offsetZ
310
+ );
311
+
312
+ normal.set(sinTheta, slope, cosTheta).normalize();
313
+ normals.push(normal.x, normal.y, normal.z);
314
+
315
+ //texCoords.push(u, 1 - v);
316
+
317
+ indexRow.push(index++);
318
+ }
319
+ indexArray.push(indexRow);
320
+ }
321
+
322
+ for (let x = 0; x < radialSegments; x++) {
323
+ for (let y = 0; y < heightSegments; y++) {
324
+ let a = indexArray[y][x],
325
+ b = indexArray[y + 1][x],
326
+ c = indexArray[y + 1][x + 1],
327
+ d = indexArray[y][x + 1];
328
+
329
+ indexes.push(a, b, d);
330
+ indexes.push(b, c, d);
331
+ }
332
+ }
333
+
334
+ if (radiusTop !== 0.0 && isTop) {
335
+ let cap = Object3d.createDisc(
336
+ radiusTop,
337
+ height,
338
+ radialSegments,
339
+ true,
340
+ index,
341
+ offsetX,
342
+ offsetY,
343
+ offsetZ
344
+ );
345
+ vertices.push(...cap.vertices);
346
+ normals.push(...cap.normals);
347
+ indexes.push(...cap.indexes);
348
+ }
349
+
350
+ if (radiusBottom !== 0.0 && isBottom) {
351
+ let cap = Object3d.createDisc(
352
+ radiusBottom,
353
+ 0,
354
+ radialSegments,
355
+ false,
356
+ index + (isTop ? 1 + 2 * radialSegments : 0),
357
+ offsetX,
358
+ offsetY,
359
+ offsetZ
360
+ );
361
+ vertices.push(...cap.vertices);
362
+ normals.push(...cap.normals);
363
+ indexes.push(...cap.indexes);
364
+ }
365
+
366
+ return new Object3d({
367
+ vertices: vertices,
368
+ normals: normals,
369
+ indexes: indexes
370
+ });
371
+ }
372
+
373
+ static createCube(length = 1, height = 1, depth = 1, xOffset = 0, yOffset = 0, zOffset = 0) {
374
+ let l = length * 0.5 + xOffset,
375
+ h = height * 0.5 + yOffset,
376
+ d = depth * 0.5 + zOffset;
377
+
378
+ return new Object3d({
379
+ vertices: [
380
+ //bottom
381
+ -l,
382
+ -h,
383
+ d,
384
+ l,
385
+ -h,
386
+ -d,
387
+ l,
388
+ -h,
389
+ d,
390
+ -l,
391
+ -h,
392
+ d,
393
+ -l,
394
+ -h,
395
+ -d,
396
+ l,
397
+ -h,
398
+ -d,
399
+
400
+ //top
401
+ -l,
402
+ h,
403
+ d,
404
+ l,
405
+ h,
406
+ d,
407
+ l,
408
+ h,
409
+ -d,
410
+ -l,
411
+ h,
412
+ d,
413
+ l,
414
+ h,
415
+ -d,
416
+ -l,
417
+ h,
418
+ -d,
419
+
420
+ //front
421
+ -l,
422
+ -h,
423
+ d,
424
+ l,
425
+ -h,
426
+ d,
427
+ -l,
428
+ h,
429
+ d,
430
+ -l,
431
+ h,
432
+ d,
433
+ l,
434
+ -h,
435
+ d,
436
+ l,
437
+ h,
438
+ d,
439
+
440
+ //back
441
+ -l,
442
+ -h,
443
+ -d,
444
+ -l,
445
+ h,
446
+ -d,
447
+ l,
448
+ -h,
449
+ -d,
450
+ -l,
451
+ h,
452
+ -d,
453
+ l,
454
+ h,
455
+ -d,
456
+ l,
457
+ -h,
458
+ -d,
459
+
460
+ //left
461
+ l,
462
+ -h,
463
+ d,
464
+ l,
465
+ -h,
466
+ -d,
467
+ l,
468
+ h,
469
+ d,
470
+ l,
471
+ h,
472
+ d,
473
+ l,
474
+ -h,
475
+ -d,
476
+ l,
477
+ h,
478
+ -d,
479
+
480
+ //right
481
+ -l,
482
+ -h,
483
+ d,
484
+ -l,
485
+ h,
486
+ d,
487
+ -l,
488
+ -h,
489
+ -d,
490
+ -l,
491
+ h,
492
+ d,
493
+ -l,
494
+ h,
495
+ -d,
496
+ -l,
497
+ -h,
498
+ -d
499
+ ]
500
+ });
501
+ }
502
+ }
503
+
504
+ export { Object3d };