@openglobus/og 0.11.5 → 0.12.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/css/og.css +5 -2
- package/package.json +12 -14
- package/src/og/Clock.js +6 -10
- package/src/og/Events.js +5 -7
- package/src/og/Extent.js +73 -32
- package/src/og/Globe.js +25 -10
- package/src/og/ImageCanvas.js +18 -15
- package/src/og/LonLat.js +13 -10
- package/src/og/Popup.js +19 -17
- package/src/og/QueueArray.js +3 -4
- package/src/og/Rectangle.js +4 -6
- package/src/og/Stack.js +2 -4
- package/src/og/ajax.js +20 -14
- package/src/og/astro/earth.js +21 -15
- package/src/og/bv/Box.js +2 -3
- package/src/og/bv/Sphere.js +10 -7
- package/src/og/camera/Camera.js +70 -79
- package/src/og/camera/Frustum.js +19 -12
- package/src/og/camera/PlanetCamera.js +33 -34
- package/src/og/control/CompassButton.js +1 -2
- package/src/og/control/Control.js +7 -9
- package/src/og/control/DebugInfo.js +2 -3
- package/src/og/control/EarthNavigation.js +26 -17
- package/src/og/control/KeyboardNavigation.js +9 -9
- package/src/og/control/LayerSwitcher.js +21 -20
- package/src/og/control/Lighting.js +74 -64
- package/src/og/control/MouseNavigation.js +30 -29
- package/src/og/control/MouseWheelZoomControl.js +257 -0
- package/src/og/control/SegmentBoundVisualization.js +5 -6
- package/src/og/control/ShowFps.js +12 -7
- package/src/og/control/SimpleNavigation.js +5 -7
- package/src/og/control/Sun.js +24 -14
- package/src/og/control/ToggleWireframe.js +3 -3
- package/src/og/control/TouchNavigation.js +43 -32
- package/src/og/control/ZoomControl.js +40 -24
- 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/ellipsoid/Ellipsoid.js +149 -57
- package/src/og/ellipsoid/wgs84.js +3 -3
- package/src/og/entity/BaseBillboard.js +72 -30
- package/src/og/entity/Billboard.js +9 -5
- package/src/og/entity/BillboardHandler.js +315 -62
- package/src/og/entity/Entity.js +742 -704
- package/src/og/entity/EntityCollection.js +47 -24
- package/src/og/entity/GeoObject.js +228 -0
- package/src/og/entity/GeoObjectHandler.js +895 -0
- package/src/og/entity/GeometryHandler.js +595 -123
- package/src/og/entity/Label.js +62 -30
- package/src/og/entity/LabelHandler.js +42 -243
- package/src/og/entity/LabelWorker.js +218 -0
- package/src/og/entity/Object3d.js +504 -0
- package/src/og/entity/PointCloud.js +76 -28
- package/src/og/entity/PointCloudHandler.js +5 -5
- package/src/og/entity/Ray.js +49 -16
- package/src/og/entity/Strip.js +72 -43
- package/src/og/entity/StripHandler.js +23 -23
- package/src/og/layer/BaseGeoImage.js +50 -19
- package/src/og/layer/CanvasTiles.js +16 -17
- package/src/og/layer/GeoImage.js +8 -16
- package/src/og/layer/GeoTexture2d.js +2 -10
- package/src/og/layer/GeoVideo.js +2 -10
- package/src/og/layer/KML.js +55 -33
- package/src/og/layer/Layer.js +24 -33
- package/src/og/layer/Material.js +1 -1
- package/src/og/layer/Vector.js +94 -48
- package/src/og/layer/WMS.js +33 -18
- package/src/og/layer/XYZ.js +24 -26
- package/src/og/light/LightSource.js +19 -12
- package/src/og/math/Mat3.js +24 -12
- package/src/og/math/Mat4.js +603 -603
- package/src/og/math/Plane.js +19 -18
- package/src/og/math/Ray.js +17 -12
- package/src/og/math/Vec2.js +24 -14
- package/src/og/math/Vec3.js +78 -32
- package/src/og/math/coder.js +7 -7
- package/src/og/proj/EPSG3857.js +3 -3
- package/src/og/proj/EPSG4326.js +3 -3
- package/src/og/proj/Proj.js +2 -4
- package/src/og/quadTree/Node.js +50 -95
- package/src/og/quadTree/quadTree.js +1 -1
- package/src/og/renderer/Renderer.js +106 -126
- package/src/og/renderer/RendererEvents.js +45 -23
- package/src/og/scene/BaseNode.js +2 -3
- package/src/og/scene/Planet.js +139 -191
- package/src/og/scene/RenderNode.js +15 -8
- package/src/og/segment/Segment.js +93 -268
- package/src/og/segment/Slice.js +45 -0
- package/src/og/shaders/drawnode.js +174 -360
- package/src/og/shaders/geoObject.js +211 -0
- package/src/og/shaders/pointCloud.js +41 -41
- package/src/og/shaders/shape.js +12 -18
- package/src/og/shaders/skybox.js +36 -36
- package/src/og/shaders/toneMapping.js +1 -0
- package/src/og/shapes/BaseShape.js +108 -36
- package/src/og/shapes/Icosphere.js +25 -10
- package/src/og/shapes/Sphere.js +8 -11
- package/src/og/terrain/EmptyTerrain.js +3 -2
- package/src/og/terrain/GlobusTerrain.js +2 -0
- package/src/og/utils/FontAtlas.js +6 -2
- 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/utils/TextureAtlas.js +18 -20
- package/src/og/utils/VectorTileCreator.js +1 -3
- package/src/og/utils/shared.js +2 -2
- package/src/og/webgl/Handler.js +219 -162
- package/src/og/webgl/Multisample.js +44 -16
- package/src/og/webgl/Program.js +78 -33
- package/src/og/webgl/callbacks.js +3 -3
- package/types/Clock.d.ts +0 -94
- package/types/Deferred.d.ts +0 -6
- package/types/Events.d.ts +0 -77
- package/types/Extent.d.ts +0 -166
- package/types/Globe.d.ts +0 -82
- package/types/ImageCanvas.d.ts +0 -123
- package/types/Lock.d.ts +0 -12
- package/types/LonLat.d.ts +0 -108
- package/types/Popup.d.ts +0 -42
- package/types/QueueArray.d.ts +0 -19
- package/types/Rectangle.d.ts +0 -80
- package/types/Stack.d.ts +0 -19
- package/types/ajax.d.ts +0 -24
- package/types/arial.d.ts +0 -48
- package/types/astro/astro.d.ts +0 -38
- package/types/astro/earth.d.ts +0 -7
- package/types/astro/jd.d.ts +0 -254
- package/types/bv/Box.d.ts +0 -30
- package/types/bv/Sphere.d.ts +0 -38
- package/types/bv/index.d.ts +0 -3
- package/types/camera/Camera.d.ts +0 -312
- package/types/camera/Frustum.d.ts +0 -133
- package/types/camera/PlanetCamera.d.ts +0 -218
- package/types/camera/index.d.ts +0 -3
- package/types/cons.d.ts +0 -40
- package/types/control/CompassButton.d.ts +0 -17
- package/types/control/Control.d.ts +0 -104
- package/types/control/DebugInfo.d.ts +0 -15
- package/types/control/EarthCoordinates.d.ts +0 -47
- package/types/control/EarthNavigation.d.ts +0 -42
- package/types/control/GeoImageDragControl.d.ts +0 -6
- package/types/control/KeyboardNavigation.d.ts +0 -21
- package/types/control/LayerSwitcher.d.ts +0 -21
- package/types/control/Lighting.d.ts +0 -16
- package/types/control/MouseNavigation.d.ts +0 -47
- package/types/control/ScaleControl.d.ts +0 -22
- package/types/control/ShowFps.d.ts +0 -11
- package/types/control/SimpleNavigation.d.ts +0 -25
- package/types/control/Sun.d.ts +0 -50
- package/types/control/ToggleWireframe.d.ts +0 -12
- package/types/control/TouchNavigation.d.ts +0 -48
- package/types/control/ZoomControl.d.ts +0 -27
- package/types/control/index.d.ts +0 -17
- package/types/ellipsoid/Ellipsoid.d.ts +0 -146
- package/types/ellipsoid/index.d.ts +0 -3
- package/types/ellipsoid/wgs84.d.ts +0 -6
- package/types/entity/BaseBillboard.d.ts +0 -208
- package/types/entity/Billboard.d.ts +0 -94
- package/types/entity/BillboardHandler.d.ts +0 -78
- package/types/entity/Entity.d.ts +0 -333
- package/types/entity/EntityCollection.d.ts +0 -311
- package/types/entity/Geometry.d.ts +0 -74
- package/types/entity/GeometryHandler.d.ts +0 -76
- package/types/entity/Label.d.ts +0 -189
- package/types/entity/LabelHandler.d.ts +0 -29
- package/types/entity/PointCloud.d.ts +0 -174
- package/types/entity/PointCloudHandler.d.ts +0 -38
- package/types/entity/Polyline.d.ts +0 -306
- package/types/entity/PolylineHandler.d.ts +0 -18
- package/types/entity/Ray.d.ts +0 -124
- package/types/entity/RayHandler.d.ts +0 -67
- package/types/entity/ShapeHandler.d.ts +0 -22
- package/types/entity/Strip.d.ts +0 -119
- package/types/entity/StripHandler.d.ts +0 -38
- package/types/entity/index.d.ts +0 -8
- package/types/index.core.d.ts +0 -65
- package/types/index.d.ts +0 -45
- package/types/index.webgl.d.ts +0 -7
- package/types/input/KeyboardHandler.d.ts +0 -10
- package/types/input/MouseHandler.d.ts +0 -5
- package/types/input/TouchHandler.d.ts +0 -5
- package/types/input/input.d.ts +0 -34
- package/types/layer/BaseGeoImage.d.ts +0 -94
- package/types/layer/CanvasTiles.d.ts +0 -68
- package/types/layer/GeoImage.d.ts +0 -52
- package/types/layer/GeoTexture2d.d.ts +0 -8
- package/types/layer/GeoVideo.d.ts +0 -55
- package/types/layer/KML.d.ts +0 -63
- package/types/layer/Layer.d.ts +0 -326
- package/types/layer/Material.d.ts +0 -45
- package/types/layer/Vector.d.ts +0 -208
- package/types/layer/WMS.d.ts +0 -63
- package/types/layer/XYZ.d.ts +0 -120
- package/types/layer/index.d.ts +0 -10
- package/types/light/LightSource.d.ts +0 -178
- package/types/math/Line2.d.ts +0 -11
- package/types/math/Line3.d.ts +0 -10
- package/types/math/Mat3.d.ts +0 -65
- package/types/math/Mat4.d.ts +0 -176
- package/types/math/Plane.d.ts +0 -18
- package/types/math/Quat.d.ts +0 -379
- package/types/math/Ray.d.ts +0 -82
- package/types/math/Vec2.d.ts +0 -309
- package/types/math/Vec3.d.ts +0 -460
- package/types/math/Vec4.d.ts +0 -162
- package/types/math/coder.d.ts +0 -43
- package/types/math/index.d.ts +0 -11
- package/types/math.d.ts +0 -261
- package/types/mercator.d.ts +0 -92
- package/types/proj/EPSG3857.d.ts +0 -6
- package/types/proj/EPSG4326.d.ts +0 -6
- package/types/proj/Proj.d.ts +0 -42
- package/types/quadTree/EntityCollectionNode.d.ts +0 -34
- package/types/quadTree/Node.d.ts +0 -61
- package/types/quadTree/quadTree.d.ts +0 -40
- package/types/renderer/Renderer.d.ts +0 -298
- package/types/renderer/RendererEvents.d.ts +0 -233
- package/types/res/images.d.ts +0 -3
- package/types/scene/Axes.d.ts +0 -11
- package/types/scene/BaseNode.d.ts +0 -60
- package/types/scene/Planet.d.ts +0 -577
- package/types/scene/RenderNode.d.ts +0 -142
- package/types/scene/SkyBox.d.ts +0 -10
- package/types/scene/index.d.ts +0 -4
- package/types/segment/Segment.d.ts +0 -279
- package/types/segment/SegmentLonLat.d.ts +0 -16
- package/types/segment/segmentHelper.d.ts +0 -13
- package/types/shaders/billboard.d.ts +0 -3
- package/types/shaders/depth.d.ts +0 -2
- package/types/shaders/drawnode.d.ts +0 -7
- package/types/shaders/label.d.ts +0 -4
- package/types/shaders/pointCloud.d.ts +0 -2
- package/types/shaders/polyline.d.ts +0 -3
- package/types/shaders/ray.d.ts +0 -2
- package/types/shaders/screenFrame.d.ts +0 -2
- package/types/shaders/shape.d.ts +0 -4
- package/types/shaders/skybox.d.ts +0 -2
- package/types/shaders/toneMapping.d.ts +0 -2
- package/types/shapes/BaseShape.d.ts +0 -250
- package/types/shapes/Sphere.d.ts +0 -41
- package/types/terrain/BilTerrain.d.ts +0 -7
- package/types/terrain/EmptyTerrain.d.ts +0 -72
- package/types/terrain/Geoid.d.ts +0 -26
- package/types/terrain/GlobusTerrain.d.ts +0 -116
- package/types/terrain/MapboxTerrain.d.ts +0 -7
- package/types/terrain/index.d.ts +0 -5
- package/types/utils/FontAtlas.d.ts +0 -14
- package/types/utils/GeoImageCreator.d.ts +0 -30
- package/types/utils/ImagesCacheManager.d.ts +0 -10
- package/types/utils/Loader.d.ts +0 -25
- package/types/utils/NormalMapCreator.d.ts +0 -39
- package/types/utils/PlainSegmentWorker.d.ts +0 -10
- package/types/utils/TerrainWorker.d.ts +0 -9
- package/types/utils/TextureAtlas.d.ts +0 -111
- package/types/utils/VectorTileCreator.d.ts +0 -16
- package/types/utils/colorTable.d.ts +0 -143
- package/types/utils/earcut.d.ts +0 -6
- package/types/utils/shared.d.ts +0 -231
- package/types/webgl/Framebuffer.d.ts +0 -135
- package/types/webgl/Handler.d.ts +0 -388
- package/types/webgl/Multisample.d.ts +0 -89
- package/types/webgl/Program.d.ts +0 -155
- package/types/webgl/ProgramController.d.ts +0 -89
- package/types/webgl/callbacks.d.ts +0 -1
- package/types/webgl/index.d.ts +0 -6
- package/types/webgl/types.d.ts +0 -2
package/src/og/quadTree/Node.js
CHANGED
|
@@ -7,7 +7,6 @@ import { Vec3 } from "../math/Vec3.js";
|
|
|
7
7
|
import { MAX_LAT } from "../mercator.js";
|
|
8
8
|
import { EPSG3857 } from "../proj/EPSG3857.js";
|
|
9
9
|
import { EPSG4326 } from "../proj/EPSG4326.js";
|
|
10
|
-
import { MAX_NORMAL_ZOOM } from "../segment/Segment.js";
|
|
11
10
|
import { getMatrixSubArray, getMatrixSubArrayBoundsExt } from "../utils/shared.js";
|
|
12
11
|
import {
|
|
13
12
|
COMSIDE,
|
|
@@ -30,8 +29,6 @@ import {
|
|
|
30
29
|
WALKTHROUGH
|
|
31
30
|
} from "./quadTree.js";
|
|
32
31
|
|
|
33
|
-
const VISIBLE_HEIGHT = 1400000.0;
|
|
34
|
-
|
|
35
32
|
let _tempHigh = new Vec3(),
|
|
36
33
|
_tempLow = new Vec3();
|
|
37
34
|
|
|
@@ -67,6 +64,7 @@ class Node {
|
|
|
67
64
|
|
|
68
65
|
constructor(SegmentPrototype, planet, partId, parent, id, tileZoom, extent) {
|
|
69
66
|
this.SegmentPrototype = SegmentPrototype;
|
|
67
|
+
planet._createdNodesCount++;
|
|
70
68
|
this.planet = planet;
|
|
71
69
|
this.parentNode = parent;
|
|
72
70
|
this.partId = partId;
|
|
@@ -84,7 +82,6 @@ class Node {
|
|
|
84
82
|
this._cameraInside = false;
|
|
85
83
|
this.inFrustum = 0;
|
|
86
84
|
this.createBounds();
|
|
87
|
-
this.planet._createdNodesCount++;
|
|
88
85
|
}
|
|
89
86
|
|
|
90
87
|
createChildrenNodes() {
|
|
@@ -102,45 +99,10 @@ class Node {
|
|
|
102
99
|
var c = new LonLat(sw.lon + size_x, sw.lat + size_y);
|
|
103
100
|
var nd = this.nodes;
|
|
104
101
|
|
|
105
|
-
nd[NW] = new Node(
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
this,
|
|
110
|
-
id,
|
|
111
|
-
z,
|
|
112
|
-
new Extent(new LonLat(sw.lon, sw.lat + size_y), new LonLat(sw.lon + size_x, ne.lat))
|
|
113
|
-
);
|
|
114
|
-
|
|
115
|
-
nd[NE] = new Node(
|
|
116
|
-
this.SegmentPrototype,
|
|
117
|
-
p,
|
|
118
|
-
NE,
|
|
119
|
-
this,
|
|
120
|
-
id,
|
|
121
|
-
z,
|
|
122
|
-
new Extent(c, new LonLat(ne.lon, ne.lat))
|
|
123
|
-
);
|
|
124
|
-
|
|
125
|
-
nd[SW] = new Node(
|
|
126
|
-
this.SegmentPrototype,
|
|
127
|
-
p,
|
|
128
|
-
SW,
|
|
129
|
-
this,
|
|
130
|
-
id,
|
|
131
|
-
z,
|
|
132
|
-
new Extent(new LonLat(sw.lon, sw.lat), c)
|
|
133
|
-
);
|
|
134
|
-
|
|
135
|
-
nd[SE] = new Node(
|
|
136
|
-
this.SegmentPrototype,
|
|
137
|
-
p,
|
|
138
|
-
SE,
|
|
139
|
-
this,
|
|
140
|
-
id,
|
|
141
|
-
z,
|
|
142
|
-
new Extent(new LonLat(sw.lon + size_x, sw.lat), new LonLat(ne.lon, sw.lat + size_y))
|
|
143
|
-
);
|
|
102
|
+
nd[NW] = new Node(this.SegmentPrototype, p, NW, this, id, z, new Extent(new LonLat(sw.lon, sw.lat + size_y), new LonLat(sw.lon + size_x, ne.lat)));
|
|
103
|
+
nd[NE] = new Node(this.SegmentPrototype, p, NE, this, id, z, new Extent(c, new LonLat(ne.lon, ne.lat)));
|
|
104
|
+
nd[SW] = new Node(this.SegmentPrototype, p, SW, this, id, z, new Extent(new LonLat(sw.lon, sw.lat), c));
|
|
105
|
+
nd[SE] = new Node(this.SegmentPrototype, p, SE, this, id, z, new Extent(new LonLat(sw.lon + size_x, sw.lat), new LonLat(ne.lon, sw.lat + size_y)));
|
|
144
106
|
}
|
|
145
107
|
|
|
146
108
|
createBounds() {
|
|
@@ -153,6 +115,15 @@ class Node {
|
|
|
153
115
|
} else {
|
|
154
116
|
seg.createBoundsByParent();
|
|
155
117
|
}
|
|
118
|
+
|
|
119
|
+
let x = seg.bsphere.center.x,
|
|
120
|
+
y = seg.bsphere.center.y,
|
|
121
|
+
z = seg.bsphere.center.z;
|
|
122
|
+
|
|
123
|
+
let length = 1.0 / Math.sqrt(x * x + y * y + z * z);
|
|
124
|
+
seg.centerNormal.x = x * length;
|
|
125
|
+
seg.centerNormal.y = y * length;
|
|
126
|
+
seg.centerNormal.z = z * length;
|
|
156
127
|
}
|
|
157
128
|
|
|
158
129
|
getState() {
|
|
@@ -204,15 +175,10 @@ class Node {
|
|
|
204
175
|
}
|
|
205
176
|
|
|
206
177
|
renderTree(cam, maxZoom, terrainReadySegment, stopLoading) {
|
|
207
|
-
if (
|
|
208
|
-
this.planet._renderedNodes.length >= MAX_RENDERED_NODES ||
|
|
209
|
-
this.planet._nodeCounterError_ > 2000
|
|
210
|
-
) {
|
|
178
|
+
if (this.planet._renderedNodes.length >= MAX_RENDERED_NODES) {
|
|
211
179
|
return;
|
|
212
180
|
}
|
|
213
181
|
|
|
214
|
-
this.planet._nodeCounterError_++;
|
|
215
|
-
|
|
216
182
|
this.state = WALKTHROUGH;
|
|
217
183
|
|
|
218
184
|
this.neighbors[0] = null;
|
|
@@ -279,30 +245,52 @@ class Node {
|
|
|
279
245
|
}
|
|
280
246
|
}
|
|
281
247
|
|
|
282
|
-
|
|
283
|
-
|
|
248
|
+
if (this.inFrustum || this._cameraInside || seg.tileZoom < 3) {
|
|
249
|
+
let h = cam._lonLat.height;
|
|
284
250
|
|
|
285
|
-
let
|
|
286
|
-
|
|
287
|
-
|
|
251
|
+
let eye = cam.eye;
|
|
252
|
+
let horizonDist = eye.length2() - this.planet.ellipsoid._b2;
|
|
253
|
+
|
|
254
|
+
let altVis = seg.tileZoom > 19 ||
|
|
288
255
|
(seg.tileZoom < 4 && !seg.terrainReady) ||
|
|
289
256
|
seg.tileZoom < 2;
|
|
290
257
|
|
|
258
|
+
if (h > 21000) {
|
|
259
|
+
altVis = altVis || eye.distance2(seg._sw) < horizonDist
|
|
260
|
+
|| eye.distance2(seg._nw) < horizonDist
|
|
261
|
+
|| eye.distance2(seg._ne) < horizonDist
|
|
262
|
+
|| eye.distance2(seg._se) < horizonDist;
|
|
263
|
+
} else {
|
|
264
|
+
altVis = altVis || cam.eye.distance(seg.bsphere.center) - seg.bsphere.radius < VISIBLE_DISTANCE * Math.sqrt(h);
|
|
265
|
+
}
|
|
266
|
+
|
|
291
267
|
if ((this.inFrustum && (altVis || h > 10000.0)) || this._cameraInside) {
|
|
292
268
|
seg._collectVisibleNodes();
|
|
293
269
|
}
|
|
294
270
|
|
|
295
271
|
if (seg.tileZoom < 2 && seg.normalMapReady) {
|
|
296
272
|
this.traverseNodes(cam, maxZoom, terrainReadySegment, stopLoading);
|
|
297
|
-
} else if (
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
273
|
+
} else if (seg.terrainReady && (
|
|
274
|
+
!maxZoom && cam.projectedSize(seg.bsphere.center, seg._plainRadius) < planet._lodSize ||
|
|
275
|
+
maxZoom && ((seg.tileZoom === maxZoom) || !altVis))) {
|
|
276
|
+
|
|
277
|
+
if (altVis) {
|
|
278
|
+
seg.loadTile = true;
|
|
279
|
+
this.renderNode(this.inFrustum, !this.inFrustum, terrainReadySegment, stopLoading);
|
|
280
|
+
} else {
|
|
281
|
+
this.state = NOTRENDERING;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
} else if (
|
|
285
|
+
seg.terrainReady &&
|
|
286
|
+
seg.tileZoom < planet.terrain._maxNodeZoom &&
|
|
287
|
+
(!maxZoom || maxZoom && cam.projectedSize(seg.bsphere.center, seg.bsphere.radius) > this.planet._maxLodSize)) {
|
|
303
288
|
this.traverseNodes(cam, maxZoom, seg, stopLoading);
|
|
289
|
+
} else if (altVis) {
|
|
290
|
+
seg.loadTile = false;
|
|
291
|
+
this.renderNode(this.inFrustum, !this.inFrustum, terrainReadySegment, stopLoading);
|
|
304
292
|
} else {
|
|
305
|
-
this.
|
|
293
|
+
this.state = NOTRENDERING;
|
|
306
294
|
}
|
|
307
295
|
} else {
|
|
308
296
|
this.state = NOTRENDERING;
|
|
@@ -322,39 +310,6 @@ class Node {
|
|
|
322
310
|
n[3].renderTree(cam, maxZoom, terrainReadySegment, stopLoading);
|
|
323
311
|
}
|
|
324
312
|
|
|
325
|
-
prepareForRendering(
|
|
326
|
-
cam,
|
|
327
|
-
altVis,
|
|
328
|
-
inFrustum,
|
|
329
|
-
terrainReadySegment,
|
|
330
|
-
stopLoading
|
|
331
|
-
) {
|
|
332
|
-
let seg = this.segment;
|
|
333
|
-
|
|
334
|
-
if (cam._lonLat.height < VISIBLE_HEIGHT) {
|
|
335
|
-
if (altVis) {
|
|
336
|
-
this.renderNode(inFrustum, !inFrustum, terrainReadySegment, stopLoading);
|
|
337
|
-
} else {
|
|
338
|
-
this.state = NOTRENDERING;
|
|
339
|
-
}
|
|
340
|
-
} else {
|
|
341
|
-
if (seg.tileZoom < 2) {
|
|
342
|
-
this.renderNode(inFrustum, !inFrustum, terrainReadySegment, stopLoading);
|
|
343
|
-
} else if (seg.tileZoom > MAX_NORMAL_ZOOM) {
|
|
344
|
-
this.renderNode(inFrustum, !inFrustum, terrainReadySegment, stopLoading);
|
|
345
|
-
} else if (
|
|
346
|
-
seg._swNorm.dot(cam._n) > 0.0 ||
|
|
347
|
-
seg._nwNorm.dot(cam._n) > 0.0 ||
|
|
348
|
-
seg._neNorm.dot(cam._n) > 0.0 ||
|
|
349
|
-
seg._seNorm.dot(cam._n) > 0.0
|
|
350
|
-
) {
|
|
351
|
-
this.renderNode(inFrustum, !inFrustum, terrainReadySegment, stopLoading);
|
|
352
|
-
} else {
|
|
353
|
-
this.state = NOTRENDERING;
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
|
|
358
313
|
renderNode(inFrustum, onlyTerrain, terrainReadySegment, stopLoading) {
|
|
359
314
|
var seg = this.segment;
|
|
360
315
|
|
|
@@ -376,7 +331,7 @@ class Node {
|
|
|
376
331
|
}
|
|
377
332
|
|
|
378
333
|
// Create normal map texture
|
|
379
|
-
if (seg.planet.lightEnabled && !seg.normalMapReady
|
|
334
|
+
if (seg.planet.lightEnabled && !seg.normalMapReady /*&& !seg.parentNormalMapReady*/) {
|
|
380
335
|
this.whileNormalMapCreating();
|
|
381
336
|
}
|
|
382
337
|
|
|
@@ -16,6 +16,7 @@ import { TextureAtlas } from "../utils/TextureAtlas.js";
|
|
|
16
16
|
import * as arial from "../arial.js";
|
|
17
17
|
import { depth } from "../shaders/depth.js";
|
|
18
18
|
import { ARIAL_FONT_B64 } from "../res/images.js";
|
|
19
|
+
import { LabelWorker } from "../entity/LabelWorker.js";
|
|
19
20
|
|
|
20
21
|
let __pickingCallbackCounter__ = 0;
|
|
21
22
|
|
|
@@ -55,7 +56,6 @@ let __depthCallbackCounter__ = 0;
|
|
|
55
56
|
* @fires og.RendererEvents#touchenter
|
|
56
57
|
*/
|
|
57
58
|
class Renderer {
|
|
58
|
-
|
|
59
59
|
constructor(handler, params) {
|
|
60
60
|
params = params || {};
|
|
61
61
|
|
|
@@ -73,9 +73,9 @@ class Renderer {
|
|
|
73
73
|
*/
|
|
74
74
|
this.handler = handler;
|
|
75
75
|
|
|
76
|
-
this.exposure =
|
|
76
|
+
this.exposure = 3.01;
|
|
77
77
|
|
|
78
|
-
this.gamma = 0.
|
|
78
|
+
this.gamma = 0.47;
|
|
79
79
|
|
|
80
80
|
this.whitepoint = 1.0;
|
|
81
81
|
|
|
@@ -159,13 +159,11 @@ class Renderer {
|
|
|
159
159
|
|
|
160
160
|
this.depthFramebuffer = null;
|
|
161
161
|
|
|
162
|
-
this._msaa = params.msaa ||
|
|
162
|
+
this._msaa = params.msaa || 4;
|
|
163
163
|
this._internalFormat = "RGBA16F";
|
|
164
164
|
this._format = "RGBA";
|
|
165
165
|
this._type = "FLOAT";
|
|
166
166
|
|
|
167
|
-
this._screenScale = params.screenScale || 1.0;
|
|
168
|
-
|
|
169
167
|
this.sceneFramebuffer = null;
|
|
170
168
|
|
|
171
169
|
this.blitFramebuffer = null;
|
|
@@ -184,8 +182,7 @@ class Renderer {
|
|
|
184
182
|
* @private
|
|
185
183
|
* @type {Array.<number>} - (exactly 3 entries)
|
|
186
184
|
*/
|
|
187
|
-
this._prevPickingColor =
|
|
188
|
-
|
|
185
|
+
this._prevPickingColor = new Uint8Array(4);
|
|
189
186
|
this._tempPickingColor_ = new Uint8Array(4);
|
|
190
187
|
|
|
191
188
|
this._initialized = false;
|
|
@@ -212,6 +209,8 @@ class Renderer {
|
|
|
212
209
|
}
|
|
213
210
|
|
|
214
211
|
this._currentOutput = "screen";
|
|
212
|
+
|
|
213
|
+
this.labelWorker = new LabelWorker();
|
|
215
214
|
}
|
|
216
215
|
|
|
217
216
|
/**
|
|
@@ -222,11 +221,6 @@ class Renderer {
|
|
|
222
221
|
this.events.active = activity;
|
|
223
222
|
}
|
|
224
223
|
|
|
225
|
-
setScreenScale(scale) {
|
|
226
|
-
this._screenScale = scale;
|
|
227
|
-
this._resize();
|
|
228
|
-
}
|
|
229
|
-
|
|
230
224
|
addDepthCallback(sender, callback) {
|
|
231
225
|
var id = __depthCallbackCounter__++;
|
|
232
226
|
this._depthCallbacks.push({
|
|
@@ -331,7 +325,7 @@ class Renderer {
|
|
|
331
325
|
* @returns {number} -
|
|
332
326
|
*/
|
|
333
327
|
getWidth() {
|
|
334
|
-
return this.handler.canvas.
|
|
328
|
+
return this.handler.canvas.clientWidth;
|
|
335
329
|
}
|
|
336
330
|
|
|
337
331
|
/**
|
|
@@ -340,7 +334,7 @@ class Renderer {
|
|
|
340
334
|
* @returns {number} -
|
|
341
335
|
*/
|
|
342
336
|
getHeight() {
|
|
343
|
-
return this.handler.canvas.
|
|
337
|
+
return this.handler.canvas.clientHeight;
|
|
344
338
|
}
|
|
345
339
|
|
|
346
340
|
/**
|
|
@@ -350,7 +344,7 @@ class Renderer {
|
|
|
350
344
|
*/
|
|
351
345
|
getCenter() {
|
|
352
346
|
var cnv = this.handler.canvas;
|
|
353
|
-
return new Vec2(Math.round(cnv.
|
|
347
|
+
return new Vec2(Math.round(cnv.clientWidth * 0.5), Math.round(cnv.clientHeight * 0.5));
|
|
354
348
|
}
|
|
355
349
|
|
|
356
350
|
/**
|
|
@@ -429,20 +423,10 @@ class Renderer {
|
|
|
429
423
|
useDepth: false
|
|
430
424
|
}).init();
|
|
431
425
|
|
|
432
|
-
//this.depthFramebuffer = new Framebuffer(this.handler, {
|
|
433
|
-
// size: 2,
|
|
434
|
-
// internalFormat: ["RGBA", "RGBA"],
|
|
435
|
-
// format: ["RGBA", "RGBA"],
|
|
436
|
-
// type: ["UNSIGNED_BYTE", "UNSIGNED_BYTE"],
|
|
437
|
-
// attachment: ["COLOR_ATTACHMENT", "COLOR_ATTACHMENT"],
|
|
438
|
-
// useDepth: true
|
|
439
|
-
//}).init();
|
|
440
426
|
this.screenDepthFramebuffer = new Framebuffer(this.handler, {
|
|
441
427
|
useDepth: false
|
|
442
428
|
}).init();
|
|
443
429
|
|
|
444
|
-
this.readPixels = () => { };
|
|
445
|
-
|
|
446
430
|
if (this.handler.gl.type === "webgl") {
|
|
447
431
|
this.sceneFramebuffer = new Framebuffer(this.handler);
|
|
448
432
|
this.sceneFramebuffer.init();
|
|
@@ -477,7 +461,7 @@ class Renderer {
|
|
|
477
461
|
internalFormat: this._internalFormat,
|
|
478
462
|
format: this._format,
|
|
479
463
|
type: this._type,
|
|
480
|
-
filter: "
|
|
464
|
+
filter: "NEAREST"
|
|
481
465
|
}).init();
|
|
482
466
|
|
|
483
467
|
this.toneMappingFramebuffer = new Framebuffer(this.handler, {
|
|
@@ -495,8 +479,8 @@ class Renderer {
|
|
|
495
479
|
}
|
|
496
480
|
|
|
497
481
|
this.handler.onCanvasResize = () => {
|
|
482
|
+
this.resize();
|
|
498
483
|
this.events.dispatch(this.events.resize, this.handler.canvas);
|
|
499
|
-
this._resize();
|
|
500
484
|
};
|
|
501
485
|
|
|
502
486
|
this._screenFrameCornersBuffer = this.handler.createArrayBuffer(
|
|
@@ -523,24 +507,22 @@ class Renderer {
|
|
|
523
507
|
}
|
|
524
508
|
}
|
|
525
509
|
|
|
526
|
-
|
|
527
|
-
let
|
|
528
|
-
this.activeCamera.setAspectRatio(
|
|
529
|
-
this.sceneFramebuffer.setSize(
|
|
530
|
-
|
|
531
|
-
obj.clientHeight * this._screenScale
|
|
532
|
-
);
|
|
510
|
+
resize() {
|
|
511
|
+
let c = this.handler.canvas;
|
|
512
|
+
this.activeCamera.setAspectRatio(c.width / c.height);
|
|
513
|
+
this.sceneFramebuffer.setSize(c.width, c.height);
|
|
514
|
+
|
|
533
515
|
this.blitFramebuffer &&
|
|
534
|
-
this.blitFramebuffer.setSize(
|
|
535
|
-
|
|
536
|
-
obj.clientHeight * this._screenScale,
|
|
537
|
-
true
|
|
538
|
-
);
|
|
516
|
+
this.blitFramebuffer.setSize(c.width, c.height, true);
|
|
517
|
+
|
|
539
518
|
this.toneMappingFramebuffer &&
|
|
540
|
-
this.toneMappingFramebuffer.setSize(
|
|
541
|
-
|
|
519
|
+
this.toneMappingFramebuffer.setSize(c.width, c.height, true);
|
|
520
|
+
|
|
521
|
+
this.depthFramebuffer &&
|
|
522
|
+
this.depthFramebuffer.setSize(c.clientWidth, c.clientHeight, true);
|
|
523
|
+
|
|
542
524
|
this.screenDepthFramebuffer &&
|
|
543
|
-
this.screenDepthFramebuffer.setSize(
|
|
525
|
+
this.screenDepthFramebuffer.setSize(c.clientWidth, c.clientHeight, true);
|
|
544
526
|
|
|
545
527
|
if (this.handler.gl.type === "webgl") {
|
|
546
528
|
this.screenTexture.screen = this.sceneFramebuffer.textures[0];
|
|
@@ -610,7 +592,11 @@ class Renderer {
|
|
|
610
592
|
|
|
611
593
|
getMaxMSAA(internalFormat) {
|
|
612
594
|
var gl = this.handler.gl;
|
|
613
|
-
let samples = gl.getInternalformatParameter(
|
|
595
|
+
let samples = gl.getInternalformatParameter(
|
|
596
|
+
gl.RENDERBUFFER,
|
|
597
|
+
gl[internalFormat],
|
|
598
|
+
gl.SAMPLES
|
|
599
|
+
);
|
|
614
600
|
return samples[0];
|
|
615
601
|
}
|
|
616
602
|
|
|
@@ -671,6 +657,12 @@ class Renderer {
|
|
|
671
657
|
ec[i]._fadingOpacity && ec[i].labelHandler.draw();
|
|
672
658
|
}
|
|
673
659
|
|
|
660
|
+
//geoObject
|
|
661
|
+
i = ec.length;
|
|
662
|
+
while (i--) {
|
|
663
|
+
ec[i]._fadingOpacity && ec[i].geoObjectHandler.draw();
|
|
664
|
+
}
|
|
665
|
+
|
|
674
666
|
// rays
|
|
675
667
|
i = ec.length;
|
|
676
668
|
while (i--) {
|
|
@@ -735,7 +727,12 @@ class Renderer {
|
|
|
735
727
|
|
|
736
728
|
let h = this.handler;
|
|
737
729
|
|
|
738
|
-
h.gl.clearColor(
|
|
730
|
+
h.gl.clearColor(
|
|
731
|
+
this.backgroundColor.x,
|
|
732
|
+
this.backgroundColor.y,
|
|
733
|
+
this.backgroundColor.z,
|
|
734
|
+
1.0
|
|
735
|
+
);
|
|
739
736
|
h.gl.clear(h.gl.COLOR_BUFFER_BIT | h.gl.DEPTH_BUFFER_BIT);
|
|
740
737
|
|
|
741
738
|
e.dispatch(e.draw, this);
|
|
@@ -745,6 +742,8 @@ class Renderer {
|
|
|
745
742
|
|
|
746
743
|
let frustums = this.activeCamera.frustums;
|
|
747
744
|
|
|
745
|
+
let anyEvent = this.events.mouseState.anyEvent();
|
|
746
|
+
|
|
748
747
|
// Rendering scene nodes and entityCollections
|
|
749
748
|
let rn = this._renderNodesArr;
|
|
750
749
|
let k = frustums.length;
|
|
@@ -757,17 +756,19 @@ class Renderer {
|
|
|
757
756
|
}
|
|
758
757
|
this._drawEntityCollections();
|
|
759
758
|
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
this._drawPickingBuffer(k);
|
|
759
|
+
if (anyEvent) {
|
|
760
|
+
this._drawPickingBuffer(k);
|
|
761
|
+
}
|
|
764
762
|
}
|
|
765
763
|
|
|
766
764
|
sfb.deactivate();
|
|
767
765
|
|
|
768
766
|
this.blitFramebuffer && sfb.blitTo(this.blitFramebuffer);
|
|
769
767
|
|
|
770
|
-
if (
|
|
768
|
+
if (anyEvent) {
|
|
769
|
+
// It works ONLY for 0 (closest) frustum
|
|
770
|
+
this._drawDepthBuffer();
|
|
771
|
+
|
|
771
772
|
this._readPickingColor();
|
|
772
773
|
}
|
|
773
774
|
|
|
@@ -838,99 +839,81 @@ class Renderer {
|
|
|
838
839
|
gl.enable(gl.DEPTH_TEST);
|
|
839
840
|
}
|
|
840
841
|
|
|
841
|
-
/**
|
|
842
|
-
* Returns picking object by screen coordinates
|
|
843
|
-
* @param {number} x - X position
|
|
844
|
-
* @param {number} y - Y position
|
|
845
|
-
* @return {Object} -
|
|
846
|
-
*/
|
|
847
|
-
getPickingObject(x, y) {
|
|
848
|
-
let cnv = this.renderer.handler.canvas,
|
|
849
|
-
c = new Uint8Array(3);
|
|
850
|
-
this.readPixels(c, x / cnv.width, (cnv.height - y) / cnv.height, 1);
|
|
851
|
-
return this.colorObjects[c[0] + "_" + c[1] + "_" + c[2]];
|
|
852
|
-
}
|
|
853
|
-
|
|
854
842
|
/**
|
|
855
843
|
* Draw picking objects framebuffer.
|
|
856
844
|
* @private
|
|
857
845
|
*/
|
|
858
846
|
_drawPickingBuffer(frustumIndex) {
|
|
859
|
-
|
|
860
|
-
this.pickingFramebuffer.activate();
|
|
861
|
-
|
|
862
|
-
var h = this.handler;
|
|
863
|
-
var gl = h.gl;
|
|
847
|
+
this.pickingFramebuffer.activate();
|
|
864
848
|
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
868
|
-
} else {
|
|
869
|
-
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
870
|
-
}
|
|
849
|
+
var h = this.handler;
|
|
850
|
+
var gl = h.gl;
|
|
871
851
|
|
|
872
|
-
|
|
852
|
+
if (frustumIndex === this.activeCamera.FARTHEST_FRUSTUM_INDEX) {
|
|
853
|
+
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
854
|
+
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
855
|
+
} else {
|
|
856
|
+
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
857
|
+
}
|
|
873
858
|
|
|
874
|
-
|
|
875
|
-
var i = dp.length;
|
|
876
|
-
while (i--) {
|
|
877
|
-
/**
|
|
878
|
-
* This callback renders picking frame.
|
|
879
|
-
* @callback og.Renderer~pickingCallback
|
|
880
|
-
*/
|
|
881
|
-
dp[i].callback.call(dp[i].sender);
|
|
882
|
-
}
|
|
859
|
+
gl.disable(h.gl.BLEND);
|
|
883
860
|
|
|
884
|
-
|
|
861
|
+
var dp = this._pickingCallbacks;
|
|
862
|
+
var i = dp.length;
|
|
863
|
+
while (i--) {
|
|
864
|
+
/**
|
|
865
|
+
* This callback renders picking frame.
|
|
866
|
+
* @callback og.Renderer~pickingCallback
|
|
867
|
+
*/
|
|
868
|
+
dp[i].callback.call(dp[i].sender);
|
|
885
869
|
}
|
|
886
|
-
}
|
|
887
870
|
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
this.depthFramebuffer.activate();
|
|
871
|
+
this.pickingFramebuffer.deactivate();
|
|
872
|
+
}
|
|
891
873
|
|
|
892
|
-
|
|
893
|
-
|
|
874
|
+
_drawDepthBuffer() {
|
|
875
|
+
this.depthFramebuffer.activate();
|
|
894
876
|
|
|
895
|
-
|
|
896
|
-
|
|
877
|
+
var h = this.handler;
|
|
878
|
+
var gl = h.gl;
|
|
897
879
|
|
|
898
|
-
|
|
880
|
+
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
881
|
+
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
899
882
|
|
|
900
|
-
|
|
901
|
-
var i = dp.length;
|
|
902
|
-
while (i--) {
|
|
903
|
-
/**
|
|
904
|
-
* This callback renders depth frame.
|
|
905
|
-
* @callback og.Renderer~depthCallback
|
|
906
|
-
*/
|
|
907
|
-
dp[i].callback.call(dp[i].sender);
|
|
908
|
-
}
|
|
883
|
+
gl.enable(gl.DEPTH_TEST);
|
|
909
884
|
|
|
910
|
-
|
|
885
|
+
var dp = this._depthCallbacks;
|
|
886
|
+
var i = dp.length;
|
|
887
|
+
while (i--) {
|
|
888
|
+
/**
|
|
889
|
+
* This callback renders depth frame.
|
|
890
|
+
* @callback og.Renderer~depthCallback
|
|
891
|
+
*/
|
|
892
|
+
dp[i].callback.call(dp[i].sender);
|
|
893
|
+
}
|
|
911
894
|
|
|
912
|
-
|
|
913
|
-
// PASS to depth visualization
|
|
914
|
-
var sh = h.programs.depth,
|
|
915
|
-
p = sh._program;
|
|
895
|
+
this.depthFramebuffer.deactivate();
|
|
916
896
|
|
|
917
|
-
|
|
897
|
+
//
|
|
898
|
+
// PASS to depth visualization
|
|
899
|
+
this.screenDepthFramebuffer.activate();
|
|
900
|
+
var sh = h.programs.depth,
|
|
901
|
+
p = sh._program;
|
|
918
902
|
|
|
919
|
-
|
|
920
|
-
gl.vertexAttribPointer(p.attributes.corners, 2, gl.FLOAT, false, 0, 0);
|
|
903
|
+
gl = h.gl;
|
|
921
904
|
|
|
922
|
-
|
|
905
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this._screenFrameCornersBuffer);
|
|
906
|
+
gl.vertexAttribPointer(p.attributes.corners, 2, gl.FLOAT, false, 0, 0);
|
|
923
907
|
|
|
924
|
-
|
|
908
|
+
sh.activate();
|
|
925
909
|
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
910
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
911
|
+
gl.bindTexture(gl.TEXTURE_2D, this.depthFramebuffer.textures[1]);
|
|
912
|
+
gl.uniform1i(p.uniforms.depthTexture, 0);
|
|
929
913
|
|
|
930
|
-
|
|
914
|
+
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
|
931
915
|
|
|
932
|
-
|
|
933
|
-
}
|
|
916
|
+
this.screenDepthFramebuffer.deactivate();
|
|
934
917
|
}
|
|
935
918
|
|
|
936
919
|
_readPickingColor() {
|
|
@@ -944,15 +927,13 @@ class Renderer {
|
|
|
944
927
|
|
|
945
928
|
var pc = this._currPickingColor;
|
|
946
929
|
if (ts.x || ts.y) {
|
|
930
|
+
this.pickingFramebuffer.activate();
|
|
947
931
|
this.pickingFramebuffer.readPixels(pc, ts.nx, 1.0 - ts.ny);
|
|
948
|
-
|
|
949
|
-
this.readPixels(pc, ts.nx, 1.0 - ts.ny, 1);
|
|
950
|
-
}
|
|
932
|
+
this.pickingFramebuffer.deactivate();
|
|
951
933
|
} else {
|
|
934
|
+
this.pickingFramebuffer.activate();
|
|
952
935
|
this.pickingFramebuffer.readPixels(pc, ms.nx, 1.0 - ms.ny);
|
|
953
|
-
|
|
954
|
-
this.readPixels(pc, ms.nx, 1.0 - ms.ny, 1);
|
|
955
|
-
}
|
|
936
|
+
this.pickingFramebuffer.deactivate();
|
|
956
937
|
}
|
|
957
938
|
}
|
|
958
939
|
}
|
|
@@ -964,7 +945,6 @@ class Renderer {
|
|
|
964
945
|
start() {
|
|
965
946
|
this.handler.start();
|
|
966
947
|
}
|
|
967
|
-
|
|
968
948
|
}
|
|
969
949
|
|
|
970
950
|
export { Renderer };
|