@openglobus/og 0.13.10 → 0.14.1
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.
- package/README.md +1 -4
- package/css/og.css +1 -1
- package/dist/@openglobus/og.css +1 -1
- package/dist/@openglobus/og.esm.js +2 -2
- package/dist/@openglobus/og.esm.js.map +1 -1
- package/dist/@openglobus/og.umd.js +2 -2
- package/dist/@openglobus/og.umd.js.map +1 -1
- package/package.json +2 -2
- package/src/og/Globe.js +14 -4
- package/src/og/camera/Camera.js +7 -7
- package/src/og/camera/PlanetCamera.js +1 -1
- package/src/og/control/LayerSwitcher.js +48 -31
- package/src/og/control/MouseNavigation.js +2 -2
- package/src/og/control/ScaleControl.js +30 -10
- package/src/og/control/SimpleSkyBackground.js +184 -0
- package/src/og/control/Sun.js +3 -2
- package/src/og/ellipsoid/Ellipsoid.js +119 -92
- package/src/og/ellipsoid/wgs84.js +13 -13
- package/src/og/entity/Entity.js +3 -3
- package/src/og/entity/GeometryHandler.js +1341 -1337
- package/src/og/entity/LabelHandler.js +1 -4
- package/src/og/entity/LabelWorker.js +10 -13
- package/src/og/entity/Polyline.js +0 -16
- package/src/og/entity/Ray.js +0 -10
- package/src/og/entity/RayHandler.js +3 -44
- package/src/og/entity/Strip.js +1 -6
- package/src/og/index.js +106 -95
- package/src/og/layer/GeoVideo.js +1 -0
- package/src/og/layer/Layer.js +62 -3
- package/src/og/layer/XYZ.js +4 -3
- package/src/og/math/Line3.js +140 -139
- package/src/og/math/Plane.js +118 -117
- package/src/og/math/Ray.js +242 -239
- package/src/og/math/Vec3.js +56 -37
- package/src/og/math/Vec4.js +3 -4
- package/src/og/math.js +21 -21
- package/src/og/quadTree/EarthQuadTreeStrategy.js +29 -0
- package/src/og/quadTree/MarsQuadTreeStrategy.js +27 -0
- package/src/og/quadTree/Node.js +55 -218
- package/src/og/quadTree/QuadTreeStrategy.js +93 -0
- package/src/og/quadTree/Wgs84QuadTreeStrategy.js +26 -0
- package/src/og/renderer/Renderer.js +13 -12
- package/src/og/renderer/RendererEvents.js +1065 -1065
- package/src/og/scene/Planet.js +84 -273
- package/src/og/segment/Segment.js +18 -25
- package/src/og/segment/SegmentLonLat.js +34 -31
- package/src/og/segment/SegmentLonLatWgs84.js +41 -0
- package/src/og/shaders/ray.js +13 -6
- package/src/og/shaders/toneMapping.js +5 -5
- package/src/og/terrain/GlobusTerrain.js +3 -2
- package/src/og/terrain/MapboxTerrain.js +231 -52
- package/src/og/utils/quadTreeType.js +11 -0
- package/src/og/utils/shared.js +942 -942
- package/src/og/webgl/Handler.js +22 -9
- package/types/Globe.d.ts +7 -0
- package/types/camera/Camera.d.ts +3 -3
- package/types/camera/PlanetCamera.d.ts +1 -1
- package/types/control/LayerSwitcher.d.ts +1 -1
- package/types/control/ScaleControl.d.ts +2 -1
- package/types/control/SimpleSkyBackground.d.ts +11 -0
- package/types/control/Sun.d.ts +2 -1
- package/types/ellipsoid/Ellipsoid.d.ts +3 -2
- package/types/entity/LabelWorker.d.ts +1 -1
- package/types/entity/Ray.d.ts +0 -3
- package/types/entity/RayHandler.d.ts +0 -4
- package/types/index.d.ts +6 -1
- package/types/layer/Layer.d.ts +8 -0
- package/types/math/Vec3.d.ts +19 -16
- package/types/math/Vec4.d.ts +2 -3
- package/types/math.d.ts +20 -20
- package/types/quadTree/EarthQuadTreeStrategy.d.ts +3 -0
- package/types/quadTree/MarsQuadTreeStrategy.d.ts +3 -0
- package/types/quadTree/Node.d.ts +0 -1
- package/types/quadTree/QuadTreeStrategy.d.ts +21 -0
- package/types/quadTree/Wgs84QuadTreeStrategy.d.ts +3 -0
- package/types/renderer/Renderer.d.ts +1 -1
- package/types/scene/Planet.d.ts +6 -24
- package/types/segment/Segment.d.ts +4 -4
- package/types/segment/SegmentLonLat.d.ts +6 -2
- package/types/segment/SegmentLonLatWgs84.d.ts +4 -0
- package/types/terrain/MapboxTerrain.d.ts +2 -1
- package/types/utils/quadTreeType.d.ts +8 -0
- package/types/webgl/Handler.d.ts +4 -1
package/src/og/scene/Planet.js
CHANGED
|
@@ -8,7 +8,6 @@ import * as utils from "../utils/shared.js";
|
|
|
8
8
|
import * as shaders from "../shaders/drawnode.js";
|
|
9
9
|
import * as math from "../math.js";
|
|
10
10
|
import * as mercator from "../mercator.js";
|
|
11
|
-
import * as quadTree from "../quadTree/quadTree.js";
|
|
12
11
|
import * as segmentHelper from "../segment/segmentHelper.js";
|
|
13
12
|
import { decodeFloatFromRGBAArr } from "../math/coder.js";
|
|
14
13
|
import { Extent } from "../Extent.js";
|
|
@@ -31,15 +30,15 @@ import { VectorTileCreator } from "../utils/VectorTileCreator.js";
|
|
|
31
30
|
import { wgs84 } from "../ellipsoid/wgs84.js";
|
|
32
31
|
import { NIGHT, SPECULAR } from "../res/images.js";
|
|
33
32
|
import { Geoid } from "../terrain/Geoid.js";
|
|
34
|
-
import { isUndef } from "../utils/shared.js";
|
|
33
|
+
import { createColorRGB, isUndef } from "../utils/shared.js";
|
|
35
34
|
import { MAX_RENDERED_NODES } from "../quadTree/quadTree.js";
|
|
35
|
+
import { EarthQuadTreeStrategy } from "../quadTree/EarthQuadTreeStrategy.js";
|
|
36
36
|
|
|
37
37
|
const CUR_LOD_SIZE = 250; //px
|
|
38
38
|
const MIN_LOD_SIZE = 312; //px
|
|
39
39
|
const MAX_LOD_SIZE = 190; //px
|
|
40
40
|
|
|
41
|
-
let _tempPickingPix_ = new Uint8Array(4),
|
|
42
|
-
_tempDepthColor_ = new Uint8Array(4);
|
|
41
|
+
let _tempPickingPix_ = new Uint8Array(4), _tempDepthColor_ = new Uint8Array(4);
|
|
43
42
|
|
|
44
43
|
const DEPTH_DISTANCE = 11;//m
|
|
45
44
|
|
|
@@ -53,11 +52,10 @@ const MAX_NODES = 200;
|
|
|
53
52
|
|
|
54
53
|
const HORIZON_TANGENT = 0.81;
|
|
55
54
|
|
|
56
|
-
const EVENT_NAMES = [
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
*/
|
|
55
|
+
const EVENT_NAMES = [/**
|
|
56
|
+
* Triggered before globe frame begins to render.
|
|
57
|
+
* @event og.scene.Planet#draw
|
|
58
|
+
*/
|
|
61
59
|
"draw",
|
|
62
60
|
|
|
63
61
|
/**
|
|
@@ -100,8 +98,7 @@ const EVENT_NAMES = [
|
|
|
100
98
|
* Triggered when layer data is laded
|
|
101
99
|
* @event og.scene.Planet#terraincompleted
|
|
102
100
|
*/
|
|
103
|
-
"layerloadend"
|
|
104
|
-
];
|
|
101
|
+
"layerloadend"];
|
|
105
102
|
|
|
106
103
|
/**
|
|
107
104
|
* Main class for rendering planet
|
|
@@ -124,12 +121,7 @@ export class Planet extends RenderNode {
|
|
|
124
121
|
constructor(options = {}) {
|
|
125
122
|
super(options.name);
|
|
126
123
|
|
|
127
|
-
this._cameraFrustums = options.frustums || [
|
|
128
|
-
[1, 100 + 0.075],
|
|
129
|
-
[100, 1000 + 0.075],
|
|
130
|
-
[1000, 1e6 + 10000],
|
|
131
|
-
[1e6, 1e9]
|
|
132
|
-
];
|
|
124
|
+
this._cameraFrustums = options.frustums || [[1, 100 + 0.075], [100, 1000 + 0.075], [1000, 1e6 + 10000], [1e6, 1e9]];
|
|
133
125
|
|
|
134
126
|
/**
|
|
135
127
|
* @public
|
|
@@ -262,13 +254,6 @@ export class Planet extends RenderNode {
|
|
|
262
254
|
this._renderedNodes = [];
|
|
263
255
|
this._renderedNodesInFrustum = [];
|
|
264
256
|
|
|
265
|
-
/**
|
|
266
|
-
* Created nodes cache
|
|
267
|
-
* @protected
|
|
268
|
-
* @type {quadTree.Node}
|
|
269
|
-
*/
|
|
270
|
-
this._quadTreeNodesCacheMerc = {};
|
|
271
|
-
|
|
272
257
|
/**
|
|
273
258
|
* Current visible mercator segments tree nodes array.
|
|
274
259
|
* @protected
|
|
@@ -340,26 +325,7 @@ export class Planet extends RenderNode {
|
|
|
340
325
|
*/
|
|
341
326
|
this._heightPickingFramebuffer = null;
|
|
342
327
|
|
|
343
|
-
|
|
344
|
-
* Mercator grid tree.
|
|
345
|
-
* @protected
|
|
346
|
-
* @type {quadTree.Node}
|
|
347
|
-
*/
|
|
348
|
-
this._quadTree = null;
|
|
349
|
-
|
|
350
|
-
/**
|
|
351
|
-
* North grid tree.
|
|
352
|
-
* @protected
|
|
353
|
-
* @type {quadTree.Node}
|
|
354
|
-
*/
|
|
355
|
-
this._quadTreeNorth = null;
|
|
356
|
-
|
|
357
|
-
/**
|
|
358
|
-
* South grid tree.
|
|
359
|
-
* @protected
|
|
360
|
-
* @type {quadTree.Node}
|
|
361
|
-
*/
|
|
362
|
-
this._quadTreeSouth = null;
|
|
328
|
+
this.quadTreeStrategy = options.quadTreeStrategyPrototype ? new options.quadTreeStrategyPrototype({ planet: this }) : new EarthQuadTreeStrategy({ planet: this });
|
|
363
329
|
|
|
364
330
|
/**
|
|
365
331
|
* Night glowing gl texture.
|
|
@@ -395,9 +361,7 @@ export class Planet extends RenderNode {
|
|
|
395
361
|
* @protected
|
|
396
362
|
* @type {boolean}
|
|
397
363
|
*/
|
|
398
|
-
this._useSpecularTexture = isUndef(options.useSpecularTexture)
|
|
399
|
-
? true
|
|
400
|
-
: options.useSpecularTexture;
|
|
364
|
+
this._useSpecularTexture = isUndef(options.useSpecularTexture) ? true : options.useSpecularTexture;
|
|
401
365
|
|
|
402
366
|
this._maxGridSize = Math.log2(options.maxGridSize || 128);
|
|
403
367
|
|
|
@@ -439,7 +403,7 @@ export class Planet extends RenderNode {
|
|
|
439
403
|
|
|
440
404
|
this._plainSegmentWorker = new PlainSegmentWorker(3);
|
|
441
405
|
|
|
442
|
-
this._tileLoader = new Loader(options.
|
|
406
|
+
this._tileLoader = new Loader(options.maxLoadingRequests || 12);
|
|
443
407
|
|
|
444
408
|
this._memKey = new Key();
|
|
445
409
|
|
|
@@ -466,6 +430,29 @@ export class Planet extends RenderNode {
|
|
|
466
430
|
return Quat.getLookRotation(t, n);
|
|
467
431
|
}
|
|
468
432
|
|
|
433
|
+
set diffuse(rgb) {
|
|
434
|
+
let vec = createColorRGB(rgb);
|
|
435
|
+
this._diffuse = new Float32Array(vec.toArray());
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
set ambient(rgb) {
|
|
439
|
+
let vec = createColorRGB(rgb);
|
|
440
|
+
this._ambient = new Float32Array(vec.toArray());
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
set specular(rgb) {
|
|
444
|
+
let vec = createColorRGB(rgb);
|
|
445
|
+
this._specular = new Float32Array([vec.x, vec.y, vec.y, this._specular[3]]);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
set shininess(v) {
|
|
449
|
+
this._specular[3] = v;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
get normalMapCreator() {
|
|
453
|
+
return this._normalMapCreator;
|
|
454
|
+
}
|
|
455
|
+
|
|
469
456
|
get layers() {
|
|
470
457
|
return [...this._layers];
|
|
471
458
|
}
|
|
@@ -560,33 +547,7 @@ export class Planet extends RenderNode {
|
|
|
560
547
|
* @param {Layer} layer - Material layer.
|
|
561
548
|
*/
|
|
562
549
|
_clearLayerMaterial(layer) {
|
|
563
|
-
|
|
564
|
-
this._quadTree.traverseTree(function (node) {
|
|
565
|
-
var mats = node.segment.materials;
|
|
566
|
-
if (mats[lid]) {
|
|
567
|
-
mats[lid].clear();
|
|
568
|
-
mats[lid] = null;
|
|
569
|
-
delete mats[lid];
|
|
570
|
-
}
|
|
571
|
-
});
|
|
572
|
-
|
|
573
|
-
this._quadTreeNorth.traverseTree(function (node) {
|
|
574
|
-
var mats = node.segment.materials;
|
|
575
|
-
if (mats[lid]) {
|
|
576
|
-
mats[lid].clear();
|
|
577
|
-
mats[lid] = null;
|
|
578
|
-
delete mats[lid];
|
|
579
|
-
}
|
|
580
|
-
});
|
|
581
|
-
|
|
582
|
-
this._quadTreeSouth.traverseTree(function (node) {
|
|
583
|
-
var mats = node.segment.materials;
|
|
584
|
-
if (mats[lid]) {
|
|
585
|
-
mats[lid].clear();
|
|
586
|
-
mats[lid] = null;
|
|
587
|
-
delete mats[lid];
|
|
588
|
-
}
|
|
589
|
-
});
|
|
550
|
+
this.quadTreeStrategy.clearLayerMaterial(layer);
|
|
590
551
|
}
|
|
591
552
|
|
|
592
553
|
|
|
@@ -629,7 +590,7 @@ export class Planet extends RenderNode {
|
|
|
629
590
|
|
|
630
591
|
if (this._heightFactor !== factor) {
|
|
631
592
|
this._heightFactor = factor;
|
|
632
|
-
this.
|
|
593
|
+
this.quadTreeStrategy.destroyBranches();
|
|
633
594
|
}
|
|
634
595
|
}
|
|
635
596
|
|
|
@@ -663,13 +624,7 @@ export class Planet extends RenderNode {
|
|
|
663
624
|
this.terrain = terrain;
|
|
664
625
|
this.terrain._planet = this;
|
|
665
626
|
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
if (this._quadTree) {
|
|
669
|
-
this._quadTree.destroyBranches();
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
//if (terrain._geoid) {
|
|
627
|
+
this.quadTreeStrategy.destroyBranches();
|
|
673
628
|
|
|
674
629
|
if (terrain._geoid.model) {
|
|
675
630
|
this._plainSegmentWorker.setGeoid(terrain.getGeoid());
|
|
@@ -685,20 +640,6 @@ export class Planet extends RenderNode {
|
|
|
685
640
|
console.log(err);
|
|
686
641
|
});
|
|
687
642
|
}
|
|
688
|
-
|
|
689
|
-
// if (!terrain._geoid.model) {
|
|
690
|
-
// Geoid.loadModel(terrain._geoid.src)
|
|
691
|
-
// .then((m) => {
|
|
692
|
-
// terrain.getGeoid().setModel(m);
|
|
693
|
-
// this._plainSegmentWorker.setGeoid(terrain.getGeoid());
|
|
694
|
-
// })
|
|
695
|
-
// .catch((err) => {
|
|
696
|
-
// console.log(err);
|
|
697
|
-
// });
|
|
698
|
-
// } else {
|
|
699
|
-
// this._plainSegmentWorker.setGeoid(terrain.getGeoid());
|
|
700
|
-
// }
|
|
701
|
-
//}
|
|
702
643
|
}
|
|
703
644
|
|
|
704
645
|
/**
|
|
@@ -723,8 +664,7 @@ export class Planet extends RenderNode {
|
|
|
723
664
|
this.renderer.addDepthCallback(this, this._renderDepthFramebufferPASS);
|
|
724
665
|
|
|
725
666
|
this._heightPickingFramebuffer = new Framebuffer(this.renderer.handler, {
|
|
726
|
-
width: 320,
|
|
727
|
-
height: 240
|
|
667
|
+
width: 320, height: 240
|
|
728
668
|
});
|
|
729
669
|
|
|
730
670
|
this._heightPickingFramebuffer.init();
|
|
@@ -754,11 +694,9 @@ export class Planet extends RenderNode {
|
|
|
754
694
|
for (var j = 0; j <= TABLESIZE; j++) {
|
|
755
695
|
!this._indexesCache[i][j] && (this._indexesCache[i][j] = new Array(TABLESIZE));
|
|
756
696
|
for (var k = 0; k <= TABLESIZE; k++) {
|
|
757
|
-
!this._indexesCache[i][j][k] &&
|
|
758
|
-
(this._indexesCache[i][j][k] = new Array(TABLESIZE));
|
|
697
|
+
!this._indexesCache[i][j][k] && (this._indexesCache[i][j][k] = new Array(TABLESIZE));
|
|
759
698
|
for (var m = 0; m <= TABLESIZE; m++) {
|
|
760
|
-
!this._indexesCache[i][j][k][m] &&
|
|
761
|
-
(this._indexesCache[i][j][k][m] = new Array(TABLESIZE));
|
|
699
|
+
!this._indexesCache[i][j][k][m] && (this._indexesCache[i][j][k][m] = new Array(TABLESIZE));
|
|
762
700
|
for (var q = 0; q <= TABLESIZE; q++) {
|
|
763
701
|
let ptr = {
|
|
764
702
|
buffer: null
|
|
@@ -768,10 +706,7 @@ export class Planet extends RenderNode {
|
|
|
768
706
|
let indexes = segmentHelper
|
|
769
707
|
.getInstance()
|
|
770
708
|
.createSegmentIndexes(i, [j, k, m, q]);
|
|
771
|
-
ptr.buffer = this.renderer.handler.createElementArrayBuffer(
|
|
772
|
-
indexes,
|
|
773
|
-
1
|
|
774
|
-
);
|
|
709
|
+
ptr.buffer = this.renderer.handler.createElementArrayBuffer(indexes, 1);
|
|
775
710
|
indexes = null;
|
|
776
711
|
} else {
|
|
777
712
|
this._indexesCacheToRemove[kk++] = ptr;
|
|
@@ -795,11 +730,7 @@ export class Planet extends RenderNode {
|
|
|
795
730
|
let texCoordCache = segmentHelper.getInstance().initTextureCoordsTable(TABLESIZE + 1);
|
|
796
731
|
|
|
797
732
|
for (let i = 0; i <= TABLESIZE; i++) {
|
|
798
|
-
this._textureCoordsBufferCache[i] = this.renderer.handler.createArrayBuffer(
|
|
799
|
-
texCoordCache[i],
|
|
800
|
-
2,
|
|
801
|
-
((1 << i) + 1) * ((1 << i) + 1)
|
|
802
|
-
);
|
|
733
|
+
this._textureCoordsBufferCache[i] = this.renderer.handler.createArrayBuffer(texCoordCache[i], 2, ((1 << i) + 1) * ((1 << i) + 1));
|
|
803
734
|
}
|
|
804
735
|
|
|
805
736
|
texCoordCache = null;
|
|
@@ -829,16 +760,9 @@ export class Planet extends RenderNode {
|
|
|
829
760
|
this._renderedNodesInFrustum[i] = [];
|
|
830
761
|
}
|
|
831
762
|
|
|
763
|
+
|
|
832
764
|
// Creating quad trees nodes
|
|
833
|
-
this.
|
|
834
|
-
Extent.createFromArray([-20037508.34, -20037508.34, 20037508.34, 20037508.34])
|
|
835
|
-
);
|
|
836
|
-
this._quadTreeNorth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0,
|
|
837
|
-
Extent.createFromArray([-180, mercator.MAX_LAT, 180, 90])
|
|
838
|
-
);
|
|
839
|
-
this._quadTreeSouth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0,
|
|
840
|
-
Extent.createFromArray([-180, -90, 180, mercator.MIN_LAT])
|
|
841
|
-
);
|
|
765
|
+
this.quadTreeStrategy.init();
|
|
842
766
|
|
|
843
767
|
this.drawMode = this.renderer.handler.gl.TRIANGLE_STRIP;
|
|
844
768
|
|
|
@@ -851,16 +775,12 @@ export class Planet extends RenderNode {
|
|
|
851
775
|
|
|
852
776
|
// loading Earth night glowing texture
|
|
853
777
|
if (this._useNightTexture) {
|
|
854
|
-
createImageBitmap(NIGHT).then(
|
|
855
|
-
(e) => (this._nightTexture = this.renderer.handler.createTextureDefault(e))
|
|
856
|
-
);
|
|
778
|
+
createImageBitmap(NIGHT).then((e) => (this._nightTexture = this.renderer.handler.createTextureDefault(e)));
|
|
857
779
|
}
|
|
858
780
|
|
|
859
781
|
// load water specular mask
|
|
860
782
|
if (this._useSpecularTexture) {
|
|
861
|
-
createImageBitmap(SPECULAR).then(
|
|
862
|
-
(e) => (this._specularTexture = this.renderer.handler.createTexture_l(e))
|
|
863
|
-
);
|
|
783
|
+
createImageBitmap(SPECULAR).then((e) => (this._specularTexture = this.renderer.handler.createTexture_l(e)));
|
|
864
784
|
}
|
|
865
785
|
|
|
866
786
|
this._geoImageCreator = new GeoImageCreator(this);
|
|
@@ -887,8 +807,7 @@ export class Planet extends RenderNode {
|
|
|
887
807
|
|
|
888
808
|
clearIndexesCache() {
|
|
889
809
|
this._indexesCacheToRemoveCounter = 0;
|
|
890
|
-
let c = this._indexesCacheToRemove,
|
|
891
|
-
gl = this.renderer.handler.gl;
|
|
810
|
+
let c = this._indexesCacheToRemove, gl = this.renderer.handler.gl;
|
|
892
811
|
for (let i = 0, len = c.length; i < len; i++) {
|
|
893
812
|
let ci = c[i];
|
|
894
813
|
gl.deleteBuffer(ci.buffer);
|
|
@@ -897,29 +816,7 @@ export class Planet extends RenderNode {
|
|
|
897
816
|
}
|
|
898
817
|
|
|
899
818
|
_preRender() {
|
|
900
|
-
|
|
901
|
-
this._quadTree.createChildrenNodes();
|
|
902
|
-
this._quadTree.segment.createPlainSegment();
|
|
903
|
-
|
|
904
|
-
// Zoom 1
|
|
905
|
-
for (let i = 0; i < this._quadTree.nodes.length; i++) {
|
|
906
|
-
this._quadTree.nodes[i].segment.createPlainSegment();
|
|
907
|
-
}
|
|
908
|
-
|
|
909
|
-
// same for poles
|
|
910
|
-
this._quadTreeNorth.createChildrenNodes();
|
|
911
|
-
this._quadTreeNorth.segment.createPlainSegment();
|
|
912
|
-
|
|
913
|
-
for (let i = 0; i < this._quadTreeNorth.nodes.length; i++) {
|
|
914
|
-
this._quadTreeNorth.nodes[i].segment.createPlainSegment();
|
|
915
|
-
}
|
|
916
|
-
|
|
917
|
-
this._quadTreeSouth.createChildrenNodes();
|
|
918
|
-
this._quadTreeSouth.segment.createPlainSegment();
|
|
919
|
-
|
|
920
|
-
for (let i = 0; i < this._quadTreeSouth.nodes.length; i++) {
|
|
921
|
-
this._quadTreeSouth.nodes[i].segment.createPlainSegment();
|
|
922
|
-
}
|
|
819
|
+
this.quadTreeStrategy.preRender();
|
|
923
820
|
|
|
924
821
|
this._preLoad();
|
|
925
822
|
}
|
|
@@ -929,38 +826,7 @@ export class Planet extends RenderNode {
|
|
|
929
826
|
|
|
930
827
|
this._skipPreRender = false;
|
|
931
828
|
|
|
932
|
-
|
|
933
|
-
this._quadTreeNorth.segment.passReady = true;
|
|
934
|
-
this._quadTreeNorth.renderNode(true);
|
|
935
|
-
this._normalMapCreator.drawSingle(this._quadTreeNorth.segment);
|
|
936
|
-
|
|
937
|
-
for (let i = 0; i < this._quadTreeNorth.nodes.length; i++) {
|
|
938
|
-
this._quadTreeNorth.nodes[i].segment.passReady = true;
|
|
939
|
-
this._quadTreeNorth.nodes[i].renderNode(true);
|
|
940
|
-
this._normalMapCreator.drawSingle(this._quadTreeNorth.nodes[i].segment);
|
|
941
|
-
}
|
|
942
|
-
|
|
943
|
-
this._quadTreeSouth.segment.passReady = true;
|
|
944
|
-
this._quadTreeSouth.renderNode(true);
|
|
945
|
-
this._normalMapCreator.drawSingle(this._quadTreeSouth.segment);
|
|
946
|
-
|
|
947
|
-
for (let i = 0; i < this._quadTreeSouth.nodes.length; i++) {
|
|
948
|
-
this._quadTreeSouth.nodes[i].segment.passReady = true;
|
|
949
|
-
this._quadTreeSouth.nodes[i].renderNode(true);
|
|
950
|
-
this._normalMapCreator.drawSingle(this._quadTreeSouth.nodes[i].segment);
|
|
951
|
-
}
|
|
952
|
-
|
|
953
|
-
// Zoom 1
|
|
954
|
-
for (let i = 0; i < this._quadTree.nodes.length; i++) {
|
|
955
|
-
this._quadTree.nodes[i].segment.passReady = true;
|
|
956
|
-
this._quadTree.nodes[i].renderNode(true);
|
|
957
|
-
this._normalMapCreator.drawSingle(this._quadTree.nodes[i].segment);
|
|
958
|
-
}
|
|
959
|
-
|
|
960
|
-
// Zoom 0
|
|
961
|
-
this._quadTree.segment.passReady = true;
|
|
962
|
-
this._quadTree.renderNode(true);
|
|
963
|
-
this._normalMapCreator.drawSingle(this._quadTree.segment);
|
|
829
|
+
this.quadTreeStrategy.preLoad();
|
|
964
830
|
}
|
|
965
831
|
|
|
966
832
|
/**
|
|
@@ -1075,17 +941,13 @@ export class Planet extends RenderNode {
|
|
|
1075
941
|
* @protected
|
|
1076
942
|
*/
|
|
1077
943
|
_sortLayers() {
|
|
1078
|
-
this.visibleVectorLayers.sort(
|
|
1079
|
-
(a, b) => (a._zIndex - b._zIndex) || (a._height - b._height)
|
|
1080
|
-
);
|
|
944
|
+
this.visibleVectorLayers.sort((a, b) => (a._zIndex - b._zIndex) || (a._height - b._height));
|
|
1081
945
|
|
|
1082
946
|
this._visibleTileLayerSlices = [];
|
|
1083
947
|
this._visibleTileLayerSlices.length = 0;
|
|
1084
948
|
|
|
1085
949
|
if (this.visibleTileLayers.length) {
|
|
1086
|
-
this.visibleTileLayers.sort((a, b) =>
|
|
1087
|
-
(a._height - b._height) || (a._zIndex - b._zIndex)
|
|
1088
|
-
);
|
|
950
|
+
this.visibleTileLayers.sort((a, b) => (a._height - b._height) || (a._zIndex - b._zIndex));
|
|
1089
951
|
|
|
1090
952
|
var k = -1;
|
|
1091
953
|
var currHeight = this.visibleTileLayers[0]._height;
|
|
@@ -1136,18 +998,11 @@ export class Planet extends RenderNode {
|
|
|
1136
998
|
this.minCurrZoom = math.MAX;
|
|
1137
999
|
this.maxCurrZoom = math.MIN;
|
|
1138
1000
|
|
|
1139
|
-
this.
|
|
1140
|
-
|
|
1141
|
-
if (cam.slope > this.minEqualZoomCameraSlope &&
|
|
1142
|
-
cam._lonLat.height < this.maxEqualZoomAltitude &&
|
|
1143
|
-
cam._lonLat.height > this.minEqualZoomAltitude
|
|
1144
|
-
) {
|
|
1001
|
+
if (cam.slope > this.minEqualZoomCameraSlope && cam._lonLat.height < this.maxEqualZoomAltitude && cam._lonLat.height > this.minEqualZoomAltitude) {
|
|
1145
1002
|
|
|
1146
1003
|
this.minCurrZoom = this.maxCurrZoom;
|
|
1147
1004
|
|
|
1148
|
-
let temp = this._renderedNodes,
|
|
1149
|
-
rf = this._renderedNodesInFrustum,
|
|
1150
|
-
temp2 = [];
|
|
1005
|
+
let temp = this._renderedNodes, rf = this._renderedNodesInFrustum, temp2 = [];
|
|
1151
1006
|
|
|
1152
1007
|
this._renderedNodes = [];
|
|
1153
1008
|
|
|
@@ -1162,8 +1017,7 @@ export class Planet extends RenderNode {
|
|
|
1162
1017
|
let ht = ri.segment.centerNormal.dot(cam._b);
|
|
1163
1018
|
if (ri.segment.tileZoom === this.maxCurrZoom || ht < HORIZON_TANGENT) {
|
|
1164
1019
|
this._renderedNodes.push(ri);
|
|
1165
|
-
let k = 0,
|
|
1166
|
-
inFrustum = ri.inFrustum;
|
|
1020
|
+
let k = 0, inFrustum = ri.inFrustum;
|
|
1167
1021
|
while (inFrustum) {
|
|
1168
1022
|
if (inFrustum & 1) {
|
|
1169
1023
|
rf[k].push(ri);
|
|
@@ -1181,8 +1035,7 @@ export class Planet extends RenderNode {
|
|
|
1181
1035
|
}
|
|
1182
1036
|
}
|
|
1183
1037
|
|
|
1184
|
-
this.
|
|
1185
|
-
this._quadTreeSouth.renderTree(cam, 0, null);
|
|
1038
|
+
this.quadTreeStrategy.collectRenderNodes();
|
|
1186
1039
|
}
|
|
1187
1040
|
|
|
1188
1041
|
_globalPreDraw() {
|
|
@@ -1254,11 +1107,10 @@ export class Planet extends RenderNode {
|
|
|
1254
1107
|
let h = renderer.handler;
|
|
1255
1108
|
let gl = h.gl;
|
|
1256
1109
|
let cam = renderer.activeCamera;
|
|
1257
|
-
let frustumIndex = cam.getCurrentFrustum(),
|
|
1258
|
-
firstPass = frustumIndex === cam.FARTHEST_FRUSTUM_INDEX;
|
|
1110
|
+
let frustumIndex = cam.getCurrentFrustum(), firstPass = frustumIndex === cam.FARTHEST_FRUSTUM_INDEX;
|
|
1259
1111
|
|
|
1260
1112
|
if (firstPass) {
|
|
1261
|
-
if (this._skipPreRender
|
|
1113
|
+
if (this._skipPreRender) {
|
|
1262
1114
|
this._collectRenderNodes();
|
|
1263
1115
|
}
|
|
1264
1116
|
this._skipPreRender = true;
|
|
@@ -1299,15 +1151,19 @@ export class Planet extends RenderNode {
|
|
|
1299
1151
|
gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
|
|
1300
1152
|
gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
|
|
1301
1153
|
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1154
|
+
if (this.baseLayer) {
|
|
1155
|
+
gl.uniform3fv(shu.diffuse, this.baseLayer._diffuse || this._diffuse);
|
|
1156
|
+
gl.uniform3fv(shu.ambient, this.baseLayer._ambient || this._ambient);
|
|
1157
|
+
gl.uniform4fv(shu.specular, this.baseLayer._specular || this._specular);
|
|
1158
|
+
} else {
|
|
1159
|
+
gl.uniform3fv(shu.diffuse, this._diffuse);
|
|
1160
|
+
gl.uniform3fv(shu.ambient, this._ambient);
|
|
1161
|
+
gl.uniform4fv(shu.specular, this._specular);
|
|
1162
|
+
}
|
|
1305
1163
|
|
|
1306
1164
|
// bind night glowing material
|
|
1307
1165
|
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
|
|
1308
|
-
gl.bindTexture(gl.TEXTURE_2D,
|
|
1309
|
-
(this.camera._lonLat.height > 329958.0 && (this._nightTexture || this.transparentTexture)) || this.transparentTexture
|
|
1310
|
-
);
|
|
1166
|
+
gl.bindTexture(gl.TEXTURE_2D, (this.camera._lonLat.height > 329958.0 && (this._nightTexture || this.transparentTexture)) || this.transparentTexture);
|
|
1311
1167
|
gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
|
|
1312
1168
|
|
|
1313
1169
|
// bind specular material
|
|
@@ -1327,8 +1183,7 @@ export class Planet extends RenderNode {
|
|
|
1327
1183
|
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
|
1328
1184
|
|
|
1329
1185
|
// drawing planet nodes
|
|
1330
|
-
var rn = this._renderedNodesInFrustum[frustumIndex],
|
|
1331
|
-
sl = this._visibleTileLayerSlices;
|
|
1186
|
+
var rn = this._renderedNodesInFrustum[frustumIndex], sl = this._visibleTileLayerSlices;
|
|
1332
1187
|
|
|
1333
1188
|
if (sl.length) {
|
|
1334
1189
|
let sli = sl[0];
|
|
@@ -1403,8 +1258,7 @@ export class Planet extends RenderNode {
|
|
|
1403
1258
|
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
|
1404
1259
|
|
|
1405
1260
|
// drawing planet nodes
|
|
1406
|
-
let rn = this._renderedNodesInFrustum[frustumIndex],
|
|
1407
|
-
sl = this._visibleTileLayerSlices;
|
|
1261
|
+
let rn = this._renderedNodesInFrustum[frustumIndex], sl = this._visibleTileLayerSlices;
|
|
1408
1262
|
|
|
1409
1263
|
let i = rn.length;
|
|
1410
1264
|
while (i--) {
|
|
@@ -1440,8 +1294,7 @@ export class Planet extends RenderNode {
|
|
|
1440
1294
|
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
|
1441
1295
|
|
|
1442
1296
|
// drawing planet nodes
|
|
1443
|
-
var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()],
|
|
1444
|
-
sl = this._visibleTileLayerSlices;
|
|
1297
|
+
var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()], sl = this._visibleTileLayerSlices;
|
|
1445
1298
|
|
|
1446
1299
|
let i = rn.length;
|
|
1447
1300
|
while (i--) {
|
|
@@ -1486,8 +1339,7 @@ export class Planet extends RenderNode {
|
|
|
1486
1339
|
gl.uniform3fv(shu.frustumPickingColor, cam.frustum._pickingColorU);
|
|
1487
1340
|
|
|
1488
1341
|
// drawing planet nodes
|
|
1489
|
-
var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()],
|
|
1490
|
-
sl = this._visibleTileLayerSlices;
|
|
1342
|
+
var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()], sl = this._visibleTileLayerSlices;
|
|
1491
1343
|
|
|
1492
1344
|
let i = rn.length;
|
|
1493
1345
|
while (i--) {
|
|
@@ -1537,16 +1389,11 @@ export class Planet extends RenderNode {
|
|
|
1537
1389
|
this.terrain.abortLoading();
|
|
1538
1390
|
this._tileLoader.abortAll();
|
|
1539
1391
|
|
|
1540
|
-
var that = this;
|
|
1541
|
-
// setTimeout(function () {
|
|
1542
|
-
that._quadTree.clearTree();
|
|
1543
|
-
that._quadTreeNorth.clearTree();
|
|
1544
|
-
that._quadTreeSouth.clearTree();
|
|
1545
1392
|
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1393
|
+
this.quadTreeStrategy.clear();
|
|
1394
|
+
this.layerLock.free(this._memKey);
|
|
1395
|
+
this.terrainLock.free(this._memKey);
|
|
1396
|
+
this._normalMapCreator.free(this._memKey);
|
|
1550
1397
|
|
|
1551
1398
|
this._createdNodesCount = 0;
|
|
1552
1399
|
}
|
|
@@ -1686,11 +1533,9 @@ export class Planet extends RenderNode {
|
|
|
1686
1533
|
return this.getDistanceFromPixelEllipsoid(px) || 0;
|
|
1687
1534
|
} else {
|
|
1688
1535
|
|
|
1689
|
-
let r = this.renderer,
|
|
1690
|
-
cnv = this.renderer.handler.canvas;
|
|
1536
|
+
let r = this.renderer, cnv = this.renderer.handler.canvas;
|
|
1691
1537
|
|
|
1692
|
-
let spx = px.x / cnv.width,
|
|
1693
|
-
spy = (cnv.height - px.y) / cnv.height;
|
|
1538
|
+
let spx = px.x / cnv.width, spy = (cnv.height - px.y) / cnv.height;
|
|
1694
1539
|
|
|
1695
1540
|
_tempPickingPix_[0] = _tempPickingPix_[1] = _tempPickingPix_[2] = 0.0;
|
|
1696
1541
|
|
|
@@ -1710,12 +1555,7 @@ export class Planet extends RenderNode {
|
|
|
1710
1555
|
r.screenDepthFramebuffer.activate();
|
|
1711
1556
|
if (r.screenDepthFramebuffer.isComplete()) {
|
|
1712
1557
|
r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy);
|
|
1713
|
-
let screenPos = new Vec4(
|
|
1714
|
-
spx * 2.0 - 1.0,
|
|
1715
|
-
spy * 2.0 - 1.0,
|
|
1716
|
-
(_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
|
|
1717
|
-
1.0 * 2.0 - 1.0
|
|
1718
|
-
);
|
|
1558
|
+
let screenPos = new Vec4(spx * 2.0 - 1.0, spy * 2.0 - 1.0, (_tempDepthColor_[0] / 255.0) * 2.0 - 1.0, 1.0 * 2.0 - 1.0);
|
|
1719
1559
|
let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
|
|
1720
1560
|
let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1721
1561
|
dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
|
|
@@ -1742,12 +1582,7 @@ export class Planet extends RenderNode {
|
|
|
1742
1582
|
* where index 0 - southwest longitude, 1 - latitude southwest, 2 - longitude northeast, 3 - latitude northeast.
|
|
1743
1583
|
*/
|
|
1744
1584
|
viewExtentArr(extentArr) {
|
|
1745
|
-
this.renderer.activeCamera.viewExtent(
|
|
1746
|
-
new Extent(
|
|
1747
|
-
new LonLat(extentArr[0], extentArr[1]),
|
|
1748
|
-
new LonLat(extentArr[2], extentArr[3])
|
|
1749
|
-
)
|
|
1750
|
-
);
|
|
1585
|
+
this.renderer.activeCamera.viewExtent(new Extent(new LonLat(extentArr[0], extentArr[1]), new LonLat(extentArr[2], extentArr[3])));
|
|
1751
1586
|
}
|
|
1752
1587
|
|
|
1753
1588
|
/**
|
|
@@ -1802,14 +1637,7 @@ export class Planet extends RenderNode {
|
|
|
1802
1637
|
* @param {cameraCallback} [completeCallback] - Callback that calls befor the flying begins.
|
|
1803
1638
|
*/
|
|
1804
1639
|
flyExtent(extent, height, up, ampl, completeCallback, startCallback) {
|
|
1805
|
-
this.renderer.activeCamera.flyExtent(
|
|
1806
|
-
extent,
|
|
1807
|
-
height,
|
|
1808
|
-
up,
|
|
1809
|
-
ampl,
|
|
1810
|
-
completeCallback,
|
|
1811
|
-
startCallback
|
|
1812
|
-
);
|
|
1640
|
+
this.renderer.activeCamera.flyExtent(extent, height, up, ampl, completeCallback, startCallback);
|
|
1813
1641
|
}
|
|
1814
1642
|
|
|
1815
1643
|
/**
|
|
@@ -1824,15 +1652,7 @@ export class Planet extends RenderNode {
|
|
|
1824
1652
|
* @param [frameCallback]
|
|
1825
1653
|
*/
|
|
1826
1654
|
flyCartesian(cartesian, look, up, ampl, completeCallback, startCallback, frameCallback) {
|
|
1827
|
-
this.renderer.activeCamera.flyCartesian(
|
|
1828
|
-
cartesian,
|
|
1829
|
-
look,
|
|
1830
|
-
up,
|
|
1831
|
-
ampl,
|
|
1832
|
-
completeCallback,
|
|
1833
|
-
startCallback,
|
|
1834
|
-
frameCallback
|
|
1835
|
-
);
|
|
1655
|
+
this.renderer.activeCamera.flyCartesian(cartesian, look, up, ampl, completeCallback, startCallback, frameCallback);
|
|
1836
1656
|
}
|
|
1837
1657
|
|
|
1838
1658
|
/**
|
|
@@ -1847,15 +1667,7 @@ export class Planet extends RenderNode {
|
|
|
1847
1667
|
* @param [frameCallback]
|
|
1848
1668
|
*/
|
|
1849
1669
|
flyLonLat(lonlat, look, up, ampl, completeCallback, startCallback, frameCallback) {
|
|
1850
|
-
this.renderer.activeCamera.flyLonLat(
|
|
1851
|
-
lonlat,
|
|
1852
|
-
look,
|
|
1853
|
-
up,
|
|
1854
|
-
ampl,
|
|
1855
|
-
completeCallback,
|
|
1856
|
-
startCallback,
|
|
1857
|
-
frameCallback
|
|
1858
|
-
);
|
|
1670
|
+
this.renderer.activeCamera.flyLonLat(lonlat, look, up, ampl, completeCallback, startCallback, frameCallback);
|
|
1859
1671
|
}
|
|
1860
1672
|
|
|
1861
1673
|
/**
|
|
@@ -1886,8 +1698,7 @@ export class Planet extends RenderNode {
|
|
|
1886
1698
|
}
|
|
1887
1699
|
|
|
1888
1700
|
getEntityTerrainPoint(entity, res) {
|
|
1889
|
-
let n = this._renderedNodes,
|
|
1890
|
-
i = n.length;
|
|
1701
|
+
let n = this._renderedNodes, i = n.length;
|
|
1891
1702
|
while (i--) {
|
|
1892
1703
|
if (n[i].segment.isEntityInside(entity)) {
|
|
1893
1704
|
return n[i].segment.getEntityTerrainPoint(entity, res);
|