@openglobus/og 0.18.4 → 0.19.0
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 +19 -68
- package/css/og.css +308 -45
- package/lib/@openglobus/og.css +1 -1
- package/lib/@openglobus/og.esm.js +1 -1
- package/lib/@openglobus/og.esm.js.map +1 -1
- package/lib/@openglobus/og.umd.js +1 -1
- package/lib/@openglobus/og.umd.js.map +1 -1
- package/lib/js/Globe.d.ts +2 -0
- package/lib/js/Globe.js +3 -1
- package/lib/js/camera/PlanetCamera.d.ts +2 -2
- package/lib/js/camera/PlanetCamera.js +3 -2
- package/lib/js/control/DebugInfo.js +5 -0
- package/lib/js/control/EarthCoordinates.js +2 -2
- package/lib/js/control/LayerSwitcher.d.ts +18 -3
- package/lib/js/control/LayerSwitcher.js +111 -11
- package/lib/js/control/MouseNavigation.d.ts +2 -0
- package/lib/js/control/MouseNavigation.js +15 -15
- package/lib/js/control/elevationProfile/ElevationProfile.d.ts +41 -25
- package/lib/js/control/elevationProfile/ElevationProfile.js +106 -75
- package/lib/js/control/elevationProfile/ElevationProfileButtonsView.d.ts +14 -0
- package/lib/js/control/elevationProfile/ElevationProfileButtonsView.js +61 -0
- package/lib/js/control/elevationProfile/ElevationProfileControl.d.ts +33 -0
- package/lib/js/control/elevationProfile/ElevationProfileControl.js +153 -0
- package/lib/js/control/elevationProfile/ElevationProfileLegend.d.ts +20 -0
- package/lib/js/control/elevationProfile/ElevationProfileLegend.js +82 -0
- package/lib/js/control/elevationProfile/ElevationProfileScene.d.ts +80 -0
- package/lib/js/control/elevationProfile/ElevationProfileScene.js +539 -0
- package/lib/js/control/elevationProfile/ElevationProfileView.d.ts +63 -0
- package/lib/js/control/elevationProfile/ElevationProfileView.js +504 -0
- package/lib/js/control/elevationProfile/PointListDialog.d.ts +12 -0
- package/lib/js/control/elevationProfile/PointListDialog.js +57 -0
- package/lib/js/control/heightRuler/HeightRulerScene.js +1 -1
- package/lib/js/control/index.d.ts +2 -1
- package/lib/js/control/index.js +2 -1
- package/lib/js/control/ruler/RulerScene.js +3 -3
- package/lib/js/control/selection/SelectionScene.js +2 -2
- package/lib/js/entity/Entity.js +5 -1
- package/lib/js/entity/Polyline.js +1 -1
- package/lib/js/layer/GeoImage.js +3 -0
- package/lib/js/layer/Layer.d.ts +18 -4
- package/lib/js/layer/Layer.js +25 -4
- package/lib/js/layer/XYZ.d.ts +0 -1
- package/lib/js/quadTree/Node.d.ts +21 -3
- package/lib/js/quadTree/Node.js +173 -62
- package/lib/js/renderer/Renderer.d.ts +0 -1
- package/lib/js/renderer/Renderer.js +22 -44
- package/lib/js/renderer/RendererEvents.d.ts +1 -0
- package/lib/js/renderer/RendererEvents.js +5 -7
- package/lib/js/scene/Planet.d.ts +33 -4
- package/lib/js/scene/Planet.js +206 -84
- package/lib/js/segment/Segment.d.ts +7 -1
- package/lib/js/segment/Segment.js +40 -12
- package/lib/js/shaders/drawnode.js +21 -2
- package/lib/js/shaders/geoObject.js +26 -18
- package/lib/js/terrain/GlobusTerrain.d.ts +3 -0
- package/lib/js/terrain/GlobusTerrain.js +15 -3
- package/lib/js/terrain/MapboxTerrain.js +29 -29
- package/lib/js/ui/Dialog.js +1 -1
- package/lib/js/utils/TerrainWorker.js +1 -1
- package/lib/js/utils/shared.d.ts +3 -1
- package/lib/js/utils/shared.js +22 -3
- package/package.json +2 -2
- package/lib/js/shaders/pickingMask.d.ts +0 -2
- package/lib/js/shaders/pickingMask.js +0 -22
|
@@ -7,7 +7,6 @@ import { FontAtlas } from "../utils/FontAtlas";
|
|
|
7
7
|
import { input } from "../input/input";
|
|
8
8
|
import { isEmpty } from "../utils/shared";
|
|
9
9
|
import { LabelWorker } from "../entity/LabelWorker";
|
|
10
|
-
import { pickingMask } from "../shaders/pickingMask";
|
|
11
10
|
import { randomi } from "../math";
|
|
12
11
|
import { screenFrame } from "../shaders/screenFrame";
|
|
13
12
|
import { toneMapping } from "../shaders/toneMapping";
|
|
@@ -197,7 +196,6 @@ class Renderer {
|
|
|
197
196
|
this.screenFramePositionBuffer = null;
|
|
198
197
|
this.screenTexture = {};
|
|
199
198
|
this.outputTexture = null;
|
|
200
|
-
this._pickingMaskCoordinatesBuffer = null;
|
|
201
199
|
this._skipDistanceFrame = false;
|
|
202
200
|
this._distancePixelBuffer = null;
|
|
203
201
|
this._skipPickingFrame = false;
|
|
@@ -418,7 +416,7 @@ class Renderer {
|
|
|
418
416
|
});
|
|
419
417
|
this.handler.addProgram(screenFrame());
|
|
420
418
|
this.pickingFramebuffer = new Framebuffer(this.handler, {
|
|
421
|
-
width: 640, height: 480
|
|
419
|
+
width: 640, height: 480
|
|
422
420
|
});
|
|
423
421
|
this.pickingFramebuffer.init();
|
|
424
422
|
this._tempPickingPix_ = new Uint8Array(this.pickingFramebuffer.width * this.pickingFramebuffer.height * 4);
|
|
@@ -491,7 +489,6 @@ class Renderer {
|
|
|
491
489
|
};
|
|
492
490
|
this._initReadPixelsBuffers();
|
|
493
491
|
}
|
|
494
|
-
this.handler.addProgram(pickingMask());
|
|
495
492
|
this.handler.ONCANVASRESIZE = () => {
|
|
496
493
|
this._resizeStart();
|
|
497
494
|
this.events.dispatch(this.events.resize, this.handler.canvas);
|
|
@@ -505,7 +502,6 @@ class Renderer {
|
|
|
505
502
|
};
|
|
506
503
|
this.screenFramePositionBuffer = this.handler.createArrayBuffer(new Float32Array([1, 1, -1, 1, 1, -1, -1, -1]), 2, 4);
|
|
507
504
|
this.outputTexture = this.screenTexture.screen;
|
|
508
|
-
this._pickingMaskCoordinatesBuffer = this.handler.createArrayBuffer(new Float32Array([0, 0]), 2, 1);
|
|
509
505
|
this._initializeRenderNodes();
|
|
510
506
|
this._initializeControls();
|
|
511
507
|
}
|
|
@@ -644,17 +640,8 @@ class Renderer {
|
|
|
644
640
|
let ec = this._entityCollections;
|
|
645
641
|
if (ec.length) {
|
|
646
642
|
this.enableBlendDefault();
|
|
647
|
-
//geoObject
|
|
648
|
-
let i = ec.length;
|
|
649
|
-
while (i--) {
|
|
650
|
-
let eci = ec[i];
|
|
651
|
-
if (ec[i]._fadingOpacity) {
|
|
652
|
-
eci.events.dispatch(eci.events.draw, eci);
|
|
653
|
-
ec[i].geoObjectHandler.draw();
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
643
|
// pointClouds pass
|
|
657
|
-
i = ec.length;
|
|
644
|
+
let i = ec.length;
|
|
658
645
|
while (i--) {
|
|
659
646
|
ec[i]._fadingOpacity && ec[i].pointCloudHandler.draw();
|
|
660
647
|
}
|
|
@@ -669,10 +656,19 @@ class Renderer {
|
|
|
669
656
|
if (ec.length) {
|
|
670
657
|
let gl = this.handler.gl;
|
|
671
658
|
this.enableBlendDefault();
|
|
659
|
+
// GeoObjects
|
|
660
|
+
let i = ec.length;
|
|
661
|
+
while (i--) {
|
|
662
|
+
let eci = ec[i];
|
|
663
|
+
if (ec[i]._fadingOpacity) {
|
|
664
|
+
eci.events.dispatch(eci.events.draw, eci);
|
|
665
|
+
ec[i].geoObjectHandler.draw();
|
|
666
|
+
}
|
|
667
|
+
}
|
|
672
668
|
// billboards pass
|
|
673
669
|
gl.activeTexture(gl.TEXTURE0);
|
|
674
670
|
gl.bindTexture(gl.TEXTURE_2D, this.billboardsTextureAtlas.texture);
|
|
675
|
-
|
|
671
|
+
i = ec.length;
|
|
676
672
|
while (i--) {
|
|
677
673
|
let eci = ec[i];
|
|
678
674
|
eci._fadingOpacity && eci.billboardHandler.draw();
|
|
@@ -721,6 +717,7 @@ class Renderer {
|
|
|
721
717
|
let h = this.handler, gl = h.gl;
|
|
722
718
|
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
723
719
|
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
720
|
+
this.enableBlendDefault();
|
|
724
721
|
e.dispatch(e.draw, this);
|
|
725
722
|
let frustums = this.activeCamera.frustums;
|
|
726
723
|
let pointerEvent = e.pointerEvent() || this.activeCamera.isMoving;
|
|
@@ -742,6 +739,7 @@ class Renderer {
|
|
|
742
739
|
}
|
|
743
740
|
this._drawTransparentEntityCollections();
|
|
744
741
|
this._clearEntityCollectionQueue();
|
|
742
|
+
e.dispatch(e.drawtransparent, this);
|
|
745
743
|
if (pointerEvent) {
|
|
746
744
|
this._drawPickingBuffer();
|
|
747
745
|
this.__useDistanceFramebuffer__ && this._drawDistanceBuffer();
|
|
@@ -815,44 +813,24 @@ class Renderer {
|
|
|
815
813
|
let gl = h.gl;
|
|
816
814
|
if (this.activeCamera.isFirstPass) {
|
|
817
815
|
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
818
|
-
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT
|
|
816
|
+
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
819
817
|
}
|
|
820
818
|
else {
|
|
821
|
-
gl.clear(gl.DEPTH_BUFFER_BIT
|
|
819
|
+
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
822
820
|
}
|
|
823
|
-
//
|
|
824
|
-
// draw picking mask
|
|
825
|
-
//
|
|
826
|
-
h.programs.pickingMask.activate();
|
|
827
|
-
let sh = h.programs.pickingMask._program;
|
|
828
|
-
let shu = sh.uniforms, sha = sh.attributes;
|
|
829
|
-
let /*ts = this.events.touchState,*/ ms = this.events.mouseState;
|
|
830
|
-
gl.disable(gl.DEPTH_TEST);
|
|
831
|
-
gl.enable(gl.STENCIL_TEST);
|
|
832
|
-
gl.colorMask(false, false, false, false);
|
|
833
|
-
gl.stencilFunc(gl.ALWAYS, 2, 0xFF);
|
|
834
|
-
gl.stencilOp(gl.REPLACE, gl.ZERO, gl.REPLACE);
|
|
835
|
-
gl.uniform2f(shu.offset, (ms.nx - 0.5) * 2, (0.5 - ms.ny) * 2);
|
|
836
|
-
gl.bindBuffer(gl.ARRAY_BUFFER, this._pickingMaskCoordinatesBuffer);
|
|
837
|
-
gl.vertexAttribPointer(sha.coordinates, this._pickingMaskCoordinatesBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
|
838
|
-
gl.drawArrays(gl.POINTS, 0, this._pickingMaskCoordinatesBuffer.numItems);
|
|
839
|
-
gl.enable(gl.DEPTH_TEST);
|
|
840
|
-
//
|
|
841
|
-
// draw picking scenes
|
|
842
|
-
//
|
|
843
|
-
gl.colorMask(true, true, true, true);
|
|
844
|
-
gl.stencilFunc(gl.EQUAL, 2, 0xFF);
|
|
845
|
-
gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
|
|
846
|
-
gl.disable(gl.BLEND);
|
|
847
821
|
let dp = this._pickingCallbacks;
|
|
848
822
|
for (let i = 0, len = dp.length; i < len; i++) {
|
|
823
|
+
//
|
|
824
|
+
// draw picking scenes, usually we don't need blending,
|
|
825
|
+
// but sometimes set it manually in the callbacks
|
|
826
|
+
//
|
|
827
|
+
gl.disable(gl.BLEND);
|
|
849
828
|
/**
|
|
850
829
|
* This callback renders picking frame.
|
|
851
830
|
*/
|
|
852
831
|
dp[i].callback.call(dp[i].sender);
|
|
832
|
+
gl.enable(gl.BLEND);
|
|
853
833
|
}
|
|
854
|
-
gl.enable(gl.BLEND);
|
|
855
|
-
gl.disable(gl.STENCIL_TEST);
|
|
856
834
|
this.pickingFramebuffer.deactivate();
|
|
857
835
|
}
|
|
858
836
|
/**
|
|
@@ -9,6 +9,7 @@ export type RendererEventsHandler = RendererEvents & EventsHandler<RendererEvent
|
|
|
9
9
|
export declare function createRendererEvents(renderer: Renderer): RendererEvents;
|
|
10
10
|
export type RendererEventsType = [
|
|
11
11
|
"draw",
|
|
12
|
+
"drawtransparent",
|
|
12
13
|
"postdraw",
|
|
13
14
|
"resize",
|
|
14
15
|
"resizeend",
|
|
@@ -11,8 +11,6 @@ export function createRendererEvents(renderer) {
|
|
|
11
11
|
const LB_M = 0b0001;
|
|
12
12
|
const RB_M = 0b0010;
|
|
13
13
|
const MB_M = 0b0100;
|
|
14
|
-
let __skipFrames__ = 0;
|
|
15
|
-
const MAX_SKIP_FRAMES_ON_BLACK = 15;
|
|
16
14
|
const ISBLACK = (c) => !(c[0] || c[1] || c[2]);
|
|
17
15
|
const NOTBLACK = (c) => !!(c[0] || c[1] || c[2]);
|
|
18
16
|
/**
|
|
@@ -454,11 +452,6 @@ class RendererEvents extends Events {
|
|
|
454
452
|
else {
|
|
455
453
|
r.readPickingColor(ms.nx, 1 - ms.ny, t);
|
|
456
454
|
}
|
|
457
|
-
// current is black
|
|
458
|
-
if (ISBLACK(t) && __skipFrames__++ < MAX_SKIP_FRAMES_ON_BLACK) {
|
|
459
|
-
return;
|
|
460
|
-
}
|
|
461
|
-
__skipFrames__ = 0;
|
|
462
455
|
p[0] = c[0];
|
|
463
456
|
p[1] = c[1];
|
|
464
457
|
p[2] = c[2];
|
|
@@ -717,6 +710,11 @@ const RENDERER_EVENTS = [
|
|
|
717
710
|
* @event og.RendererEvents#draw
|
|
718
711
|
*/
|
|
719
712
|
"draw",
|
|
713
|
+
/**
|
|
714
|
+
* Triggered after all transparent object are drawn
|
|
715
|
+
* @event og.RendererEvents#drawtransparent
|
|
716
|
+
*/
|
|
717
|
+
"drawtransparent",
|
|
720
718
|
/**
|
|
721
719
|
* Triggered after scene frame is rendered(after render nodes).
|
|
722
720
|
* @event og.RendererEvents#postdraw
|
package/lib/js/scene/Planet.d.ts
CHANGED
|
@@ -23,6 +23,8 @@ import { TerrainWorker } from "../utils/TerrainWorker";
|
|
|
23
23
|
import { Vec2, Vec3, NumberArray2, NumberArray3, NumberArray4 } from "../math/index";
|
|
24
24
|
import { VectorTileCreator } from "../utils/VectorTileCreator";
|
|
25
25
|
import { WebGLBufferExt, WebGLTextureExt, IDefaultTextureParams } from "../webgl/Handler";
|
|
26
|
+
import { Program } from "../webgl/Program";
|
|
27
|
+
import { Segment } from "../segment/Segment";
|
|
26
28
|
export interface IPlanetParams {
|
|
27
29
|
name?: string;
|
|
28
30
|
ellipsoid?: Ellipsoid;
|
|
@@ -42,6 +44,7 @@ export interface IPlanetParams {
|
|
|
42
44
|
maxGridSize?: number;
|
|
43
45
|
maxLoadingRequests?: number;
|
|
44
46
|
atmosphereEnabled?: boolean;
|
|
47
|
+
transitionOpacityEnabled?: boolean;
|
|
45
48
|
}
|
|
46
49
|
export type PlanetEventsList = [
|
|
47
50
|
"draw",
|
|
@@ -176,6 +179,8 @@ export declare class Planet extends RenderNode {
|
|
|
176
179
|
*/
|
|
177
180
|
_renderedNodes: Node[];
|
|
178
181
|
_renderedNodesInFrustum: Node[][];
|
|
182
|
+
_fadingNodes: Map<number, Node>;
|
|
183
|
+
_fadingNodesInFrustum: Node[][];
|
|
179
184
|
/**
|
|
180
185
|
* Current visible mercator segments tree nodes array.
|
|
181
186
|
* @public
|
|
@@ -306,7 +311,8 @@ export declare class Planet extends RenderNode {
|
|
|
306
311
|
* @type {number}
|
|
307
312
|
*/
|
|
308
313
|
nightTextureCoefficient: number;
|
|
309
|
-
protected _renderScreenNodesPASS:
|
|
314
|
+
protected _renderScreenNodesPASS: () => void;
|
|
315
|
+
protected _renderScreenNodesWithHeightPASS: () => void;
|
|
310
316
|
protected _atmosphereEnabled: boolean;
|
|
311
317
|
protected _atmosphereMaxMinOpacity: Float32Array;
|
|
312
318
|
solidTextureOne: WebGLTextureExt | null;
|
|
@@ -314,7 +320,15 @@ export declare class Planet extends RenderNode {
|
|
|
314
320
|
protected _skipPreRender: boolean;
|
|
315
321
|
protected _nightTextureSrc: string | null;
|
|
316
322
|
protected _specularTextureSrc: string | null;
|
|
323
|
+
transitionTime: number;
|
|
324
|
+
_prevNodes: Map<number, Node>;
|
|
325
|
+
_currNodes: Map<number, Node>;
|
|
326
|
+
protected _transitionOpacityEnabled: boolean;
|
|
317
327
|
constructor(options?: IPlanetParams);
|
|
328
|
+
/**
|
|
329
|
+
* Returns true if current terrain data set is loaded
|
|
330
|
+
*/
|
|
331
|
+
get terrainReady(): boolean;
|
|
318
332
|
get maxGridSize(): number;
|
|
319
333
|
getNorthFrameRotation(cartesian: Vec3): Quat;
|
|
320
334
|
set atmosphereMaxOpacity(opacity: number);
|
|
@@ -443,11 +457,18 @@ export declare class Planet extends RenderNode {
|
|
|
443
457
|
protected _sortLayers(): void;
|
|
444
458
|
protected _clearRenderedNodeList(): void;
|
|
445
459
|
protected _clearRenderNodesInFrustum(): void;
|
|
460
|
+
protected _collectRenderedNodesMaxZoom(cam: PlanetCamera): void;
|
|
461
|
+
set transitionOpacityEnabled(isEnabled: boolean);
|
|
462
|
+
get transitionOpacityEnabled(): boolean;
|
|
446
463
|
/**
|
|
447
464
|
* Collects visible quad nodes.
|
|
448
465
|
* @protected
|
|
449
466
|
*/
|
|
450
|
-
protected _collectRenderNodes(): void;
|
|
467
|
+
protected _collectRenderNodes(cam: PlanetCamera): void;
|
|
468
|
+
protected _renderScreenNodesPASSNoAtmos(): void;
|
|
469
|
+
protected _renderScreenNodesPASSAtmos(): void;
|
|
470
|
+
protected _renderScreenNodesWithHeightPASSNoAtmos(): void;
|
|
471
|
+
protected _renderScreenNodesWithHeightPASSAtmos(): void;
|
|
451
472
|
protected _globalPreDraw(): void;
|
|
452
473
|
/**
|
|
453
474
|
* Render node callback.
|
|
@@ -456,6 +477,7 @@ export declare class Planet extends RenderNode {
|
|
|
456
477
|
preFrame(): void;
|
|
457
478
|
/**
|
|
458
479
|
* Render node callback.
|
|
480
|
+
* Frame function is called for each renderer activrCamera frustum.
|
|
459
481
|
* @public
|
|
460
482
|
* @override
|
|
461
483
|
*/
|
|
@@ -463,8 +485,15 @@ export declare class Planet extends RenderNode {
|
|
|
463
485
|
protected _checkRendercompleted(): void;
|
|
464
486
|
lockQuadTree(): void;
|
|
465
487
|
unlockQuadTree(): void;
|
|
466
|
-
protected
|
|
467
|
-
protected
|
|
488
|
+
protected _setUniformsNoAtmos(cam: PlanetCamera): Program;
|
|
489
|
+
protected _setUniformsAtmos(cam: PlanetCamera): Program;
|
|
490
|
+
protected _renderingFadingNodes: (nodes: Map<number, boolean>, sh: Program, currentNode: Node, sl: Layer[], sliceIndex: number, outTransparentSegments?: Segment[]) => void;
|
|
491
|
+
protected _renderingFadingNodesNoDepth: (nodes: Map<number, boolean>, sh: Program, currentNode: Node, sl: Layer[], sliceIndex: number) => void;
|
|
492
|
+
/**
|
|
493
|
+
* Drawing nodes
|
|
494
|
+
*/
|
|
495
|
+
protected _renderingScreenNodes(sh: Program, cam: PlanetCamera, renderedNodes: Node[]): void;
|
|
496
|
+
protected _renderingScreenNodesWithHeight(sh: Program, cam: PlanetCamera, renderedNodes: Node[]): void;
|
|
468
497
|
protected _renderDistanceFramebufferPASS(): void;
|
|
469
498
|
protected _renderColorPickingFramebufferPASS(): void;
|
|
470
499
|
protected _renderDepthFramebufferPASS(): void;
|