@openglobus/og 0.15.1 → 0.15.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -4
- package/css/og.css +44 -45
- package/dist/@openglobus/og.css +1 -1
- package/dist/@openglobus/og.esm.js +2 -2
- package/dist/@openglobus/og.esm.js.map +1 -1
- package/dist/@openglobus/og.umd.js +2 -2
- package/dist/@openglobus/og.umd.js.map +1 -1
- package/package.json +12 -12
- package/src/og/Clock.js +1 -1
- package/src/og/Events.js +1 -1
- package/src/og/Extent.js +1 -1
- package/src/og/Globe.js +3 -5
- package/src/og/Popup.js +38 -63
- package/src/og/astro/earth.js +2 -2
- package/src/og/astro/rotation.js +2 -2
- package/src/og/bv/Box.js +1 -0
- package/src/og/bv/index.js +1 -1
- package/src/og/camera/Camera.js +4 -4
- package/src/og/camera/PlanetCamera.js +26 -6
- package/src/og/camera/index.js +1 -1
- package/src/og/control/Atmosphere.js +3 -8
- package/src/og/control/CompassButton.js +4 -5
- package/src/og/control/EarthCoordinates.js +3 -2
- package/src/og/control/EarthNavigation.js +0 -1
- package/src/og/control/GeoImageDragControl.js +2 -2
- package/src/og/control/KeyboardNavigation.js +3 -2
- package/src/og/control/LayerAnimation.js +2 -2
- package/src/og/control/LayerSwitcher.js +5 -4
- package/src/og/control/Lighting.js +106 -35
- package/src/og/control/MouseNavigation.js +4 -4
- package/src/og/control/MouseWheelZoomControl.js +2 -2
- package/src/og/control/RulerSwitcher.js +4 -3
- package/src/og/control/ScaleControl.js +2 -2
- package/src/og/control/ShowFps.js +2 -1
- package/src/og/control/SimpleNavigation.js +2 -1
- package/src/og/control/SimpleSkyBackground.js +2 -2
- package/src/og/control/Sun.js +8 -1
- package/src/og/control/ToggleWireframe.js +2 -1
- package/src/og/control/TouchNavigation.js +4 -3
- package/src/og/control/ZoomControl.js +6 -5
- package/src/og/control/index.js +10 -10
- package/src/og/control/ruler/RulerScene.js +19 -11
- package/src/og/control/selection/Selection.js +1 -1
- package/src/og/control/selection/SelectionScene.js +5 -8
- package/src/og/control/timeline/TimelineControl.js +3 -4
- package/src/og/control/timeline/TimelineModel.js +2 -2
- package/src/og/control/timeline/TimelineView.js +10 -5
- package/src/og/control/visibleExtent/Segment.js +5 -5
- package/src/og/control/visibleExtent/VisibleExtent.js +1 -1
- package/src/og/ellipsoid/Ellipsoid.js +3 -3
- package/src/og/entity/BaseBillboard.js +2 -2
- package/src/og/entity/BillboardHandler.js +10 -2
- package/src/og/entity/Entity.js +10 -51
- package/src/og/entity/EntityCollection.js +3 -20
- package/src/og/entity/GeoObject.js +2 -4
- package/src/og/entity/GeoObjectHandler.js +12 -11
- package/src/og/entity/Geometry.js +2 -2
- package/src/og/entity/GeometryHandler.js +2 -2
- package/src/og/entity/Label.js +2 -2
- package/src/og/entity/LabelHandler.js +7 -5
- package/src/og/entity/Polyline.js +8 -7
- package/src/og/entity/Ray.js +1 -2
- package/src/og/entity/RayHandler.js +4 -0
- package/src/og/entity/Strip.js +8 -5
- package/src/og/entity/index.js +1 -1
- package/src/og/index.core.js +4 -4
- package/src/og/index.js +4 -4
- package/src/og/index.webgl.js +3 -3
- package/src/og/layer/BaseGeoImage.js +2 -2
- package/src/og/layer/GeoImage.js +2 -2
- package/src/og/layer/GeoTexture2d.js +1 -1
- package/src/og/layer/Layer.js +3 -3
- package/src/og/layer/Vector.js +7 -11
- package/src/og/layer/WMS.js +2 -1
- package/src/og/layer/XYZ.js +2 -4
- package/src/og/math/Line3.js +0 -1
- package/src/og/math/Plane.js +0 -1
- package/src/og/math/Ray.js +0 -1
- package/src/og/math/Vec2.js +62 -62
- package/src/og/math/Vec3.js +1 -1
- package/src/og/math/Vec4.js +1 -1
- package/src/og/math/index.js +1 -1
- package/src/og/proj/EPSG3857.js +1 -1
- package/src/og/proj/EPSG4326.js +1 -1
- package/src/og/quadTree/EarthQuadTreeStrategy.js +4 -4
- package/src/og/quadTree/MarsQuadTreeStrategy.js +4 -4
- package/src/og/quadTree/Node.js +1 -1
- package/src/og/quadTree/Wgs84QuadTreeStrategy.js +4 -4
- package/src/og/quadTree/index.js +2 -2
- package/src/og/renderer/Renderer.js +196 -77
- package/src/og/renderer/RendererEvents.js +35 -10
- package/src/og/scene/Axes.js +2 -2
- package/src/og/scene/Planet.js +47 -75
- package/src/og/scene/RenderNode.js +2 -13
- package/src/og/scene/SkyBox.js +1 -1
- package/src/og/scene/index.js +2 -2
- package/src/og/segment/Segment.js +5 -5
- package/src/og/segment/SegmentLonLatWgs84.js +2 -3
- package/src/og/shaders/drawnode.js +5 -1
- package/src/og/shaders/geoObject.js +2 -6
- package/src/og/shaders/pickingMask.js +31 -0
- package/src/og/shaders/polyline.js +212 -212
- package/src/og/terrain/BilTerrain.js +4 -4
- package/src/og/terrain/GlobusTerrain.js +7 -7
- package/src/og/terrain/MapboxTerrain.js +2 -2
- package/src/og/terrain/index.js +2 -2
- package/src/og/ui/Button.js +5 -4
- package/src/og/ui/Dialog.js +3 -6
- package/src/og/ui/Slider.js +29 -3
- package/src/og/ui/View.js +5 -5
- package/src/og/ui/icons.js +3 -0
- package/src/og/utils/FontAtlas.js +2 -2
- package/src/og/utils/GeoImageCreator.js +0 -1
- package/src/og/utils/NormalMapCreator.js +6 -5
- package/src/og/utils/TerrainWorker.js +1 -1
- package/src/og/utils/VectorTileCreator.js +4 -4
- package/src/og/utils/shared.js +1 -1
- package/src/og/webgl/Framebuffer.js +3 -1
- package/src/og/webgl/Handler.js +77 -62
- package/src/og/webgl/Multisample.js +18 -7
- package/src/og/webgl/Program.js +2 -2
- package/src/og/webgl/index.js +2 -2
- package/types/Popup.d.ts +8 -21
- package/types/camera/PlanetCamera.d.ts +1 -0
- package/types/control/Sun.d.ts +1 -0
- package/types/control/ruler/RulerScene.d.ts +4 -3
- package/types/entity/Entity.d.ts +2 -19
- package/types/entity/EntityCollection.d.ts +0 -7
- package/types/math/Vec2.d.ts +95 -95
- package/types/renderer/Renderer.d.ts +28 -16
- package/types/scene/Planet.d.ts +2 -7
- package/types/shaders/pickingMask.d.ts +2 -0
- package/types/ui/Slider.d.ts +3 -0
- package/types/ui/View.d.ts +1 -0
- package/types/ui/icons.d.ts +1 -0
- package/types/webgl/Framebuffer.d.ts +1 -0
- package/types/webgl/Handler.d.ts +3 -2
- package/src/og/entity/ShapeHandler.js +0 -99
- package/src/og/shaders/shape.js +0 -135
- package/src/og/shapes/BaseShape.js +0 -557
- package/src/og/shapes/Icosphere.js +0 -179
- package/src/og/shapes/Sphere.js +0 -100
- package/types/entity/ShapeHandler.d.ts +0 -22
- package/types/shaders/shape.d.ts +0 -4
- package/types/shapes/BaseShape.d.ts +0 -250
- package/types/shapes/Sphere.d.ts +0 -41
package/src/og/proj/EPSG3857.js
CHANGED
package/src/og/proj/EPSG4326.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
import {
|
|
2
|
+
import { Extent } from "../Extent.js";
|
|
3
3
|
import * as mercator from "../mercator.js";
|
|
4
|
+
import { Node } from "../quadTree/Node.js";
|
|
5
|
+
import * as quadTree from "../quadTree/quadTree.js";
|
|
4
6
|
import { Segment } from "../segment/Segment.js";
|
|
5
7
|
import { SegmentLonLat } from "../segment/SegmentLonLat.js";
|
|
6
|
-
import
|
|
7
|
-
import { Extent } from "../Extent.js";
|
|
8
|
-
import { Node } from "../quadTree/Node.js";
|
|
8
|
+
import { QuadTreeStrategy } from "./QuadTreeStrategy.js";
|
|
9
9
|
|
|
10
10
|
export class EarthQuadTreeStrategy extends QuadTreeStrategy {
|
|
11
11
|
constructor(options = {}) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
import { QuadTreeStrategy } from "./QuadTreeStrategy.js"
|
|
3
|
-
import { SegmentLonLatWgs84 } from "../segment/SegmentLonLatWgs84.js";
|
|
4
|
-
import * as quadTree from "../quadTree/quadTree.js";
|
|
5
2
|
import { Extent } from "../Extent.js";
|
|
6
|
-
import { Node } from "../quadTree/Node.js";
|
|
7
3
|
import { EPSG4326 } from "../proj/EPSG4326.js";
|
|
4
|
+
import { Node } from "../quadTree/Node.js";
|
|
5
|
+
import * as quadTree from "../quadTree/quadTree.js";
|
|
6
|
+
import { SegmentLonLatWgs84 } from "../segment/SegmentLonLatWgs84.js";
|
|
7
|
+
import { QuadTreeStrategy } from "./QuadTreeStrategy.js";
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
export class MarsQuadTreeStrategy extends QuadTreeStrategy {
|
package/src/og/quadTree/Node.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
import { QuadTreeStrategy } from "./QuadTreeStrategy.js"
|
|
3
|
-
import { SegmentLonLatWgs84 } from "../segment/SegmentLonLatWgs84.js";
|
|
4
|
-
import * as quadTree from "../quadTree/quadTree.js";
|
|
5
2
|
import { Extent } from "../Extent.js";
|
|
6
|
-
import { Node } from "../quadTree/Node.js";
|
|
7
3
|
import { EPSG4326 } from "../proj/EPSG4326.js";
|
|
4
|
+
import { Node } from "../quadTree/Node.js";
|
|
5
|
+
import * as quadTree from "../quadTree/quadTree.js";
|
|
6
|
+
import { SegmentLonLatWgs84 } from "../segment/SegmentLonLatWgs84.js";
|
|
7
|
+
import { QuadTreeStrategy } from "./QuadTreeStrategy.js";
|
|
8
8
|
|
|
9
9
|
export class Wgs84QuadTreeStrategy extends QuadTreeStrategy {
|
|
10
10
|
constructor(options = {}) {
|
package/src/og/quadTree/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EarthQuadTreeStrategy } from "./EarthQuadTreeStrategy.js";
|
|
2
2
|
import { MarsQuadTreeStrategy } from "./MarsQuadTreeStrategy.js";
|
|
3
|
-
import { Wgs84QuadTreeStrategy } from "./Wgs84QuadTreeStrategy.js";
|
|
4
3
|
import { QuadTreeStrategy } from "./QuadTreeStrategy.js";
|
|
4
|
+
import { Wgs84QuadTreeStrategy } from "./Wgs84QuadTreeStrategy.js";
|
|
5
5
|
|
|
6
6
|
const quadTreeStrategyType = {
|
|
7
7
|
earth: EarthQuadTreeStrategy,
|
|
@@ -9,4 +9,4 @@ const quadTreeStrategyType = {
|
|
|
9
9
|
wgs84: Wgs84QuadTreeStrategy
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
export { quadTreeStrategyType, QuadTreeStrategy,
|
|
12
|
+
export { quadTreeStrategyType, QuadTreeStrategy, Wgs84QuadTreeStrategy, MarsQuadTreeStrategy, EarthQuadTreeStrategy };
|
|
@@ -1,29 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import * as arial from "../arial.js";
|
|
3
4
|
import { Camera } from "../camera/Camera.js";
|
|
4
|
-
import {
|
|
5
|
+
import { cons } from "../cons.js";
|
|
6
|
+
import { depth } from "../shaders/depth.js";
|
|
7
|
+
import { LabelWorker } from "../entity/LabelWorker.js";
|
|
8
|
+
import { input } from "../input/input.js";
|
|
5
9
|
import { randomi } from "../math.js";
|
|
6
|
-
import { RendererEvents } from "./RendererEvents.js";
|
|
7
10
|
import { Vec2 } from "../math/Vec2.js";
|
|
8
11
|
import { Vec3 } from "../math/Vec3.js";
|
|
9
|
-
import {
|
|
10
|
-
import { input } from "../input/input.js";
|
|
11
|
-
import { isEmpty } from "../utils/shared.js";
|
|
12
|
-
import { toneMapping } from "../shaders/toneMapping.js";
|
|
12
|
+
import { pickingMask } from "../shaders/pickingMask.js";
|
|
13
13
|
import { screenFrame } from "../shaders/screenFrame.js";
|
|
14
|
+
import { toneMapping } from "../shaders/toneMapping.js";
|
|
14
15
|
import { FontAtlas } from "../utils/FontAtlas.js";
|
|
16
|
+
import { isEmpty } from "../utils/shared.js";
|
|
15
17
|
import { TextureAtlas } from "../utils/TextureAtlas.js";
|
|
16
|
-
import
|
|
17
|
-
import {
|
|
18
|
-
import { LabelWorker } from "../entity/LabelWorker.js";
|
|
18
|
+
import { Framebuffer, Multisample } from "../webgl/index.js";
|
|
19
|
+
import { RendererEvents } from "./RendererEvents.js";
|
|
19
20
|
|
|
20
21
|
let __pickingCallbackCounter__ = 0;
|
|
21
22
|
|
|
22
23
|
let __depthCallbackCounter__ = 0;
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
const NORMAL = 1;
|
|
26
|
-
const POSITION = 2;
|
|
25
|
+
let __distanceCallbackCounter__ = 0;
|
|
27
26
|
|
|
28
27
|
/**
|
|
29
28
|
* Represents high level WebGL context interface that starts WebGL handler working in real time.
|
|
@@ -155,6 +154,21 @@ class Renderer {
|
|
|
155
154
|
*/
|
|
156
155
|
this.pickingFramebuffer = null;
|
|
157
156
|
|
|
157
|
+
this._tempPickingPix_ = null;
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* @public
|
|
161
|
+
* @type {Framebuffer}
|
|
162
|
+
*/
|
|
163
|
+
this.distanceFramebuffer = null;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* @type {Array.<Renderer~distanceCallback>}
|
|
167
|
+
*/
|
|
168
|
+
this._distanceCallbacks = [];
|
|
169
|
+
|
|
170
|
+
this._tempDistancePix_ = null;
|
|
171
|
+
|
|
158
172
|
/**
|
|
159
173
|
* Depth objects rendering queue.
|
|
160
174
|
* @type {Array.<Renderer~depthCallback>}
|
|
@@ -163,7 +177,8 @@ class Renderer {
|
|
|
163
177
|
|
|
164
178
|
this.depthFramebuffer = null;
|
|
165
179
|
|
|
166
|
-
|
|
180
|
+
let urlParams = new URLSearchParams(location.search);
|
|
181
|
+
this._msaa = Number(urlParams.get('og_msaa') || params.msaa || 4);
|
|
167
182
|
this._internalFormat = "RGBA16F";
|
|
168
183
|
this._format = "RGBA";
|
|
169
184
|
this._type = "FLOAT";
|
|
@@ -174,21 +189,6 @@ class Renderer {
|
|
|
174
189
|
|
|
175
190
|
this.toneMappingFramebuffer = null;
|
|
176
191
|
|
|
177
|
-
/**
|
|
178
|
-
* Stores current picking rgb color.
|
|
179
|
-
* @private
|
|
180
|
-
* @type {Array.<number>} - (exactly 3 entries)
|
|
181
|
-
*/
|
|
182
|
-
this._currPickingColor = new Uint8Array(4);
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Stores previous picked rgb color.
|
|
186
|
-
* @private
|
|
187
|
-
* @type {Array.<number>} - (exactly 3 entries)
|
|
188
|
-
*/
|
|
189
|
-
this._prevPickingColor = new Uint8Array(4);
|
|
190
|
-
this._tempPickingColor_ = new Uint8Array(4);
|
|
191
|
-
|
|
192
192
|
this._initialized = false;
|
|
193
193
|
|
|
194
194
|
/**
|
|
@@ -224,6 +224,8 @@ class Renderer {
|
|
|
224
224
|
this._fnScreenFrame = null;
|
|
225
225
|
|
|
226
226
|
this.labelWorker = new LabelWorker(4);
|
|
227
|
+
|
|
228
|
+
this.__useDistanceFramebuffer__ = true;
|
|
227
229
|
}
|
|
228
230
|
|
|
229
231
|
/**
|
|
@@ -253,6 +255,26 @@ class Renderer {
|
|
|
253
255
|
}
|
|
254
256
|
}
|
|
255
257
|
|
|
258
|
+
addDistanceCallback(sender, callback) {
|
|
259
|
+
var id = __distanceCallbackCounter__++;
|
|
260
|
+
this._distanceCallbacks.push({
|
|
261
|
+
id: id,
|
|
262
|
+
callback: callback,
|
|
263
|
+
sender: sender
|
|
264
|
+
});
|
|
265
|
+
return id;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
removeDistanceCallback(id) {
|
|
269
|
+
for (var i = 0; i < this._distanceCallbacks.length; i++) {
|
|
270
|
+
if (id === this._distanceCallbacks[i].id) {
|
|
271
|
+
this._distanceCallbacks.splice(i, 1);
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
|
|
256
278
|
/**
|
|
257
279
|
* Adds picking rendering callback function.
|
|
258
280
|
* @param {object} sender - Callback context.
|
|
@@ -293,10 +315,8 @@ class Renderer {
|
|
|
293
315
|
*/
|
|
294
316
|
assignPickingColor(obj) {
|
|
295
317
|
if (!obj._pickingColor || obj._pickingColor.isZero()) {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
b = 0;
|
|
299
|
-
var str = "0_0_0";
|
|
318
|
+
let r = 0, g = 0, b = 0;
|
|
319
|
+
let str = "0_0_0";
|
|
300
320
|
while (!(r || g || b) || this.colorObjects[str]) {
|
|
301
321
|
r = randomi(1, 255);
|
|
302
322
|
g = randomi(1, 255);
|
|
@@ -425,9 +445,19 @@ class Renderer {
|
|
|
425
445
|
|
|
426
446
|
this.pickingFramebuffer = new Framebuffer(this.handler, {
|
|
427
447
|
width: 640,
|
|
428
|
-
height: 480
|
|
448
|
+
height: 480,
|
|
449
|
+
depthComponent: "DEPTH_STENCIL",
|
|
450
|
+
renderbufferTarget: "DEPTH_STENCIL_ATTACHMENT"
|
|
451
|
+
}).init();
|
|
452
|
+
|
|
453
|
+
this._tempPickingPix_ = new Uint8Array(this.pickingFramebuffer.width * this.pickingFramebuffer.height * 4);
|
|
454
|
+
|
|
455
|
+
this.distanceFramebuffer = new Framebuffer(this.handler, {
|
|
456
|
+
width: 320, height: 240
|
|
429
457
|
}).init();
|
|
430
458
|
|
|
459
|
+
this._tempDistancePix_ = new Uint8Array(this.distanceFramebuffer.width * this.distanceFramebuffer.height * 4);
|
|
460
|
+
|
|
431
461
|
this.depthFramebuffer = new Framebuffer(this.handler, {
|
|
432
462
|
size: 2,
|
|
433
463
|
internalFormat: ["RGBA", "DEPTH_COMPONENT24"],
|
|
@@ -450,6 +480,7 @@ class Renderer {
|
|
|
450
480
|
this.screenTexture = {
|
|
451
481
|
screen: this.sceneFramebuffer.textures[0],
|
|
452
482
|
picking: this.pickingFramebuffer.textures[0],
|
|
483
|
+
distance: this.distanceFramebuffer.textures[0],
|
|
453
484
|
depth: this.screenDepthFramebuffer.textures[0]
|
|
454
485
|
};
|
|
455
486
|
} else {
|
|
@@ -488,11 +519,14 @@ class Renderer {
|
|
|
488
519
|
this.screenTexture = {
|
|
489
520
|
screen: this.toneMappingFramebuffer.textures[0],
|
|
490
521
|
picking: this.pickingFramebuffer.textures[0],
|
|
522
|
+
distance: this.distanceFramebuffer.textures[0],
|
|
491
523
|
depth: this.screenDepthFramebuffer.textures[0],
|
|
492
524
|
frustum: this.depthFramebuffer.textures[0]
|
|
493
525
|
};
|
|
494
526
|
}
|
|
495
527
|
|
|
528
|
+
this.handler.addProgram(pickingMask());
|
|
529
|
+
|
|
496
530
|
this.handler.ONCANVASRESIZE = () => {
|
|
497
531
|
this._resizeStart();
|
|
498
532
|
this.events.dispatch(this.events.resize, this.handler.canvas);
|
|
@@ -518,6 +552,8 @@ class Renderer {
|
|
|
518
552
|
this.outputTexture = this.screenTexture.screen;
|
|
519
553
|
|
|
520
554
|
this.fontAtlas.initFont("arial", arial.data, arial.image);
|
|
555
|
+
|
|
556
|
+
this._pickingMaskCoordinatesBuffer = this.handler.createArrayBuffer(new Float32Array([0, 0]), 2, 1);
|
|
521
557
|
}
|
|
522
558
|
|
|
523
559
|
resize() {
|
|
@@ -553,11 +589,13 @@ class Renderer {
|
|
|
553
589
|
if (this.handler.gl.type === "webgl") {
|
|
554
590
|
this.screenTexture.screen = this.sceneFramebuffer.textures[0];
|
|
555
591
|
this.screenTexture.picking = this.pickingFramebuffer.textures[0];
|
|
592
|
+
this.screenTexture.distance = this.distanceFramebuffer.textures[0];
|
|
556
593
|
this.screenTexture.depth = this.screenDepthFramebuffer.textures[0];
|
|
557
594
|
this.screenTexture.frustum = this.depthFramebuffer.textures[0];
|
|
558
595
|
} else {
|
|
559
596
|
this.screenTexture.screen = this.toneMappingFramebuffer.textures[0];
|
|
560
597
|
this.screenTexture.picking = this.pickingFramebuffer.textures[0];
|
|
598
|
+
this.screenTexture.distance = this.distanceFramebuffer.textures[0];
|
|
561
599
|
this.screenTexture.depth = this.screenDepthFramebuffer.textures[0];
|
|
562
600
|
this.screenTexture.frustum = this.depthFramebuffer.textures[0];
|
|
563
601
|
}
|
|
@@ -646,12 +684,11 @@ class Renderer {
|
|
|
646
684
|
let ec = this._entityCollections;
|
|
647
685
|
|
|
648
686
|
if (ec.length) {
|
|
649
|
-
|
|
687
|
+
let gl = this.handler.gl;
|
|
650
688
|
|
|
651
689
|
gl.enable(gl.BLEND);
|
|
652
690
|
gl.blendEquation(gl.FUNC_ADD);
|
|
653
691
|
gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE);
|
|
654
|
-
gl.disable(gl.CULL_FACE);
|
|
655
692
|
|
|
656
693
|
// billboards pass
|
|
657
694
|
gl.activeTexture(gl.TEXTURE0);
|
|
@@ -697,8 +734,6 @@ class Renderer {
|
|
|
697
734
|
ec[i]._fadingOpacity && ec[i].polylineHandler.draw();
|
|
698
735
|
}
|
|
699
736
|
|
|
700
|
-
gl.enable(gl.CULL_FACE);
|
|
701
|
-
|
|
702
737
|
// pointClouds pass
|
|
703
738
|
i = ec.length;
|
|
704
739
|
while (i--) {
|
|
@@ -707,15 +742,6 @@ class Renderer {
|
|
|
707
742
|
}
|
|
708
743
|
}
|
|
709
744
|
|
|
710
|
-
// shapes pass
|
|
711
|
-
i = ec.length;
|
|
712
|
-
while (i--) {
|
|
713
|
-
eci = ec[i];
|
|
714
|
-
if (eci._fadingOpacity) {
|
|
715
|
-
eci.shapeHandler.draw();
|
|
716
|
-
}
|
|
717
|
-
}
|
|
718
|
-
|
|
719
745
|
// Strip pass
|
|
720
746
|
i = ec.length;
|
|
721
747
|
while (i--) {
|
|
@@ -747,10 +773,11 @@ class Renderer {
|
|
|
747
773
|
let h = this.handler,
|
|
748
774
|
gl = h.gl;
|
|
749
775
|
|
|
750
|
-
gl.blendEquation(gl.FUNC_ADD);
|
|
751
|
-
gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
|
|
752
776
|
gl.enable(gl.BLEND);
|
|
753
|
-
gl.
|
|
777
|
+
gl.blendEquation(gl.FUNC_ADD);
|
|
778
|
+
gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE);
|
|
779
|
+
|
|
780
|
+
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
754
781
|
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
755
782
|
|
|
756
783
|
e.dispatch(e.draw, this);
|
|
@@ -773,7 +800,8 @@ class Renderer {
|
|
|
773
800
|
this._drawEntityCollections();
|
|
774
801
|
|
|
775
802
|
if (pointerEvent) {
|
|
776
|
-
this._drawPickingBuffer(
|
|
803
|
+
this._drawPickingBuffer();
|
|
804
|
+
this.__useDistanceFramebuffer__ && this._drawDistanceBuffer();
|
|
777
805
|
}
|
|
778
806
|
}
|
|
779
807
|
|
|
@@ -786,7 +814,8 @@ class Renderer {
|
|
|
786
814
|
if (h.isWebGl2()) {
|
|
787
815
|
this._drawDepthBuffer();
|
|
788
816
|
}
|
|
789
|
-
this.
|
|
817
|
+
this._readPickingBuffer();
|
|
818
|
+
this.__useDistanceFramebuffer__ && this._readDistanceBuffer();
|
|
790
819
|
}
|
|
791
820
|
|
|
792
821
|
// Tone mapping followed by rendering on the screen
|
|
@@ -843,8 +872,8 @@ class Renderer {
|
|
|
843
872
|
|
|
844
873
|
_screenFrameNoMSAA() {
|
|
845
874
|
|
|
846
|
-
|
|
847
|
-
|
|
875
|
+
let h = this.handler;
|
|
876
|
+
let sh = h.programs.screenFrame,
|
|
848
877
|
p = sh._program,
|
|
849
878
|
gl = h.gl;
|
|
850
879
|
|
|
@@ -863,20 +892,53 @@ class Renderer {
|
|
|
863
892
|
* Draw picking objects framebuffer.
|
|
864
893
|
* @private
|
|
865
894
|
*/
|
|
866
|
-
_drawPickingBuffer(
|
|
895
|
+
_drawPickingBuffer() {
|
|
867
896
|
this.pickingFramebuffer.activate();
|
|
868
897
|
|
|
869
|
-
|
|
870
|
-
|
|
898
|
+
let h = this.handler;
|
|
899
|
+
let gl = h.gl;
|
|
871
900
|
|
|
872
901
|
if (this.activeCamera.isFirstPass) {
|
|
873
902
|
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
874
|
-
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
903
|
+
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
|
|
875
904
|
} else {
|
|
876
|
-
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
905
|
+
gl.clear(gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
|
|
877
906
|
}
|
|
878
907
|
|
|
879
|
-
|
|
908
|
+
//
|
|
909
|
+
// draw picking mask
|
|
910
|
+
//
|
|
911
|
+
h.programs.pickingMask.activate();
|
|
912
|
+
let sh = h.programs.pickingMask._program;
|
|
913
|
+
let shu = sh.uniforms,
|
|
914
|
+
sha = sh.attributes;
|
|
915
|
+
|
|
916
|
+
let /*ts = this.events.touchState,*/
|
|
917
|
+
ms = this.events.mouseState;
|
|
918
|
+
|
|
919
|
+
gl.disable(gl.DEPTH_TEST);
|
|
920
|
+
|
|
921
|
+
gl.enable(gl.STENCIL_TEST);
|
|
922
|
+
gl.colorMask(false, false, false, false);
|
|
923
|
+
gl.stencilFunc(gl.ALWAYS, 2, 0xFF);
|
|
924
|
+
gl.stencilOp(gl.REPLACE, gl.ZERO, gl.REPLACE);
|
|
925
|
+
|
|
926
|
+
gl.uniform2f(shu.offset, (ms.nx - 0.5) * 2, (0.5 - ms.ny) * 2);
|
|
927
|
+
|
|
928
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this._pickingMaskCoordinatesBuffer);
|
|
929
|
+
gl.vertexAttribPointer(sha.coordinates, this._pickingMaskCoordinatesBuffer.itemSize, gl.FLOAT, false, 0, 0);
|
|
930
|
+
gl.drawArrays(gl.POINTS, 0, this._pickingMaskCoordinatesBuffer.numItems);
|
|
931
|
+
|
|
932
|
+
gl.enable(gl.DEPTH_TEST);
|
|
933
|
+
|
|
934
|
+
//
|
|
935
|
+
// draw picking scenes
|
|
936
|
+
//
|
|
937
|
+
gl.colorMask(true, true, true, true);
|
|
938
|
+
gl.stencilFunc(gl.EQUAL, 2, 0xFF);
|
|
939
|
+
gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
|
|
940
|
+
|
|
941
|
+
gl.disable(gl.BLEND);
|
|
880
942
|
|
|
881
943
|
let dp = this._pickingCallbacks;
|
|
882
944
|
let i = dp.length;
|
|
@@ -888,9 +950,47 @@ class Renderer {
|
|
|
888
950
|
dp[i].callback.call(dp[i].sender);
|
|
889
951
|
}
|
|
890
952
|
|
|
953
|
+
gl.enable(gl.BLEND);
|
|
954
|
+
|
|
955
|
+
gl.disable(gl.STENCIL_TEST);
|
|
956
|
+
|
|
891
957
|
this.pickingFramebuffer.deactivate();
|
|
892
958
|
}
|
|
893
959
|
|
|
960
|
+
/**
|
|
961
|
+
* Draw picking objects framebuffer.
|
|
962
|
+
* @private
|
|
963
|
+
*/
|
|
964
|
+
_drawDistanceBuffer() {
|
|
965
|
+
this.distanceFramebuffer.activate();
|
|
966
|
+
|
|
967
|
+
let h = this.handler;
|
|
968
|
+
let gl = h.gl;
|
|
969
|
+
|
|
970
|
+
if (this.activeCamera.isFirstPass) {
|
|
971
|
+
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
972
|
+
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
973
|
+
} else {
|
|
974
|
+
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
gl.disable(gl.BLEND);
|
|
978
|
+
|
|
979
|
+
let dp = this._distanceCallbacks;
|
|
980
|
+
let i = dp.length;
|
|
981
|
+
while (i--) {
|
|
982
|
+
/**
|
|
983
|
+
* This callback renders distance frame.
|
|
984
|
+
* @callback og.Renderer~distanceCallback
|
|
985
|
+
*/
|
|
986
|
+
dp[i].callback.call(dp[i].sender);
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
gl.enable(gl.BLEND);
|
|
990
|
+
|
|
991
|
+
this.distanceFramebuffer.deactivate();
|
|
992
|
+
}
|
|
993
|
+
|
|
894
994
|
_drawDepthBuffer() {
|
|
895
995
|
this.depthFramebuffer.activate();
|
|
896
996
|
|
|
@@ -936,26 +1036,45 @@ class Renderer {
|
|
|
936
1036
|
this.screenDepthFramebuffer.deactivate();
|
|
937
1037
|
}
|
|
938
1038
|
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
1039
|
+
_readPickingBuffer() {
|
|
1040
|
+
this.pickingFramebuffer.activate();
|
|
1041
|
+
this.pickingFramebuffer.readAllPixels(this._tempPickingPix_);
|
|
1042
|
+
this.pickingFramebuffer.deactivate();
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
_readDistanceBuffer() {
|
|
1046
|
+
this.distanceFramebuffer.activate();
|
|
1047
|
+
this.distanceFramebuffer.readAllPixels(this._tempDistancePix_);
|
|
1048
|
+
this.distanceFramebuffer.deactivate();
|
|
1049
|
+
}
|
|
942
1050
|
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
this._prevPickingColor[2] = this._currPickingColor[2];
|
|
1051
|
+
readPickingColor(x, y, outColor) {
|
|
1052
|
+
let w = this.pickingFramebuffer.width;
|
|
1053
|
+
let h = this.pickingFramebuffer.height;
|
|
947
1054
|
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
1055
|
+
x = Math.round(x * w);
|
|
1056
|
+
y = Math.round(y * h);
|
|
1057
|
+
|
|
1058
|
+
let ind = (y * w + x) * 4;
|
|
1059
|
+
|
|
1060
|
+
outColor[0] = this._tempPickingPix_[ind];
|
|
1061
|
+
outColor[1] = this._tempPickingPix_[ind + 1];
|
|
1062
|
+
outColor[2] = this._tempPickingPix_[ind + 2];
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
readDistanceColor(x, y, outColor) {
|
|
1066
|
+
|
|
1067
|
+
let w = this.distanceFramebuffer.width;
|
|
1068
|
+
let h = this.distanceFramebuffer.height;
|
|
1069
|
+
|
|
1070
|
+
x = Math.round(x * w);
|
|
1071
|
+
y = Math.round(y * h);
|
|
1072
|
+
|
|
1073
|
+
let ind = (y * w + x) * 4;
|
|
1074
|
+
|
|
1075
|
+
outColor[0] = this._tempDistancePix_[ind];
|
|
1076
|
+
outColor[1] = this._tempDistancePix_[ind + 1];
|
|
1077
|
+
outColor[2] = this._tempDistancePix_[ind + 2];
|
|
959
1078
|
}
|
|
960
1079
|
|
|
961
1080
|
/**
|
|
@@ -16,6 +16,20 @@ const LB_M = 0b0001;
|
|
|
16
16
|
const RB_M = 0b0010;
|
|
17
17
|
const MB_M = 0b0100;
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Stores current picking rgb color.
|
|
21
|
+
* @private
|
|
22
|
+
* @type {Array.<number>} - (exactly 3 entries)
|
|
23
|
+
*/
|
|
24
|
+
let _currPickingColor = new Uint8Array(4);
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Stores previous picked rgb color.
|
|
28
|
+
* @private
|
|
29
|
+
* @type {Array.<number>} - (exactly 3 entries)
|
|
30
|
+
*/
|
|
31
|
+
let _prevPickingColor = new Uint8Array(4);
|
|
32
|
+
|
|
19
33
|
/**
|
|
20
34
|
* Renderer events handler.
|
|
21
35
|
* @class
|
|
@@ -231,10 +245,11 @@ class RendererEvents extends Events {
|
|
|
231
245
|
this.touchState.x,
|
|
232
246
|
this.touchState.y
|
|
233
247
|
);
|
|
234
|
-
|
|
248
|
+
|
|
235
249
|
this._keyboardHandler.handleEvents();
|
|
236
250
|
this.handleMouseEvents();
|
|
237
251
|
this.handleTouchEvents();
|
|
252
|
+
this.entityPickingEvents();
|
|
238
253
|
}
|
|
239
254
|
}
|
|
240
255
|
|
|
@@ -591,27 +606,37 @@ class RendererEvents extends Events {
|
|
|
591
606
|
* @private
|
|
592
607
|
*/
|
|
593
608
|
entityPickingEvents() {
|
|
594
|
-
|
|
609
|
+
let ts = this.touchState,
|
|
595
610
|
ms = this.mouseState;
|
|
596
611
|
|
|
597
612
|
if (!(ms.leftButtonHold || ms.rightButtonHold || ms.middleButtonHold)) {
|
|
598
|
-
var r = this.renderer;
|
|
599
613
|
|
|
600
|
-
|
|
614
|
+
let r = this.renderer;
|
|
615
|
+
let o = r.colorObjects;
|
|
616
|
+
let c = _currPickingColor,
|
|
617
|
+
p = _prevPickingColor;
|
|
601
618
|
|
|
602
|
-
|
|
603
|
-
|
|
619
|
+
p[0] = c[0];
|
|
620
|
+
p[1] = c[1];
|
|
621
|
+
p[2] = c[2];
|
|
622
|
+
|
|
623
|
+
if (ts.x || ts.y) {
|
|
624
|
+
r.readPickingColor(ts.nx, 1 - ts.ny, c);
|
|
625
|
+
} else {
|
|
626
|
+
r.readPickingColor(ms.nx, 1 - ms.ny, c);
|
|
627
|
+
}
|
|
604
628
|
|
|
605
629
|
ms.pickingObject = null;
|
|
606
630
|
ts.pickingObject = null;
|
|
607
631
|
|
|
608
|
-
|
|
632
|
+
let co = o && o[c[0] + "_" + c[1] + "_" + c[2]];
|
|
609
633
|
|
|
610
634
|
ms.pickingObject = co;
|
|
611
635
|
ts.pickingObject = co;
|
|
612
636
|
|
|
613
637
|
//object changed
|
|
614
638
|
if (c[0] != p[0] || c[1] != p[1] || c[2] != p[2]) {
|
|
639
|
+
|
|
615
640
|
//current black
|
|
616
641
|
if (!(c[0] || c[1] || c[2])) {
|
|
617
642
|
let po = o[p[0] + "_" + p[1] + "_" + p[2]];
|
|
@@ -638,7 +663,7 @@ class RendererEvents extends Events {
|
|
|
638
663
|
}
|
|
639
664
|
|
|
640
665
|
if (co) {
|
|
641
|
-
|
|
666
|
+
let ce = co.rendererEvents;
|
|
642
667
|
ms.pickingObject = co;
|
|
643
668
|
ce && ce.dispatch(ce.mouseenter, ms);
|
|
644
669
|
ts.pickingObject = co;
|
|
@@ -833,11 +858,11 @@ class RendererEvents extends Events {
|
|
|
833
858
|
var r = this.renderer;
|
|
834
859
|
|
|
835
860
|
r.pickingFramebuffer.activate();
|
|
836
|
-
r.pickingFramebuffer.readPixels(
|
|
861
|
+
r.pickingFramebuffer.readPixels(_currPickingColor, ts.nx, 1.0 - ts.ny, 1);
|
|
837
862
|
r.pickingFramebuffer.deactivate();
|
|
838
863
|
|
|
839
864
|
var o = r.colorObjects;
|
|
840
|
-
var c =
|
|
865
|
+
var c = _currPickingColor;
|
|
841
866
|
var co = o[c[0] + "_" + c[1] + "_" + c[2]];
|
|
842
867
|
tpo = ts.pickingObject = co;
|
|
843
868
|
if (tpo) {
|
package/src/og/scene/Axes.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
'use strict';
|
|
6
6
|
|
|
7
|
-
import { RenderNode } from './RenderNode.js';
|
|
8
7
|
import { Program } from '../webgl/Program.js';
|
|
8
|
+
import { RenderNode } from './RenderNode.js';
|
|
9
9
|
|
|
10
10
|
class Axes extends RenderNode {
|
|
11
11
|
constructor(size) {
|
|
@@ -75,4 +75,4 @@ class Axes extends RenderNode {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
export { Axes };
|
|
78
|
+
export { Axes };
|