@openglobus/og 0.11.6 → 0.11.7
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/package.json +11 -11
- package/src/og/Globe.js +8 -5
- package/src/og/Popup.js +3 -2
- package/src/og/camera/PlanetCamera.js +9 -4
- package/src/og/control/Lighting.js +33 -2
- 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/Label.js +44 -47
- package/src/og/entity/LabelHandler.js +25 -25
- package/src/og/entity/LabelWorker.js +21 -16
- package/src/og/layer/Layer.js +28 -15
- package/src/og/layer/Material.js +1 -1
- package/src/og/quadTree/Node.js +16 -30
- package/src/og/renderer/Renderer.js +19 -29
- package/src/og/renderer/RendererEvents.js +41 -21
- package/src/og/scene/Planet.js +11 -28
- package/src/og/shaders/drawnode.js +135 -142
- package/src/og/shaders/toneMapping.js +1 -0
- package/src/og/shapes/BaseShape.js +1 -1
- package/src/og/utils/FontAtlas.js +6 -2
- 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 +152 -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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openglobus/og",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.7",
|
|
4
4
|
"description": "[OpenGlobus](http://www.openglobus.org/) is a javascript library designed to display interactive 3d maps and planets with map tiles, imagery and vector data, markers and 3d objects. It uses the WebGL technology, open source and completely free.",
|
|
5
5
|
"directories": {
|
|
6
6
|
"example": "./sandbox"
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"test": "jest --env=jsdom",
|
|
18
18
|
"test_watch": "jest --env=jsdom --watch",
|
|
19
19
|
"lint": "eslint src/og",
|
|
20
|
-
"generate_types": "rm -rf types; tsc src/**/*.js --declaration --allowJs --emitDeclarationOnly --outDir types
|
|
20
|
+
"generate_types": "rm -rf types; tsc src/**/*.js --declaration --allowJs --emitDeclarationOnly --outDir types",
|
|
21
21
|
"compile_js_as_ts": "tsc src/og/index.js --AllowJs --checkJs --outDir dist/@openglobus/src/"
|
|
22
22
|
},
|
|
23
23
|
"repository": {
|
|
@@ -43,24 +43,24 @@
|
|
|
43
43
|
"./css/og.css": "./css/og.css"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@babel/preset-env": "^7.16.
|
|
46
|
+
"@babel/preset-env": "^7.16.4",
|
|
47
47
|
"@rollup/plugin-json": "^4.1.0",
|
|
48
|
-
"@types/jest": "^27.0.
|
|
49
|
-
"eslint": "^8.
|
|
48
|
+
"@types/jest": "^27.0.3",
|
|
49
|
+
"eslint": "^8.3.0",
|
|
50
50
|
"jaguarjs-jsdoc": "^1.1.0",
|
|
51
51
|
"jest": "^27.3.1",
|
|
52
52
|
"jest-canvas-mock": "^2.3.1",
|
|
53
53
|
"jest-webgl-canvas-mock": "^0.2.3",
|
|
54
54
|
"jsdoc": "^3.6.7",
|
|
55
|
-
"lint-staged": "^
|
|
55
|
+
"lint-staged": "^12.1.2",
|
|
56
56
|
"local-web-server": "^5.1.1",
|
|
57
57
|
"msdf-bmfont-xml": "^2.5.4",
|
|
58
|
-
"postcss": "^8.
|
|
59
|
-
"prettier": "^2.
|
|
60
|
-
"rollup": "^2.60.
|
|
61
|
-
"rollup-plugin-postcss": "^4.0.
|
|
58
|
+
"postcss": "^8.4.1",
|
|
59
|
+
"prettier": "^2.5.0",
|
|
60
|
+
"rollup": "^2.60.1",
|
|
61
|
+
"rollup-plugin-postcss": "^4.0.2",
|
|
62
62
|
"rollup-plugin-terser": "^7.0.2",
|
|
63
|
-
"typescript": "^4.
|
|
63
|
+
"typescript": "^4.5.2"
|
|
64
64
|
},
|
|
65
65
|
"lint-staged": {
|
|
66
66
|
"*.{js,ts}": [
|
package/src/og/Globe.js
CHANGED
|
@@ -16,7 +16,7 @@ import { Renderer } from "./renderer/Renderer.js";
|
|
|
16
16
|
import { Planet } from "./scene/Planet.js";
|
|
17
17
|
import { EmptyTerrain } from "./terrain/EmptyTerrain.js";
|
|
18
18
|
import { isEmpty } from "./utils/shared.js";
|
|
19
|
-
import { Handler } from "./webgl/Handler.js";
|
|
19
|
+
import { Handler } from "./webgl/Handler.js";
|
|
20
20
|
|
|
21
21
|
/** @const {string} */
|
|
22
22
|
const CANVAS_ID_PREFIX = "globus_viewport_";
|
|
@@ -60,8 +60,10 @@ const PLANET_NAME_PREFIX = "globus_planet_";
|
|
|
60
60
|
* @param {DOMElement} [options.attributionContainer] - Container for attribution list.
|
|
61
61
|
* @param {Number} [options.maxGridSize] = Maximal segment grid size. 128 is default
|
|
62
62
|
* @param {boolean} [options.useSpecularTexture] - use specular water mask
|
|
63
|
-
* @param {boolean} [options.useNightTexture] - show night cities
|
|
64
|
-
* @param {Number} [options.
|
|
63
|
+
* @param {boolean} [options.useNightTexture] - show night cities
|
|
64
|
+
* @param {Number} [options.maxAltitude=15000000.0] - Maximal camera altitude above terrain
|
|
65
|
+
* @param {Number} [options.minAltitude=1.0] - Minimal camera altitude above terrain
|
|
66
|
+
* @param {Number} [options.maxEqualZoomAltitude=15000000.0] - Maximal altitude since segments on the screen bacame the same zoom level
|
|
65
67
|
* @param {Number} [options.minEqualZoomAltitude=10000.0] - Minimal altitude since segments on the screen bacame the same zoom level
|
|
66
68
|
* @param {Number} [options.minEqualZoomCameraSlope=0.8] - Minimal camera slope above te globe where segments on the screen bacame the same zoom level
|
|
67
69
|
*/
|
|
@@ -117,7 +119,8 @@ class Globe {
|
|
|
117
119
|
* @type {Renderer}
|
|
118
120
|
*/
|
|
119
121
|
this.renderer = new Renderer(
|
|
120
|
-
new Handler(_canvasId, {
|
|
122
|
+
new Handler(_canvasId, {
|
|
123
|
+
pixelRatio: window.devicePixelRatio,
|
|
121
124
|
context: {
|
|
122
125
|
alpha: false,
|
|
123
126
|
antialias: false,
|
|
@@ -165,7 +168,7 @@ class Globe {
|
|
|
165
168
|
useNightTexture: options.useNightTexture,
|
|
166
169
|
useSpecularTexture: options.useSpecularTexture,
|
|
167
170
|
minAltitude: options.minAltitude,
|
|
168
|
-
maxAltitude: options.maxAltitude,
|
|
171
|
+
maxAltitude: options.maxAltitude || 15000000,
|
|
169
172
|
maxEqualZoomAltitude: options.maxEqualZoomAltitude,
|
|
170
173
|
minEqualZoomAltitude: options.minEqualZoomAltitude,
|
|
171
174
|
minEqualZoomCameraSlope: options.minEqualZoomCameraSlope
|
package/src/og/Popup.js
CHANGED
|
@@ -74,11 +74,12 @@ class Popup {
|
|
|
74
74
|
|
|
75
75
|
setScreen(p) {
|
|
76
76
|
if (this._planet) {
|
|
77
|
+
let r = this._planet.renderer.handler.pixelRatio;
|
|
77
78
|
this.el.style.transform =
|
|
78
79
|
"translate(" +
|
|
79
|
-
(p.x - this.clientWidth * 0.5) +
|
|
80
|
+
(p.x / r - this.clientWidth * 0.5) +
|
|
80
81
|
"px, " +
|
|
81
|
-
(p.y - this._planet.renderer.handler.canvas.
|
|
82
|
+
(p.y / r - this._planet.renderer.handler.canvas.clientHeight - this._tipEl.clientHeight) +
|
|
82
83
|
"px)";
|
|
83
84
|
}
|
|
84
85
|
}
|
|
@@ -41,7 +41,7 @@ class PlanetCamera extends Camera {
|
|
|
41
41
|
Object.assign(
|
|
42
42
|
{},
|
|
43
43
|
{
|
|
44
|
-
frustums: /*[[100, 10000000]]*/
|
|
44
|
+
frustums: /*[[100, 10000000]]*/[
|
|
45
45
|
[1, 100 + 0.075],
|
|
46
46
|
[100, 1000 + 0.075],
|
|
47
47
|
[1000, 1e6 + 10000],
|
|
@@ -636,15 +636,20 @@ class PlanetCamera extends Camera {
|
|
|
636
636
|
getHeading() {
|
|
637
637
|
let u = this.eye.normal();
|
|
638
638
|
let f = Vec3.proj_b_to_plane(
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
639
|
+
this.slope >= 0.97 ? this.getUp() : this.getForward(),
|
|
640
|
+
u
|
|
641
|
+
).normalize(),
|
|
642
642
|
n = Vec3.proj_b_to_plane(Vec3.UP, u).normalize();
|
|
643
643
|
let res = Math.sign(u.dot(f.cross(n))) * Math.acos(f.dot(n)) * math.DEGREES;
|
|
644
644
|
if (res < 0.0) {
|
|
645
645
|
return 360.0 + res;
|
|
646
646
|
}
|
|
647
647
|
return res;
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
isVisible(poi) {
|
|
651
|
+
let e = this.eye.length();
|
|
652
|
+
return this.eye.distance(poi) < Math.sqrt(e * e - this.planet.ellipsoid._a2);
|
|
648
653
|
}
|
|
649
654
|
}
|
|
650
655
|
|
|
@@ -10,6 +10,11 @@ import { parseHTML } from "../utils/shared.js";
|
|
|
10
10
|
const TEMPLATE = `<div class="og-lighing">
|
|
11
11
|
|
|
12
12
|
<div class="og-screen-options">
|
|
13
|
+
|
|
14
|
+
<div class="og-option">
|
|
15
|
+
<div class="og-caption">Lighting enabled<input type="checkbox" id="lighting" name="light"/></div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
13
18
|
<div class="og-option">
|
|
14
19
|
<div class="og-caption">Gamma</div>
|
|
15
20
|
<div class="og-slider">
|
|
@@ -32,6 +37,14 @@ const TEMPLATE = `<div class="og-lighing">
|
|
|
32
37
|
</div>
|
|
33
38
|
|
|
34
39
|
<div class="og-color-options">
|
|
40
|
+
<div class="og-caption">Opacity</div>
|
|
41
|
+
<div class="og-option">
|
|
42
|
+
<div class="og-label">A</div>
|
|
43
|
+
<div class="og-slider">
|
|
44
|
+
<input type="range" id="opacity" name="opacity" value="0.0" min="0.0" max="2.0" step="0.01" />
|
|
45
|
+
</div>
|
|
46
|
+
<div class="og-value opacity"></div>
|
|
47
|
+
</div>
|
|
35
48
|
<div class="og-caption">Ambient</div>
|
|
36
49
|
<div class="og-option">
|
|
37
50
|
<div class="og-label">R</div>
|
|
@@ -128,6 +141,8 @@ class Lighting extends Control {
|
|
|
128
141
|
bindLayer(layer) {
|
|
129
142
|
this._selectedLayer = layer;
|
|
130
143
|
|
|
144
|
+
document.getElementById("opacity").value = layer.opacity;
|
|
145
|
+
|
|
131
146
|
document.getElementById("ambient-r").value = layer.ambient.x;
|
|
132
147
|
document.getElementById("ambient-g").value = layer.ambient.y;
|
|
133
148
|
document.getElementById("ambient-b").value = layer.ambient.z;
|
|
@@ -142,6 +157,8 @@ class Lighting extends Control {
|
|
|
142
157
|
|
|
143
158
|
document.getElementById("shininess").value = layer.shininess;
|
|
144
159
|
|
|
160
|
+
document.querySelector(".og-value.opacity").innerHTML = layer.opacity.toString();
|
|
161
|
+
|
|
145
162
|
document.querySelector(".og-value.ambient-r").innerHTML = layer.ambient.x.toString();
|
|
146
163
|
document.querySelector(".og-value.ambient-g").innerHTML = layer.ambient.y.toString();
|
|
147
164
|
document.querySelector(".og-value.ambient-b").innerHTML = layer.ambient.z.toString();
|
|
@@ -163,8 +180,15 @@ class Lighting extends Control {
|
|
|
163
180
|
|
|
164
181
|
var _this = this;
|
|
165
182
|
|
|
183
|
+
document.getElementById("lighting").checked = this.planet.lightEnabled;
|
|
184
|
+
|
|
185
|
+
document.getElementById("lighting").addEventListener("change", (e) => {
|
|
186
|
+
_this.planet.lightEnabled = e.target.checked;
|
|
187
|
+
});
|
|
188
|
+
|
|
166
189
|
document.getElementById("layers").addEventListener("change", (e) => {
|
|
167
|
-
this._selectedLayer = _this.planet.getLayerByName(e.target.value);
|
|
190
|
+
//this._selectedLayer = _this.planet.getLayerByName(e.target.value);
|
|
191
|
+
this.bindLayer(_this.planet.getLayerByName(e.target.value));
|
|
168
192
|
});
|
|
169
193
|
|
|
170
194
|
document.getElementById("gamma").addEventListener("input", function (e) {
|
|
@@ -183,6 +207,13 @@ class Lighting extends Control {
|
|
|
183
207
|
document.getElementById("gamma").value = this.planet.renderer.gamma;
|
|
184
208
|
document.getElementById("exposure").value = this.planet.renderer.exposure;
|
|
185
209
|
|
|
210
|
+
document.getElementById("opacity").addEventListener("input", function (e) {
|
|
211
|
+
if (_this._selectedLayer) {
|
|
212
|
+
_this._selectedLayer.opacity = Number(this.value);
|
|
213
|
+
}
|
|
214
|
+
document.querySelector(".og-value.opacity").innerHTML = this.value;
|
|
215
|
+
});
|
|
216
|
+
|
|
186
217
|
document.getElementById("ambient-r").addEventListener("input", function (e) {
|
|
187
218
|
if (_this._selectedLayer) {
|
|
188
219
|
_this._selectedLayer.ambient.x = Number(this.value);
|
|
@@ -272,7 +303,7 @@ class Lighting extends Control {
|
|
|
272
303
|
document.getElementById("layers").value = e.name;
|
|
273
304
|
}
|
|
274
305
|
|
|
275
|
-
_onLayerRemove(e) {}
|
|
306
|
+
_onLayerRemove(e) { }
|
|
276
307
|
}
|
|
277
308
|
|
|
278
309
|
export function lighting(options) {
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
import * as utils from "../utils/shared.js";
|
|
8
8
|
import { Vec3 } from "../math/Vec3.js";
|
|
9
|
+
import { LOCK_FREE, LOCK_UPDATE } from "./LabelWorker.js";
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* Base prototype for billboard and label classes.
|
|
@@ -97,16 +98,16 @@ class BaseBillboard {
|
|
|
97
98
|
* @protected
|
|
98
99
|
* @type {number}
|
|
99
100
|
*/
|
|
100
|
-
this._handlerIndex = -1;
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* An indication that the object is ready to draw
|
|
104
|
-
* @protected
|
|
105
|
-
* @type {number}
|
|
106
|
-
*/
|
|
107
|
-
this._isReady = false;
|
|
108
|
-
|
|
109
|
-
this._lockId =
|
|
101
|
+
this._handlerIndex = -1;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* An indication that the object is ready to draw
|
|
105
|
+
* @protected
|
|
106
|
+
* @type {number}
|
|
107
|
+
*/
|
|
108
|
+
this._isReady = false;
|
|
109
|
+
|
|
110
|
+
this._lockId = LOCK_FREE;
|
|
110
111
|
}
|
|
111
112
|
|
|
112
113
|
static get _staticCounter() {
|
|
@@ -132,10 +133,10 @@ class BaseBillboard {
|
|
|
132
133
|
this._position.y = y;
|
|
133
134
|
this._position.z = z;
|
|
134
135
|
Vec3.doubleToTwoFloats(this._position, this._positionHigh, this._positionLow);
|
|
135
|
-
if (this._isReady) {
|
|
136
|
-
this._handler.setPositionArr(this._handlerIndex, this._positionHigh, this._positionLow);
|
|
137
|
-
} else if (this._lockId !==
|
|
138
|
-
this._lockId =
|
|
136
|
+
if (this._isReady) {
|
|
137
|
+
this._handler.setPositionArr(this._handlerIndex, this._positionHigh, this._positionLow);
|
|
138
|
+
} else if (this._lockId !== LOCK_FREE) {
|
|
139
|
+
this._lockId = LOCK_UPDATE;
|
|
139
140
|
}
|
|
140
141
|
}
|
|
141
142
|
|
|
@@ -149,10 +150,10 @@ class BaseBillboard {
|
|
|
149
150
|
this._position.y = position.y;
|
|
150
151
|
this._position.z = position.z;
|
|
151
152
|
Vec3.doubleToTwoFloats(position, this._positionHigh, this._positionLow);
|
|
152
|
-
if (this._isReady) {
|
|
153
|
-
this._handler.setPositionArr(this._handlerIndex, this._positionHigh, this._positionLow);
|
|
154
|
-
} else if (this._lockId !==
|
|
155
|
-
this._lockId =
|
|
153
|
+
if (this._isReady) {
|
|
154
|
+
this._handler.setPositionArr(this._handlerIndex, this._positionHigh, this._positionLow);
|
|
155
|
+
} else if (this._lockId !== LOCK_FREE) {
|
|
156
|
+
this._lockId = LOCK_UPDATE;
|
|
156
157
|
}
|
|
157
158
|
}
|
|
158
159
|
|
|
@@ -176,10 +177,10 @@ class BaseBillboard {
|
|
|
176
177
|
this._offset.x = x;
|
|
177
178
|
this._offset.y = y;
|
|
178
179
|
z != undefined && (this._offset.z = z);
|
|
179
|
-
if (this._isReady) {
|
|
180
|
-
this._handler.setOffsetArr(this._handlerIndex, this._offset);
|
|
181
|
-
} else if (this._lockId !==
|
|
182
|
-
this._lockId =
|
|
180
|
+
if (this._isReady) {
|
|
181
|
+
this._handler.setOffsetArr(this._handlerIndex, this._offset);
|
|
182
|
+
} else if (this._lockId !== LOCK_FREE) {
|
|
183
|
+
this._lockId = LOCK_UPDATE;
|
|
183
184
|
}
|
|
184
185
|
}
|
|
185
186
|
|
|
@@ -189,14 +190,7 @@ class BaseBillboard {
|
|
|
189
190
|
* @param {Vec2} offset - Offset size.
|
|
190
191
|
*/
|
|
191
192
|
setOffset3v(offset) {
|
|
192
|
-
this.
|
|
193
|
-
this._offset.y = offset.y;
|
|
194
|
-
offset.z != undefined && (this._offset.z = offset.z);
|
|
195
|
-
if (this._isReady) {
|
|
196
|
-
this._handler.setOffsetArr(this._handlerIndex, offset);
|
|
197
|
-
} else if (this._lockId !== -1) {
|
|
198
|
-
this._lockId = -2;
|
|
199
|
-
}
|
|
193
|
+
this.setOffset(offset.x, offset.y, offset.z);
|
|
200
194
|
}
|
|
201
195
|
|
|
202
196
|
/**
|
|
@@ -214,11 +208,13 @@ class BaseBillboard {
|
|
|
214
208
|
* @param {number} rotation - Screen space rotation in radians.
|
|
215
209
|
*/
|
|
216
210
|
setRotation(rotation) {
|
|
217
|
-
this._rotation
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
this._lockId
|
|
211
|
+
if (rotation !== this._rotation) {
|
|
212
|
+
this._rotation = rotation;
|
|
213
|
+
if (this._isReady) {
|
|
214
|
+
this._handler.setRotationArr(this._handlerIndex, rotation);
|
|
215
|
+
} else if (this._lockId !== LOCK_FREE) {
|
|
216
|
+
this._lockId = LOCK_UPDATE;
|
|
217
|
+
}
|
|
222
218
|
}
|
|
223
219
|
}
|
|
224
220
|
|
|
@@ -237,8 +233,14 @@ class BaseBillboard {
|
|
|
237
233
|
* @param {number} a - Billboard opacity.
|
|
238
234
|
*/
|
|
239
235
|
setOpacity(a) {
|
|
240
|
-
this._color.w
|
|
241
|
-
|
|
236
|
+
if (a !== this._color.w) {
|
|
237
|
+
a != undefined && (this._color.w = a);
|
|
238
|
+
if (this._isReady) {
|
|
239
|
+
this._handler.setRgbaArr(this._handlerIndex, this._color);
|
|
240
|
+
} else if (this._lockId !== LOCK_FREE) {
|
|
241
|
+
this._lockId = LOCK_UPDATE;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
242
244
|
}
|
|
243
245
|
|
|
244
246
|
/**
|
|
@@ -250,14 +252,16 @@ class BaseBillboard {
|
|
|
250
252
|
* @param {number} a - Alpha.
|
|
251
253
|
*/
|
|
252
254
|
setColor(r, g, b, a) {
|
|
253
|
-
this._color.x
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
this._lockId
|
|
255
|
+
if (a !== this._color.w || r !== this._color.x || g !== this._color.y || this._color.z !== b) {
|
|
256
|
+
this._color.x = r;
|
|
257
|
+
this._color.y = g;
|
|
258
|
+
this._color.z = b;
|
|
259
|
+
a != undefined && (this._color.w = a);
|
|
260
|
+
if (this._isReady) {
|
|
261
|
+
this._handler.setRgbaArr(this._handlerIndex, this._color);
|
|
262
|
+
} else if (this._lockId !== LOCK_FREE) {
|
|
263
|
+
this._lockId = LOCK_UPDATE;
|
|
264
|
+
}
|
|
261
265
|
}
|
|
262
266
|
}
|
|
263
267
|
|
|
@@ -267,15 +271,7 @@ class BaseBillboard {
|
|
|
267
271
|
* @param {Vec4} color - RGBA vector.
|
|
268
272
|
*/
|
|
269
273
|
setColor4v(color) {
|
|
270
|
-
this.
|
|
271
|
-
this._color.y = color.y;
|
|
272
|
-
this._color.z = color.z;
|
|
273
|
-
color.w != undefined && (this._color.w = color.w);
|
|
274
|
-
if (this._isReady) {
|
|
275
|
-
this._handler.setRgbaArr(this._handlerIndex, color);
|
|
276
|
-
} else if (this._lockId !== -1) {
|
|
277
|
-
this._lockId = -2;
|
|
278
|
-
}
|
|
274
|
+
this.setColor(color.x, color.y, color.z, color.w);
|
|
279
275
|
}
|
|
280
276
|
|
|
281
277
|
/**
|
|
@@ -302,11 +298,13 @@ class BaseBillboard {
|
|
|
302
298
|
* @param {boolean} visibility - Visibility flag.
|
|
303
299
|
*/
|
|
304
300
|
setVisibility(visibility) {
|
|
305
|
-
this._visibility
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
this._lockId
|
|
301
|
+
if (visibility !== this._visibility) {
|
|
302
|
+
this._visibility = visibility;
|
|
303
|
+
if (this._isReady) {
|
|
304
|
+
this._handler.setVisibility(this._handlerIndex, visibility);
|
|
305
|
+
} else if (this._lockId !== LOCK_FREE) {
|
|
306
|
+
this._lockId = LOCK_UPDATE;
|
|
307
|
+
}
|
|
310
308
|
}
|
|
311
309
|
}
|
|
312
310
|
|
|
@@ -330,10 +328,10 @@ class BaseBillboard {
|
|
|
330
328
|
this._alignedAxis.x = x;
|
|
331
329
|
this._alignedAxis.y = y;
|
|
332
330
|
this._alignedAxis.z = z;
|
|
333
|
-
if (this._isReady) {
|
|
334
|
-
this._handler.setAlignedAxisArr(this._handlerIndex, this._alignedAxis);
|
|
335
|
-
} else if (this._lockId !==
|
|
336
|
-
this._lockId =
|
|
331
|
+
if (this._isReady) {
|
|
332
|
+
this._handler.setAlignedAxisArr(this._handlerIndex, this._alignedAxis);
|
|
333
|
+
} else if (this._lockId !== LOCK_FREE) {
|
|
334
|
+
this._lockId = LOCK_UPDATE;
|
|
337
335
|
}
|
|
338
336
|
}
|
|
339
337
|
|
|
@@ -343,14 +341,7 @@ class BaseBillboard {
|
|
|
343
341
|
* @param {math.Vecto3} alignedAxis - Vector to align.
|
|
344
342
|
*/
|
|
345
343
|
setAlignedAxis3v(alignedAxis) {
|
|
346
|
-
this.
|
|
347
|
-
this._alignedAxis.y = alignedAxis.y;
|
|
348
|
-
this._alignedAxis.z = alignedAxis.z;
|
|
349
|
-
if (this._isReady) {
|
|
350
|
-
this._handler.setAlignedAxisArr(this._handlerIndex, alignedAxis);
|
|
351
|
-
} else if (this._lockId !== -1) {
|
|
352
|
-
this._lockId = -2;
|
|
353
|
-
}
|
|
344
|
+
this.setAlignedAxis(alignedAxis.x, alignedAxis.y, alignedAxis.z);
|
|
354
345
|
}
|
|
355
346
|
|
|
356
347
|
/**
|
|
@@ -377,12 +368,12 @@ class BaseBillboard {
|
|
|
377
368
|
* @param {Vec3} color - Picking color.
|
|
378
369
|
*/
|
|
379
370
|
setPickingColor3v(color) {
|
|
380
|
-
if (this._isReady) {
|
|
381
|
-
this._handler.setPickingColorArr(this._handlerIndex, color);
|
|
382
|
-
} else if (this._lockId !==
|
|
383
|
-
this._lockId =
|
|
371
|
+
if (this._isReady) {
|
|
372
|
+
this._handler.setPickingColorArr(this._handlerIndex, color);
|
|
373
|
+
} else if (this._lockId !== LOCK_FREE) {
|
|
374
|
+
this._lockId = LOCK_UPDATE;
|
|
384
375
|
}
|
|
385
376
|
}
|
|
386
377
|
}
|
|
387
378
|
|
|
388
|
-
export { BaseBillboard };
|
|
379
|
+
export { BaseBillboard };
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
import * as shaders from "../shaders/billboard.js";
|
|
8
8
|
import { concatTypedArrays, spliceTypedArray } from "../utils/shared.js";
|
|
9
|
+
import { LOCK_UPDATE, LOCK_FREE } from "./LabelWorker.js";
|
|
9
10
|
|
|
10
11
|
const PICKINGCOLOR_BUFFER = 0;
|
|
11
12
|
const POSITION_BUFFER = 1;
|
|
@@ -80,6 +81,10 @@ class BillboardHandler {
|
|
|
80
81
|
this.__staticId = BillboardHandler._staticCounter++;
|
|
81
82
|
}
|
|
82
83
|
|
|
84
|
+
isEqual(handler) {
|
|
85
|
+
return handler && (handler.__staticId === this.__staticId);
|
|
86
|
+
}
|
|
87
|
+
|
|
83
88
|
static get _staticCounter() {
|
|
84
89
|
if (!this._counter && this._counter !== 0) {
|
|
85
90
|
this._counter = 0;
|
|
@@ -126,9 +131,9 @@ class BillboardHandler {
|
|
|
126
131
|
while (i--) {
|
|
127
132
|
var bi = this._billboards[i];
|
|
128
133
|
bi._handlerIndex = -1;
|
|
129
|
-
bi._handler = null;
|
|
130
|
-
bi._isReady = false;
|
|
131
|
-
bi._lockId =
|
|
134
|
+
bi._handler = null;
|
|
135
|
+
bi._isReady = false;
|
|
136
|
+
bi._lockId = LOCK_FREE;
|
|
132
137
|
}
|
|
133
138
|
this._billboards.length = 0;
|
|
134
139
|
this._billboards = [];
|
|
@@ -202,7 +207,7 @@ class BillboardHandler {
|
|
|
202
207
|
}
|
|
203
208
|
|
|
204
209
|
add(billboard) {
|
|
205
|
-
if (billboard._handlerIndex == -1) {
|
|
210
|
+
if (billboard._handlerIndex == -1) {
|
|
206
211
|
billboard._isReady = true;
|
|
207
212
|
billboard._handler = this;
|
|
208
213
|
billboard._handlerIndex = this._billboards.length;
|
|
@@ -625,14 +630,16 @@ class BillboardHandler {
|
|
|
625
630
|
this.refresh();
|
|
626
631
|
|
|
627
632
|
billboard._handlerIndex = -1;
|
|
628
|
-
billboard._handler = null;
|
|
629
|
-
billboard._isReady = false;
|
|
630
|
-
billboard._lockId =
|
|
633
|
+
billboard._handler = null;
|
|
634
|
+
billboard._isReady = false;
|
|
635
|
+
billboard._lockId = LOCK_FREE;
|
|
631
636
|
}
|
|
632
637
|
|
|
633
638
|
remove(billboard) {
|
|
634
639
|
if (billboard._isReady && this.__staticId == billboard._handler.__staticId) {
|
|
635
640
|
this._removeBillboard(billboard);
|
|
641
|
+
} else {
|
|
642
|
+
billboard._handler = null;
|
|
636
643
|
}
|
|
637
644
|
}
|
|
638
645
|
|
|
@@ -1042,4 +1049,4 @@ class BillboardHandler {
|
|
|
1042
1049
|
}
|
|
1043
1050
|
}
|
|
1044
1051
|
|
|
1045
|
-
export { BillboardHandler };
|
|
1052
|
+
export { BillboardHandler };
|