@openglobus/og 0.14.10 → 0.15.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/css/og.css +378 -275
- 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 +18 -17
- package/src/og/Clock.js +218 -194
- package/src/og/Globe.js +5 -5
- package/src/og/Object3d.js +104 -145
- package/src/og/camera/Camera.js +31 -27
- package/src/og/camera/PlanetCamera.js +22 -14
- package/src/og/cons.js +107 -107
- package/src/og/control/Atmosphere.js +396 -0
- package/src/og/control/CompassButton.js +11 -18
- package/src/og/control/Control.js +197 -188
- package/src/og/control/GeoImageDragControl.js +84 -66
- package/src/og/control/LayerSwitcher.js +56 -138
- package/src/og/control/Lighting.js +314 -186
- package/src/og/control/MouseNavigation.js +2 -2
- package/src/og/control/RulerSwitcher.js +24 -19
- package/src/og/control/ScaleControl.js +30 -10
- package/src/og/control/SimpleSkyBackground.js +210 -0
- package/src/og/control/Sun.js +3 -1
- package/src/og/control/ZoomControl.js +30 -42
- package/src/og/control/index.js +6 -0
- package/src/og/control/ruler/RulerScene.js +5 -23
- package/src/og/control/selection/Selection.js +99 -0
- package/src/og/control/selection/SelectionScene.js +350 -0
- package/src/og/control/timeline/TimelineControl.js +99 -0
- package/src/og/control/timeline/TimelineModel.js +133 -0
- package/src/og/control/timeline/TimelineView.js +449 -0
- package/src/og/control/timeline/timelineUtils.js +132 -0
- package/src/og/ellipsoid/Ellipsoid.js +120 -93
- package/src/og/ellipsoid/wgs84.js +13 -13
- package/src/og/entity/Entity.js +36 -9
- package/src/og/entity/EntityCollection.js +0 -2
- package/src/og/entity/GeoObject.js +72 -56
- package/src/og/entity/GeoObjectHandler.js +487 -656
- 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 +13 -7
- package/src/og/input/input.js +3 -1
- package/src/og/layer/CanvasTiles.js +39 -34
- package/src/og/layer/Layer.js +69 -9
- package/src/og/layer/Material.js +1 -8
- package/src/og/layer/WMS.js +16 -5
- package/src/og/light/LightSource.js +2 -0
- 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/Node.js +5 -4
- package/src/og/quadTree/index.js +12 -0
- package/src/og/renderer/Renderer.js +64 -37
- package/src/og/renderer/RendererEvents.js +1071 -1065
- package/src/og/scene/Planet.js +354 -174
- package/src/og/scene/RenderNode.js +27 -12
- package/src/og/segment/Segment.js +0 -5
- package/src/og/shaders/atmos.js +332 -0
- package/src/og/shaders/drawnode.js +475 -109
- package/src/og/shaders/geoObject.js +96 -51
- package/src/og/shaders/polyline.js +212 -17
- package/src/og/shaders/ray.js +13 -6
- package/src/og/shaders/toneMapping.js +5 -5
- package/src/og/shaders/utils.js +88 -0
- package/src/og/terrain/GlobusTerrain.js +5 -4
- package/src/og/terrain/MapboxTerrain.js +231 -52
- package/src/og/ui/Button.js +106 -0
- package/src/og/ui/ButtonGroup.js +57 -0
- package/src/og/ui/Dialog.js +242 -0
- package/src/og/ui/Slider.js +144 -0
- package/src/og/ui/ToggleButton.js +51 -0
- package/src/og/{control → ui}/UIhelpers.js +11 -2
- package/src/og/ui/View.js +190 -0
- package/src/og/utils/shared.js +960 -942
- package/src/og/webgl/Framebuffer.js +308 -387
- package/src/og/webgl/Handler.js +90 -30
- package/src/og/webgl/Multisample.js +8 -0
- package/types/Clock.d.ts +7 -2
- package/types/Object3d.d.ts +14 -3
- package/types/camera/Camera.d.ts +18 -17
- package/types/camera/PlanetCamera.d.ts +3 -1
- package/types/control/Atmosphere.d.ts +15 -0
- package/types/control/CompassButton.d.ts +1 -2
- package/types/control/GeoImageDragControl.d.ts +7 -1
- package/types/control/LayerSwitcher.d.ts +5 -6
- package/types/control/Lighting.d.ts +32 -7
- package/types/control/ScaleControl.d.ts +2 -1
- package/types/control/SimpleSkyBackground.d.ts +15 -0
- package/types/control/ZoomControl.d.ts +0 -1
- package/types/control/index.d.ts +4 -1
- package/types/control/ruler/RulerScene.d.ts +0 -1
- package/types/control/selection/Selection.d.ts +49 -0
- package/types/control/selection/SelectionScene.d.ts +34 -0
- package/types/ellipsoid/Ellipsoid.d.ts +3 -2
- package/types/entity/Entity.d.ts +8 -0
- package/types/entity/GeoObject.d.ts +28 -22
- package/types/entity/GeoObjectHandler.d.ts +16 -56
- package/types/entity/Ray.d.ts +0 -3
- package/types/entity/RayHandler.d.ts +0 -4
- package/types/index.d.ts +9 -6
- package/types/input/input.d.ts +2 -0
- package/types/layer/CanvasTiles.d.ts +1 -0
- package/types/layer/Layer.d.ts +9 -0
- package/types/layer/WMS.d.ts +7 -3
- package/types/math/Plane.d.ts +1 -1
- 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/index.d.ts +10 -0
- package/types/renderer/Renderer.d.ts +11 -37
- package/types/scene/Planet.d.ts +27 -1
- package/types/scene/RenderNode.d.ts +2 -1
- package/types/segment/Segment.d.ts +1 -1
- package/types/shaders/atmos.d.ts +4 -0
- package/types/shaders/drawnode.d.ts +3 -2
- package/types/shaders/utils.d.ts +1 -0
- package/types/terrain/GlobusTerrain.d.ts +1 -1
- package/types/terrain/MapboxTerrain.d.ts +2 -1
- package/types/ui/Button.d.ts +21 -0
- package/types/ui/Dialog.d.ts +41 -0
- package/types/ui/Slider.d.ts +30 -0
- package/types/ui/ToggleButton.d.ts +10 -0
- package/types/{control → ui}/UIhelpers.d.ts +1 -1
- package/types/ui/View.d.ts +32 -0
- package/types/utils/shared.d.ts +16 -14
- package/types/webgl/Framebuffer.d.ts +2 -5
- package/types/webgl/Handler.d.ts +15 -10
- package/types/webgl/Multisample.d.ts +2 -0
- package/src/og/ajax.js +0 -204
- package/src/og/entity/Object3d.js +0 -504
- package/src/og/utils/quadTreeType.js +0 -11
- package/types/ajax.d.ts +0 -24
- package/types/utils/quadTreeType.d.ts +0 -8
package/src/og/scene/Planet.js
CHANGED
|
@@ -30,16 +30,17 @@ import { VectorTileCreator } from "../utils/VectorTileCreator.js";
|
|
|
30
30
|
import { wgs84 } from "../ellipsoid/wgs84.js";
|
|
31
31
|
import { NIGHT, SPECULAR } from "../res/images.js";
|
|
32
32
|
import { Geoid } from "../terrain/Geoid.js";
|
|
33
|
-
import { isUndef } from "../utils/shared.js";
|
|
33
|
+
import { createColorRGB, isUndef } from "../utils/shared.js";
|
|
34
34
|
import { MAX_RENDERED_NODES } from "../quadTree/quadTree.js";
|
|
35
35
|
import { EarthQuadTreeStrategy } from "../quadTree/EarthQuadTreeStrategy.js";
|
|
36
|
+
import { SimpleSkyBackground } from "../control/SimpleSkyBackground.js";
|
|
37
|
+
import { Atmosphere } from "../control/Atmosphere.js";
|
|
36
38
|
|
|
37
39
|
const CUR_LOD_SIZE = 250; //px
|
|
38
40
|
const MIN_LOD_SIZE = 312; //px
|
|
39
41
|
const MAX_LOD_SIZE = 190; //px
|
|
40
42
|
|
|
41
|
-
let _tempPickingPix_ = new Uint8Array(4),
|
|
42
|
-
_tempDepthColor_ = new Uint8Array(4);
|
|
43
|
+
let _tempPickingPix_ = new Uint8Array(4), _tempDepthColor_ = new Uint8Array(4);
|
|
43
44
|
|
|
44
45
|
const DEPTH_DISTANCE = 11;//m
|
|
45
46
|
|
|
@@ -53,11 +54,10 @@ const MAX_NODES = 200;
|
|
|
53
54
|
|
|
54
55
|
const HORIZON_TANGENT = 0.81;
|
|
55
56
|
|
|
56
|
-
const EVENT_NAMES = [
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
*/
|
|
57
|
+
const EVENT_NAMES = [/**
|
|
58
|
+
* Triggered before globe frame begins to render.
|
|
59
|
+
* @event og.scene.Planet#draw
|
|
60
|
+
*/
|
|
61
61
|
"draw",
|
|
62
62
|
|
|
63
63
|
/**
|
|
@@ -100,8 +100,7 @@ const EVENT_NAMES = [
|
|
|
100
100
|
* Triggered when layer data is laded
|
|
101
101
|
* @event og.scene.Planet#terraincompleted
|
|
102
102
|
*/
|
|
103
|
-
"layerloadend"
|
|
104
|
-
];
|
|
103
|
+
"layerloadend"];
|
|
105
104
|
|
|
106
105
|
/**
|
|
107
106
|
* Main class for rendering planet
|
|
@@ -124,12 +123,7 @@ export class Planet extends RenderNode {
|
|
|
124
123
|
constructor(options = {}) {
|
|
125
124
|
super(options.name);
|
|
126
125
|
|
|
127
|
-
this._cameraFrustums = options.frustums || [
|
|
128
|
-
[1, 100 + 0.075],
|
|
129
|
-
[100, 1000 + 0.075],
|
|
130
|
-
[1000, 1e6 + 10000],
|
|
131
|
-
[1e6, 1e9]
|
|
132
|
-
];
|
|
126
|
+
this._cameraFrustums = options.frustums || [[1, 100 + 0.075], [100, 1000 + 0.075], [1000, 1e6 + 10000], [1e6, 1e9]];
|
|
133
127
|
|
|
134
128
|
/**
|
|
135
129
|
* @public
|
|
@@ -348,10 +342,10 @@ export class Planet extends RenderNode {
|
|
|
348
342
|
this._specularTexture = null;
|
|
349
343
|
|
|
350
344
|
//TODO: replace to a function
|
|
351
|
-
let a = utils.createColorRGB(options.ambient, new Vec3(0.2, 0.2, 0.
|
|
352
|
-
let d = utils.createColorRGB(options.diffuse, new Vec3(0
|
|
353
|
-
let s = utils.createColorRGB(options.specular, new Vec3(0.
|
|
354
|
-
let shininess = options.shininess ||
|
|
345
|
+
let a = utils.createColorRGB(options.ambient, new Vec3(0.2, 0.2, 0.3));
|
|
346
|
+
let d = utils.createColorRGB(options.diffuse, new Vec3(1.0, 1.0, 1.0));
|
|
347
|
+
let s = utils.createColorRGB(options.specular, new Vec3(0.00063, 0.00055, 0.00032));
|
|
348
|
+
let shininess = options.shininess || 18.0;
|
|
355
349
|
|
|
356
350
|
this._ambient = new Float32Array([a.x, a.y, a.z]);
|
|
357
351
|
this._diffuse = new Float32Array([d.x, d.y, d.z]);
|
|
@@ -369,9 +363,7 @@ export class Planet extends RenderNode {
|
|
|
369
363
|
* @protected
|
|
370
364
|
* @type {boolean}
|
|
371
365
|
*/
|
|
372
|
-
this._useSpecularTexture = isUndef(options.useSpecularTexture)
|
|
373
|
-
? true
|
|
374
|
-
: options.useSpecularTexture;
|
|
366
|
+
this._useSpecularTexture = isUndef(options.useSpecularTexture) ? true : options.useSpecularTexture;
|
|
375
367
|
|
|
376
368
|
this._maxGridSize = Math.log2(options.maxGridSize || 128);
|
|
377
369
|
|
|
@@ -432,14 +424,76 @@ export class Planet extends RenderNode {
|
|
|
432
424
|
|
|
433
425
|
this._terrainCompleted = false;
|
|
434
426
|
this._terrainCompletedActivated = false;
|
|
427
|
+
this._collectRenderNodesIsActive = true;
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* Night texture brightness coefficient
|
|
431
|
+
* @type {number}
|
|
432
|
+
*/
|
|
433
|
+
this.nightTextureCoefficient = 2.0;
|
|
434
|
+
|
|
435
|
+
this._renderScreenNodesPASS = this._renderScreenNodesPASSNoAtmos;
|
|
436
|
+
|
|
437
|
+
this._atmosphereEnabled = options.atmosphereEnabled || false;
|
|
438
|
+
this._atmosphereMaxMinOpacity = new Float32Array([1.0, 0.41]);
|
|
435
439
|
}
|
|
436
440
|
|
|
437
441
|
static getBearingNorthRotationQuat(cartesian) {
|
|
442
|
+
//
|
|
443
|
+
// TODO: fix normal for ellipsoid
|
|
444
|
+
//
|
|
438
445
|
let n = cartesian.normal();
|
|
439
446
|
let t = Vec3.proj_b_to_plane(Vec3.UNIT_Y, n);
|
|
440
447
|
return Quat.getLookRotation(t, n);
|
|
441
448
|
}
|
|
442
449
|
|
|
450
|
+
set atmosphereMaxOpacity(opacity) {
|
|
451
|
+
this._atmosphereMaxMinOpacity[0] = opacity;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
get atmosphereMaxOpacity() {
|
|
455
|
+
return this._atmosphereMaxMinOpacity[0];
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
set atmosphereMinOpacity(opacity) {
|
|
459
|
+
this._atmosphereMaxMinOpacity[1] = opacity;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
get atmosphereMinOpacity() {
|
|
463
|
+
return this._atmosphereMaxMinOpacity[1];
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
set atmosphereEnabled(enabled) {
|
|
468
|
+
if (enabled != this._atmosphereEnabled) {
|
|
469
|
+
this._atmosphereEnabled = enabled;
|
|
470
|
+
this._initializeAtmosphere();
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
get atmosphereEnabled() {
|
|
475
|
+
return this._atmosphereEnabled;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
set diffuse(rgb) {
|
|
479
|
+
let vec = createColorRGB(rgb);
|
|
480
|
+
this._diffuse = new Float32Array(vec.toArray());
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
set ambient(rgb) {
|
|
484
|
+
let vec = createColorRGB(rgb);
|
|
485
|
+
this._ambient = new Float32Array(vec.toArray());
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
set specular(rgb) {
|
|
489
|
+
let vec = createColorRGB(rgb);
|
|
490
|
+
this._specular = new Float32Array([vec.x, vec.y, vec.y, this._specular[3]]);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
set shininess(v) {
|
|
494
|
+
this._specular[3] = v;
|
|
495
|
+
}
|
|
496
|
+
|
|
443
497
|
get normalMapCreator() {
|
|
444
498
|
return this._normalMapCreator;
|
|
445
499
|
}
|
|
@@ -448,6 +502,10 @@ export class Planet extends RenderNode {
|
|
|
448
502
|
return [...this._layers];
|
|
449
503
|
}
|
|
450
504
|
|
|
505
|
+
get sunPos() {
|
|
506
|
+
return this.renderer.controls.sun.sunlight.getPosition();
|
|
507
|
+
}
|
|
508
|
+
|
|
451
509
|
/**
|
|
452
510
|
* Add the given control to the renderer of the planet scene.
|
|
453
511
|
* @param {control.Control} control - Control.
|
|
@@ -628,24 +686,66 @@ export class Planet extends RenderNode {
|
|
|
628
686
|
terrain._isReady = true;
|
|
629
687
|
})
|
|
630
688
|
.catch((err) => {
|
|
631
|
-
console.
|
|
689
|
+
console.warn(err);
|
|
632
690
|
});
|
|
633
691
|
}
|
|
634
692
|
}
|
|
635
693
|
|
|
694
|
+
_initializeAtmosphere() {
|
|
695
|
+
let h = this.renderer.handler;
|
|
696
|
+
h.removeProgram("drawnode_screen_wl");
|
|
697
|
+
|
|
698
|
+
if (this._atmosphereEnabled) {
|
|
699
|
+
|
|
700
|
+
this._renderScreenNodesPASS = this._renderScreenNodesPASSAtmos;
|
|
701
|
+
|
|
702
|
+
if (h.isWebGl2()) {
|
|
703
|
+
h.addProgram(shaders.drawnode_screen_wl_webgl2Atmos(), true);
|
|
704
|
+
} else {
|
|
705
|
+
h.addProgram(shaders.drawnode_screen_wl_webgl1NoAtmos(), true);
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
if (!this.renderer.controls.Atmosphere) {
|
|
709
|
+
this.addControl(new Atmosphere());
|
|
710
|
+
} else {
|
|
711
|
+
this.renderer.controls.Atmosphere.activate();
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
if (this.renderer.controls.SimpleSkyBackground) {
|
|
715
|
+
this.renderer.controls.SimpleSkyBackground.deactivate();
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
} else {
|
|
719
|
+
|
|
720
|
+
this._renderScreenNodesPASS = this._renderScreenNodesPASSNoAtmos;
|
|
721
|
+
|
|
722
|
+
|
|
723
|
+
if (this.renderer.controls.Atmosphere) {
|
|
724
|
+
this.renderer.controls.Atmosphere.deactivate();
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
if (!this.renderer.controls.SimpleSkyBackground) {
|
|
728
|
+
this.addControl(new SimpleSkyBackground());
|
|
729
|
+
} else {
|
|
730
|
+
this.renderer.controls.SimpleSkyBackground.activate();
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
if (h.isWebGl2()) {
|
|
734
|
+
h.addProgram(shaders.drawnode_screen_wl_webgl2NoAtmos(), true);
|
|
735
|
+
} else {
|
|
736
|
+
h.addProgram(shaders.drawnode_screen_wl_webgl1NoAtmos(), true);
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
|
|
636
741
|
/**
|
|
637
742
|
* @virtual
|
|
638
743
|
* @protected
|
|
639
744
|
*/
|
|
640
745
|
_initializeShaders() {
|
|
641
|
-
|
|
746
|
+
let h = this.renderer.handler;
|
|
642
747
|
|
|
643
748
|
h.addProgram(shaders.drawnode_screen_nl(), true);
|
|
644
|
-
if (h.isWebGl2()) {
|
|
645
|
-
h.addProgram(shaders.drawnode_screen_wl_webgl2(), true);
|
|
646
|
-
} else {
|
|
647
|
-
h.addProgram(shaders.drawnode_screen_wl(), true);
|
|
648
|
-
}
|
|
649
749
|
h.addProgram(shaders.drawnode_colorPicking(), true);
|
|
650
750
|
h.addProgram(shaders.drawnode_depth(), true);
|
|
651
751
|
h.addProgram(shaders.drawnode_heightPicking(), true);
|
|
@@ -655,8 +755,7 @@ export class Planet extends RenderNode {
|
|
|
655
755
|
this.renderer.addDepthCallback(this, this._renderDepthFramebufferPASS);
|
|
656
756
|
|
|
657
757
|
this._heightPickingFramebuffer = new Framebuffer(this.renderer.handler, {
|
|
658
|
-
width: 320,
|
|
659
|
-
height: 240
|
|
758
|
+
width: 320, height: 240
|
|
660
759
|
});
|
|
661
760
|
|
|
662
761
|
this._heightPickingFramebuffer.init();
|
|
@@ -686,11 +785,9 @@ export class Planet extends RenderNode {
|
|
|
686
785
|
for (var j = 0; j <= TABLESIZE; j++) {
|
|
687
786
|
!this._indexesCache[i][j] && (this._indexesCache[i][j] = new Array(TABLESIZE));
|
|
688
787
|
for (var k = 0; k <= TABLESIZE; k++) {
|
|
689
|
-
!this._indexesCache[i][j][k] &&
|
|
690
|
-
(this._indexesCache[i][j][k] = new Array(TABLESIZE));
|
|
788
|
+
!this._indexesCache[i][j][k] && (this._indexesCache[i][j][k] = new Array(TABLESIZE));
|
|
691
789
|
for (var m = 0; m <= TABLESIZE; m++) {
|
|
692
|
-
!this._indexesCache[i][j][k][m] &&
|
|
693
|
-
(this._indexesCache[i][j][k][m] = new Array(TABLESIZE));
|
|
790
|
+
!this._indexesCache[i][j][k][m] && (this._indexesCache[i][j][k][m] = new Array(TABLESIZE));
|
|
694
791
|
for (var q = 0; q <= TABLESIZE; q++) {
|
|
695
792
|
let ptr = {
|
|
696
793
|
buffer: null
|
|
@@ -700,10 +797,7 @@ export class Planet extends RenderNode {
|
|
|
700
797
|
let indexes = segmentHelper
|
|
701
798
|
.getInstance()
|
|
702
799
|
.createSegmentIndexes(i, [j, k, m, q]);
|
|
703
|
-
ptr.buffer = this.renderer.handler.createElementArrayBuffer(
|
|
704
|
-
indexes,
|
|
705
|
-
1
|
|
706
|
-
);
|
|
800
|
+
ptr.buffer = this.renderer.handler.createElementArrayBuffer(indexes, 1);
|
|
707
801
|
indexes = null;
|
|
708
802
|
} else {
|
|
709
803
|
this._indexesCacheToRemove[kk++] = ptr;
|
|
@@ -727,11 +821,7 @@ export class Planet extends RenderNode {
|
|
|
727
821
|
let texCoordCache = segmentHelper.getInstance().initTextureCoordsTable(TABLESIZE + 1);
|
|
728
822
|
|
|
729
823
|
for (let i = 0; i <= TABLESIZE; i++) {
|
|
730
|
-
this._textureCoordsBufferCache[i] = this.renderer.handler.createArrayBuffer(
|
|
731
|
-
texCoordCache[i],
|
|
732
|
-
2,
|
|
733
|
-
((1 << i) + 1) * ((1 << i) + 1)
|
|
734
|
-
);
|
|
824
|
+
this._textureCoordsBufferCache[i] = this.renderer.handler.createArrayBuffer(texCoordCache[i], 2, ((1 << i) + 1) * ((1 << i) + 1));
|
|
735
825
|
}
|
|
736
826
|
|
|
737
827
|
texCoordCache = null;
|
|
@@ -761,7 +851,6 @@ export class Planet extends RenderNode {
|
|
|
761
851
|
this._renderedNodesInFrustum[i] = [];
|
|
762
852
|
}
|
|
763
853
|
|
|
764
|
-
|
|
765
854
|
// Creating quad trees nodes
|
|
766
855
|
this.quadTreeStrategy.init();
|
|
767
856
|
|
|
@@ -770,22 +859,20 @@ export class Planet extends RenderNode {
|
|
|
770
859
|
// Applying shaders
|
|
771
860
|
this._initializeShaders();
|
|
772
861
|
|
|
862
|
+
this._initializeAtmosphere();
|
|
863
|
+
|
|
773
864
|
this._updateVisibleLayers();
|
|
774
865
|
|
|
775
866
|
this.renderer.addPickingCallback(this, this._frustumEntityCollectionPickingCallback);
|
|
776
867
|
|
|
777
868
|
// loading Earth night glowing texture
|
|
778
869
|
if (this._useNightTexture) {
|
|
779
|
-
createImageBitmap(NIGHT).then(
|
|
780
|
-
(e) => (this._nightTexture = this.renderer.handler.createTextureDefault(e))
|
|
781
|
-
);
|
|
870
|
+
createImageBitmap(NIGHT).then((e) => (this._nightTexture = this.renderer.handler.createTextureDefault(e)));
|
|
782
871
|
}
|
|
783
872
|
|
|
784
873
|
// load water specular mask
|
|
785
874
|
if (this._useSpecularTexture) {
|
|
786
|
-
createImageBitmap(SPECULAR).then(
|
|
787
|
-
(e) => (this._specularTexture = this.renderer.handler.createTexture_l(e))
|
|
788
|
-
);
|
|
875
|
+
createImageBitmap(SPECULAR).then((e) => (this._specularTexture = this.renderer.handler.createTexture_l(e)));
|
|
789
876
|
}
|
|
790
877
|
|
|
791
878
|
this._geoImageCreator = new GeoImageCreator(this);
|
|
@@ -812,8 +899,7 @@ export class Planet extends RenderNode {
|
|
|
812
899
|
|
|
813
900
|
clearIndexesCache() {
|
|
814
901
|
this._indexesCacheToRemoveCounter = 0;
|
|
815
|
-
let c = this._indexesCacheToRemove,
|
|
816
|
-
gl = this.renderer.handler.gl;
|
|
902
|
+
let c = this._indexesCacheToRemove, gl = this.renderer.handler.gl;
|
|
817
903
|
for (let i = 0, len = c.length; i < len; i++) {
|
|
818
904
|
let ci = c[i];
|
|
819
905
|
gl.deleteBuffer(ci.buffer);
|
|
@@ -947,17 +1033,13 @@ export class Planet extends RenderNode {
|
|
|
947
1033
|
* @protected
|
|
948
1034
|
*/
|
|
949
1035
|
_sortLayers() {
|
|
950
|
-
this.visibleVectorLayers.sort(
|
|
951
|
-
(a, b) => (a._zIndex - b._zIndex) || (a._height - b._height)
|
|
952
|
-
);
|
|
1036
|
+
this.visibleVectorLayers.sort((a, b) => (a._zIndex - b._zIndex) || (a._height - b._height));
|
|
953
1037
|
|
|
954
1038
|
this._visibleTileLayerSlices = [];
|
|
955
1039
|
this._visibleTileLayerSlices.length = 0;
|
|
956
1040
|
|
|
957
1041
|
if (this.visibleTileLayers.length) {
|
|
958
|
-
this.visibleTileLayers.sort((a, b) =>
|
|
959
|
-
(a._height - b._height) || (a._zIndex - b._zIndex)
|
|
960
|
-
);
|
|
1042
|
+
this.visibleTileLayers.sort((a, b) => (a._height - b._height) || (a._zIndex - b._zIndex));
|
|
961
1043
|
|
|
962
1044
|
var k = -1;
|
|
963
1045
|
var currHeight = this.visibleTileLayers[0]._height;
|
|
@@ -976,8 +1058,9 @@ export class Planet extends RenderNode {
|
|
|
976
1058
|
// clearing all node list
|
|
977
1059
|
this._renderedNodes.length = 0;
|
|
978
1060
|
this._renderedNodes = [];
|
|
1061
|
+
}
|
|
979
1062
|
|
|
980
|
-
|
|
1063
|
+
_clearRenderNodesInFrustum() {
|
|
981
1064
|
for (let i = 0, len = this._renderedNodesInFrustum.length; i < len; i++) {
|
|
982
1065
|
this._renderedNodesInFrustum[i].length = 0;
|
|
983
1066
|
this._renderedNodesInFrustum[i] = [];
|
|
@@ -990,13 +1073,12 @@ export class Planet extends RenderNode {
|
|
|
990
1073
|
*/
|
|
991
1074
|
_collectRenderNodes() {
|
|
992
1075
|
let cam = this.camera;
|
|
993
|
-
|
|
994
1076
|
this._lodSize = math.lerp(cam.slope < 0.0 ? 0.0 : cam.slope, this._curLodSize, this._minLodSize);
|
|
995
|
-
|
|
996
1077
|
cam._insideSegment = null;
|
|
997
1078
|
|
|
998
1079
|
// clear first
|
|
999
1080
|
this._clearRenderedNodeList();
|
|
1081
|
+
this._clearRenderNodesInFrustum();
|
|
1000
1082
|
|
|
1001
1083
|
this._viewExtent.southWest.set(180, 180);
|
|
1002
1084
|
this._viewExtent.northEast.set(-180, -180);
|
|
@@ -1008,32 +1090,23 @@ export class Planet extends RenderNode {
|
|
|
1008
1090
|
this.minCurrZoom = math.MAX;
|
|
1009
1091
|
this.maxCurrZoom = math.MIN;
|
|
1010
1092
|
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
) {
|
|
1093
|
+
this.quadTreeStrategy.collectRenderNodes();
|
|
1094
|
+
|
|
1095
|
+
if (cam.slope > this.minEqualZoomCameraSlope && cam._lonLat.height < this.maxEqualZoomAltitude && cam._lonLat.height > this.minEqualZoomAltitude) {
|
|
1015
1096
|
|
|
1016
1097
|
this.minCurrZoom = this.maxCurrZoom;
|
|
1017
1098
|
|
|
1018
|
-
let temp = this._renderedNodes,
|
|
1019
|
-
rf = this._renderedNodesInFrustum,
|
|
1020
|
-
temp2 = [];
|
|
1099
|
+
let temp = this._renderedNodes, rf = this._renderedNodesInFrustum, temp2 = [];
|
|
1021
1100
|
|
|
1101
|
+
this._clearRenderNodesInFrustum();
|
|
1022
1102
|
this._renderedNodes = [];
|
|
1023
1103
|
|
|
1024
|
-
// clearing nodes in frustums
|
|
1025
|
-
for (let i = 0, len = this._renderedNodesInFrustum.length; i < len; i++) {
|
|
1026
|
-
this._renderedNodesInFrustum[i].length = 0;
|
|
1027
|
-
this._renderedNodesInFrustum[i] = [];
|
|
1028
|
-
}
|
|
1029
|
-
|
|
1030
1104
|
for (var i = 0, len = temp.length; i < len; i++) {
|
|
1031
1105
|
var ri = temp[i];
|
|
1032
1106
|
let ht = ri.segment.centerNormal.dot(cam._b);
|
|
1033
1107
|
if (ri.segment.tileZoom === this.maxCurrZoom || ht < HORIZON_TANGENT) {
|
|
1034
1108
|
this._renderedNodes.push(ri);
|
|
1035
|
-
let k = 0,
|
|
1036
|
-
inFrustum = ri.inFrustum;
|
|
1109
|
+
let k = 0, inFrustum = ri.inFrustum;
|
|
1037
1110
|
while (inFrustum) {
|
|
1038
1111
|
if (inFrustum & 1) {
|
|
1039
1112
|
rf[k].push(ri);
|
|
@@ -1050,8 +1123,6 @@ export class Planet extends RenderNode {
|
|
|
1050
1123
|
temp2[i].renderTree(cam, this.maxCurrZoom, null);
|
|
1051
1124
|
}
|
|
1052
1125
|
}
|
|
1053
|
-
|
|
1054
|
-
this.quadTreeStrategy.collectRenderNodes();
|
|
1055
1126
|
}
|
|
1056
1127
|
|
|
1057
1128
|
_globalPreDraw() {
|
|
@@ -1083,6 +1154,10 @@ export class Planet extends RenderNode {
|
|
|
1083
1154
|
this._updateVisibleLayers();
|
|
1084
1155
|
}
|
|
1085
1156
|
|
|
1157
|
+
if (this.camera.isFirstPass) {
|
|
1158
|
+
this._firstPASS();
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1086
1161
|
this._renderScreenNodesPASS();
|
|
1087
1162
|
|
|
1088
1163
|
this._renderHeightPickingFramebufferPASS();
|
|
@@ -1113,43 +1188,160 @@ export class Planet extends RenderNode {
|
|
|
1113
1188
|
this._terrainCompleted = true;
|
|
1114
1189
|
}
|
|
1115
1190
|
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1191
|
+
lockQuadTree() {
|
|
1192
|
+
this._collectRenderNodesIsActive = false;
|
|
1193
|
+
this.camera.setTerrainCollisionActivity(false);
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
unlockQuadTree() {
|
|
1197
|
+
this._collectRenderNodesIsActive = true;
|
|
1198
|
+
this.camera.setTerrainCollisionActivity(true);
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
_firstPASS() {
|
|
1202
|
+
|
|
1203
|
+
if (this._skipPreRender && this._collectRenderNodesIsActive) {
|
|
1204
|
+
this._collectRenderNodes();
|
|
1205
|
+
}
|
|
1206
|
+
this._skipPreRender = true;
|
|
1207
|
+
|
|
1208
|
+
// Here is the planet node dispatches a draw event before
|
|
1209
|
+
// rendering begins and we have got render nodes.
|
|
1210
|
+
this.events.dispatch(this.events.draw, this);
|
|
1211
|
+
|
|
1212
|
+
this.transformLights();
|
|
1213
|
+
|
|
1214
|
+
this._normalMapCreator.frame();
|
|
1215
|
+
|
|
1216
|
+
// Creating geoImages textures.
|
|
1217
|
+
this._geoImageCreator.frame();
|
|
1218
|
+
|
|
1219
|
+
// Collect entity collections from vector layers
|
|
1220
|
+
this._collectVectorLayerCollections();
|
|
1221
|
+
|
|
1222
|
+
// Vector tiles rasteriazation
|
|
1223
|
+
this._vectorTileCreator.frame();
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1226
|
+
_renderScreenNodesPASSNoAtmos() {
|
|
1120
1227
|
|
|
1121
1228
|
let sh, shu;
|
|
1122
1229
|
let renderer = this.renderer;
|
|
1123
1230
|
let h = renderer.handler;
|
|
1124
1231
|
let gl = h.gl;
|
|
1125
1232
|
let cam = renderer.activeCamera;
|
|
1126
|
-
let
|
|
1127
|
-
|
|
1233
|
+
let firstPass = cam.isFirstPass;
|
|
1234
|
+
let frustumIndex = cam.currentFrustumIndex;
|
|
1128
1235
|
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1236
|
+
gl.enable(gl.CULL_FACE);
|
|
1237
|
+
|
|
1238
|
+
gl.enable(gl.BLEND);
|
|
1239
|
+
gl.blendEquation(gl.FUNC_ADD);
|
|
1240
|
+
gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
|
|
1241
|
+
|
|
1242
|
+
if (this.lightEnabled) {
|
|
1243
|
+
h.programs.drawnode_screen_wl.activate();
|
|
1244
|
+
sh = h.programs.drawnode_screen_wl._program;
|
|
1245
|
+
shu = sh.uniforms;
|
|
1246
|
+
|
|
1247
|
+
gl.uniform3fv(shu.lightsPositions, this._lightsPositions);
|
|
1248
|
+
gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
|
|
1249
|
+
gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
|
|
1250
|
+
|
|
1251
|
+
if (this.baseLayer) {
|
|
1252
|
+
gl.uniform3fv(shu.diffuse, this.baseLayer._diffuse || this._diffuse);
|
|
1253
|
+
gl.uniform3fv(shu.ambient, this.baseLayer._ambient || this._ambient);
|
|
1254
|
+
gl.uniform4fv(shu.specular, this.baseLayer._specular || this._specular);
|
|
1255
|
+
gl.uniform1f(shu.nightTextureCoefficient, this.baseLayer.nightTextureCoefficient || this.nightTextureCoefficient);
|
|
1256
|
+
} else {
|
|
1257
|
+
gl.uniform3fv(shu.diffuse, this._diffuse);
|
|
1258
|
+
gl.uniform3fv(shu.ambient, this._ambient);
|
|
1259
|
+
gl.uniform4fv(shu.specular, this._specular);
|
|
1260
|
+
gl.uniform1f(shu.nightTextureCoefficient, this.nightTextureCoefficient);
|
|
1132
1261
|
}
|
|
1133
|
-
this._skipPreRender = true;
|
|
1134
1262
|
|
|
1135
|
-
//
|
|
1136
|
-
//
|
|
1137
|
-
|
|
1263
|
+
//
|
|
1264
|
+
// Night and specular
|
|
1265
|
+
//
|
|
1266
|
+
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
|
|
1267
|
+
gl.bindTexture(gl.TEXTURE_2D, this._nightTexture || this.transparentTexture);
|
|
1268
|
+
gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
|
|
1269
|
+
|
|
1270
|
+
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE + 1);
|
|
1271
|
+
gl.bindTexture(gl.TEXTURE_2D, this._specularTexture || this.transparentTexture);
|
|
1272
|
+
gl.uniform1i(shu.specularTexture, this.SLICE_SIZE + 1);
|
|
1273
|
+
|
|
1274
|
+
gl.uniform1f(shu.camHeight, cam.getHeight());
|
|
1275
|
+
|
|
1276
|
+
} else {
|
|
1277
|
+
h.programs.drawnode_screen_nl.activate();
|
|
1278
|
+
sh = h.programs.drawnode_screen_nl._program;
|
|
1279
|
+
shu = sh.uniforms;
|
|
1280
|
+
gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
|
|
1281
|
+
gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
|
|
1285
|
+
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
|
1138
1286
|
|
|
1139
|
-
|
|
1287
|
+
//
|
|
1288
|
+
// drawing planet nodes
|
|
1289
|
+
//
|
|
1290
|
+
let rn = this._renderedNodesInFrustum[frustumIndex],
|
|
1291
|
+
sl = this._visibleTileLayerSlices;
|
|
1140
1292
|
|
|
1141
|
-
|
|
1293
|
+
if (sl.length) {
|
|
1294
|
+
let sli = sl[0];
|
|
1295
|
+
for (var i = sli.length - 1; i >= 0; --i) {
|
|
1296
|
+
let li = sli[i];
|
|
1297
|
+
if (li._fading && firstPass && li._refreshFadingOpacity()) {
|
|
1298
|
+
sli.splice(i, 1);
|
|
1299
|
+
}
|
|
1300
|
+
}
|
|
1301
|
+
}
|
|
1142
1302
|
|
|
1143
|
-
|
|
1144
|
-
|
|
1303
|
+
let isEq = this.terrain.equalizeVertices;
|
|
1304
|
+
i = rn.length;
|
|
1305
|
+
while (i--) {
|
|
1306
|
+
let s = rn[i].segment;
|
|
1307
|
+
isEq && s.equalize();
|
|
1308
|
+
s.readyToEngage && s.engage();
|
|
1309
|
+
s.screenRendering(sh, sl[0], 0);
|
|
1310
|
+
}
|
|
1145
1311
|
|
|
1146
|
-
|
|
1147
|
-
|
|
1312
|
+
gl.enable(gl.POLYGON_OFFSET_FILL);
|
|
1313
|
+
for (let j = 1, len = sl.length; j < len; j++) {
|
|
1314
|
+
let slj = sl[j];
|
|
1315
|
+
for (i = slj.length - 1; i >= 0; --i) {
|
|
1316
|
+
let li = slj[i];
|
|
1317
|
+
if (li._fading && firstPass && li._refreshFadingOpacity()) {
|
|
1318
|
+
slj.splice(i, 1);
|
|
1319
|
+
}
|
|
1320
|
+
}
|
|
1148
1321
|
|
|
1149
|
-
|
|
1150
|
-
|
|
1322
|
+
gl.polygonOffset(0, -j);
|
|
1323
|
+
i = rn.length;
|
|
1324
|
+
while (i--) {
|
|
1325
|
+
rn[i].segment.screenRendering(sh, sl[j], j, this.transparentTexture, true);
|
|
1326
|
+
}
|
|
1151
1327
|
}
|
|
1328
|
+
gl.disable(gl.POLYGON_OFFSET_FILL);
|
|
1329
|
+
|
|
1330
|
+
gl.disable(gl.BLEND);
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
/**
|
|
1334
|
+
* @protected
|
|
1335
|
+
*/
|
|
1336
|
+
_renderScreenNodesPASSAtmos() {
|
|
1152
1337
|
|
|
1338
|
+
let sh, shu;
|
|
1339
|
+
let renderer = this.renderer;
|
|
1340
|
+
let h = renderer.handler;
|
|
1341
|
+
let gl = h.gl;
|
|
1342
|
+
let cam = renderer.activeCamera;
|
|
1343
|
+
let firstPass = cam.isFirstPass;
|
|
1344
|
+
let frustumIndex = cam.currentFrustumIndex;
|
|
1153
1345
|
|
|
1154
1346
|
gl.enable(gl.CULL_FACE);
|
|
1155
1347
|
|
|
@@ -1162,28 +1354,49 @@ export class Planet extends RenderNode {
|
|
|
1162
1354
|
sh = h.programs.drawnode_screen_wl._program;
|
|
1163
1355
|
shu = sh.uniforms;
|
|
1164
1356
|
|
|
1165
|
-
gl.
|
|
1166
|
-
|
|
1167
|
-
gl.uniformMatrix3fv(shu.normalMatrix, false, cam.getNormalMatrix());
|
|
1357
|
+
gl.uniform3fv(shu.lightsPositions, this._lightsPositions);
|
|
1168
1358
|
gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
|
|
1169
1359
|
gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
|
|
1170
1360
|
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1361
|
+
if (this.baseLayer) {
|
|
1362
|
+
gl.uniform3fv(shu.diffuse, this.baseLayer._diffuse || this._diffuse);
|
|
1363
|
+
gl.uniform3fv(shu.ambient, this.baseLayer._ambient || this._ambient);
|
|
1364
|
+
gl.uniform4fv(shu.specular, this.baseLayer._specular || this._specular);
|
|
1365
|
+
gl.uniform1f(shu.nightTextureCoefficient, this.baseLayer.nightTextureCoefficient || this.nightTextureCoefficient);
|
|
1366
|
+
} else {
|
|
1367
|
+
gl.uniform3fv(shu.diffuse, this._diffuse);
|
|
1368
|
+
gl.uniform3fv(shu.ambient, this._ambient);
|
|
1369
|
+
gl.uniform4fv(shu.specular, this._specular);
|
|
1370
|
+
gl.uniform1f(shu.nightTextureCoefficient, this.nightTextureCoefficient);
|
|
1371
|
+
}
|
|
1372
|
+
|
|
1373
|
+
gl.uniform2fv(shu.maxMinOpacity, this._atmosphereMaxMinOpacity);
|
|
1174
1374
|
|
|
1175
|
-
//
|
|
1375
|
+
//
|
|
1376
|
+
// Night and specular
|
|
1377
|
+
//
|
|
1176
1378
|
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
|
|
1177
|
-
gl.bindTexture(gl.TEXTURE_2D,
|
|
1178
|
-
(this.camera._lonLat.height > 329958.0 && (this._nightTexture || this.transparentTexture)) || this.transparentTexture
|
|
1179
|
-
);
|
|
1379
|
+
gl.bindTexture(gl.TEXTURE_2D, this._nightTexture || this.transparentTexture);
|
|
1180
1380
|
gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
|
|
1181
1381
|
|
|
1182
|
-
// bind specular material
|
|
1183
1382
|
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE + 1);
|
|
1184
1383
|
gl.bindTexture(gl.TEXTURE_2D, this._specularTexture || this.transparentTexture);
|
|
1185
1384
|
gl.uniform1i(shu.specularTexture, this.SLICE_SIZE + 1);
|
|
1186
1385
|
|
|
1386
|
+
|
|
1387
|
+
//
|
|
1388
|
+
// atmos precomputed textures
|
|
1389
|
+
//
|
|
1390
|
+
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE + 4);
|
|
1391
|
+
gl.bindTexture(gl.TEXTURE_2D, this.renderer.controls.Atmosphere._transmittanceBuffer.textures[0]);
|
|
1392
|
+
gl.uniform1i(shu.transmittanceTexture, this.SLICE_SIZE + 4);
|
|
1393
|
+
|
|
1394
|
+
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE + 5);
|
|
1395
|
+
gl.bindTexture(gl.TEXTURE_2D, this.renderer.controls.Atmosphere._scatteringBuffer.textures[0]);
|
|
1396
|
+
gl.uniform1i(shu.scatteringTexture, this.SLICE_SIZE + 5);
|
|
1397
|
+
|
|
1398
|
+
gl.uniform1f(shu.camHeight, cam.getHeight());
|
|
1399
|
+
|
|
1187
1400
|
} else {
|
|
1188
1401
|
h.programs.drawnode_screen_nl.activate();
|
|
1189
1402
|
sh = h.programs.drawnode_screen_nl._program;
|
|
@@ -1195,8 +1408,10 @@ export class Planet extends RenderNode {
|
|
|
1195
1408
|
gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
|
|
1196
1409
|
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
|
1197
1410
|
|
|
1411
|
+
//
|
|
1198
1412
|
// drawing planet nodes
|
|
1199
|
-
|
|
1413
|
+
//
|
|
1414
|
+
let rn = this._renderedNodesInFrustum[frustumIndex],
|
|
1200
1415
|
sl = this._visibleTileLayerSlices;
|
|
1201
1416
|
|
|
1202
1417
|
if (sl.length) {
|
|
@@ -1252,7 +1467,7 @@ export class Planet extends RenderNode {
|
|
|
1252
1467
|
let h = renderer.handler;
|
|
1253
1468
|
let gl = h.gl;
|
|
1254
1469
|
let cam = renderer.activeCamera;
|
|
1255
|
-
let frustumIndex = cam.
|
|
1470
|
+
let frustumIndex = cam.currentFrustumIndex;
|
|
1256
1471
|
|
|
1257
1472
|
if (frustumIndex === cam.FARTHEST_FRUSTUM_INDEX) {
|
|
1258
1473
|
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
@@ -1272,8 +1487,7 @@ export class Planet extends RenderNode {
|
|
|
1272
1487
|
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
|
1273
1488
|
|
|
1274
1489
|
// drawing planet nodes
|
|
1275
|
-
let rn = this._renderedNodesInFrustum[frustumIndex],
|
|
1276
|
-
sl = this._visibleTileLayerSlices;
|
|
1490
|
+
let rn = this._renderedNodesInFrustum[frustumIndex], sl = this._visibleTileLayerSlices;
|
|
1277
1491
|
|
|
1278
1492
|
let i = rn.length;
|
|
1279
1493
|
while (i--) {
|
|
@@ -1309,8 +1523,7 @@ export class Planet extends RenderNode {
|
|
|
1309
1523
|
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
|
1310
1524
|
|
|
1311
1525
|
// drawing planet nodes
|
|
1312
|
-
var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()],
|
|
1313
|
-
sl = this._visibleTileLayerSlices;
|
|
1526
|
+
var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()], sl = this._visibleTileLayerSlices;
|
|
1314
1527
|
|
|
1315
1528
|
let i = rn.length;
|
|
1316
1529
|
while (i--) {
|
|
@@ -1355,8 +1568,7 @@ export class Planet extends RenderNode {
|
|
|
1355
1568
|
gl.uniform3fv(shu.frustumPickingColor, cam.frustum._pickingColorU);
|
|
1356
1569
|
|
|
1357
1570
|
// drawing planet nodes
|
|
1358
|
-
var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()],
|
|
1359
|
-
sl = this._visibleTileLayerSlices;
|
|
1571
|
+
var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()], sl = this._visibleTileLayerSlices;
|
|
1360
1572
|
|
|
1361
1573
|
let i = rn.length;
|
|
1362
1574
|
while (i--) {
|
|
@@ -1550,11 +1762,9 @@ export class Planet extends RenderNode {
|
|
|
1550
1762
|
return this.getDistanceFromPixelEllipsoid(px) || 0;
|
|
1551
1763
|
} else {
|
|
1552
1764
|
|
|
1553
|
-
let r = this.renderer,
|
|
1554
|
-
cnv = this.renderer.handler.canvas;
|
|
1765
|
+
let r = this.renderer, cnv = this.renderer.handler.canvas;
|
|
1555
1766
|
|
|
1556
|
-
let spx = px.x / cnv.width,
|
|
1557
|
-
spy = (cnv.height - px.y) / cnv.height;
|
|
1767
|
+
let spx = px.x / cnv.width, spy = (cnv.height - px.y) / cnv.height;
|
|
1558
1768
|
|
|
1559
1769
|
_tempPickingPix_[0] = _tempPickingPix_[1] = _tempPickingPix_[2] = 0.0;
|
|
1560
1770
|
|
|
@@ -1562,28 +1772,27 @@ export class Planet extends RenderNode {
|
|
|
1562
1772
|
|
|
1563
1773
|
// HEIGHT
|
|
1564
1774
|
this._heightPickingFramebuffer.activate();
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1775
|
+
|
|
1776
|
+
//if (this._heightPickingFramebuffer.isComplete()) {
|
|
1777
|
+
this._heightPickingFramebuffer.readPixels(_tempPickingPix_, spx, spy);
|
|
1778
|
+
dist = decodeFloatFromRGBAArr(_tempPickingPix_);
|
|
1779
|
+
//}
|
|
1780
|
+
|
|
1569
1781
|
this._heightPickingFramebuffer.deactivate();
|
|
1570
1782
|
|
|
1571
1783
|
if (!(_tempPickingPix_[0] || _tempPickingPix_[1] || _tempPickingPix_[2])) {
|
|
1572
1784
|
dist = this.getDistanceFromPixelEllipsoid(px) || 0;
|
|
1573
1785
|
} else if (dist < DEPTH_DISTANCE) {
|
|
1574
1786
|
r.screenDepthFramebuffer.activate();
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1585
|
-
dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
|
|
1586
|
-
}
|
|
1787
|
+
|
|
1788
|
+
//if (r.screenDepthFramebuffer.isComplete()) {
|
|
1789
|
+
r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy);
|
|
1790
|
+
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);
|
|
1791
|
+
let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
|
|
1792
|
+
let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1793
|
+
dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
|
|
1794
|
+
//}
|
|
1795
|
+
|
|
1587
1796
|
r.screenDepthFramebuffer.deactivate();
|
|
1588
1797
|
}
|
|
1589
1798
|
return dist;
|
|
@@ -1606,12 +1815,7 @@ export class Planet extends RenderNode {
|
|
|
1606
1815
|
* where index 0 - southwest longitude, 1 - latitude southwest, 2 - longitude northeast, 3 - latitude northeast.
|
|
1607
1816
|
*/
|
|
1608
1817
|
viewExtentArr(extentArr) {
|
|
1609
|
-
this.renderer.activeCamera.viewExtent(
|
|
1610
|
-
new Extent(
|
|
1611
|
-
new LonLat(extentArr[0], extentArr[1]),
|
|
1612
|
-
new LonLat(extentArr[2], extentArr[3])
|
|
1613
|
-
)
|
|
1614
|
-
);
|
|
1818
|
+
this.renderer.activeCamera.viewExtent(new Extent(new LonLat(extentArr[0], extentArr[1]), new LonLat(extentArr[2], extentArr[3])));
|
|
1615
1819
|
}
|
|
1616
1820
|
|
|
1617
1821
|
/**
|
|
@@ -1666,14 +1870,7 @@ export class Planet extends RenderNode {
|
|
|
1666
1870
|
* @param {cameraCallback} [completeCallback] - Callback that calls befor the flying begins.
|
|
1667
1871
|
*/
|
|
1668
1872
|
flyExtent(extent, height, up, ampl, completeCallback, startCallback) {
|
|
1669
|
-
this.renderer.activeCamera.flyExtent(
|
|
1670
|
-
extent,
|
|
1671
|
-
height,
|
|
1672
|
-
up,
|
|
1673
|
-
ampl,
|
|
1674
|
-
completeCallback,
|
|
1675
|
-
startCallback
|
|
1676
|
-
);
|
|
1873
|
+
this.renderer.activeCamera.flyExtent(extent, height, up, ampl, completeCallback, startCallback);
|
|
1677
1874
|
}
|
|
1678
1875
|
|
|
1679
1876
|
/**
|
|
@@ -1688,15 +1885,7 @@ export class Planet extends RenderNode {
|
|
|
1688
1885
|
* @param [frameCallback]
|
|
1689
1886
|
*/
|
|
1690
1887
|
flyCartesian(cartesian, look, up, ampl, completeCallback, startCallback, frameCallback) {
|
|
1691
|
-
this.renderer.activeCamera.flyCartesian(
|
|
1692
|
-
cartesian,
|
|
1693
|
-
look,
|
|
1694
|
-
up,
|
|
1695
|
-
ampl,
|
|
1696
|
-
completeCallback,
|
|
1697
|
-
startCallback,
|
|
1698
|
-
frameCallback
|
|
1699
|
-
);
|
|
1888
|
+
this.renderer.activeCamera.flyCartesian(cartesian, look, up, ampl, completeCallback, startCallback, frameCallback);
|
|
1700
1889
|
}
|
|
1701
1890
|
|
|
1702
1891
|
/**
|
|
@@ -1711,15 +1900,7 @@ export class Planet extends RenderNode {
|
|
|
1711
1900
|
* @param [frameCallback]
|
|
1712
1901
|
*/
|
|
1713
1902
|
flyLonLat(lonlat, look, up, ampl, completeCallback, startCallback, frameCallback) {
|
|
1714
|
-
this.renderer.activeCamera.flyLonLat(
|
|
1715
|
-
lonlat,
|
|
1716
|
-
look,
|
|
1717
|
-
up,
|
|
1718
|
-
ampl,
|
|
1719
|
-
completeCallback,
|
|
1720
|
-
startCallback,
|
|
1721
|
-
frameCallback
|
|
1722
|
-
);
|
|
1903
|
+
this.renderer.activeCamera.flyLonLat(lonlat, look, up, ampl, completeCallback, startCallback, frameCallback);
|
|
1723
1904
|
}
|
|
1724
1905
|
|
|
1725
1906
|
/**
|
|
@@ -1750,8 +1931,7 @@ export class Planet extends RenderNode {
|
|
|
1750
1931
|
}
|
|
1751
1932
|
|
|
1752
1933
|
getEntityTerrainPoint(entity, res) {
|
|
1753
|
-
let n = this._renderedNodes,
|
|
1754
|
-
i = n.length;
|
|
1934
|
+
let n = this._renderedNodes, i = n.length;
|
|
1755
1935
|
while (i--) {
|
|
1756
1936
|
if (n[i].segment.isEntityInside(entity)) {
|
|
1757
1937
|
return n[i].segment.getEntityTerrainPoint(entity, res);
|