@openglobus/og 0.11.7 → 0.12.3
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 +5 -2
- package/dist/@openglobus/og.css +1 -0
- package/dist/@openglobus/og.esm.js +21 -0
- package/dist/@openglobus/og.esm.js.map +1 -0
- package/dist/@openglobus/og.umd.js +21 -0
- package/dist/@openglobus/og.umd.js.map +1 -0
- package/package.json +11 -11
- package/src/og/Globe.js +18 -6
- package/src/og/camera/Camera.js +70 -79
- package/src/og/camera/PlanetCamera.js +25 -30
- package/src/og/control/DebugInfo.js +2 -2
- package/src/og/control/EarthNavigation.js +26 -17
- package/src/og/control/Lighting.js +52 -73
- package/src/og/control/MouseNavigation.js +30 -29
- package/src/og/control/MouseWheelZoomControl.js +257 -0
- package/src/og/control/Sun.js +3 -3
- package/src/og/control/index.js +2 -0
- package/src/og/control/visibleExtent/Segment.js +1862 -0
- package/src/og/control/visibleExtent/VisibleExtent.js +80 -0
- package/src/og/control/visibleExtent/drawnode.js +751 -0
- package/src/og/entity/BaseBillboard.js +9 -9
- package/src/og/entity/Entity.js +742 -742
- package/src/og/entity/GeoObjectHandler.js +138 -134
- package/src/og/entity/Label.js +7 -7
- package/src/og/entity/LabelHandler.js +2 -1
- package/src/og/layer/CanvasTiles.js +8 -12
- package/src/og/layer/GeoImage.js +2 -10
- package/src/og/layer/GeoTexture2d.js +2 -10
- package/src/og/layer/GeoVideo.js +2 -10
- package/src/og/layer/KML.js +19 -12
- package/src/og/layer/Layer.js +4 -23
- package/src/og/layer/WMS.js +0 -2
- package/src/og/layer/XYZ.js +31 -33
- package/src/og/math/Vec3.js +18 -2
- package/src/og/quadTree/Node.js +48 -93
- package/src/og/quadTree/quadTree.js +1 -1
- package/src/og/renderer/Renderer.js +69 -96
- package/src/og/renderer/RendererEvents.js +3 -1
- package/src/og/scene/Planet.js +171 -173
- package/src/og/segment/Segment.js +99 -268
- package/src/og/segment/Slice.js +45 -0
- package/src/og/shaders/drawnode.js +171 -350
- package/src/og/shaders/geoObject.js +15 -6
- package/src/og/terrain/EmptyTerrain.js +3 -2
- package/src/og/terrain/GlobusTerrain.js +2 -0
- package/src/og/utils/GeoImageCreator.js +5 -1
- package/src/og/utils/Loader.js +1 -1
- package/src/og/utils/PlainSegmentWorker.js +0 -13
- package/src/og/webgl/Handler.js +14 -10
- package/types/Clock.d.ts +94 -0
- package/types/Deferred.d.ts +6 -0
- package/types/Events.d.ts +77 -0
- package/types/Extent.d.ts +166 -0
- package/types/Globe.d.ts +85 -0
- package/types/ImageCanvas.d.ts +123 -0
- package/types/Lock.d.ts +12 -0
- package/types/LonLat.d.ts +108 -0
- package/types/Popup.d.ts +42 -0
- package/types/QueueArray.d.ts +19 -0
- package/types/Rectangle.d.ts +80 -0
- package/types/Stack.d.ts +19 -0
- package/types/ajax.d.ts +24 -0
- package/types/arial.d.ts +48 -0
- package/types/astro/astro.d.ts +38 -0
- package/types/astro/earth.d.ts +7 -0
- package/types/astro/jd.d.ts +254 -0
- package/types/bv/Box.d.ts +30 -0
- package/types/bv/Sphere.d.ts +38 -0
- package/types/bv/index.d.ts +3 -0
- package/types/camera/Camera.d.ts +312 -0
- package/types/camera/Frustum.d.ts +133 -0
- package/types/camera/PlanetCamera.d.ts +219 -0
- package/types/camera/index.d.ts +3 -0
- package/types/cons.d.ts +40 -0
- package/types/control/CompassButton.d.ts +17 -0
- package/types/control/Control.d.ts +104 -0
- package/types/control/DebugInfo.d.ts +15 -0
- package/types/control/EarthCoordinates.d.ts +47 -0
- package/types/control/EarthNavigation.d.ts +43 -0
- package/types/control/GeoImageDragControl.d.ts +6 -0
- package/types/control/KeyboardNavigation.d.ts +21 -0
- package/types/control/LayerSwitcher.d.ts +21 -0
- package/types/control/Lighting.d.ts +16 -0
- package/types/control/MouseNavigation.d.ts +48 -0
- package/types/control/MouseWheelZoomControl.d.ts +45 -0
- package/types/control/ScaleControl.d.ts +22 -0
- package/types/control/ShowFps.d.ts +11 -0
- package/types/control/SimpleNavigation.d.ts +25 -0
- package/types/control/Sun.d.ts +50 -0
- package/types/control/ToggleWireframe.d.ts +12 -0
- package/types/control/TouchNavigation.d.ts +48 -0
- package/types/control/ZoomControl.d.ts +27 -0
- package/types/control/index.d.ts +18 -0
- package/types/ellipsoid/Ellipsoid.d.ts +146 -0
- package/types/ellipsoid/index.d.ts +3 -0
- package/types/ellipsoid/wgs84.d.ts +6 -0
- package/types/entity/BaseBillboard.d.ts +215 -0
- package/types/entity/Billboard.d.ts +94 -0
- package/types/entity/BillboardHandler.d.ts +79 -0
- package/types/entity/Entity.d.ts +348 -0
- package/types/entity/EntityCollection.d.ts +317 -0
- package/types/entity/GeoObject.d.ts +111 -0
- package/types/entity/GeoObjectHandler.d.ts +81 -0
- package/types/entity/Geometry.d.ts +74 -0
- package/types/entity/GeometryHandler.d.ts +76 -0
- package/types/entity/Label.d.ts +189 -0
- package/types/entity/LabelHandler.d.ts +31 -0
- package/types/entity/LabelWorker.d.ts +11 -0
- package/types/entity/PointCloud.d.ts +174 -0
- package/types/entity/PointCloudHandler.d.ts +38 -0
- package/types/entity/Polyline.d.ts +306 -0
- package/types/entity/PolylineHandler.d.ts +18 -0
- package/types/entity/Ray.d.ts +124 -0
- package/types/entity/RayHandler.d.ts +67 -0
- package/types/entity/ShapeHandler.d.ts +22 -0
- package/types/entity/Strip.d.ts +119 -0
- package/types/entity/StripHandler.d.ts +38 -0
- package/types/entity/index.d.ts +8 -0
- package/types/index.core.d.ts +65 -0
- package/types/index.d.ts +45 -0
- package/types/index.webgl.d.ts +7 -0
- package/types/input/KeyboardHandler.d.ts +10 -0
- package/types/input/MouseHandler.d.ts +5 -0
- package/types/input/TouchHandler.d.ts +5 -0
- package/types/input/input.d.ts +34 -0
- package/types/layer/BaseGeoImage.d.ts +94 -0
- package/types/layer/CanvasTiles.d.ts +67 -0
- package/types/layer/GeoImage.d.ts +52 -0
- package/types/layer/GeoTexture2d.d.ts +8 -0
- package/types/layer/GeoVideo.d.ts +55 -0
- package/types/layer/KML.d.ts +68 -0
- package/types/layer/Layer.d.ts +310 -0
- package/types/layer/Material.d.ts +45 -0
- package/types/layer/Vector.d.ts +208 -0
- package/types/layer/WMS.d.ts +61 -0
- package/types/layer/XYZ.d.ts +119 -0
- package/types/layer/index.d.ts +10 -0
- package/types/light/LightSource.d.ts +178 -0
- package/types/math/Line2.d.ts +11 -0
- package/types/math/Line3.d.ts +10 -0
- package/types/math/Mat3.d.ts +65 -0
- package/types/math/Mat4.d.ts +176 -0
- package/types/math/Plane.d.ts +18 -0
- package/types/math/Quat.d.ts +379 -0
- package/types/math/Ray.d.ts +82 -0
- package/types/math/Vec2.d.ts +309 -0
- package/types/math/Vec3.d.ts +467 -0
- package/types/math/Vec4.d.ts +162 -0
- package/types/math/coder.d.ts +43 -0
- package/types/math/index.d.ts +11 -0
- package/types/math.d.ts +261 -0
- package/types/mercator.d.ts +92 -0
- package/types/proj/EPSG3857.d.ts +6 -0
- package/types/proj/EPSG4326.d.ts +6 -0
- package/types/proj/Proj.d.ts +42 -0
- package/types/quadTree/EntityCollectionNode.d.ts +34 -0
- package/types/quadTree/Node.d.ts +60 -0
- package/types/quadTree/quadTree.d.ts +40 -0
- package/types/renderer/Renderer.d.ts +290 -0
- package/types/renderer/RendererEvents.d.ts +237 -0
- package/types/res/images.d.ts +3 -0
- package/types/scene/Axes.d.ts +11 -0
- package/types/scene/BaseNode.d.ts +60 -0
- package/types/scene/Planet.d.ts +576 -0
- package/types/scene/RenderNode.d.ts +142 -0
- package/types/scene/SkyBox.d.ts +10 -0
- package/types/scene/index.d.ts +4 -0
- package/types/segment/Segment.d.ts +275 -0
- package/types/segment/SegmentLonLat.d.ts +17 -0
- package/types/segment/Slice.d.ts +10 -0
- package/types/segment/segmentHelper.d.ts +13 -0
- package/types/shaders/billboard.d.ts +3 -0
- package/types/shaders/depth.d.ts +2 -0
- package/types/shaders/drawnode.d.ts +7 -0
- package/types/shaders/geoObject.d.ts +3 -0
- package/types/shaders/label.d.ts +4 -0
- package/types/shaders/pointCloud.d.ts +2 -0
- package/types/shaders/polyline.d.ts +3 -0
- package/types/shaders/ray.d.ts +2 -0
- package/types/shaders/screenFrame.d.ts +2 -0
- package/types/shaders/shape.d.ts +4 -0
- package/types/shaders/skybox.d.ts +2 -0
- package/types/shaders/toneMapping.d.ts +2 -0
- package/types/shapes/BaseShape.d.ts +250 -0
- package/types/shapes/Sphere.d.ts +41 -0
- package/types/terrain/BilTerrain.d.ts +7 -0
- package/types/terrain/EmptyTerrain.d.ts +73 -0
- package/types/terrain/Geoid.d.ts +26 -0
- package/types/terrain/GlobusTerrain.d.ts +116 -0
- package/types/terrain/MapboxTerrain.d.ts +7 -0
- package/types/terrain/index.d.ts +5 -0
- package/types/utils/FontAtlas.d.ts +15 -0
- package/types/utils/GeoImageCreator.d.ts +30 -0
- package/types/utils/ImagesCacheManager.d.ts +10 -0
- package/types/utils/Loader.d.ts +25 -0
- package/types/utils/NormalMapCreator.d.ts +39 -0
- package/types/utils/PlainSegmentWorker.d.ts +10 -0
- package/types/utils/TerrainWorker.d.ts +9 -0
- package/types/utils/TextureAtlas.d.ts +111 -0
- package/types/utils/VectorTileCreator.d.ts +16 -0
- package/types/utils/colorTable.d.ts +143 -0
- package/types/utils/earcut.d.ts +6 -0
- package/types/utils/shared.d.ts +231 -0
- package/types/webgl/Framebuffer.d.ts +135 -0
- package/types/webgl/Handler.d.ts +417 -0
- package/types/webgl/Multisample.d.ts +89 -0
- package/types/webgl/Program.d.ts +161 -0
- package/types/webgl/ProgramController.d.ts +89 -0
- package/types/webgl/callbacks.d.ts +1 -0
- package/types/webgl/index.d.ts +6 -0
- package/types/webgl/types.d.ts +2 -0
package/src/og/scene/Planet.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
|
+
import * as utils from "../utils/shared.js";
|
|
7
8
|
import * as shaders from "../shaders/drawnode.js";
|
|
8
9
|
import * as math from "../math.js";
|
|
9
10
|
import * as mercator from "../mercator.js";
|
|
@@ -31,14 +32,16 @@ import { wgs84 } from "../ellipsoid/wgs84.js";
|
|
|
31
32
|
import { NIGHT, SPECULAR } from "../res/images.js";
|
|
32
33
|
import { Geoid } from "../terrain/Geoid.js";
|
|
33
34
|
import { isUndef } from "../utils/shared.js";
|
|
35
|
+
import { MAX_RENDERED_NODES } from "../quadTree/quadTree.js";
|
|
34
36
|
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
+
const CUR_LOD_SIZE = 250; //px
|
|
38
|
+
const MIN_LOD_SIZE = 312; //px
|
|
39
|
+
const MAX_LOD_SIZE = 190; //px
|
|
37
40
|
|
|
38
41
|
let _tempPickingPix_ = new Uint8Array(4),
|
|
39
42
|
_tempDepthColor_ = new Uint8Array(4);
|
|
40
43
|
|
|
41
|
-
const DEPTH_DISTANCE = 11
|
|
44
|
+
const DEPTH_DISTANCE = 11;//m
|
|
42
45
|
|
|
43
46
|
/**
|
|
44
47
|
* Maximum created nodes count. The more nodes count the more memory usage.
|
|
@@ -48,6 +51,8 @@ const DEPTH_DISTANCE = 11;
|
|
|
48
51
|
*/
|
|
49
52
|
const MAX_NODES = 200;
|
|
50
53
|
|
|
54
|
+
const HORIZON_TANGENT = 0.81;
|
|
55
|
+
|
|
51
56
|
const EVENT_NAMES = [
|
|
52
57
|
/**
|
|
53
58
|
* Triggered before globe frame begins to render.
|
|
@@ -107,6 +112,13 @@ export class Planet extends RenderNode {
|
|
|
107
112
|
constructor(options = {}) {
|
|
108
113
|
super(options.name);
|
|
109
114
|
|
|
115
|
+
this._cameraFrustums = options.frustums || [
|
|
116
|
+
[1, 100 + 0.075],
|
|
117
|
+
[100, 1000 + 0.075],
|
|
118
|
+
[1000, 1e6 + 10000],
|
|
119
|
+
[1e6, 1e9]
|
|
120
|
+
];
|
|
121
|
+
|
|
110
122
|
/**
|
|
111
123
|
* @public
|
|
112
124
|
* @type {Ellipsoid}
|
|
@@ -335,6 +347,16 @@ export class Planet extends RenderNode {
|
|
|
335
347
|
*/
|
|
336
348
|
this._specularTexture = null;
|
|
337
349
|
|
|
350
|
+
//TODO: replace to a function
|
|
351
|
+
let a = utils.createColorRGB(options.ambient, new Vec3(0.2, 0.2, 0.2));
|
|
352
|
+
let d = utils.createColorRGB(options.diffuse, new Vec3(0.8, 0.8, 0.8));
|
|
353
|
+
let s = utils.createColorRGB(options.specular, new Vec3(0.0003, 0.0003, 0.0003));
|
|
354
|
+
let shininess = options.shininess || 20.0;
|
|
355
|
+
|
|
356
|
+
this._ambient = new Float32Array([a.x, a.y, a.z]);
|
|
357
|
+
this._diffuse = new Float32Array([d.x, d.y, d.z]);
|
|
358
|
+
this._specular = new Float32Array([s.x, s.y, s.z, shininess]);
|
|
359
|
+
|
|
338
360
|
/**
|
|
339
361
|
* True for rendering night glowing texture.
|
|
340
362
|
* @protected
|
|
@@ -367,18 +389,12 @@ export class Planet extends RenderNode {
|
|
|
367
389
|
* @public
|
|
368
390
|
* @type {number}
|
|
369
391
|
*/
|
|
370
|
-
this.
|
|
371
|
-
this.
|
|
372
|
-
this.
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
this.
|
|
376
|
-
this._specularMaterialArr = new Float32Array(this.SLICE_SIZE_4 + 4);
|
|
377
|
-
|
|
378
|
-
this._tileOffsetArr = new Float32Array(this.SLICE_SIZE_4);
|
|
379
|
-
this._visibleExtentOffsetArr = new Float32Array(this.SLICE_SIZE_4);
|
|
380
|
-
this._transparentColorArr = new Float32Array(this.SLICE_SIZE_4);
|
|
381
|
-
this._pickingColorArr = new Float32Array(this.SLICE_SIZE_3);
|
|
392
|
+
this._lodSize = CUR_LOD_SIZE;
|
|
393
|
+
this._curLodSize = CUR_LOD_SIZE;
|
|
394
|
+
this._minLodSize = MIN_LOD_SIZE;
|
|
395
|
+
this._maxLodSize = MAX_LOD_SIZE;
|
|
396
|
+
|
|
397
|
+
this._pickingColorArr = new Float32Array(this.SLICE_SIZE_4);
|
|
382
398
|
this._samplerArr = new Int32Array(this.SLICE_SIZE);
|
|
383
399
|
this._pickingMaskArr = new Int32Array(this.SLICE_SIZE);
|
|
384
400
|
|
|
@@ -393,11 +409,11 @@ export class Planet extends RenderNode {
|
|
|
393
409
|
|
|
394
410
|
this._normalMapCreator = null;
|
|
395
411
|
|
|
396
|
-
this._terrainWorker = new TerrainWorker(
|
|
412
|
+
this._terrainWorker = new TerrainWorker(3);
|
|
397
413
|
|
|
398
|
-
this._plainSegmentWorker = new PlainSegmentWorker(
|
|
414
|
+
this._plainSegmentWorker = new PlainSegmentWorker(4);
|
|
399
415
|
|
|
400
|
-
this._tileLoader = new Loader(
|
|
416
|
+
this._tileLoader = new Loader(options.loadingBatchSize || 12);
|
|
401
417
|
|
|
402
418
|
this._memKey = new Key();
|
|
403
419
|
|
|
@@ -429,11 +445,14 @@ export class Planet extends RenderNode {
|
|
|
429
445
|
control.addTo(this.renderer);
|
|
430
446
|
}
|
|
431
447
|
|
|
432
|
-
|
|
433
|
-
this.
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
448
|
+
get lodSize() {
|
|
449
|
+
return this._lodSize;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
setLodSize(currentLodSize, minLodSize, maxLodSize) {
|
|
453
|
+
this._maxLodSize = maxLodSize || this._maxLodSize;
|
|
454
|
+
this._minLodSize = minLodSize || this._minLodSize;
|
|
455
|
+
this._curLodSize = currentLodSize || this._curLodSize;
|
|
437
456
|
this._renderCompletedActivated = false;
|
|
438
457
|
}
|
|
439
458
|
|
|
@@ -619,11 +638,8 @@ export class Planet extends RenderNode {
|
|
|
619
638
|
var h = this.renderer.handler;
|
|
620
639
|
|
|
621
640
|
h.addProgram(shaders.drawnode_screen_nl(), true);
|
|
622
|
-
|
|
623
641
|
//h.addProgram(shaders.drawnode_screen_wl(), true);
|
|
624
|
-
|
|
625
642
|
h.addProgram(shaders.drawnode_screen_wl_webgl2(), true);
|
|
626
|
-
|
|
627
643
|
h.addProgram(shaders.drawnode_colorPicking(), true);
|
|
628
644
|
h.addProgram(shaders.drawnode_depth(), true);
|
|
629
645
|
h.addProgram(shaders.drawnode_heightPicking(), true);
|
|
@@ -716,6 +732,7 @@ export class Planet extends RenderNode {
|
|
|
716
732
|
this.transparentTexture = this.renderer.handler.transparentTexture;
|
|
717
733
|
|
|
718
734
|
this.camera = this.renderer.activeCamera = new PlanetCamera(this, {
|
|
735
|
+
frustums: this._cameraFrustums,
|
|
719
736
|
eye: new Vec3(0, 0, 28000000),
|
|
720
737
|
look: new Vec3(0, 0, 0),
|
|
721
738
|
up: new Vec3(0, 1, 0),
|
|
@@ -798,38 +815,70 @@ export class Planet extends RenderNode {
|
|
|
798
815
|
}
|
|
799
816
|
|
|
800
817
|
_preRender() {
|
|
818
|
+
// Zoom 0
|
|
801
819
|
this._quadTree.createChildrenNodes();
|
|
802
|
-
this._quadTree.segment.createPlainSegment();
|
|
803
|
-
this._quadTree.renderNode(true);
|
|
804
|
-
this._normalMapCreator.drawSingle(this._quadTree.segment);
|
|
820
|
+
this._quadTree.segment.createPlainSegment();
|
|
805
821
|
|
|
822
|
+
// Zoom 1
|
|
806
823
|
for (let i = 0; i < this._quadTree.nodes.length; i++) {
|
|
807
824
|
this._quadTree.nodes[i].segment.createPlainSegment();
|
|
808
|
-
this._quadTree.nodes[i].renderNode(true);
|
|
809
|
-
this._normalMapCreator.drawSingle(this._quadTree.nodes[i].segment);
|
|
810
825
|
}
|
|
811
826
|
|
|
827
|
+
// same for poles
|
|
812
828
|
this._quadTreeNorth.createChildrenNodes();
|
|
813
829
|
this._quadTreeNorth.segment.createPlainSegment();
|
|
830
|
+
|
|
831
|
+
for (let i = 0; i < this._quadTreeNorth.nodes.length; i++) {
|
|
832
|
+
this._quadTreeNorth.nodes[i].segment.createPlainSegment();
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
this._quadTreeSouth.createChildrenNodes();
|
|
836
|
+
this._quadTreeSouth.segment.createPlainSegment();
|
|
837
|
+
|
|
838
|
+
for (let i = 0; i < this._quadTreeSouth.nodes.length; i++) {
|
|
839
|
+
this._quadTreeSouth.nodes[i].segment.createPlainSegment();
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
this._preLoad();
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
_preLoad() {
|
|
846
|
+
this._clearRenderedNodeList();
|
|
847
|
+
|
|
848
|
+
this._skipPreRender = false;
|
|
849
|
+
|
|
850
|
+
// Same for poles
|
|
851
|
+
this._quadTreeNorth.segment.passReady = true;
|
|
814
852
|
this._quadTreeNorth.renderNode(true);
|
|
815
853
|
this._normalMapCreator.drawSingle(this._quadTreeNorth.segment);
|
|
816
854
|
|
|
817
855
|
for (let i = 0; i < this._quadTreeNorth.nodes.length; i++) {
|
|
818
|
-
this._quadTreeNorth.nodes[i].segment.
|
|
856
|
+
this._quadTreeNorth.nodes[i].segment.passReady = true;
|
|
819
857
|
this._quadTreeNorth.nodes[i].renderNode(true);
|
|
820
858
|
this._normalMapCreator.drawSingle(this._quadTreeNorth.nodes[i].segment);
|
|
821
859
|
}
|
|
822
860
|
|
|
823
|
-
this._quadTreeSouth.
|
|
824
|
-
this._quadTreeSouth.segment.createPlainSegment();
|
|
861
|
+
this._quadTreeSouth.segment.passReady = true;
|
|
825
862
|
this._quadTreeSouth.renderNode(true);
|
|
826
863
|
this._normalMapCreator.drawSingle(this._quadTreeSouth.segment);
|
|
827
864
|
|
|
828
865
|
for (let i = 0; i < this._quadTreeSouth.nodes.length; i++) {
|
|
829
|
-
this._quadTreeSouth.nodes[i].segment.
|
|
866
|
+
this._quadTreeSouth.nodes[i].segment.passReady = true;
|
|
830
867
|
this._quadTreeSouth.nodes[i].renderNode(true);
|
|
831
868
|
this._normalMapCreator.drawSingle(this._quadTreeSouth.nodes[i].segment);
|
|
832
869
|
}
|
|
870
|
+
|
|
871
|
+
// Zoom 1
|
|
872
|
+
for (let i = 0; i < this._quadTree.nodes.length; i++) {
|
|
873
|
+
this._quadTree.nodes[i].segment.passReady = true;
|
|
874
|
+
this._quadTree.nodes[i].renderNode(true);
|
|
875
|
+
this._normalMapCreator.drawSingle(this._quadTree.nodes[i].segment);
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
// Zoom 0
|
|
879
|
+
this._quadTree.segment.passReady = true;
|
|
880
|
+
this._quadTree.renderNode(true);
|
|
881
|
+
this._normalMapCreator.drawSingle(this._quadTree.segment);
|
|
833
882
|
}
|
|
834
883
|
|
|
835
884
|
/**
|
|
@@ -907,6 +956,7 @@ export class Planet extends RenderNode {
|
|
|
907
956
|
if (li._attribution.length) {
|
|
908
957
|
html += "<li>" + li._attribution + "</li>";
|
|
909
958
|
}
|
|
959
|
+
|
|
910
960
|
} else if (li._fading && li._fadingOpacity > 0) {
|
|
911
961
|
if (li.hasImageryTiles()) {
|
|
912
962
|
this.visibleTileLayers.push(li);
|
|
@@ -980,16 +1030,10 @@ export class Planet extends RenderNode {
|
|
|
980
1030
|
_collectRenderNodes() {
|
|
981
1031
|
let cam = this.camera;
|
|
982
1032
|
|
|
983
|
-
this.
|
|
984
|
-
cam.slope < 0.0 ? 0.0 : cam.slope,
|
|
985
|
-
this._maxLodRatio,
|
|
986
|
-
this._minLodRatio
|
|
987
|
-
);
|
|
1033
|
+
this._lodSize = math.lerp(cam.slope < 0.0 ? 0.0 : cam.slope, this._curLodSize, this._minLodSize);
|
|
988
1034
|
|
|
989
1035
|
cam._insideSegment = null;
|
|
990
1036
|
|
|
991
|
-
this._nodeCounterError_ = 0;
|
|
992
|
-
|
|
993
1037
|
// clear first
|
|
994
1038
|
this._clearRenderedNodeList();
|
|
995
1039
|
|
|
@@ -1004,11 +1048,11 @@ export class Planet extends RenderNode {
|
|
|
1004
1048
|
|
|
1005
1049
|
this._quadTree.renderTree(cam, 0, null);
|
|
1006
1050
|
|
|
1007
|
-
if (
|
|
1008
|
-
cam.slope > this.minEqualZoomCameraSlope &&
|
|
1051
|
+
if (cam.slope > this.minEqualZoomCameraSlope &&
|
|
1009
1052
|
cam._lonLat.height < this.maxEqualZoomAltitude &&
|
|
1010
1053
|
cam._lonLat.height > this.minEqualZoomAltitude
|
|
1011
1054
|
) {
|
|
1055
|
+
|
|
1012
1056
|
this.minCurrZoom = this.maxCurrZoom;
|
|
1013
1057
|
|
|
1014
1058
|
let temp = this._renderedNodes,
|
|
@@ -1025,7 +1069,8 @@ export class Planet extends RenderNode {
|
|
|
1025
1069
|
|
|
1026
1070
|
for (var i = 0, len = temp.length; i < len; i++) {
|
|
1027
1071
|
var ri = temp[i];
|
|
1028
|
-
|
|
1072
|
+
let ht = ri.segment.centerNormal.dot(cam._b);
|
|
1073
|
+
if (ri.segment.tileZoom === this.maxCurrZoom || ht < HORIZON_TANGENT) {
|
|
1029
1074
|
this._renderedNodes.push(ri);
|
|
1030
1075
|
let k = 0,
|
|
1031
1076
|
inFrustum = ri.inFrustum;
|
|
@@ -1135,7 +1180,6 @@ export class Planet extends RenderNode {
|
|
|
1135
1180
|
gl.enable(gl.BLEND);
|
|
1136
1181
|
gl.blendEquation(gl.FUNC_ADD);
|
|
1137
1182
|
gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
|
|
1138
|
-
//gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ZERO);
|
|
1139
1183
|
|
|
1140
1184
|
if (this.lightEnabled) {
|
|
1141
1185
|
h.programs.drawnode_screen_wl.activate();
|
|
@@ -1148,13 +1192,14 @@ export class Planet extends RenderNode {
|
|
|
1148
1192
|
gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
|
|
1149
1193
|
gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
|
|
1150
1194
|
|
|
1195
|
+
gl.uniform3fv(shu.diffuse, this._diffuse);
|
|
1196
|
+
gl.uniform3fv(shu.ambient, this._ambient);
|
|
1197
|
+
gl.uniform4fv(shu.specular, this._specular);
|
|
1198
|
+
|
|
1151
1199
|
// bind night glowing material
|
|
1152
1200
|
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
|
|
1153
|
-
gl.bindTexture(
|
|
1154
|
-
|
|
1155
|
-
(this.camera._lonLat.height > 329958.0 &&
|
|
1156
|
-
(this._nightTexture || this.transparentTexture)) ||
|
|
1157
|
-
this.transparentTexture
|
|
1201
|
+
gl.bindTexture(gl.TEXTURE_2D,
|
|
1202
|
+
(this.camera._lonLat.height > 329958.0 && (this._nightTexture || this.transparentTexture)) || this.transparentTexture
|
|
1158
1203
|
);
|
|
1159
1204
|
gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
|
|
1160
1205
|
|
|
@@ -1163,34 +1208,6 @@ export class Planet extends RenderNode {
|
|
|
1163
1208
|
gl.bindTexture(gl.TEXTURE_2D, this._specularTexture || this.transparentTexture);
|
|
1164
1209
|
gl.uniform1i(shu.specularTexture, this.SLICE_SIZE + 1);
|
|
1165
1210
|
|
|
1166
|
-
var b = this.baseLayer;
|
|
1167
|
-
if (b) {
|
|
1168
|
-
this._diffuseMaterialArr[0] = b.diffuse.x;
|
|
1169
|
-
this._diffuseMaterialArr[1] = b.diffuse.y;
|
|
1170
|
-
this._diffuseMaterialArr[2] = b.diffuse.z;
|
|
1171
|
-
|
|
1172
|
-
this._ambientMaterialArr[0] = b.ambient.x;
|
|
1173
|
-
this._ambientMaterialArr[1] = b.ambient.y;
|
|
1174
|
-
this._ambientMaterialArr[2] = b.ambient.z;
|
|
1175
|
-
|
|
1176
|
-
this._specularMaterialArr[0] = b.specular.x;
|
|
1177
|
-
this._specularMaterialArr[1] = b.specular.y;
|
|
1178
|
-
this._specularMaterialArr[2] = b.specular.z;
|
|
1179
|
-
this._specularMaterialArr[3] = b.shininess;
|
|
1180
|
-
} else {
|
|
1181
|
-
this._diffuseMaterialArr[0] = 0.89;
|
|
1182
|
-
this._diffuseMaterialArr[1] = 0.9;
|
|
1183
|
-
this._diffuseMaterialArr[2] = 0.83;
|
|
1184
|
-
|
|
1185
|
-
this._ambientMaterialArr[0] = 0.0;
|
|
1186
|
-
this._ambientMaterialArr[1] = 0.0;
|
|
1187
|
-
this._ambientMaterialArr[2] = 0.0;
|
|
1188
|
-
|
|
1189
|
-
this._specularMaterialArr[0] = 0.0003;
|
|
1190
|
-
this._specularMaterialArr[1] = 0.00012;
|
|
1191
|
-
this._specularMaterialArr[2] = 0.00001;
|
|
1192
|
-
this._specularMaterialArr[3] = 20.0;
|
|
1193
|
-
}
|
|
1194
1211
|
} else {
|
|
1195
1212
|
h.programs.drawnode_screen_nl.activate();
|
|
1196
1213
|
sh = h.programs.drawnode_screen_nl._program;
|
|
@@ -1249,63 +1266,45 @@ export class Planet extends RenderNode {
|
|
|
1249
1266
|
* @protected
|
|
1250
1267
|
*/
|
|
1251
1268
|
_renderHeightPickingFramebufferPASS() {
|
|
1252
|
-
this.
|
|
1253
|
-
|
|
1254
|
-
let sh;
|
|
1255
|
-
let renderer = this.renderer;
|
|
1256
|
-
let h = renderer.handler;
|
|
1257
|
-
let gl = h.gl;
|
|
1258
|
-
let cam = renderer.activeCamera;
|
|
1259
|
-
let frustumIndex = cam.getCurrentFrustum();
|
|
1269
|
+
if (!this.terrain.isEmpty) {
|
|
1260
1270
|
|
|
1261
|
-
|
|
1262
|
-
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
1263
|
-
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
1264
|
-
} else {
|
|
1265
|
-
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
1266
|
-
}
|
|
1271
|
+
this._heightPickingFramebuffer.activate();
|
|
1267
1272
|
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1273
|
+
let sh;
|
|
1274
|
+
let renderer = this.renderer;
|
|
1275
|
+
let h = renderer.handler;
|
|
1276
|
+
let gl = h.gl;
|
|
1277
|
+
let cam = renderer.activeCamera;
|
|
1278
|
+
let frustumIndex = cam.getCurrentFrustum();
|
|
1272
1279
|
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1280
|
+
if (frustumIndex === cam.FARTHEST_FRUSTUM_INDEX) {
|
|
1281
|
+
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
1282
|
+
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
1283
|
+
} else {
|
|
1284
|
+
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
1285
|
+
}
|
|
1276
1286
|
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
shu.
|
|
1280
|
-
false,
|
|
1281
|
-
renderer.activeCamera.getProjectionMatrix()
|
|
1282
|
-
);
|
|
1287
|
+
h.programs.drawnode_heightPicking.activate();
|
|
1288
|
+
sh = h.programs.drawnode_heightPicking._program;
|
|
1289
|
+
let shu = sh.uniforms;
|
|
1283
1290
|
|
|
1284
|
-
|
|
1285
|
-
|
|
1291
|
+
gl.uniformMatrix4fv(shu.viewMatrix, false, renderer.activeCamera.getViewMatrix());
|
|
1292
|
+
gl.uniformMatrix4fv(shu.projectionMatrix, false, renderer.activeCamera.getProjectionMatrix());
|
|
1286
1293
|
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
sl = this._visibleTileLayerSlices;
|
|
1294
|
+
gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
|
|
1295
|
+
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
|
1290
1296
|
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
}
|
|
1297
|
+
// drawing planet nodes
|
|
1298
|
+
var rn = this._renderedNodesInFrustum[frustumIndex],
|
|
1299
|
+
sl = this._visibleTileLayerSlices;
|
|
1295
1300
|
|
|
1296
|
-
|
|
1297
|
-
for (let j = 1, len = sl.length; j < len; j++) {
|
|
1298
|
-
i = rn.length;
|
|
1299
|
-
//gl.polygonOffset(0, -j);
|
|
1301
|
+
let i = rn.length;
|
|
1300
1302
|
while (i--) {
|
|
1301
|
-
rn[i].segment.heightPickingRendering(sh, sl[
|
|
1303
|
+
rn[i].segment.heightPickingRendering(sh, sl[0]);
|
|
1302
1304
|
}
|
|
1303
|
-
}
|
|
1304
|
-
//gl.disable(gl.POLYGON_OFFSET_FILL);
|
|
1305
1305
|
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
this._heightPickingFramebuffer.deactivate();
|
|
1306
|
+
this._heightPickingFramebuffer.deactivate();
|
|
1307
|
+
}
|
|
1309
1308
|
}
|
|
1310
1309
|
|
|
1311
1310
|
/**
|
|
@@ -1368,6 +1367,7 @@ export class Planet extends RenderNode {
|
|
|
1368
1367
|
let cam = renderer.activeCamera;
|
|
1369
1368
|
|
|
1370
1369
|
gl.disable(gl.BLEND);
|
|
1370
|
+
gl.disable(gl.POLYGON_OFFSET_FILL);
|
|
1371
1371
|
|
|
1372
1372
|
gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
|
|
1373
1373
|
gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
|
|
@@ -1383,16 +1383,7 @@ export class Planet extends RenderNode {
|
|
|
1383
1383
|
|
|
1384
1384
|
let i = rn.length;
|
|
1385
1385
|
while (i--) {
|
|
1386
|
-
rn[i].segment.depthRendering(sh, sl[0]
|
|
1387
|
-
}
|
|
1388
|
-
|
|
1389
|
-
gl.enable(gl.POLYGON_OFFSET_FILL);
|
|
1390
|
-
for (let j = 1, len = sl.length; j < len; j++) {
|
|
1391
|
-
i = rn.length;
|
|
1392
|
-
gl.polygonOffset(0, -j);
|
|
1393
|
-
while (i--) {
|
|
1394
|
-
rn[i].segment.depthRendering(sh, sl[j], j, this.transparentTexture, true);
|
|
1395
|
-
}
|
|
1386
|
+
rn[i].segment.depthRendering(sh, sl[0]);
|
|
1396
1387
|
}
|
|
1397
1388
|
}
|
|
1398
1389
|
|
|
@@ -1492,12 +1483,11 @@ export class Planet extends RenderNode {
|
|
|
1492
1483
|
* Returns 3d cartesian coordinates on the relief planet by mouse cursor
|
|
1493
1484
|
* position or null if mouse cursor is outside the planet.
|
|
1494
1485
|
* @public
|
|
1495
|
-
* @param {Boolean} [force=false] - Force framebuffer rendering.
|
|
1496
1486
|
* @returns {Vec3} -
|
|
1497
1487
|
*/
|
|
1498
|
-
getCartesianFromMouseTerrain(
|
|
1488
|
+
getCartesianFromMouseTerrain() {
|
|
1499
1489
|
var ms = this.renderer.events.mouseState;
|
|
1500
|
-
var distance = this.getDistanceFromPixel(ms
|
|
1490
|
+
var distance = this.getDistanceFromPixel(ms);
|
|
1501
1491
|
if (distance) {
|
|
1502
1492
|
return ms.direction.scaleTo(distance).addA(this.renderer.activeCamera.eye);
|
|
1503
1493
|
}
|
|
@@ -1512,8 +1502,8 @@ export class Planet extends RenderNode {
|
|
|
1512
1502
|
* @param {Boolean} [force=false] - Force framebuffer rendering.
|
|
1513
1503
|
* @returns {Vec3} -
|
|
1514
1504
|
*/
|
|
1515
|
-
getCartesianFromPixelTerrain(px
|
|
1516
|
-
var distance = this.getDistanceFromPixel(px
|
|
1505
|
+
getCartesianFromPixelTerrain(px) {
|
|
1506
|
+
var distance = this.getDistanceFromPixel(px);
|
|
1517
1507
|
if (distance) {
|
|
1518
1508
|
var direction = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1519
1509
|
return direction.scaleTo(distance).addA(this.renderer.activeCamera.eye);
|
|
@@ -1584,40 +1574,48 @@ export class Planet extends RenderNode {
|
|
|
1584
1574
|
* @returns {number} -
|
|
1585
1575
|
*/
|
|
1586
1576
|
getDistanceFromPixel(px) {
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
this._heightPickingFramebuffer.deactivate();
|
|
1597
|
-
|
|
1598
|
-
let dist = decodeFloatFromRGBAArr(_tempPickingPix_);
|
|
1599
|
-
|
|
1600
|
-
if (!(_tempPickingPix_[0] || _tempPickingPix_[1] || _tempPickingPix_[2])) {
|
|
1601
|
-
dist = this.getDistanceFromPixelEllipsoid(px) || 0;
|
|
1602
|
-
} else if (dist < DEPTH_DISTANCE) {
|
|
1603
|
-
r.screenDepthFramebuffer.activate();
|
|
1604
|
-
r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy, 0);
|
|
1605
|
-
r.screenDepthFramebuffer.deactivate();
|
|
1606
|
-
|
|
1607
|
-
let screenPos = new Vec4(
|
|
1608
|
-
spx * 2.0 - 1.0,
|
|
1609
|
-
spy * 2.0 - 1.0,
|
|
1610
|
-
(_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
|
|
1611
|
-
1.0 * 2.0 - 1.0
|
|
1612
|
-
);
|
|
1613
|
-
let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
|
|
1614
|
-
let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1615
|
-
dist =
|
|
1616
|
-
-(viewPosition.z / viewPosition.w) /
|
|
1617
|
-
dir.dot(this.renderer.activeCamera.getForward());
|
|
1618
|
-
}
|
|
1577
|
+
if (this.terrain.isEmpty) {
|
|
1578
|
+
return this.getDistanceFromPixelEllipsoid(px) || 0;
|
|
1579
|
+
} else {
|
|
1580
|
+
|
|
1581
|
+
let r = this.renderer,
|
|
1582
|
+
cnv = this.renderer.handler.canvas;
|
|
1583
|
+
|
|
1584
|
+
let spx = px.x / cnv.width,
|
|
1585
|
+
spy = (cnv.height - px.y) / cnv.height;
|
|
1619
1586
|
|
|
1620
|
-
|
|
1587
|
+
_tempPickingPix_[0] = _tempPickingPix_[1] = _tempPickingPix_[2] = 0.0;
|
|
1588
|
+
|
|
1589
|
+
let dist = 0;
|
|
1590
|
+
|
|
1591
|
+
// HEIGHT
|
|
1592
|
+
this._heightPickingFramebuffer.activate();
|
|
1593
|
+
if (this._heightPickingFramebuffer.isComplete()) {
|
|
1594
|
+
this._heightPickingFramebuffer.readPixels(_tempPickingPix_, spx, spy);
|
|
1595
|
+
dist = decodeFloatFromRGBAArr(_tempPickingPix_);
|
|
1596
|
+
}
|
|
1597
|
+
this._heightPickingFramebuffer.deactivate();
|
|
1598
|
+
|
|
1599
|
+
if (!(_tempPickingPix_[0] || _tempPickingPix_[1] || _tempPickingPix_[2])) {
|
|
1600
|
+
dist = this.getDistanceFromPixelEllipsoid(px) || 0;
|
|
1601
|
+
} else if (dist < DEPTH_DISTANCE) {
|
|
1602
|
+
r.screenDepthFramebuffer.activate();
|
|
1603
|
+
if (r.screenDepthFramebuffer.isComplete()) {
|
|
1604
|
+
r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy);
|
|
1605
|
+
let screenPos = new Vec4(
|
|
1606
|
+
spx * 2.0 - 1.0,
|
|
1607
|
+
spy * 2.0 - 1.0,
|
|
1608
|
+
(_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
|
|
1609
|
+
1.0 * 2.0 - 1.0
|
|
1610
|
+
);
|
|
1611
|
+
let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
|
|
1612
|
+
let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1613
|
+
dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
|
|
1614
|
+
}
|
|
1615
|
+
r.screenDepthFramebuffer.deactivate();
|
|
1616
|
+
}
|
|
1617
|
+
return dist;
|
|
1618
|
+
}
|
|
1621
1619
|
}
|
|
1622
1620
|
|
|
1623
1621
|
/**
|