@openglobus/og 0.11.8 → 0.12.4
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 +2 -0
- 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/MouseNavigation.js +11 -13
- package/src/og/control/MouseWheelZoomControl.js +5 -5
- package/src/og/control/Sun.js +3 -3
- package/src/og/entity/Entity.js +742 -742
- package/src/og/entity/GeoObjectHandler.js +138 -134
- package/src/og/entity/LabelHandler.js +2 -1
- package/src/og/layer/CanvasTiles.js +8 -11
- package/src/og/layer/KML.js +19 -12
- package/src/og/layer/Layer.js +9 -2
- package/src/og/layer/XYZ.js +27 -28
- 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 +3 -5
- package/src/og/scene/Planet.js +147 -127
- package/src/og/segment/Segment.js +63 -136
- package/src/og/shaders/drawnode.js +132 -221
- 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/Loader.js +1 -1
- package/src/og/utils/PlainSegmentWorker.js +0 -13
- package/src/og/webgl/Handler.js +13 -9
- 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 +311 -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
|
@@ -32,14 +32,16 @@ import { wgs84 } from "../ellipsoid/wgs84.js";
|
|
|
32
32
|
import { NIGHT, SPECULAR } from "../res/images.js";
|
|
33
33
|
import { Geoid } from "../terrain/Geoid.js";
|
|
34
34
|
import { isUndef } from "../utils/shared.js";
|
|
35
|
+
import { MAX_RENDERED_NODES } from "../quadTree/quadTree.js";
|
|
35
36
|
|
|
36
|
-
const
|
|
37
|
-
const
|
|
37
|
+
const CUR_LOD_SIZE = 250; //px
|
|
38
|
+
const MIN_LOD_SIZE = 312; //px
|
|
39
|
+
const MAX_LOD_SIZE = 190; //px
|
|
38
40
|
|
|
39
41
|
let _tempPickingPix_ = new Uint8Array(4),
|
|
40
42
|
_tempDepthColor_ = new Uint8Array(4);
|
|
41
43
|
|
|
42
|
-
const DEPTH_DISTANCE = 11
|
|
44
|
+
const DEPTH_DISTANCE = 11;//m
|
|
43
45
|
|
|
44
46
|
/**
|
|
45
47
|
* Maximum created nodes count. The more nodes count the more memory usage.
|
|
@@ -49,6 +51,8 @@ const DEPTH_DISTANCE = 11;
|
|
|
49
51
|
*/
|
|
50
52
|
const MAX_NODES = 200;
|
|
51
53
|
|
|
54
|
+
const HORIZON_TANGENT = 0.81;
|
|
55
|
+
|
|
52
56
|
const EVENT_NAMES = [
|
|
53
57
|
/**
|
|
54
58
|
* Triggered before globe frame begins to render.
|
|
@@ -108,6 +112,13 @@ export class Planet extends RenderNode {
|
|
|
108
112
|
constructor(options = {}) {
|
|
109
113
|
super(options.name);
|
|
110
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
|
+
|
|
111
122
|
/**
|
|
112
123
|
* @public
|
|
113
124
|
* @type {Ellipsoid}
|
|
@@ -378,9 +389,10 @@ export class Planet extends RenderNode {
|
|
|
378
389
|
* @public
|
|
379
390
|
* @type {number}
|
|
380
391
|
*/
|
|
381
|
-
this.
|
|
382
|
-
this.
|
|
383
|
-
this.
|
|
392
|
+
this._lodSize = CUR_LOD_SIZE;
|
|
393
|
+
this._curLodSize = CUR_LOD_SIZE;
|
|
394
|
+
this._minLodSize = MIN_LOD_SIZE;
|
|
395
|
+
this._maxLodSize = MAX_LOD_SIZE;
|
|
384
396
|
|
|
385
397
|
this._pickingColorArr = new Float32Array(this.SLICE_SIZE_4);
|
|
386
398
|
this._samplerArr = new Int32Array(this.SLICE_SIZE);
|
|
@@ -397,11 +409,11 @@ export class Planet extends RenderNode {
|
|
|
397
409
|
|
|
398
410
|
this._normalMapCreator = null;
|
|
399
411
|
|
|
400
|
-
this._terrainWorker = new TerrainWorker(
|
|
412
|
+
this._terrainWorker = new TerrainWorker(3);
|
|
401
413
|
|
|
402
|
-
this._plainSegmentWorker = new PlainSegmentWorker(
|
|
414
|
+
this._plainSegmentWorker = new PlainSegmentWorker(4);
|
|
403
415
|
|
|
404
|
-
this._tileLoader = new Loader(
|
|
416
|
+
this._tileLoader = new Loader(options.loadingBatchSize || 12);
|
|
405
417
|
|
|
406
418
|
this._memKey = new Key();
|
|
407
419
|
|
|
@@ -433,11 +445,14 @@ export class Planet extends RenderNode {
|
|
|
433
445
|
control.addTo(this.renderer);
|
|
434
446
|
}
|
|
435
447
|
|
|
436
|
-
|
|
437
|
-
this.
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
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;
|
|
441
456
|
this._renderCompletedActivated = false;
|
|
442
457
|
}
|
|
443
458
|
|
|
@@ -717,6 +732,7 @@ export class Planet extends RenderNode {
|
|
|
717
732
|
this.transparentTexture = this.renderer.handler.transparentTexture;
|
|
718
733
|
|
|
719
734
|
this.camera = this.renderer.activeCamera = new PlanetCamera(this, {
|
|
735
|
+
frustums: this._cameraFrustums,
|
|
720
736
|
eye: new Vec3(0, 0, 28000000),
|
|
721
737
|
look: new Vec3(0, 0, 0),
|
|
722
738
|
up: new Vec3(0, 1, 0),
|
|
@@ -799,38 +815,70 @@ export class Planet extends RenderNode {
|
|
|
799
815
|
}
|
|
800
816
|
|
|
801
817
|
_preRender() {
|
|
818
|
+
// Zoom 0
|
|
802
819
|
this._quadTree.createChildrenNodes();
|
|
803
|
-
this._quadTree.segment.createPlainSegment();
|
|
804
|
-
this._quadTree.renderNode(true);
|
|
805
|
-
this._normalMapCreator.drawSingle(this._quadTree.segment);
|
|
820
|
+
this._quadTree.segment.createPlainSegment();
|
|
806
821
|
|
|
822
|
+
// Zoom 1
|
|
807
823
|
for (let i = 0; i < this._quadTree.nodes.length; i++) {
|
|
808
824
|
this._quadTree.nodes[i].segment.createPlainSegment();
|
|
809
|
-
this._quadTree.nodes[i].renderNode(true);
|
|
810
|
-
this._normalMapCreator.drawSingle(this._quadTree.nodes[i].segment);
|
|
811
825
|
}
|
|
812
826
|
|
|
827
|
+
// same for poles
|
|
813
828
|
this._quadTreeNorth.createChildrenNodes();
|
|
814
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;
|
|
815
852
|
this._quadTreeNorth.renderNode(true);
|
|
816
853
|
this._normalMapCreator.drawSingle(this._quadTreeNorth.segment);
|
|
817
854
|
|
|
818
855
|
for (let i = 0; i < this._quadTreeNorth.nodes.length; i++) {
|
|
819
|
-
this._quadTreeNorth.nodes[i].segment.
|
|
856
|
+
this._quadTreeNorth.nodes[i].segment.passReady = true;
|
|
820
857
|
this._quadTreeNorth.nodes[i].renderNode(true);
|
|
821
858
|
this._normalMapCreator.drawSingle(this._quadTreeNorth.nodes[i].segment);
|
|
822
859
|
}
|
|
823
860
|
|
|
824
|
-
this._quadTreeSouth.
|
|
825
|
-
this._quadTreeSouth.segment.createPlainSegment();
|
|
861
|
+
this._quadTreeSouth.segment.passReady = true;
|
|
826
862
|
this._quadTreeSouth.renderNode(true);
|
|
827
863
|
this._normalMapCreator.drawSingle(this._quadTreeSouth.segment);
|
|
828
864
|
|
|
829
865
|
for (let i = 0; i < this._quadTreeSouth.nodes.length; i++) {
|
|
830
|
-
this._quadTreeSouth.nodes[i].segment.
|
|
866
|
+
this._quadTreeSouth.nodes[i].segment.passReady = true;
|
|
831
867
|
this._quadTreeSouth.nodes[i].renderNode(true);
|
|
832
868
|
this._normalMapCreator.drawSingle(this._quadTreeSouth.nodes[i].segment);
|
|
833
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);
|
|
834
882
|
}
|
|
835
883
|
|
|
836
884
|
/**
|
|
@@ -908,6 +956,7 @@ export class Planet extends RenderNode {
|
|
|
908
956
|
if (li._attribution.length) {
|
|
909
957
|
html += "<li>" + li._attribution + "</li>";
|
|
910
958
|
}
|
|
959
|
+
|
|
911
960
|
} else if (li._fading && li._fadingOpacity > 0) {
|
|
912
961
|
if (li.hasImageryTiles()) {
|
|
913
962
|
this.visibleTileLayers.push(li);
|
|
@@ -981,16 +1030,10 @@ export class Planet extends RenderNode {
|
|
|
981
1030
|
_collectRenderNodes() {
|
|
982
1031
|
let cam = this.camera;
|
|
983
1032
|
|
|
984
|
-
this.
|
|
985
|
-
cam.slope < 0.0 ? 0.0 : cam.slope,
|
|
986
|
-
this._maxLodRatio,
|
|
987
|
-
this._minLodRatio
|
|
988
|
-
);
|
|
1033
|
+
this._lodSize = math.lerp(cam.slope < 0.0 ? 0.0 : cam.slope, this._curLodSize, this._minLodSize);
|
|
989
1034
|
|
|
990
1035
|
cam._insideSegment = null;
|
|
991
1036
|
|
|
992
|
-
this._nodeCounterError_ = 0;
|
|
993
|
-
|
|
994
1037
|
// clear first
|
|
995
1038
|
this._clearRenderedNodeList();
|
|
996
1039
|
|
|
@@ -1005,11 +1048,11 @@ export class Planet extends RenderNode {
|
|
|
1005
1048
|
|
|
1006
1049
|
this._quadTree.renderTree(cam, 0, null);
|
|
1007
1050
|
|
|
1008
|
-
if (
|
|
1009
|
-
cam.slope > this.minEqualZoomCameraSlope &&
|
|
1051
|
+
if (cam.slope > this.minEqualZoomCameraSlope &&
|
|
1010
1052
|
cam._lonLat.height < this.maxEqualZoomAltitude &&
|
|
1011
1053
|
cam._lonLat.height > this.minEqualZoomAltitude
|
|
1012
1054
|
) {
|
|
1055
|
+
|
|
1013
1056
|
this.minCurrZoom = this.maxCurrZoom;
|
|
1014
1057
|
|
|
1015
1058
|
let temp = this._renderedNodes,
|
|
@@ -1026,7 +1069,8 @@ export class Planet extends RenderNode {
|
|
|
1026
1069
|
|
|
1027
1070
|
for (var i = 0, len = temp.length; i < len; i++) {
|
|
1028
1071
|
var ri = temp[i];
|
|
1029
|
-
|
|
1072
|
+
let ht = ri.segment.centerNormal.dot(cam._b);
|
|
1073
|
+
if (ri.segment.tileZoom === this.maxCurrZoom || ht < HORIZON_TANGENT) {
|
|
1030
1074
|
this._renderedNodes.push(ri);
|
|
1031
1075
|
let k = 0,
|
|
1032
1076
|
inFrustum = ri.inFrustum;
|
|
@@ -1076,9 +1120,7 @@ export class Planet extends RenderNode {
|
|
|
1076
1120
|
frame() {
|
|
1077
1121
|
this._renderScreenNodesPASS();
|
|
1078
1122
|
|
|
1079
|
-
|
|
1080
|
-
this._renderHeightPickingFramebufferPASS();
|
|
1081
|
-
}
|
|
1123
|
+
this._renderHeightPickingFramebufferPASS();
|
|
1082
1124
|
|
|
1083
1125
|
this.drawEntityCollections(this._frustumEntityCollections);
|
|
1084
1126
|
}
|
|
@@ -1156,11 +1198,8 @@ export class Planet extends RenderNode {
|
|
|
1156
1198
|
|
|
1157
1199
|
// bind night glowing material
|
|
1158
1200
|
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
|
|
1159
|
-
gl.bindTexture(
|
|
1160
|
-
|
|
1161
|
-
(this.camera._lonLat.height > 329958.0 &&
|
|
1162
|
-
(this._nightTexture || this.transparentTexture)) ||
|
|
1163
|
-
this.transparentTexture
|
|
1201
|
+
gl.bindTexture(gl.TEXTURE_2D,
|
|
1202
|
+
(this.camera._lonLat.height > 329958.0 && (this._nightTexture || this.transparentTexture)) || this.transparentTexture
|
|
1164
1203
|
);
|
|
1165
1204
|
gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
|
|
1166
1205
|
|
|
@@ -1227,63 +1266,45 @@ export class Planet extends RenderNode {
|
|
|
1227
1266
|
* @protected
|
|
1228
1267
|
*/
|
|
1229
1268
|
_renderHeightPickingFramebufferPASS() {
|
|
1230
|
-
this.
|
|
1231
|
-
|
|
1232
|
-
let sh;
|
|
1233
|
-
let renderer = this.renderer;
|
|
1234
|
-
let h = renderer.handler;
|
|
1235
|
-
let gl = h.gl;
|
|
1236
|
-
let cam = renderer.activeCamera;
|
|
1237
|
-
let frustumIndex = cam.getCurrentFrustum();
|
|
1269
|
+
if (!this.terrain.isEmpty) {
|
|
1238
1270
|
|
|
1239
|
-
|
|
1240
|
-
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
1241
|
-
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
1242
|
-
} else {
|
|
1243
|
-
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
1244
|
-
}
|
|
1271
|
+
this._heightPickingFramebuffer.activate();
|
|
1245
1272
|
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
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();
|
|
1250
1279
|
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
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
|
+
}
|
|
1254
1286
|
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
shu.
|
|
1258
|
-
false,
|
|
1259
|
-
renderer.activeCamera.getProjectionMatrix()
|
|
1260
|
-
);
|
|
1287
|
+
h.programs.drawnode_heightPicking.activate();
|
|
1288
|
+
sh = h.programs.drawnode_heightPicking._program;
|
|
1289
|
+
let shu = sh.uniforms;
|
|
1261
1290
|
|
|
1262
|
-
|
|
1263
|
-
|
|
1291
|
+
gl.uniformMatrix4fv(shu.viewMatrix, false, renderer.activeCamera.getViewMatrix());
|
|
1292
|
+
gl.uniformMatrix4fv(shu.projectionMatrix, false, renderer.activeCamera.getProjectionMatrix());
|
|
1264
1293
|
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
sl = this._visibleTileLayerSlices;
|
|
1294
|
+
gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
|
|
1295
|
+
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
|
1268
1296
|
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
}
|
|
1297
|
+
// drawing planet nodes
|
|
1298
|
+
var rn = this._renderedNodesInFrustum[frustumIndex],
|
|
1299
|
+
sl = this._visibleTileLayerSlices;
|
|
1273
1300
|
|
|
1274
|
-
|
|
1275
|
-
for (let j = 1, len = sl.length; j < len; j++) {
|
|
1276
|
-
i = rn.length;
|
|
1277
|
-
//gl.polygonOffset(0, -j);
|
|
1301
|
+
let i = rn.length;
|
|
1278
1302
|
while (i--) {
|
|
1279
|
-
rn[i].segment.heightPickingRendering(sh, sl[
|
|
1303
|
+
rn[i].segment.heightPickingRendering(sh, sl[0]);
|
|
1280
1304
|
}
|
|
1281
|
-
}
|
|
1282
|
-
//gl.disable(gl.POLYGON_OFFSET_FILL);
|
|
1283
|
-
|
|
1284
|
-
gl.disable(gl.BLEND);
|
|
1285
1305
|
|
|
1286
|
-
|
|
1306
|
+
this._heightPickingFramebuffer.deactivate();
|
|
1307
|
+
}
|
|
1287
1308
|
}
|
|
1288
1309
|
|
|
1289
1310
|
/**
|
|
@@ -1362,15 +1383,7 @@ export class Planet extends RenderNode {
|
|
|
1362
1383
|
|
|
1363
1384
|
let i = rn.length;
|
|
1364
1385
|
while (i--) {
|
|
1365
|
-
rn[i].segment.depthRendering(sh, sl[0]
|
|
1366
|
-
}
|
|
1367
|
-
|
|
1368
|
-
for (let j = 1, len = sl.length; j < len; j++) {
|
|
1369
|
-
i = rn.length;
|
|
1370
|
-
gl.polygonOffset(0, -j);
|
|
1371
|
-
while (i--) {
|
|
1372
|
-
rn[i].segment.depthRendering(sh, sl[j], j, this.transparentTexture, true);
|
|
1373
|
-
}
|
|
1386
|
+
rn[i].segment.depthRendering(sh, sl[0]);
|
|
1374
1387
|
}
|
|
1375
1388
|
}
|
|
1376
1389
|
|
|
@@ -1561,41 +1574,48 @@ export class Planet extends RenderNode {
|
|
|
1561
1574
|
* @returns {number} -
|
|
1562
1575
|
*/
|
|
1563
1576
|
getDistanceFromPixel(px) {
|
|
1564
|
-
|
|
1565
|
-
|
|
1577
|
+
if (this.terrain.isEmpty) {
|
|
1578
|
+
return this.getDistanceFromPixelEllipsoid(px) || 0;
|
|
1579
|
+
} else {
|
|
1566
1580
|
|
|
1567
|
-
|
|
1568
|
-
|
|
1581
|
+
let r = this.renderer,
|
|
1582
|
+
cnv = this.renderer.handler.canvas;
|
|
1569
1583
|
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
r.screenDepthFramebuffer.activate();
|
|
1583
|
-
if (r.screenDepthFramebuffer.isComplete()) {
|
|
1584
|
-
r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy);
|
|
1585
|
-
let screenPos = new Vec4(
|
|
1586
|
-
spx * 2.0 - 1.0,
|
|
1587
|
-
spy * 2.0 - 1.0,
|
|
1588
|
-
(_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
|
|
1589
|
-
1.0 * 2.0 - 1.0
|
|
1590
|
-
);
|
|
1591
|
-
let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
|
|
1592
|
-
let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1593
|
-
dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
|
|
1584
|
+
let spx = px.x / cnv.width,
|
|
1585
|
+
spy = (cnv.height - px.y) / cnv.height;
|
|
1586
|
+
|
|
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_);
|
|
1594
1596
|
}
|
|
1595
|
-
|
|
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;
|
|
1596
1618
|
}
|
|
1597
|
-
|
|
1598
|
-
return dist;
|
|
1599
1619
|
}
|
|
1600
1620
|
|
|
1601
1621
|
/**
|