@openglobus/og 0.13.12 → 0.14.2
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/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 -280
- 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/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,34 +998,20 @@ export class Planet extends RenderNode {
|
|
|
1136
998
|
this.minCurrZoom = math.MAX;
|
|
1137
999
|
this.maxCurrZoom = math.MIN;
|
|
1138
1000
|
|
|
1139
|
-
this.
|
|
1001
|
+
this.quadTreeStrategy.collectRenderNodes();
|
|
1140
1002
|
|
|
1141
|
-
if (cam.slope > this.minEqualZoomCameraSlope &&
|
|
1142
|
-
cam._lonLat.height < this.maxEqualZoomAltitude &&
|
|
1143
|
-
cam._lonLat.height > this.minEqualZoomAltitude
|
|
1144
|
-
) {
|
|
1003
|
+
if (cam.slope > this.minEqualZoomCameraSlope && cam._lonLat.height < this.maxEqualZoomAltitude && cam._lonLat.height > this.minEqualZoomAltitude) {
|
|
1145
1004
|
|
|
1146
1005
|
this.minCurrZoom = this.maxCurrZoom;
|
|
1147
1006
|
|
|
1148
|
-
let temp = this._renderedNodes,
|
|
1149
|
-
rf = this._renderedNodesInFrustum,
|
|
1150
|
-
temp2 = [];
|
|
1151
|
-
|
|
1152
|
-
this._renderedNodes = [];
|
|
1153
|
-
|
|
1154
|
-
// clearing nodes in frustums
|
|
1155
|
-
for (let i = 0, len = this._renderedNodesInFrustum.length; i < len; i++) {
|
|
1156
|
-
this._renderedNodesInFrustum[i].length = 0;
|
|
1157
|
-
this._renderedNodesInFrustum[i] = [];
|
|
1158
|
-
}
|
|
1007
|
+
let temp = this._renderedNodes, rf = this._renderedNodesInFrustum, temp2 = [];
|
|
1159
1008
|
|
|
1160
1009
|
for (var i = 0, len = temp.length; i < len; i++) {
|
|
1161
1010
|
var ri = temp[i];
|
|
1162
1011
|
let ht = ri.segment.centerNormal.dot(cam._b);
|
|
1163
1012
|
if (ri.segment.tileZoom === this.maxCurrZoom || ht < HORIZON_TANGENT) {
|
|
1164
1013
|
this._renderedNodes.push(ri);
|
|
1165
|
-
let k = 0,
|
|
1166
|
-
inFrustum = ri.inFrustum;
|
|
1014
|
+
let k = 0, inFrustum = ri.inFrustum;
|
|
1167
1015
|
while (inFrustum) {
|
|
1168
1016
|
if (inFrustum & 1) {
|
|
1169
1017
|
rf[k].push(ri);
|
|
@@ -1181,8 +1029,6 @@ export class Planet extends RenderNode {
|
|
|
1181
1029
|
}
|
|
1182
1030
|
}
|
|
1183
1031
|
|
|
1184
|
-
this._quadTreeNorth.renderTree(cam, 0, null);
|
|
1185
|
-
this._quadTreeSouth.renderTree(cam, 0, null);
|
|
1186
1032
|
}
|
|
1187
1033
|
|
|
1188
1034
|
_globalPreDraw() {
|
|
@@ -1254,11 +1100,10 @@ export class Planet extends RenderNode {
|
|
|
1254
1100
|
let h = renderer.handler;
|
|
1255
1101
|
let gl = h.gl;
|
|
1256
1102
|
let cam = renderer.activeCamera;
|
|
1257
|
-
let frustumIndex = cam.getCurrentFrustum(),
|
|
1258
|
-
firstPass = frustumIndex === cam.FARTHEST_FRUSTUM_INDEX;
|
|
1103
|
+
let frustumIndex = cam.getCurrentFrustum(), firstPass = frustumIndex === cam.FARTHEST_FRUSTUM_INDEX;
|
|
1259
1104
|
|
|
1260
1105
|
if (firstPass) {
|
|
1261
|
-
if (this._skipPreRender
|
|
1106
|
+
if (this._skipPreRender) {
|
|
1262
1107
|
this._collectRenderNodes();
|
|
1263
1108
|
}
|
|
1264
1109
|
this._skipPreRender = true;
|
|
@@ -1299,15 +1144,19 @@ export class Planet extends RenderNode {
|
|
|
1299
1144
|
gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
|
|
1300
1145
|
gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
|
|
1301
1146
|
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1147
|
+
if (this.baseLayer) {
|
|
1148
|
+
gl.uniform3fv(shu.diffuse, this.baseLayer._diffuse || this._diffuse);
|
|
1149
|
+
gl.uniform3fv(shu.ambient, this.baseLayer._ambient || this._ambient);
|
|
1150
|
+
gl.uniform4fv(shu.specular, this.baseLayer._specular || this._specular);
|
|
1151
|
+
} else {
|
|
1152
|
+
gl.uniform3fv(shu.diffuse, this._diffuse);
|
|
1153
|
+
gl.uniform3fv(shu.ambient, this._ambient);
|
|
1154
|
+
gl.uniform4fv(shu.specular, this._specular);
|
|
1155
|
+
}
|
|
1305
1156
|
|
|
1306
1157
|
// bind night glowing material
|
|
1307
1158
|
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
|
-
);
|
|
1159
|
+
gl.bindTexture(gl.TEXTURE_2D, (this.camera._lonLat.height > 329958.0 && (this._nightTexture || this.transparentTexture)) || this.transparentTexture);
|
|
1311
1160
|
gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
|
|
1312
1161
|
|
|
1313
1162
|
// bind specular material
|
|
@@ -1327,8 +1176,7 @@ export class Planet extends RenderNode {
|
|
|
1327
1176
|
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
|
1328
1177
|
|
|
1329
1178
|
// drawing planet nodes
|
|
1330
|
-
var rn = this._renderedNodesInFrustum[frustumIndex],
|
|
1331
|
-
sl = this._visibleTileLayerSlices;
|
|
1179
|
+
var rn = this._renderedNodesInFrustum[frustumIndex], sl = this._visibleTileLayerSlices;
|
|
1332
1180
|
|
|
1333
1181
|
if (sl.length) {
|
|
1334
1182
|
let sli = sl[0];
|
|
@@ -1403,8 +1251,7 @@ export class Planet extends RenderNode {
|
|
|
1403
1251
|
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
|
1404
1252
|
|
|
1405
1253
|
// drawing planet nodes
|
|
1406
|
-
let rn = this._renderedNodesInFrustum[frustumIndex],
|
|
1407
|
-
sl = this._visibleTileLayerSlices;
|
|
1254
|
+
let rn = this._renderedNodesInFrustum[frustumIndex], sl = this._visibleTileLayerSlices;
|
|
1408
1255
|
|
|
1409
1256
|
let i = rn.length;
|
|
1410
1257
|
while (i--) {
|
|
@@ -1440,8 +1287,7 @@ export class Planet extends RenderNode {
|
|
|
1440
1287
|
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
|
1441
1288
|
|
|
1442
1289
|
// drawing planet nodes
|
|
1443
|
-
var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()],
|
|
1444
|
-
sl = this._visibleTileLayerSlices;
|
|
1290
|
+
var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()], sl = this._visibleTileLayerSlices;
|
|
1445
1291
|
|
|
1446
1292
|
let i = rn.length;
|
|
1447
1293
|
while (i--) {
|
|
@@ -1486,8 +1332,7 @@ export class Planet extends RenderNode {
|
|
|
1486
1332
|
gl.uniform3fv(shu.frustumPickingColor, cam.frustum._pickingColorU);
|
|
1487
1333
|
|
|
1488
1334
|
// drawing planet nodes
|
|
1489
|
-
var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()],
|
|
1490
|
-
sl = this._visibleTileLayerSlices;
|
|
1335
|
+
var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()], sl = this._visibleTileLayerSlices;
|
|
1491
1336
|
|
|
1492
1337
|
let i = rn.length;
|
|
1493
1338
|
while (i--) {
|
|
@@ -1537,16 +1382,11 @@ export class Planet extends RenderNode {
|
|
|
1537
1382
|
this.terrain.abortLoading();
|
|
1538
1383
|
this._tileLoader.abortAll();
|
|
1539
1384
|
|
|
1540
|
-
var that = this;
|
|
1541
|
-
// setTimeout(function () {
|
|
1542
|
-
that._quadTree.clearTree();
|
|
1543
|
-
that._quadTreeNorth.clearTree();
|
|
1544
|
-
that._quadTreeSouth.clearTree();
|
|
1545
1385
|
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1386
|
+
this.quadTreeStrategy.clear();
|
|
1387
|
+
this.layerLock.free(this._memKey);
|
|
1388
|
+
this.terrainLock.free(this._memKey);
|
|
1389
|
+
this._normalMapCreator.free(this._memKey);
|
|
1550
1390
|
|
|
1551
1391
|
this._createdNodesCount = 0;
|
|
1552
1392
|
}
|
|
@@ -1686,11 +1526,9 @@ export class Planet extends RenderNode {
|
|
|
1686
1526
|
return this.getDistanceFromPixelEllipsoid(px) || 0;
|
|
1687
1527
|
} else {
|
|
1688
1528
|
|
|
1689
|
-
let r = this.renderer,
|
|
1690
|
-
cnv = this.renderer.handler.canvas;
|
|
1529
|
+
let r = this.renderer, cnv = this.renderer.handler.canvas;
|
|
1691
1530
|
|
|
1692
|
-
let spx = px.x / cnv.width,
|
|
1693
|
-
spy = (cnv.height - px.y) / cnv.height;
|
|
1531
|
+
let spx = px.x / cnv.width, spy = (cnv.height - px.y) / cnv.height;
|
|
1694
1532
|
|
|
1695
1533
|
_tempPickingPix_[0] = _tempPickingPix_[1] = _tempPickingPix_[2] = 0.0;
|
|
1696
1534
|
|
|
@@ -1710,12 +1548,7 @@ export class Planet extends RenderNode {
|
|
|
1710
1548
|
r.screenDepthFramebuffer.activate();
|
|
1711
1549
|
if (r.screenDepthFramebuffer.isComplete()) {
|
|
1712
1550
|
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
|
-
);
|
|
1551
|
+
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
1552
|
let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
|
|
1720
1553
|
let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1721
1554
|
dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
|
|
@@ -1742,12 +1575,7 @@ export class Planet extends RenderNode {
|
|
|
1742
1575
|
* where index 0 - southwest longitude, 1 - latitude southwest, 2 - longitude northeast, 3 - latitude northeast.
|
|
1743
1576
|
*/
|
|
1744
1577
|
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
|
-
);
|
|
1578
|
+
this.renderer.activeCamera.viewExtent(new Extent(new LonLat(extentArr[0], extentArr[1]), new LonLat(extentArr[2], extentArr[3])));
|
|
1751
1579
|
}
|
|
1752
1580
|
|
|
1753
1581
|
/**
|
|
@@ -1802,14 +1630,7 @@ export class Planet extends RenderNode {
|
|
|
1802
1630
|
* @param {cameraCallback} [completeCallback] - Callback that calls befor the flying begins.
|
|
1803
1631
|
*/
|
|
1804
1632
|
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
|
-
);
|
|
1633
|
+
this.renderer.activeCamera.flyExtent(extent, height, up, ampl, completeCallback, startCallback);
|
|
1813
1634
|
}
|
|
1814
1635
|
|
|
1815
1636
|
/**
|
|
@@ -1824,15 +1645,7 @@ export class Planet extends RenderNode {
|
|
|
1824
1645
|
* @param [frameCallback]
|
|
1825
1646
|
*/
|
|
1826
1647
|
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
|
-
);
|
|
1648
|
+
this.renderer.activeCamera.flyCartesian(cartesian, look, up, ampl, completeCallback, startCallback, frameCallback);
|
|
1836
1649
|
}
|
|
1837
1650
|
|
|
1838
1651
|
/**
|
|
@@ -1847,15 +1660,7 @@ export class Planet extends RenderNode {
|
|
|
1847
1660
|
* @param [frameCallback]
|
|
1848
1661
|
*/
|
|
1849
1662
|
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
|
-
);
|
|
1663
|
+
this.renderer.activeCamera.flyLonLat(lonlat, look, up, ampl, completeCallback, startCallback, frameCallback);
|
|
1859
1664
|
}
|
|
1860
1665
|
|
|
1861
1666
|
/**
|
|
@@ -1886,8 +1691,7 @@ export class Planet extends RenderNode {
|
|
|
1886
1691
|
}
|
|
1887
1692
|
|
|
1888
1693
|
getEntityTerrainPoint(entity, res) {
|
|
1889
|
-
let n = this._renderedNodes,
|
|
1890
|
-
i = n.length;
|
|
1694
|
+
let n = this._renderedNodes, i = n.length;
|
|
1891
1695
|
while (i--) {
|
|
1892
1696
|
if (n[i].segment.isEntityInside(entity)) {
|
|
1893
1697
|
return n[i].segment.getEntityTerrainPoint(entity, res);
|