@openglobus/og 0.11.6 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/og.css +5 -2
- package/package.json +12 -12
- package/src/og/Globe.js +25 -10
- package/src/og/Popup.js +3 -2
- package/src/og/camera/Camera.js +70 -79
- package/src/og/camera/PlanetCamera.js +33 -33
- package/src/og/control/DebugInfo.js +2 -2
- package/src/og/control/EarthNavigation.js +26 -17
- 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/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/ellipsoid/Ellipsoid.js +1 -1
- package/src/og/entity/BaseBillboard.js +67 -76
- package/src/og/entity/BillboardHandler.js +15 -8
- package/src/og/entity/Entity.js +742 -742
- package/src/og/entity/GeoObjectHandler.js +102 -117
- package/src/og/entity/Label.js +45 -48
- package/src/og/entity/LabelHandler.js +24 -23
- package/src/og/entity/LabelWorker.js +21 -16
- 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/Layer.js +23 -32
- package/src/og/layer/Material.js +1 -1
- 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 +52 -111
- package/src/og/quadTree/quadTree.js +1 -1
- package/src/og/renderer/Renderer.js +85 -122
- package/src/og/renderer/RendererEvents.js +44 -22
- package/src/og/scene/Planet.js +179 -198
- package/src/og/segment/Segment.js +99 -268
- package/src/og/segment/Slice.js +45 -0
- package/src/og/shaders/drawnode.js +174 -360
- package/src/og/shaders/toneMapping.js +1 -0
- package/src/og/shapes/BaseShape.js +1 -1
- 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 +2 -2
- package/src/og/utils/VectorTileCreator.js +1 -3
- package/src/og/utils/shared.js +1 -1
- package/src/og/webgl/Handler.js +156 -118
- 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 -215
- package/types/entity/Billboard.d.ts +0 -94
- package/types/entity/BillboardHandler.d.ts +0 -78
- package/types/entity/Entity.d.ts +0 -348
- package/types/entity/EntityCollection.d.ts +0 -317
- package/types/entity/GeoObject.d.ts +0 -111
- package/types/entity/GeoObjectHandler.d.ts +0 -77
- 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 -31
- package/types/entity/LabelWorker.d.ts +0 -9
- 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 -300
- 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/geoObject.d.ts +0 -3
- 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 -397
- package/types/webgl/Multisample.d.ts +0 -89
- package/types/webgl/Program.d.ts +0 -161
- 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/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.
|
|
@@ -93,7 +98,7 @@ const EVENT_NAMES = [
|
|
|
93
98
|
* @param {string} [options.name="Earth"] - Planet name(Earth by default)
|
|
94
99
|
* @param {Ellipsoid} [options.ellipsoid] - Planet ellipsoid(WGS84 by default)
|
|
95
100
|
* @param {Number} [options.maxGridSize=128] - Segment maximal grid size
|
|
96
|
-
* @param {Number} [options.maxEqualZoomAltitude=
|
|
101
|
+
* @param {Number} [options.maxEqualZoomAltitude=15000000.0] - Maximal altitude since segments on the screen bacame the same zoom level
|
|
97
102
|
* @param {Number} [options.minEqualZoomAltitude=10000.0] - Minimal altitude since segments on the screen bacame the same zoom level
|
|
98
103
|
* @param {Number} [options.minEqualZoomCameraSlope=0.8] - Minimal camera slope above te globe where segments on the screen bacame the same zoom level
|
|
99
104
|
* @fires og.scene.Planet#draw
|
|
@@ -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}
|
|
@@ -180,7 +192,7 @@ export class Planet extends RenderNode {
|
|
|
180
192
|
this._minAltitude = options.minAltitude;
|
|
181
193
|
this._maxAltitude = options.maxAltitude;
|
|
182
194
|
|
|
183
|
-
this.maxEqualZoomAltitude = options.maxEqualZoomAltitude ||
|
|
195
|
+
this.maxEqualZoomAltitude = options.maxEqualZoomAltitude || 15000000.0;
|
|
184
196
|
this.minEqualZoomAltitude = options.minEqualZoomAltitude || 10000.0;
|
|
185
197
|
this.minEqualZoomCameraSlope = options.minEqualZoomCameraSlope || 0.8;
|
|
186
198
|
|
|
@@ -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),
|
|
@@ -731,31 +748,13 @@ export class Planet extends RenderNode {
|
|
|
731
748
|
}
|
|
732
749
|
|
|
733
750
|
// Creating quad trees nodes
|
|
734
|
-
this._quadTree = new Node(
|
|
735
|
-
Segment,
|
|
736
|
-
this,
|
|
737
|
-
quadTree.NW,
|
|
738
|
-
null,
|
|
739
|
-
0,
|
|
740
|
-
0,
|
|
751
|
+
this._quadTree = new Node(Segment, this, quadTree.NW, null, 0, 0,
|
|
741
752
|
Extent.createFromArray([-20037508.34, -20037508.34, 20037508.34, 20037508.34])
|
|
742
753
|
);
|
|
743
|
-
this._quadTreeNorth = new Node(
|
|
744
|
-
SegmentLonLat,
|
|
745
|
-
this,
|
|
746
|
-
quadTree.NW,
|
|
747
|
-
null,
|
|
748
|
-
0,
|
|
749
|
-
0,
|
|
754
|
+
this._quadTreeNorth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0,
|
|
750
755
|
Extent.createFromArray([-180, mercator.MAX_LAT, 180, 90])
|
|
751
756
|
);
|
|
752
|
-
this._quadTreeSouth = new Node(
|
|
753
|
-
SegmentLonLat,
|
|
754
|
-
this,
|
|
755
|
-
quadTree.NW,
|
|
756
|
-
null,
|
|
757
|
-
0,
|
|
758
|
-
0,
|
|
757
|
+
this._quadTreeSouth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0,
|
|
759
758
|
Extent.createFromArray([-180, -90, 180, mercator.MIN_LAT])
|
|
760
759
|
);
|
|
761
760
|
|
|
@@ -771,7 +770,7 @@ export class Planet extends RenderNode {
|
|
|
771
770
|
// loading Earth night glowing texture
|
|
772
771
|
if (this._useNightTexture) {
|
|
773
772
|
createImageBitmap(NIGHT).then(
|
|
774
|
-
(e) => (this._nightTexture = this.renderer.handler.
|
|
773
|
+
(e) => (this._nightTexture = this.renderer.handler.createTextureDefault(e))
|
|
775
774
|
);
|
|
776
775
|
}
|
|
777
776
|
|
|
@@ -816,35 +815,65 @@ export class Planet extends RenderNode {
|
|
|
816
815
|
}
|
|
817
816
|
|
|
818
817
|
_preRender() {
|
|
818
|
+
// Zoom 0
|
|
819
819
|
this._quadTree.createChildrenNodes();
|
|
820
|
-
this._quadTree.segment.createPlainSegment();
|
|
820
|
+
this._quadTree.segment.createPlainSegment();
|
|
821
|
+
|
|
822
|
+
// Zoom 1
|
|
823
|
+
for (let i = 0; i < this._quadTree.nodes.length; i++) {
|
|
824
|
+
this._quadTree.nodes[i].segment.createPlainSegment();
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
// same for poles
|
|
828
|
+
this._quadTreeNorth.createChildrenNodes();
|
|
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._skipPreRender = false;
|
|
847
|
+
|
|
848
|
+
// Zoom 0
|
|
849
|
+
this._quadTree.segment.passReady = true;
|
|
821
850
|
this._quadTree.renderNode(true);
|
|
822
851
|
this._normalMapCreator.drawSingle(this._quadTree.segment);
|
|
823
852
|
|
|
853
|
+
// Zoom 1
|
|
824
854
|
for (let i = 0; i < this._quadTree.nodes.length; i++) {
|
|
825
|
-
this._quadTree.nodes[i].segment.
|
|
855
|
+
this._quadTree.nodes[i].segment.passReady = true;
|
|
826
856
|
this._quadTree.nodes[i].renderNode(true);
|
|
827
857
|
this._normalMapCreator.drawSingle(this._quadTree.nodes[i].segment);
|
|
828
858
|
}
|
|
829
859
|
|
|
830
|
-
|
|
831
|
-
this._quadTreeNorth.segment.
|
|
860
|
+
// Same for poles
|
|
861
|
+
this._quadTreeNorth.segment.passReady = true;
|
|
832
862
|
this._quadTreeNorth.renderNode(true);
|
|
833
863
|
this._normalMapCreator.drawSingle(this._quadTreeNorth.segment);
|
|
834
864
|
|
|
835
865
|
for (let i = 0; i < this._quadTreeNorth.nodes.length; i++) {
|
|
836
|
-
this._quadTreeNorth.nodes[i].segment.
|
|
866
|
+
this._quadTreeNorth.nodes[i].segment.passReady = true;
|
|
837
867
|
this._quadTreeNorth.nodes[i].renderNode(true);
|
|
838
868
|
this._normalMapCreator.drawSingle(this._quadTreeNorth.nodes[i].segment);
|
|
839
869
|
}
|
|
840
870
|
|
|
841
|
-
this._quadTreeSouth.
|
|
842
|
-
this._quadTreeSouth.segment.createPlainSegment();
|
|
871
|
+
this._quadTreeSouth.segment.passReady = true;
|
|
843
872
|
this._quadTreeSouth.renderNode(true);
|
|
844
873
|
this._normalMapCreator.drawSingle(this._quadTreeSouth.segment);
|
|
845
874
|
|
|
846
875
|
for (let i = 0; i < this._quadTreeSouth.nodes.length; i++) {
|
|
847
|
-
this._quadTreeSouth.nodes[i].segment.
|
|
876
|
+
this._quadTreeSouth.nodes[i].segment.passReady = true;
|
|
848
877
|
this._quadTreeSouth.nodes[i].renderNode(true);
|
|
849
878
|
this._normalMapCreator.drawSingle(this._quadTreeSouth.nodes[i].segment);
|
|
850
879
|
}
|
|
@@ -925,6 +954,9 @@ export class Planet extends RenderNode {
|
|
|
925
954
|
if (li._attribution.length) {
|
|
926
955
|
html += "<li>" + li._attribution + "</li>";
|
|
927
956
|
}
|
|
957
|
+
|
|
958
|
+
this._preLoad();
|
|
959
|
+
|
|
928
960
|
} else if (li._fading && li._fadingOpacity > 0) {
|
|
929
961
|
if (li.hasImageryTiles()) {
|
|
930
962
|
this.visibleTileLayers.push(li);
|
|
@@ -998,16 +1030,10 @@ export class Planet extends RenderNode {
|
|
|
998
1030
|
_collectRenderNodes() {
|
|
999
1031
|
let cam = this.camera;
|
|
1000
1032
|
|
|
1001
|
-
this.
|
|
1002
|
-
cam.slope < 0.0 ? 0.0 : cam.slope,
|
|
1003
|
-
this._maxLodRatio,
|
|
1004
|
-
this._minLodRatio
|
|
1005
|
-
);
|
|
1033
|
+
this._lodSize = math.lerp(cam.slope < 0.0 ? 0.0 : cam.slope, this._curLodSize, this._minLodSize);
|
|
1006
1034
|
|
|
1007
1035
|
cam._insideSegment = null;
|
|
1008
1036
|
|
|
1009
|
-
this._nodeCounterError_ = 0;
|
|
1010
|
-
|
|
1011
1037
|
// clear first
|
|
1012
1038
|
this._clearRenderedNodeList();
|
|
1013
1039
|
|
|
@@ -1022,11 +1048,11 @@ export class Planet extends RenderNode {
|
|
|
1022
1048
|
|
|
1023
1049
|
this._quadTree.renderTree(cam, 0, null);
|
|
1024
1050
|
|
|
1025
|
-
if (
|
|
1026
|
-
cam.slope > this.minEqualZoomCameraSlope &&
|
|
1051
|
+
if (cam.slope > this.minEqualZoomCameraSlope &&
|
|
1027
1052
|
cam._lonLat.height < this.maxEqualZoomAltitude &&
|
|
1028
1053
|
cam._lonLat.height > this.minEqualZoomAltitude
|
|
1029
1054
|
) {
|
|
1055
|
+
|
|
1030
1056
|
this.minCurrZoom = this.maxCurrZoom;
|
|
1031
1057
|
|
|
1032
1058
|
let temp = this._renderedNodes,
|
|
@@ -1043,7 +1069,8 @@ export class Planet extends RenderNode {
|
|
|
1043
1069
|
|
|
1044
1070
|
for (var i = 0, len = temp.length; i < len; i++) {
|
|
1045
1071
|
var ri = temp[i];
|
|
1046
|
-
|
|
1072
|
+
let ht = ri.segment.centerNormal.dot(cam._b);
|
|
1073
|
+
if (ri.segment.tileZoom === this.maxCurrZoom || ht < HORIZON_TANGENT) {
|
|
1047
1074
|
this._renderedNodes.push(ri);
|
|
1048
1075
|
let k = 0,
|
|
1049
1076
|
inFrustum = ri.inFrustum;
|
|
@@ -1147,12 +1174,12 @@ export class Planet extends RenderNode {
|
|
|
1147
1174
|
this._vectorTileCreator.frame();
|
|
1148
1175
|
}
|
|
1149
1176
|
|
|
1150
|
-
gl.blendEquation(gl.FUNC_ADD);
|
|
1151
1177
|
|
|
1152
|
-
gl.
|
|
1178
|
+
gl.enable(gl.CULL_FACE);
|
|
1153
1179
|
|
|
1154
1180
|
gl.enable(gl.BLEND);
|
|
1155
|
-
gl.
|
|
1181
|
+
gl.blendEquation(gl.FUNC_ADD);
|
|
1182
|
+
gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
|
|
1156
1183
|
|
|
1157
1184
|
if (this.lightEnabled) {
|
|
1158
1185
|
h.programs.drawnode_screen_wl.activate();
|
|
@@ -1165,13 +1192,14 @@ export class Planet extends RenderNode {
|
|
|
1165
1192
|
gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
|
|
1166
1193
|
gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
|
|
1167
1194
|
|
|
1195
|
+
gl.uniform3fv(shu.diffuse, this._diffuse);
|
|
1196
|
+
gl.uniform3fv(shu.ambient, this._ambient);
|
|
1197
|
+
gl.uniform4fv(shu.specular, this._specular);
|
|
1198
|
+
|
|
1168
1199
|
// bind night glowing material
|
|
1169
1200
|
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
|
|
1170
|
-
gl.bindTexture(
|
|
1171
|
-
|
|
1172
|
-
(this.camera._lonLat.height > 329958.0 &&
|
|
1173
|
-
(this._nightTexture || this.transparentTexture)) ||
|
|
1174
|
-
this.transparentTexture
|
|
1201
|
+
gl.bindTexture(gl.TEXTURE_2D,
|
|
1202
|
+
(this.camera._lonLat.height > 329958.0 && (this._nightTexture || this.transparentTexture)) || this.transparentTexture
|
|
1175
1203
|
);
|
|
1176
1204
|
gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
|
|
1177
1205
|
|
|
@@ -1180,34 +1208,6 @@ export class Planet extends RenderNode {
|
|
|
1180
1208
|
gl.bindTexture(gl.TEXTURE_2D, this._specularTexture || this.transparentTexture);
|
|
1181
1209
|
gl.uniform1i(shu.specularTexture, this.SLICE_SIZE + 1);
|
|
1182
1210
|
|
|
1183
|
-
var b = this.baseLayer;
|
|
1184
|
-
if (b) {
|
|
1185
|
-
this._diffuseMaterialArr[0] = b.diffuse.x;
|
|
1186
|
-
this._diffuseMaterialArr[1] = b.diffuse.y;
|
|
1187
|
-
this._diffuseMaterialArr[2] = b.diffuse.z;
|
|
1188
|
-
|
|
1189
|
-
this._ambientMaterialArr[0] = b.ambient.x;
|
|
1190
|
-
this._ambientMaterialArr[1] = b.ambient.y;
|
|
1191
|
-
this._ambientMaterialArr[2] = b.ambient.z;
|
|
1192
|
-
|
|
1193
|
-
this._specularMaterialArr[0] = b.specular.x;
|
|
1194
|
-
this._specularMaterialArr[1] = b.specular.y;
|
|
1195
|
-
this._specularMaterialArr[2] = b.specular.z;
|
|
1196
|
-
this._specularMaterialArr[3] = b.shininess;
|
|
1197
|
-
} else {
|
|
1198
|
-
this._diffuseMaterialArr[0] = 0.89;
|
|
1199
|
-
this._diffuseMaterialArr[1] = 0.9;
|
|
1200
|
-
this._diffuseMaterialArr[2] = 0.83;
|
|
1201
|
-
|
|
1202
|
-
this._ambientMaterialArr[0] = 0.0;
|
|
1203
|
-
this._ambientMaterialArr[1] = 0.0;
|
|
1204
|
-
this._ambientMaterialArr[2] = 0.0;
|
|
1205
|
-
|
|
1206
|
-
this._specularMaterialArr[0] = 0.0003;
|
|
1207
|
-
this._specularMaterialArr[1] = 0.00012;
|
|
1208
|
-
this._specularMaterialArr[2] = 0.00001;
|
|
1209
|
-
this._specularMaterialArr[3] = 20.0;
|
|
1210
|
-
}
|
|
1211
1211
|
} else {
|
|
1212
1212
|
h.programs.drawnode_screen_nl.activate();
|
|
1213
1213
|
sh = h.programs.drawnode_screen_nl._program;
|
|
@@ -1266,63 +1266,45 @@ export class Planet extends RenderNode {
|
|
|
1266
1266
|
* @protected
|
|
1267
1267
|
*/
|
|
1268
1268
|
_renderHeightPickingFramebufferPASS() {
|
|
1269
|
-
this.
|
|
1269
|
+
if (!this.terrain.isEmpty) {
|
|
1270
1270
|
|
|
1271
|
-
|
|
1272
|
-
let renderer = this.renderer;
|
|
1273
|
-
let h = renderer.handler;
|
|
1274
|
-
let gl = h.gl;
|
|
1275
|
-
let cam = renderer.activeCamera;
|
|
1276
|
-
let frustumIndex = cam.getCurrentFrustum();
|
|
1277
|
-
|
|
1278
|
-
if (frustumIndex === cam.FARTHEST_FRUSTUM_INDEX) {
|
|
1279
|
-
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
1280
|
-
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
1281
|
-
} else {
|
|
1282
|
-
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
1283
|
-
}
|
|
1271
|
+
this._heightPickingFramebuffer.activate();
|
|
1284
1272
|
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
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();
|
|
1289
1279
|
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
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
|
+
}
|
|
1293
1286
|
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
shu.
|
|
1297
|
-
false,
|
|
1298
|
-
renderer.activeCamera.getProjectionMatrix()
|
|
1299
|
-
);
|
|
1287
|
+
h.programs.drawnode_heightPicking.activate();
|
|
1288
|
+
sh = h.programs.drawnode_heightPicking._program;
|
|
1289
|
+
let shu = sh.uniforms;
|
|
1300
1290
|
|
|
1301
|
-
|
|
1302
|
-
|
|
1291
|
+
gl.uniformMatrix4fv(shu.viewMatrix, false, renderer.activeCamera.getViewMatrix());
|
|
1292
|
+
gl.uniformMatrix4fv(shu.projectionMatrix, false, renderer.activeCamera.getProjectionMatrix());
|
|
1303
1293
|
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
sl = this._visibleTileLayerSlices;
|
|
1294
|
+
gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
|
|
1295
|
+
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
|
1307
1296
|
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
}
|
|
1297
|
+
// drawing planet nodes
|
|
1298
|
+
var rn = this._renderedNodesInFrustum[frustumIndex],
|
|
1299
|
+
sl = this._visibleTileLayerSlices;
|
|
1312
1300
|
|
|
1313
|
-
|
|
1314
|
-
for (let j = 1, len = sl.length; j < len; j++) {
|
|
1315
|
-
i = rn.length;
|
|
1316
|
-
//gl.polygonOffset(0, -j);
|
|
1301
|
+
let i = rn.length;
|
|
1317
1302
|
while (i--) {
|
|
1318
|
-
rn[i].segment.heightPickingRendering(sh, sl[
|
|
1303
|
+
rn[i].segment.heightPickingRendering(sh, sl[0]);
|
|
1319
1304
|
}
|
|
1320
|
-
}
|
|
1321
|
-
//gl.disable(gl.POLYGON_OFFSET_FILL);
|
|
1322
1305
|
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
this._heightPickingFramebuffer.deactivate();
|
|
1306
|
+
this._heightPickingFramebuffer.deactivate();
|
|
1307
|
+
}
|
|
1326
1308
|
}
|
|
1327
1309
|
|
|
1328
1310
|
/**
|
|
@@ -1385,6 +1367,7 @@ export class Planet extends RenderNode {
|
|
|
1385
1367
|
let cam = renderer.activeCamera;
|
|
1386
1368
|
|
|
1387
1369
|
gl.disable(gl.BLEND);
|
|
1370
|
+
gl.disable(gl.POLYGON_OFFSET_FILL);
|
|
1388
1371
|
|
|
1389
1372
|
gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
|
|
1390
1373
|
gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
|
|
@@ -1400,16 +1383,7 @@ export class Planet extends RenderNode {
|
|
|
1400
1383
|
|
|
1401
1384
|
let i = rn.length;
|
|
1402
1385
|
while (i--) {
|
|
1403
|
-
rn[i].segment.depthRendering(sh, sl[0]
|
|
1404
|
-
}
|
|
1405
|
-
|
|
1406
|
-
gl.enable(gl.POLYGON_OFFSET_FILL);
|
|
1407
|
-
for (let j = 1, len = sl.length; j < len; j++) {
|
|
1408
|
-
i = rn.length;
|
|
1409
|
-
gl.polygonOffset(0, -j);
|
|
1410
|
-
while (i--) {
|
|
1411
|
-
rn[i].segment.depthRendering(sh, sl[j], j, this.transparentTexture, true);
|
|
1412
|
-
}
|
|
1386
|
+
rn[i].segment.depthRendering(sh, sl[0]);
|
|
1413
1387
|
}
|
|
1414
1388
|
}
|
|
1415
1389
|
|
|
@@ -1509,12 +1483,11 @@ export class Planet extends RenderNode {
|
|
|
1509
1483
|
* Returns 3d cartesian coordinates on the relief planet by mouse cursor
|
|
1510
1484
|
* position or null if mouse cursor is outside the planet.
|
|
1511
1485
|
* @public
|
|
1512
|
-
* @param {Boolean} [force=false] - Force framebuffer rendering.
|
|
1513
1486
|
* @returns {Vec3} -
|
|
1514
1487
|
*/
|
|
1515
|
-
getCartesianFromMouseTerrain(
|
|
1488
|
+
getCartesianFromMouseTerrain() {
|
|
1516
1489
|
var ms = this.renderer.events.mouseState;
|
|
1517
|
-
var distance = this.getDistanceFromPixel(ms
|
|
1490
|
+
var distance = this.getDistanceFromPixel(ms);
|
|
1518
1491
|
if (distance) {
|
|
1519
1492
|
return ms.direction.scaleTo(distance).addA(this.renderer.activeCamera.eye);
|
|
1520
1493
|
}
|
|
@@ -1529,8 +1502,8 @@ export class Planet extends RenderNode {
|
|
|
1529
1502
|
* @param {Boolean} [force=false] - Force framebuffer rendering.
|
|
1530
1503
|
* @returns {Vec3} -
|
|
1531
1504
|
*/
|
|
1532
|
-
getCartesianFromPixelTerrain(px
|
|
1533
|
-
var distance = this.getDistanceFromPixel(px
|
|
1505
|
+
getCartesianFromPixelTerrain(px) {
|
|
1506
|
+
var distance = this.getDistanceFromPixel(px);
|
|
1534
1507
|
if (distance) {
|
|
1535
1508
|
var direction = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1536
1509
|
return direction.scaleTo(distance).addA(this.renderer.activeCamera.eye);
|
|
@@ -1601,40 +1574,48 @@ export class Planet extends RenderNode {
|
|
|
1601
1574
|
* @returns {number} -
|
|
1602
1575
|
*/
|
|
1603
1576
|
getDistanceFromPixel(px) {
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
this._heightPickingFramebuffer.deactivate();
|
|
1614
|
-
|
|
1615
|
-
let dist = decodeFloatFromRGBAArr(_tempPickingPix_);
|
|
1616
|
-
|
|
1617
|
-
if (!(_tempPickingPix_[0] || _tempPickingPix_[1] || _tempPickingPix_[2])) {
|
|
1618
|
-
dist = this.getDistanceFromPixelEllipsoid(px) || 0;
|
|
1619
|
-
} else if (dist < DEPTH_DISTANCE) {
|
|
1620
|
-
r.screenDepthFramebuffer.activate();
|
|
1621
|
-
r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy, 0);
|
|
1622
|
-
r.screenDepthFramebuffer.deactivate();
|
|
1623
|
-
|
|
1624
|
-
let screenPos = new Vec4(
|
|
1625
|
-
spx * 2.0 - 1.0,
|
|
1626
|
-
spy * 2.0 - 1.0,
|
|
1627
|
-
(_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
|
|
1628
|
-
1.0 * 2.0 - 1.0
|
|
1629
|
-
);
|
|
1630
|
-
let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
|
|
1631
|
-
let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1632
|
-
dist =
|
|
1633
|
-
-(viewPosition.z / viewPosition.w) /
|
|
1634
|
-
dir.dot(this.renderer.activeCamera.getForward());
|
|
1635
|
-
}
|
|
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;
|
|
1636
1586
|
|
|
1637
|
-
|
|
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
|
+
}
|
|
1638
1619
|
}
|
|
1639
1620
|
|
|
1640
1621
|
/**
|