@openglobus/og 0.22.1 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/og.css +137 -1
- package/lib/@openglobus/js/Object3d.d.ts +20 -10
- package/lib/@openglobus/js/camera/Camera.d.ts +9 -0
- package/lib/@openglobus/js/camera/Frustum.d.ts +3 -0
- package/lib/@openglobus/js/control/CameraLock.d.ts +38 -0
- package/lib/@openglobus/js/control/SimpleNavigation.d.ts +27 -10
- package/lib/@openglobus/js/control/geoObjectEditor/ArrowEntity.d.ts +15 -0
- package/lib/@openglobus/js/control/geoObjectEditor/AxisTrackEntity.d.ts +9 -0
- package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditor.d.ts +13 -0
- package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorDialog.d.ts +69 -0
- package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +78 -9
- package/lib/@openglobus/js/control/geoObjectEditor/MoveAxisEntity.d.ts +17 -0
- package/lib/@openglobus/js/control/geoObjectEditor/MovePlaneEntity.d.ts +7 -0
- package/lib/@openglobus/js/control/geoObjectEditor/RotateEntity.d.ts +9 -0
- package/lib/@openglobus/js/control/geoObjectEditor/colors.d.ts +8 -0
- package/lib/@openglobus/js/control/index.d.ts +2 -0
- package/lib/@openglobus/js/entity/Entity.d.ts +278 -19
- package/lib/@openglobus/js/entity/EntityCollection.d.ts +8 -9
- package/lib/@openglobus/js/entity/GeoObject.d.ts +141 -36
- package/lib/@openglobus/js/entity/GeoObjectHandler.d.ts +39 -63
- package/lib/@openglobus/js/entity/InstanceData.d.ts +76 -0
- package/lib/@openglobus/js/entity/Polyline.d.ts +19 -6
- package/lib/@openglobus/js/entity/PolylineHandler.d.ts +7 -0
- package/lib/@openglobus/js/index.d.ts +2 -1
- package/lib/@openglobus/js/layer/Vector.d.ts +4 -0
- package/lib/@openglobus/js/light/LightSource.d.ts +1 -139
- package/lib/@openglobus/js/math/Quat.d.ts +46 -33
- package/lib/@openglobus/js/math/Ray.d.ts +10 -4
- package/lib/@openglobus/js/math/Vec3.d.ts +15 -0
- package/lib/@openglobus/js/math.d.ts +2 -2
- package/lib/@openglobus/js/quadTree/EntityCollectionNode.d.ts +2 -2
- package/lib/@openglobus/js/quadTree/Node.d.ts +1 -1
- package/lib/@openglobus/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +1 -1
- package/lib/@openglobus/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +1 -1
- package/lib/@openglobus/js/renderer/Renderer.d.ts +64 -44
- package/lib/@openglobus/js/renderer/RendererEvents.d.ts +1 -0
- package/lib/@openglobus/js/scene/Planet.d.ts +11 -7
- package/lib/@openglobus/js/scene/RenderNode.d.ts +10 -25
- package/lib/@openglobus/js/shaders/drawnode.d.ts +1 -0
- package/lib/@openglobus/js/shaders/geoObject.d.ts +1 -0
- package/lib/@openglobus/js/shaders/utils.d.ts +1 -1
- package/lib/@openglobus/js/ui/Checkbox.d.ts +31 -0
- package/lib/@openglobus/js/ui/Dialog.d.ts +3 -0
- package/lib/@openglobus/js/ui/Input.d.ts +32 -0
- package/lib/@openglobus/js/ui/View.d.ts +3 -1
- package/lib/@openglobus/js/utils/objParser.d.ts +44 -12
- package/lib/@openglobus/js/utils/shared.d.ts +22 -0
- package/lib/@openglobus/js/webgl/BaseFramebuffer.d.ts +0 -1
- package/lib/@openglobus/js/webgl/Framebuffer.d.ts +35 -8
- package/lib/@openglobus/js/webgl/Handler.d.ts +3 -0
- package/lib/@openglobus/og.css +1 -1
- package/lib/@openglobus/og.esm.js +1 -1
- package/lib/@openglobus/og.esm.js.map +1 -1
- package/lib/@openglobus/og.umd.js +1 -1
- package/lib/@openglobus/og.umd.js.map +1 -1
- package/lib/js/Globe.js +2 -1
- package/lib/js/Object3d.d.ts +20 -10
- package/lib/js/Object3d.js +124 -48
- package/lib/js/camera/Camera.d.ts +9 -0
- package/lib/js/camera/Camera.js +27 -1
- package/lib/js/camera/Frustum.d.ts +3 -0
- package/lib/js/camera/Frustum.js +7 -0
- package/lib/js/control/Atmosphere.js +10 -6
- package/lib/js/control/CameraLock.d.ts +38 -0
- package/lib/js/control/CameraLock.js +216 -0
- package/lib/js/control/Control.js +1 -1
- package/lib/js/control/DebugInfo.js +13 -3
- package/lib/js/control/KeyboardNavigation.js +1 -1
- package/lib/js/control/ScaleControl.js +9 -3
- package/lib/js/control/SimpleNavigation.d.ts +27 -10
- package/lib/js/control/SimpleNavigation.js +148 -49
- package/lib/js/control/Sun.js +1 -1
- package/lib/js/control/elevationProfile/ElevationProfileScene.js +4 -4
- package/lib/js/control/geoObjectEditor/ArrowEntity.d.ts +15 -0
- package/lib/js/control/geoObjectEditor/ArrowEntity.js +59 -0
- package/lib/js/control/geoObjectEditor/AxisTrackEntity.d.ts +9 -0
- package/lib/js/control/geoObjectEditor/AxisTrackEntity.js +93 -0
- package/lib/js/control/geoObjectEditor/GeoObjectEditor.d.ts +13 -0
- package/lib/js/control/geoObjectEditor/GeoObjectEditor.js +30 -0
- package/lib/js/control/geoObjectEditor/GeoObjectEditorDialog.d.ts +69 -0
- package/lib/js/control/geoObjectEditor/GeoObjectEditorDialog.js +502 -0
- package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +78 -9
- package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.js +487 -43
- package/lib/js/control/geoObjectEditor/MoveAxisEntity.d.ts +17 -0
- package/lib/js/control/geoObjectEditor/MoveAxisEntity.js +106 -0
- package/lib/js/control/geoObjectEditor/MovePlaneEntity.d.ts +7 -0
- package/lib/js/control/geoObjectEditor/MovePlaneEntity.js +34 -0
- package/lib/js/control/geoObjectEditor/RotateEntity.d.ts +9 -0
- package/lib/js/control/geoObjectEditor/RotateEntity.js +105 -0
- package/lib/js/control/geoObjectEditor/colors.d.ts +8 -0
- package/lib/js/control/geoObjectEditor/colors.js +8 -0
- package/lib/js/control/index.d.ts +2 -0
- package/lib/js/control/index.js +2 -0
- package/lib/js/control/timeline/TimelineControl.js +2 -0
- package/lib/js/entity/Entity.d.ts +278 -19
- package/lib/js/entity/Entity.js +483 -63
- package/lib/js/entity/EntityCollection.d.ts +8 -9
- package/lib/js/entity/EntityCollection.js +48 -45
- package/lib/js/entity/GeoObject.d.ts +141 -36
- package/lib/js/entity/GeoObject.js +153 -90
- package/lib/js/entity/GeoObjectHandler.d.ts +39 -63
- package/lib/js/entity/GeoObjectHandler.js +198 -295
- package/lib/js/entity/InstanceData.d.ts +76 -0
- package/lib/js/entity/InstanceData.js +344 -0
- package/lib/js/entity/Polyline.d.ts +19 -6
- package/lib/js/entity/Polyline.js +76 -36
- package/lib/js/entity/PolylineHandler.d.ts +7 -0
- package/lib/js/entity/PolylineHandler.js +26 -1
- package/lib/js/index.d.ts +2 -1
- package/lib/js/index.js +2 -1
- package/lib/js/layer/Bing.js +2 -2
- package/lib/js/layer/Vector.d.ts +4 -0
- package/lib/js/layer/Vector.js +16 -0
- package/lib/js/light/LightSource.d.ts +1 -139
- package/lib/js/light/LightSource.js +21 -227
- package/lib/js/math/Quat.d.ts +46 -33
- package/lib/js/math/Quat.js +91 -90
- package/lib/js/math/Ray.d.ts +10 -4
- package/lib/js/math/Ray.js +20 -4
- package/lib/js/math/Vec3.d.ts +15 -0
- package/lib/js/math/Vec3.js +30 -1
- package/lib/js/math.d.ts +2 -2
- package/lib/js/math.js +3 -3
- package/lib/js/quadTree/EntityCollectionNode.d.ts +2 -2
- package/lib/js/quadTree/EntityCollectionNode.js +8 -8
- package/lib/js/quadTree/Node.d.ts +1 -1
- package/lib/js/quadTree/Node.js +2 -2
- package/lib/js/quadTree/QuadTreeStrategy.js +1 -1
- package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +1 -1
- package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.js +2 -2
- package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +1 -1
- package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.js +2 -2
- package/lib/js/renderer/Renderer.d.ts +64 -44
- package/lib/js/renderer/Renderer.js +264 -263
- package/lib/js/renderer/RendererEvents.d.ts +1 -0
- package/lib/js/renderer/RendererEvents.js +2 -1
- package/lib/js/scene/Planet.d.ts +11 -7
- package/lib/js/scene/Planet.js +109 -87
- package/lib/js/scene/RenderNode.d.ts +10 -25
- package/lib/js/scene/RenderNode.js +70 -58
- package/lib/js/shaders/depth.js +2 -5
- package/lib/js/shaders/drawnode.d.ts +1 -0
- package/lib/js/shaders/drawnode.js +51 -52
- package/lib/js/shaders/geoObject.d.ts +1 -0
- package/lib/js/shaders/geoObject.js +154 -91
- package/lib/js/shaders/polyline.js +68 -51
- package/lib/js/shaders/utils.d.ts +1 -1
- package/lib/js/shaders/utils.js +11 -0
- package/lib/js/ui/Checkbox.d.ts +31 -0
- package/lib/js/ui/Checkbox.js +110 -0
- package/lib/js/ui/Color.js +2 -1
- package/lib/js/ui/Dialog.d.ts +3 -0
- package/lib/js/ui/Dialog.js +20 -0
- package/lib/js/ui/Input.d.ts +32 -0
- package/lib/js/ui/Input.js +107 -0
- package/lib/js/ui/View.d.ts +3 -1
- package/lib/js/ui/View.js +6 -0
- package/lib/js/utils/objParser.d.ts +44 -12
- package/lib/js/utils/objParser.js +241 -149
- package/lib/js/utils/shared.d.ts +22 -0
- package/lib/js/utils/shared.js +34 -0
- package/lib/js/webgl/BaseFramebuffer.d.ts +0 -1
- package/lib/js/webgl/Framebuffer.d.ts +35 -8
- package/lib/js/webgl/Framebuffer.js +136 -29
- package/lib/js/webgl/Handler.d.ts +3 -0
- package/lib/js/webgl/Handler.js +11 -1
- package/lib/js/webgl/Program.js +0 -8
- package/package.json +4 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BaseNode } from "./BaseNode";
|
|
2
|
+
import { Quat } from "../math/Quat";
|
|
2
3
|
/**
|
|
3
4
|
* Render node is a logical part of a render mechanism. Represents scene rendering.
|
|
4
5
|
* For example one scene node for rendering the Earth, another one for rendering the Moon, another node for rendering stars etc.
|
|
@@ -18,14 +19,16 @@ class RenderNode extends BaseNode {
|
|
|
18
19
|
this.show = true;
|
|
19
20
|
this._isActive = true;
|
|
20
21
|
this.lightEnabled = false;
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
this._lightsParamsv = [];
|
|
25
|
-
this._lightsParamsf = [];
|
|
22
|
+
this._lightPosition = new Float32Array([100, 100, 100]);
|
|
23
|
+
this._lightParams = new Float32Array(9);
|
|
24
|
+
this._lightShininess = 100.0;
|
|
26
25
|
this.entityCollections = [];
|
|
26
|
+
this._entityCollectionsByDepthOrder = [];
|
|
27
27
|
this._pickingId = -1;
|
|
28
28
|
}
|
|
29
|
+
getFrameRotation(cartesian) {
|
|
30
|
+
return Quat.IDENTITY;
|
|
31
|
+
}
|
|
29
32
|
/**
|
|
30
33
|
* Adds node to the current hierarchy.
|
|
31
34
|
* @public
|
|
@@ -87,8 +90,17 @@ class RenderNode extends BaseNode {
|
|
|
87
90
|
* @returns {RenderNode} -
|
|
88
91
|
*/
|
|
89
92
|
addEntityCollection(entityCollection, isHidden) {
|
|
90
|
-
entityCollection.
|
|
91
|
-
|
|
93
|
+
if (!entityCollection.renderNode) {
|
|
94
|
+
entityCollection.renderNode = this;
|
|
95
|
+
if (!isHidden) {
|
|
96
|
+
this.entityCollections.push(entityCollection);
|
|
97
|
+
this.updateEntityCollectionsDepthOrder();
|
|
98
|
+
}
|
|
99
|
+
//@ts-ignore
|
|
100
|
+
this.ellipsoid && entityCollection._updateGeodeticCoordinates(this.ellipsoid);
|
|
101
|
+
entityCollection.bindRenderNode(this);
|
|
102
|
+
entityCollection.events.dispatch(entityCollection.events.add, this);
|
|
103
|
+
}
|
|
92
104
|
}
|
|
93
105
|
/**
|
|
94
106
|
* Removes entity collection.
|
|
@@ -96,7 +108,29 @@ class RenderNode extends BaseNode {
|
|
|
96
108
|
* @param {EntityCollection} entityCollection - Entity collection for remove.
|
|
97
109
|
*/
|
|
98
110
|
removeEntityCollection(entityCollection) {
|
|
99
|
-
|
|
111
|
+
for (let i = 0; i < this.entityCollections.length; i++) {
|
|
112
|
+
if (this.entityCollections[i].isEqual(entityCollection)) {
|
|
113
|
+
this.entityCollections.splice(i, 1);
|
|
114
|
+
this.updateEntityCollectionsDepthOrder();
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
updateEntityCollectionsDepthOrder() {
|
|
120
|
+
let grouped = { 0: [] };
|
|
121
|
+
for (const ec of this.entityCollections) {
|
|
122
|
+
if (ec.getVisibility()) {
|
|
123
|
+
if (!grouped[ec.depthOrder]) {
|
|
124
|
+
grouped[ec.depthOrder] = [];
|
|
125
|
+
}
|
|
126
|
+
grouped[ec.depthOrder].push(ec);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
this._entityCollectionsByDepthOrder.length = 0;
|
|
130
|
+
this._entityCollectionsByDepthOrder = [];
|
|
131
|
+
this._entityCollectionsByDepthOrder = Object.keys(grouped)
|
|
132
|
+
.sort((a, b) => Number(a) - Number(b))
|
|
133
|
+
.map(key => grouped[Number(key)]);
|
|
100
134
|
}
|
|
101
135
|
/**
|
|
102
136
|
* Adds point light source.
|
|
@@ -108,24 +142,6 @@ class RenderNode extends BaseNode {
|
|
|
108
142
|
light.addTo(this);
|
|
109
143
|
return this;
|
|
110
144
|
}
|
|
111
|
-
/**
|
|
112
|
-
* Gets light object by its name.
|
|
113
|
-
* @public
|
|
114
|
-
* @param {string} name - Point light name.
|
|
115
|
-
* @returns {LightSource}
|
|
116
|
-
*/
|
|
117
|
-
getLightByName(name) {
|
|
118
|
-
let li = this._lightsNames.indexOf(name);
|
|
119
|
-
return this._lights[li];
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Removes light source.
|
|
123
|
-
* @public
|
|
124
|
-
* @param {LightSource} light - Light source object.
|
|
125
|
-
*/
|
|
126
|
-
removeLight(light) {
|
|
127
|
-
light.remove();
|
|
128
|
-
}
|
|
129
145
|
/**
|
|
130
146
|
* Calls render frame node's callback. Used in renderer.
|
|
131
147
|
* @public
|
|
@@ -181,34 +197,26 @@ class RenderNode extends BaseNode {
|
|
|
181
197
|
this.childNodes[i].setDrawMode(mode);
|
|
182
198
|
}
|
|
183
199
|
}
|
|
184
|
-
/**
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
transformLights() {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
// tp = r.activeCamera._viewMatrix.mulVec3(this._lights[i]._position);
|
|
205
|
-
// this._lightsTransformedPositions[ii + 3] = 1;
|
|
206
|
-
// }
|
|
207
|
-
// this._lightsTransformedPositions[ii] = tp.x;
|
|
208
|
-
// this._lightsTransformedPositions[ii + 1] = tp.y;
|
|
209
|
-
// this._lightsTransformedPositions[ii + 2] = tp.z;
|
|
210
|
-
// }
|
|
211
|
-
}
|
|
200
|
+
// /**
|
|
201
|
+
// * IMPORTANT: This function have to be called manually in each render node frame callback, before drawing scene geometry.
|
|
202
|
+
// * @public
|
|
203
|
+
// */
|
|
204
|
+
// public transformLights() {
|
|
205
|
+
// // for (let i = 0; i < this._lights.length; i++) {
|
|
206
|
+
// // var ii = i * 4;
|
|
207
|
+
// // var tp;
|
|
208
|
+
// // if (this._lights[i].directional) {
|
|
209
|
+
// // tp = r.activeCamera._normalMatrix.mulVec(this._lights[i]._position);
|
|
210
|
+
// // this._lightsTransformedPositions[ii + 3] = 0;
|
|
211
|
+
// // } else {
|
|
212
|
+
// // tp = r.activeCamera._viewMatrix.mulVec3(this._lights[i]._position);
|
|
213
|
+
// // this._lightsTransformedPositions[ii + 3] = 1;
|
|
214
|
+
// // }
|
|
215
|
+
// // this._lightsTransformedPositions[ii] = tp.x;
|
|
216
|
+
// // this._lightsTransformedPositions[ii + 1] = tp.y;
|
|
217
|
+
// // this._lightsTransformedPositions[ii + 2] = tp.z;
|
|
218
|
+
// // }
|
|
219
|
+
// }
|
|
212
220
|
updateBillboardsTexCoords() {
|
|
213
221
|
for (let i = 0; i < this.entityCollections.length; i++) {
|
|
214
222
|
this.entityCollections[i].billboardHandler.refreshTexCoordsArr();
|
|
@@ -234,7 +242,9 @@ class RenderNode extends BaseNode {
|
|
|
234
242
|
if (this.show) {
|
|
235
243
|
//this.lightEnabled && this.transformLights();
|
|
236
244
|
this.preFrame();
|
|
237
|
-
|
|
245
|
+
for (let i = 0; i < this._entityCollectionsByDepthOrder.length; i++) {
|
|
246
|
+
this.drawEntityCollections(this._entityCollectionsByDepthOrder[i], i);
|
|
247
|
+
}
|
|
238
248
|
}
|
|
239
249
|
}
|
|
240
250
|
_drawNodes() {
|
|
@@ -247,8 +257,8 @@ class RenderNode extends BaseNode {
|
|
|
247
257
|
this.frame();
|
|
248
258
|
}
|
|
249
259
|
}
|
|
250
|
-
drawEntityCollections(ec) {
|
|
251
|
-
this.renderer.enqueueEntityCollectionsToDraw(ec);
|
|
260
|
+
drawEntityCollections(ec, depthOrder = 0) {
|
|
261
|
+
this.renderer.enqueueEntityCollectionsToDraw(ec, depthOrder);
|
|
252
262
|
}
|
|
253
263
|
/**
|
|
254
264
|
* Draw entity collections picking frame.
|
|
@@ -295,7 +305,9 @@ class RenderNode extends BaseNode {
|
|
|
295
305
|
}
|
|
296
306
|
}
|
|
297
307
|
_entityCollectionPickingCallback() {
|
|
298
|
-
|
|
308
|
+
// for (let i = 0; i < this._entityCollectionsByDepthOrder.length; i++) {
|
|
309
|
+
// this.drawPickingEntityCollections(this._entityCollectionsByDepthOrder[i]);
|
|
310
|
+
// }
|
|
299
311
|
}
|
|
300
312
|
}
|
|
301
313
|
export { RenderNode };
|
package/lib/js/shaders/depth.js
CHANGED
|
@@ -2,7 +2,7 @@ import { Program } from '../webgl/Program';
|
|
|
2
2
|
export function depth() {
|
|
3
3
|
return new Program("depth", {
|
|
4
4
|
uniforms: {
|
|
5
|
-
depthTexture: "
|
|
5
|
+
depthTexture: "sampler2D"
|
|
6
6
|
},
|
|
7
7
|
attributes: {
|
|
8
8
|
corners: "vec2"
|
|
@@ -21,8 +21,6 @@ export function depth() {
|
|
|
21
21
|
|
|
22
22
|
precision highp float;
|
|
23
23
|
|
|
24
|
-
#define MAX_FRUSTUMS 4
|
|
25
|
-
|
|
26
24
|
uniform sampler2D depthTexture;
|
|
27
25
|
|
|
28
26
|
in vec2 tc;
|
|
@@ -31,8 +29,7 @@ export function depth() {
|
|
|
31
29
|
|
|
32
30
|
float LinearizeDepth(in vec2 uv)
|
|
33
31
|
{
|
|
34
|
-
|
|
35
|
-
return depth;//(2.0 * zNear) / (zFar + zNear - depth * (zFar - zNear));
|
|
32
|
+
return texture(depthTexture, tc).r;
|
|
36
33
|
}
|
|
37
34
|
|
|
38
35
|
void main(void) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AtmosphereParameters } from "./atmos";
|
|
2
2
|
import { Program } from "../webgl/Program";
|
|
3
|
+
export declare const ENCODE24 = "vec3 encode24(highp float f) {\n float F = abs(f);\n float s = step( 0.0, -f );\n float e = floor( log2(F) );\n float m = exp2(- e) * F;\n e = floor( log2(F) + 127.0 ) + floor( log2(m) );\n return vec3(\n ( 128.0 * s + floor( e * exp2(-1.0) ) ) / 255.0,\n ( 128.0 * mod( e, 2.0 ) + mod( floor( m * 128.0 ), 128.0 ) ) / 255.0,\n floor( mod( floor( m * exp2( 23.0 - 8.0) ), exp2(8.0) ) ) / 255.0);\n }";
|
|
3
4
|
export declare function drawnode_screen_nl(): Program;
|
|
4
5
|
export declare function drawnode_screen_wl_webgl1NoAtmos(): Program;
|
|
5
6
|
export declare function drawnode_screen_wl_webgl2NoAtmos(): Program;
|
|
@@ -19,6 +19,17 @@ const DEF_BLEND_PICKING = `#define blendPicking(DEST, OFFSET, SAMPLER, MASK, COL
|
|
|
19
19
|
p = texture2D(MASK, tc); \
|
|
20
20
|
DEST = mix(DEST, vec4(max(COLOR.rgb, p.rgb), OPACITY), (t.a == 0.0 ? 0.0 : 1.0) * COLOR.a);`;
|
|
21
21
|
const SLICE_SIZE = 4;
|
|
22
|
+
export const ENCODE24 = `vec3 encode24(highp float f) {
|
|
23
|
+
float F = abs(f);
|
|
24
|
+
float s = step( 0.0, -f );
|
|
25
|
+
float e = floor( log2(F) );
|
|
26
|
+
float m = exp2(- e) * F;
|
|
27
|
+
e = floor( log2(F) + 127.0 ) + floor( log2(m) );
|
|
28
|
+
return vec3(
|
|
29
|
+
( 128.0 * s + floor( e * exp2(-1.0) ) ) / 255.0,
|
|
30
|
+
( 128.0 * mod( e, 2.0 ) + mod( floor( m * 128.0 ), 128.0 ) ) / 255.0,
|
|
31
|
+
floor( mod( floor( m * exp2( 23.0 - 8.0) ), exp2(8.0) ) ) / 255.0);
|
|
32
|
+
}`;
|
|
22
33
|
export function drawnode_screen_nl() {
|
|
23
34
|
return new Program("drawnode_screen_nl", {
|
|
24
35
|
uniforms: {
|
|
@@ -117,7 +128,7 @@ export function drawnode_screen_wl_webgl1NoAtmos() {
|
|
|
117
128
|
uNormalMap: "sampler2d",
|
|
118
129
|
nightTexture: "sampler2d",
|
|
119
130
|
specularTexture: "sampler2d",
|
|
120
|
-
|
|
131
|
+
lightPosition: "vec3",
|
|
121
132
|
diffuse: "vec3",
|
|
122
133
|
ambient: "vec3",
|
|
123
134
|
specular: "vec4",
|
|
@@ -172,7 +183,6 @@ export function drawnode_screen_wl_webgl1NoAtmos() {
|
|
|
172
183
|
fragmentShader: `
|
|
173
184
|
precision highp float;
|
|
174
185
|
|
|
175
|
-
#define MAX_POINT_LIGHTS 1
|
|
176
186
|
#define SLICE_SIZE ${SLICE_SIZE + 1}
|
|
177
187
|
|
|
178
188
|
uniform vec4 specular;
|
|
@@ -186,7 +196,7 @@ export function drawnode_screen_wl_webgl1NoAtmos() {
|
|
|
186
196
|
uniform sampler2D samplerArr[SLICE_SIZE];
|
|
187
197
|
|
|
188
198
|
uniform vec4 tileOffsetArr[SLICE_SIZE];
|
|
189
|
-
uniform vec3
|
|
199
|
+
uniform vec3 lightPosition;
|
|
190
200
|
uniform float layerOpacityArr[SLICE_SIZE];
|
|
191
201
|
|
|
192
202
|
uniform int samplerCount;
|
|
@@ -209,7 +219,7 @@ export function drawnode_screen_wl_webgl1NoAtmos() {
|
|
|
209
219
|
|
|
210
220
|
void main(void) {
|
|
211
221
|
|
|
212
|
-
sunPos =
|
|
222
|
+
sunPos = lightPosition;
|
|
213
223
|
|
|
214
224
|
vec3 texNormal = texture2D(uNormalMap, vTextureCoord.zw).rgb;
|
|
215
225
|
vec3 normal = normalize((texNormal - 0.5) * 2.0);
|
|
@@ -293,7 +303,7 @@ export function drawnode_screen_wl_webgl2NoAtmos() {
|
|
|
293
303
|
uNormalMap: "sampler2d",
|
|
294
304
|
nightTexture: "sampler2d",
|
|
295
305
|
specularTexture: "sampler2d",
|
|
296
|
-
|
|
306
|
+
lightPosition: "vec3",
|
|
297
307
|
diffuse: "vec3",
|
|
298
308
|
ambient: "vec3",
|
|
299
309
|
specular: "vec4",
|
|
@@ -353,7 +363,7 @@ export function drawnode_screen_wl_webgl2NoAtmos() {
|
|
|
353
363
|
|
|
354
364
|
precision highp float;
|
|
355
365
|
|
|
356
|
-
|
|
366
|
+
|
|
357
367
|
#define SLICE_SIZE ${SLICE_SIZE + 1}
|
|
358
368
|
|
|
359
369
|
uniform vec4 specular;
|
|
@@ -367,7 +377,7 @@ export function drawnode_screen_wl_webgl2NoAtmos() {
|
|
|
367
377
|
uniform sampler2D samplerArr[SLICE_SIZE];
|
|
368
378
|
|
|
369
379
|
uniform vec4 tileOffsetArr[SLICE_SIZE];
|
|
370
|
-
uniform vec3
|
|
380
|
+
uniform vec3 lightPosition;
|
|
371
381
|
uniform float layerOpacityArr[SLICE_SIZE];
|
|
372
382
|
|
|
373
383
|
uniform int samplerCount;
|
|
@@ -395,7 +405,7 @@ export function drawnode_screen_wl_webgl2NoAtmos() {
|
|
|
395
405
|
|
|
396
406
|
void main(void) {
|
|
397
407
|
|
|
398
|
-
sunPos =
|
|
408
|
+
sunPos = lightPosition;
|
|
399
409
|
|
|
400
410
|
vec3 texNormal = texture(uNormalMap, vTextureCoord.zw).rgb;
|
|
401
411
|
vec3 normal = normalize((texNormal - 0.5) * 2.0);
|
|
@@ -486,7 +496,7 @@ export function drawnode_screen_wl_webgl2Atmos(atmosParams) {
|
|
|
486
496
|
uNormalMap: "sampler2d",
|
|
487
497
|
nightTexture: "sampler2d",
|
|
488
498
|
specularTexture: "sampler2d",
|
|
489
|
-
|
|
499
|
+
lightPosition: "vec3",
|
|
490
500
|
diffuse: "vec3",
|
|
491
501
|
ambient: "vec3",
|
|
492
502
|
specular: "vec4",
|
|
@@ -549,14 +559,13 @@ export function drawnode_screen_wl_webgl2Atmos(atmosParams) {
|
|
|
549
559
|
|
|
550
560
|
precision highp float;
|
|
551
561
|
|
|
552
|
-
#define MAX_POINT_LIGHTS 1
|
|
553
562
|
#define SLICE_SIZE ${SLICE_SIZE + 1}
|
|
554
563
|
|
|
555
564
|
uniform vec4 specular;
|
|
556
565
|
uniform vec3 diffuse;
|
|
557
566
|
uniform vec3 ambient;
|
|
558
567
|
|
|
559
|
-
uniform vec3
|
|
568
|
+
uniform vec3 lightPosition;
|
|
560
569
|
|
|
561
570
|
uniform sampler2D uNormalMap;
|
|
562
571
|
uniform sampler2D nightTexture;
|
|
@@ -720,7 +729,7 @@ export function drawnode_screen_wl_webgl2Atmos(atmosParams) {
|
|
|
720
729
|
|
|
721
730
|
void main(void) {
|
|
722
731
|
|
|
723
|
-
sunPos =
|
|
732
|
+
sunPos = lightPosition;
|
|
724
733
|
|
|
725
734
|
vec3 texNormal = texture(uNormalMap, vTextureCoord.zw).rgb;
|
|
726
735
|
vec3 normal = normalize((texNormal - 0.5) * 2.0);
|
|
@@ -908,50 +917,34 @@ export function drawnode_heightPicking() {
|
|
|
908
917
|
uniform vec3 eyePositionHigh;
|
|
909
918
|
uniform vec3 eyePositionLow;
|
|
910
919
|
uniform float height;
|
|
911
|
-
|
|
912
|
-
varying
|
|
913
|
-
varying vec3 vertexPosition;
|
|
920
|
+
|
|
921
|
+
varying vec4 vert;
|
|
914
922
|
|
|
915
923
|
void main(void) {
|
|
916
924
|
|
|
917
|
-
// This code is works for Mac Chrome and Safari
|
|
918
|
-
// any other code probably will produce jittering
|
|
919
|
-
|
|
920
925
|
mat4 viewMatrixRTE = viewMatrix;
|
|
921
926
|
viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
|
|
922
927
|
|
|
923
|
-
mat4 m = projectionMatrix * viewMatrixRTE;
|
|
924
|
-
|
|
925
928
|
vec3 nh = height * normalize(aVertexPositionHigh + aVertexPositionLow);
|
|
926
929
|
|
|
927
|
-
eyePosition = eyePositionHigh + eyePositionLow;
|
|
928
|
-
vertexPosition = aVertexPositionHigh + aVertexPositionLow;
|
|
930
|
+
vec3 eyePosition = eyePositionHigh + eyePositionLow;
|
|
931
|
+
vec3 vertexPosition = aVertexPositionHigh + aVertexPositionLow;
|
|
929
932
|
|
|
930
933
|
vec3 highDiff = aVertexPositionHigh - eyePositionHigh;
|
|
931
934
|
vec3 lowDiff = aVertexPositionLow - eyePositionLow + nh;
|
|
932
935
|
|
|
933
|
-
|
|
936
|
+
vert = viewMatrixRTE * vec4(highDiff * step(1.0, length(highDiff)) + lowDiff, 1.0);
|
|
937
|
+
|
|
938
|
+
gl_Position = projectionMatrix * vert;
|
|
934
939
|
}`,
|
|
935
940
|
fragmentShader: `precision highp float;
|
|
941
|
+
|
|
942
|
+
varying vec4 vert;
|
|
936
943
|
|
|
937
|
-
|
|
938
|
-
varying vec3 vertexPosition;
|
|
939
|
-
|
|
940
|
-
vec3 encode24(highp float f) {
|
|
941
|
-
float F = abs(f);
|
|
942
|
-
float s = step( 0.0, -f );
|
|
943
|
-
float e = floor( log2(F) );
|
|
944
|
-
float m = exp2(- e) * F;
|
|
945
|
-
e = floor( log2(F) + 127.0 ) + floor( log2(m) );
|
|
946
|
-
return vec3(
|
|
947
|
-
( 128.0 * s + floor( e * exp2(-1.0) ) ) / 255.0,
|
|
948
|
-
( 128.0 * mod( e, 2.0 ) + mod( floor( m * 128.0 ), 128.0 ) ) / 255.0,
|
|
949
|
-
floor( mod( floor( m * exp2( 23.0 - 8.0) ), exp2(8.0) ) ) / 255.0);
|
|
950
|
-
}
|
|
944
|
+
${ENCODE24}
|
|
951
945
|
|
|
952
946
|
void main(void) {
|
|
953
|
-
|
|
954
|
-
gl_FragColor = vec4(encode24(range), 1.0);
|
|
947
|
+
gl_FragColor = vec4(encode24(length(vert.xyz)), 1.0);
|
|
955
948
|
}`
|
|
956
949
|
});
|
|
957
950
|
}
|
|
@@ -963,14 +956,17 @@ export function drawnode_depth() {
|
|
|
963
956
|
height: "float",
|
|
964
957
|
eyePositionHigh: "vec3",
|
|
965
958
|
eyePositionLow: "vec3",
|
|
966
|
-
frustumPickingColor: "
|
|
959
|
+
frustumPickingColor: "float"
|
|
967
960
|
}, attributes: {
|
|
968
|
-
aVertexPositionHigh: "vec3",
|
|
961
|
+
aVertexPositionHigh: "vec3",
|
|
962
|
+
aVertexPositionLow: "vec3"
|
|
969
963
|
},
|
|
970
|
-
vertexShader:
|
|
964
|
+
vertexShader: `#version 300 es
|
|
965
|
+
|
|
966
|
+
precision highp float;
|
|
971
967
|
|
|
972
|
-
|
|
973
|
-
|
|
968
|
+
in vec3 aVertexPositionHigh;
|
|
969
|
+
in vec3 aVertexPositionLow;
|
|
974
970
|
|
|
975
971
|
uniform mat4 projectionMatrix;
|
|
976
972
|
uniform mat4 viewMatrix;
|
|
@@ -980,10 +976,6 @@ export function drawnode_depth() {
|
|
|
980
976
|
|
|
981
977
|
void main(void) {
|
|
982
978
|
|
|
983
|
-
// @hack
|
|
984
|
-
// This code is works for Mac Chrome and Safari
|
|
985
|
-
// any other code probably will produce jittering
|
|
986
|
-
|
|
987
979
|
mat4 viewMatrixRTE = viewMatrix;
|
|
988
980
|
viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
|
|
989
981
|
|
|
@@ -999,11 +991,18 @@ export function drawnode_depth() {
|
|
|
999
991
|
|
|
1000
992
|
gl_Position = m * vec4(highDiff * step(1.0, length(highDiff)) + lowDiff, 1.0);
|
|
1001
993
|
}`,
|
|
1002
|
-
fragmentShader:
|
|
1003
|
-
|
|
994
|
+
fragmentShader: `#version 300 es
|
|
995
|
+
|
|
996
|
+
precision highp float;
|
|
997
|
+
|
|
998
|
+
uniform float frustumPickingColor;
|
|
999
|
+
|
|
1000
|
+
layout(location = 0) out vec4 frustumColor;
|
|
1001
|
+
layout(location = 1) out vec4 depthColor;
|
|
1004
1002
|
|
|
1005
1003
|
void main(void) {
|
|
1006
|
-
|
|
1007
|
-
|
|
1004
|
+
frustumColor = vec4(frustumPickingColor, frustumPickingColor, frustumPickingColor, 1.0);
|
|
1005
|
+
depthColor = vec4(gl_FragCoord.z, gl_FragCoord.z, gl_FragCoord.z, 1.0);
|
|
1006
|
+
}`
|
|
1008
1007
|
});
|
|
1009
1008
|
}
|