@openglobus/og 0.11.7 → 0.11.8
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 +3 -2
- package/package.json +1 -1
- package/src/og/control/Lighting.js +52 -73
- package/src/og/control/MouseNavigation.js +21 -18
- package/src/og/control/MouseWheelZoomControl.js +257 -0
- 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/entity/BaseBillboard.js +9 -9
- package/src/og/entity/Label.js +7 -7
- package/src/og/layer/CanvasTiles.js +0 -1
- 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 +0 -22
- package/src/og/layer/WMS.js +0 -2
- package/src/og/layer/XYZ.js +4 -5
- package/src/og/renderer/Renderer.js +69 -94
- package/src/og/renderer/RendererEvents.js +3 -1
- package/src/og/scene/Planet.js +39 -61
- package/src/og/segment/Segment.js +60 -156
- package/src/og/segment/Slice.js +45 -0
- package/src/og/shaders/drawnode.js +197 -287
- package/src/og/utils/GeoImageCreator.js +5 -1
- package/src/og/webgl/Handler.js +1 -1
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";
|
|
@@ -335,6 +336,16 @@ export class Planet extends RenderNode {
|
|
|
335
336
|
*/
|
|
336
337
|
this._specularTexture = null;
|
|
337
338
|
|
|
339
|
+
//TODO: replace to a function
|
|
340
|
+
let a = utils.createColorRGB(options.ambient, new Vec3(0.2, 0.2, 0.2));
|
|
341
|
+
let d = utils.createColorRGB(options.diffuse, new Vec3(0.8, 0.8, 0.8));
|
|
342
|
+
let s = utils.createColorRGB(options.specular, new Vec3(0.0003, 0.0003, 0.0003));
|
|
343
|
+
let shininess = options.shininess || 20.0;
|
|
344
|
+
|
|
345
|
+
this._ambient = new Float32Array([a.x, a.y, a.z]);
|
|
346
|
+
this._diffuse = new Float32Array([d.x, d.y, d.z]);
|
|
347
|
+
this._specular = new Float32Array([s.x, s.y, s.z, shininess]);
|
|
348
|
+
|
|
338
349
|
/**
|
|
339
350
|
* True for rendering night glowing texture.
|
|
340
351
|
* @protected
|
|
@@ -371,14 +382,7 @@ export class Planet extends RenderNode {
|
|
|
371
382
|
this._maxLodRatio = MAX_LOD;
|
|
372
383
|
this._minLodRatio = MIN_LOD;
|
|
373
384
|
|
|
374
|
-
this.
|
|
375
|
-
this._ambientMaterialArr = new Float32Array(this.SLICE_SIZE_3 + 3);
|
|
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);
|
|
385
|
+
this._pickingColorArr = new Float32Array(this.SLICE_SIZE_4);
|
|
382
386
|
this._samplerArr = new Int32Array(this.SLICE_SIZE);
|
|
383
387
|
this._pickingMaskArr = new Int32Array(this.SLICE_SIZE);
|
|
384
388
|
|
|
@@ -619,11 +623,8 @@ export class Planet extends RenderNode {
|
|
|
619
623
|
var h = this.renderer.handler;
|
|
620
624
|
|
|
621
625
|
h.addProgram(shaders.drawnode_screen_nl(), true);
|
|
622
|
-
|
|
623
626
|
//h.addProgram(shaders.drawnode_screen_wl(), true);
|
|
624
|
-
|
|
625
627
|
h.addProgram(shaders.drawnode_screen_wl_webgl2(), true);
|
|
626
|
-
|
|
627
628
|
h.addProgram(shaders.drawnode_colorPicking(), true);
|
|
628
629
|
h.addProgram(shaders.drawnode_depth(), true);
|
|
629
630
|
h.addProgram(shaders.drawnode_heightPicking(), true);
|
|
@@ -1075,7 +1076,9 @@ export class Planet extends RenderNode {
|
|
|
1075
1076
|
frame() {
|
|
1076
1077
|
this._renderScreenNodesPASS();
|
|
1077
1078
|
|
|
1078
|
-
this.
|
|
1079
|
+
if (this.renderer.isActiveBackbuffers) {
|
|
1080
|
+
this._renderHeightPickingFramebufferPASS();
|
|
1081
|
+
}
|
|
1079
1082
|
|
|
1080
1083
|
this.drawEntityCollections(this._frustumEntityCollections);
|
|
1081
1084
|
}
|
|
@@ -1135,7 +1138,6 @@ export class Planet extends RenderNode {
|
|
|
1135
1138
|
gl.enable(gl.BLEND);
|
|
1136
1139
|
gl.blendEquation(gl.FUNC_ADD);
|
|
1137
1140
|
gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
|
|
1138
|
-
//gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ZERO);
|
|
1139
1141
|
|
|
1140
1142
|
if (this.lightEnabled) {
|
|
1141
1143
|
h.programs.drawnode_screen_wl.activate();
|
|
@@ -1148,6 +1150,10 @@ export class Planet extends RenderNode {
|
|
|
1148
1150
|
gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
|
|
1149
1151
|
gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
|
|
1150
1152
|
|
|
1153
|
+
gl.uniform3fv(shu.diffuse, this._diffuse);
|
|
1154
|
+
gl.uniform3fv(shu.ambient, this._ambient);
|
|
1155
|
+
gl.uniform4fv(shu.specular, this._specular);
|
|
1156
|
+
|
|
1151
1157
|
// bind night glowing material
|
|
1152
1158
|
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
|
|
1153
1159
|
gl.bindTexture(
|
|
@@ -1163,34 +1169,6 @@ export class Planet extends RenderNode {
|
|
|
1163
1169
|
gl.bindTexture(gl.TEXTURE_2D, this._specularTexture || this.transparentTexture);
|
|
1164
1170
|
gl.uniform1i(shu.specularTexture, this.SLICE_SIZE + 1);
|
|
1165
1171
|
|
|
1166
|
-
var b = this.baseLayer;
|
|
1167
|
-
if (b) {
|
|
1168
|
-
this._diffuseMaterialArr[0] = b.diffuse.x;
|
|
1169
|
-
this._diffuseMaterialArr[1] = b.diffuse.y;
|
|
1170
|
-
this._diffuseMaterialArr[2] = b.diffuse.z;
|
|
1171
|
-
|
|
1172
|
-
this._ambientMaterialArr[0] = b.ambient.x;
|
|
1173
|
-
this._ambientMaterialArr[1] = b.ambient.y;
|
|
1174
|
-
this._ambientMaterialArr[2] = b.ambient.z;
|
|
1175
|
-
|
|
1176
|
-
this._specularMaterialArr[0] = b.specular.x;
|
|
1177
|
-
this._specularMaterialArr[1] = b.specular.y;
|
|
1178
|
-
this._specularMaterialArr[2] = b.specular.z;
|
|
1179
|
-
this._specularMaterialArr[3] = b.shininess;
|
|
1180
|
-
} else {
|
|
1181
|
-
this._diffuseMaterialArr[0] = 0.89;
|
|
1182
|
-
this._diffuseMaterialArr[1] = 0.9;
|
|
1183
|
-
this._diffuseMaterialArr[2] = 0.83;
|
|
1184
|
-
|
|
1185
|
-
this._ambientMaterialArr[0] = 0.0;
|
|
1186
|
-
this._ambientMaterialArr[1] = 0.0;
|
|
1187
|
-
this._ambientMaterialArr[2] = 0.0;
|
|
1188
|
-
|
|
1189
|
-
this._specularMaterialArr[0] = 0.0003;
|
|
1190
|
-
this._specularMaterialArr[1] = 0.00012;
|
|
1191
|
-
this._specularMaterialArr[2] = 0.00001;
|
|
1192
|
-
this._specularMaterialArr[3] = 20.0;
|
|
1193
|
-
}
|
|
1194
1172
|
} else {
|
|
1195
1173
|
h.programs.drawnode_screen_nl.activate();
|
|
1196
1174
|
sh = h.programs.drawnode_screen_nl._program;
|
|
@@ -1368,6 +1346,7 @@ export class Planet extends RenderNode {
|
|
|
1368
1346
|
let cam = renderer.activeCamera;
|
|
1369
1347
|
|
|
1370
1348
|
gl.disable(gl.BLEND);
|
|
1349
|
+
gl.disable(gl.POLYGON_OFFSET_FILL);
|
|
1371
1350
|
|
|
1372
1351
|
gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
|
|
1373
1352
|
gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
|
|
@@ -1386,7 +1365,6 @@ export class Planet extends RenderNode {
|
|
|
1386
1365
|
rn[i].segment.depthRendering(sh, sl[0], 0);
|
|
1387
1366
|
}
|
|
1388
1367
|
|
|
1389
|
-
gl.enable(gl.POLYGON_OFFSET_FILL);
|
|
1390
1368
|
for (let j = 1, len = sl.length; j < len; j++) {
|
|
1391
1369
|
i = rn.length;
|
|
1392
1370
|
gl.polygonOffset(0, -j);
|
|
@@ -1492,12 +1470,11 @@ export class Planet extends RenderNode {
|
|
|
1492
1470
|
* Returns 3d cartesian coordinates on the relief planet by mouse cursor
|
|
1493
1471
|
* position or null if mouse cursor is outside the planet.
|
|
1494
1472
|
* @public
|
|
1495
|
-
* @param {Boolean} [force=false] - Force framebuffer rendering.
|
|
1496
1473
|
* @returns {Vec3} -
|
|
1497
1474
|
*/
|
|
1498
|
-
getCartesianFromMouseTerrain(
|
|
1475
|
+
getCartesianFromMouseTerrain() {
|
|
1499
1476
|
var ms = this.renderer.events.mouseState;
|
|
1500
|
-
var distance = this.getDistanceFromPixel(ms
|
|
1477
|
+
var distance = this.getDistanceFromPixel(ms);
|
|
1501
1478
|
if (distance) {
|
|
1502
1479
|
return ms.direction.scaleTo(distance).addA(this.renderer.activeCamera.eye);
|
|
1503
1480
|
}
|
|
@@ -1512,8 +1489,8 @@ export class Planet extends RenderNode {
|
|
|
1512
1489
|
* @param {Boolean} [force=false] - Force framebuffer rendering.
|
|
1513
1490
|
* @returns {Vec3} -
|
|
1514
1491
|
*/
|
|
1515
|
-
getCartesianFromPixelTerrain(px
|
|
1516
|
-
var distance = this.getDistanceFromPixel(px
|
|
1492
|
+
getCartesianFromPixelTerrain(px) {
|
|
1493
|
+
var distance = this.getDistanceFromPixel(px);
|
|
1517
1494
|
if (distance) {
|
|
1518
1495
|
var direction = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1519
1496
|
return direction.scaleTo(distance).addA(this.renderer.activeCamera.eye);
|
|
@@ -1592,7 +1569,9 @@ export class Planet extends RenderNode {
|
|
|
1592
1569
|
|
|
1593
1570
|
// HEIGHT
|
|
1594
1571
|
this._heightPickingFramebuffer.activate();
|
|
1595
|
-
this._heightPickingFramebuffer.
|
|
1572
|
+
if (this._heightPickingFramebuffer.isComplete()) {
|
|
1573
|
+
this._heightPickingFramebuffer.readPixels(_tempPickingPix_, spx, spy);
|
|
1574
|
+
}
|
|
1596
1575
|
this._heightPickingFramebuffer.deactivate();
|
|
1597
1576
|
|
|
1598
1577
|
let dist = decodeFloatFromRGBAArr(_tempPickingPix_);
|
|
@@ -1601,20 +1580,19 @@ export class Planet extends RenderNode {
|
|
|
1601
1580
|
dist = this.getDistanceFromPixelEllipsoid(px) || 0;
|
|
1602
1581
|
} else if (dist < DEPTH_DISTANCE) {
|
|
1603
1582
|
r.screenDepthFramebuffer.activate();
|
|
1604
|
-
r.screenDepthFramebuffer.
|
|
1583
|
+
if (r.screenDepthFramebuffer.isComplete()) {
|
|
1584
|
+
r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy);
|
|
1585
|
+
let screenPos = new Vec4(
|
|
1586
|
+
spx * 2.0 - 1.0,
|
|
1587
|
+
spy * 2.0 - 1.0,
|
|
1588
|
+
(_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
|
|
1589
|
+
1.0 * 2.0 - 1.0
|
|
1590
|
+
);
|
|
1591
|
+
let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
|
|
1592
|
+
let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1593
|
+
dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
|
|
1594
|
+
}
|
|
1605
1595
|
r.screenDepthFramebuffer.deactivate();
|
|
1606
|
-
|
|
1607
|
-
let screenPos = new Vec4(
|
|
1608
|
-
spx * 2.0 - 1.0,
|
|
1609
|
-
spy * 2.0 - 1.0,
|
|
1610
|
-
(_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
|
|
1611
|
-
1.0 * 2.0 - 1.0
|
|
1612
|
-
);
|
|
1613
|
-
let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
|
|
1614
|
-
let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1615
|
-
dist =
|
|
1616
|
-
-(viewPosition.z / viewPosition.w) /
|
|
1617
|
-
dir.dot(this.renderer.activeCamera.getForward());
|
|
1618
1596
|
}
|
|
1619
1597
|
|
|
1620
1598
|
return dist;
|
|
@@ -12,26 +12,13 @@ import { Box } from "../bv/Box.js";
|
|
|
12
12
|
import { Vec3 } from "../math/Vec3.js";
|
|
13
13
|
import * as segmentHelper from "../segment/segmentHelper.js";
|
|
14
14
|
import { getMatrixSubArray } from "../utils/shared.js";
|
|
15
|
+
import { Slice } from "./Slice.js";
|
|
15
16
|
|
|
16
17
|
export const MAX_NORMAL_ZOOM = 7;
|
|
17
18
|
|
|
18
19
|
var _tempHigh = new Vec3();
|
|
19
20
|
var _tempLow = new Vec3();
|
|
20
21
|
|
|
21
|
-
var _RenderingSlice = function (p) {
|
|
22
|
-
this.layers = [];
|
|
23
|
-
this.tileOffsetArr = new Float32Array(p.SLICE_SIZE_4);
|
|
24
|
-
this.visibleExtentOffsetArr = new Float32Array(p.SLICE_SIZE_4);
|
|
25
|
-
this.transparentColorArr = new Float32Array(p.SLICE_SIZE_4);
|
|
26
|
-
|
|
27
|
-
this.clear = function () {
|
|
28
|
-
this.layers = null;
|
|
29
|
-
this.tileOffsetArr = null;
|
|
30
|
-
this.visibleExtentOffsetArr = null;
|
|
31
|
-
this.transparentColorArr = null;
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
|
|
35
22
|
let _v0 = new Vec3(),
|
|
36
23
|
_v1 = new Vec3(),
|
|
37
24
|
_v2 = new Vec3(),
|
|
@@ -241,7 +228,7 @@ class Segment {
|
|
|
241
228
|
this._inTheQueue = false;
|
|
242
229
|
this._appliedNeighborsZoom = [0, 0, 0, 0];
|
|
243
230
|
|
|
244
|
-
this.
|
|
231
|
+
this._slices = [];
|
|
245
232
|
|
|
246
233
|
this._indexBuffer = null;
|
|
247
234
|
|
|
@@ -946,12 +933,12 @@ class Segment {
|
|
|
946
933
|
|
|
947
934
|
this.clearSegment();
|
|
948
935
|
|
|
949
|
-
var i = this.
|
|
936
|
+
var i = this._slices.length;
|
|
950
937
|
while (i--) {
|
|
951
|
-
this.
|
|
938
|
+
this._slices[i].clear();
|
|
952
939
|
}
|
|
953
940
|
|
|
954
|
-
this.
|
|
941
|
+
this._slices = null;
|
|
955
942
|
|
|
956
943
|
this.node = null;
|
|
957
944
|
|
|
@@ -990,9 +977,6 @@ class Segment {
|
|
|
990
977
|
this.vertexPositionBufferLow = null;
|
|
991
978
|
this.vertexTextureCoordBuffer = null;
|
|
992
979
|
|
|
993
|
-
this._tileOffsetArr = null;
|
|
994
|
-
this._visibleExtentOffsetArr = null;
|
|
995
|
-
|
|
996
980
|
this._projection = null;
|
|
997
981
|
this._appliedNeighborsZoom = null;
|
|
998
982
|
|
|
@@ -1104,10 +1088,10 @@ class Segment {
|
|
|
1104
1088
|
v_rb = new Vec3(bigOne[9], bigOne[10], bigOne[11]);
|
|
1105
1089
|
|
|
1106
1090
|
let vn = new Vec3(
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1091
|
+
bigOne[3] - bigOne[0],
|
|
1092
|
+
bigOne[4] - bigOne[1],
|
|
1093
|
+
bigOne[5] - bigOne[2]
|
|
1094
|
+
),
|
|
1111
1095
|
vw = new Vec3(
|
|
1112
1096
|
bigOne[6] - bigOne[0],
|
|
1113
1097
|
bigOne[7] - bigOne[1],
|
|
@@ -1291,13 +1275,13 @@ class Segment {
|
|
|
1291
1275
|
n.sideSize[2] =
|
|
1292
1276
|
n.sideSize[3] =
|
|
1293
1277
|
this.gridSize =
|
|
1294
|
-
|
|
1278
|
+
p.terrain.gridSizeByZoom[this.tileZoom] || p.terrain.plainGridSize;
|
|
1295
1279
|
|
|
1296
1280
|
n.sideSizeLog2[0] =
|
|
1297
1281
|
n.sideSizeLog2[1] =
|
|
1298
1282
|
n.sideSizeLog2[2] =
|
|
1299
1283
|
n.sideSizeLog2[3] =
|
|
1300
|
-
|
|
1284
|
+
Math.log2(p.terrain.gridSizeByZoom[this.tileZoom] || p.terrain.plainGridSize);
|
|
1301
1285
|
|
|
1302
1286
|
if (this.tileZoom <= p.terrain.maxZoom) {
|
|
1303
1287
|
var nmc = this.planet._normalMapCreator;
|
|
@@ -1484,11 +1468,12 @@ class Segment {
|
|
|
1484
1468
|
|
|
1485
1469
|
var notEmpty = false;
|
|
1486
1470
|
|
|
1487
|
-
var slice = this.
|
|
1471
|
+
var slice = this._slices[sliceIndex];
|
|
1488
1472
|
|
|
1489
1473
|
if (!slice) {
|
|
1490
|
-
slice = this.
|
|
1474
|
+
slice = this._slices[sliceIndex] = new Slice(this);
|
|
1491
1475
|
} else {
|
|
1476
|
+
//TODO: optimization!!!
|
|
1492
1477
|
slice.layers = [];
|
|
1493
1478
|
}
|
|
1494
1479
|
|
|
@@ -1511,40 +1496,7 @@ class Segment {
|
|
|
1511
1496
|
this.planet._renderCompleted = false;
|
|
1512
1497
|
}
|
|
1513
1498
|
|
|
1514
|
-
slice.
|
|
1515
|
-
|
|
1516
|
-
var n4 = n * 4,
|
|
1517
|
-
n3 = n * 3;
|
|
1518
|
-
|
|
1519
|
-
var arr = li.applyMaterial(m);
|
|
1520
|
-
slice.tileOffsetArr[n4] = arr[0];
|
|
1521
|
-
slice.tileOffsetArr[n4 + 1] = arr[1];
|
|
1522
|
-
slice.tileOffsetArr[n4 + 2] = arr[2];
|
|
1523
|
-
slice.tileOffsetArr[n4 + 3] = arr[3];
|
|
1524
|
-
|
|
1525
|
-
arr = this._getLayerExtentOffset(li);
|
|
1526
|
-
slice.visibleExtentOffsetArr[n4] = arr[0];
|
|
1527
|
-
slice.visibleExtentOffsetArr[n4 + 1] = arr[1];
|
|
1528
|
-
slice.visibleExtentOffsetArr[n4 + 2] = arr[2];
|
|
1529
|
-
slice.visibleExtentOffsetArr[n4 + 3] = arr[3];
|
|
1530
|
-
|
|
1531
|
-
slice.transparentColorArr[n4] = li.transparentColor[0];
|
|
1532
|
-
slice.transparentColorArr[n4 + 1] = li.transparentColor[1];
|
|
1533
|
-
slice.transparentColorArr[n4 + 2] = li.transparentColor[2];
|
|
1534
|
-
slice.transparentColorArr[n4 + 3] = li.opacity;
|
|
1535
|
-
|
|
1536
|
-
p._diffuseMaterialArr[n3 + 3] = li.diffuse.x;
|
|
1537
|
-
p._diffuseMaterialArr[n3 + 1 + 3] = li.diffuse.y;
|
|
1538
|
-
p._diffuseMaterialArr[n3 + 2 + 3] = li.diffuse.z;
|
|
1539
|
-
|
|
1540
|
-
p._ambientMaterialArr[n3 + 3] = li.ambient.x;
|
|
1541
|
-
p._ambientMaterialArr[n3 + 1 + 3] = li.ambient.y;
|
|
1542
|
-
p._ambientMaterialArr[n3 + 2 + 3] = li.ambient.z;
|
|
1543
|
-
|
|
1544
|
-
p._specularMaterialArr[n4 + 4] = li.specular.x;
|
|
1545
|
-
p._specularMaterialArr[n4 + 1 + 4] = li.specular.y;
|
|
1546
|
-
p._specularMaterialArr[n4 + 2 + 4] = li.specular.z;
|
|
1547
|
-
p._specularMaterialArr[n4 + 3 + 4] = li.shininess;
|
|
1499
|
+
slice.append(li, m);
|
|
1548
1500
|
|
|
1549
1501
|
p._samplerArr[n] = n;
|
|
1550
1502
|
|
|
@@ -1561,9 +1513,12 @@ class Segment {
|
|
|
1561
1513
|
gl.uniform1i(shu.samplerCount, n);
|
|
1562
1514
|
gl.uniform1f(shu.height, currHeight);
|
|
1563
1515
|
gl.uniform1iv(shu.samplerArr, p._samplerArr);
|
|
1516
|
+
|
|
1517
|
+
//slice.uniform(gl, shu);
|
|
1518
|
+
|
|
1564
1519
|
gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
|
|
1565
|
-
gl.
|
|
1566
|
-
gl.uniform4fv(shu.
|
|
1520
|
+
gl.uniform1fv(shu.layerOpacityArr, slice.layerOpacityArr);
|
|
1521
|
+
//gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
|
|
1567
1522
|
|
|
1568
1523
|
// bind normalmap texture
|
|
1569
1524
|
if (p.lightEnabled) {
|
|
@@ -1575,30 +1530,12 @@ class Segment {
|
|
|
1575
1530
|
|
|
1576
1531
|
// bind segment specular and night material texture coordinates
|
|
1577
1532
|
gl.uniform4fv(shu.uGlobalTextureCoord, this._globalTextureCoordinates);
|
|
1578
|
-
|
|
1579
|
-
gl.uniform3fv(shu.diffuseMaterial, p._diffuseMaterialArr);
|
|
1580
|
-
gl.uniform3fv(shu.ambientMaterial, p._ambientMaterialArr);
|
|
1581
|
-
gl.uniform4fv(shu.specularMaterial, p._specularMaterialArr);
|
|
1582
1533
|
}
|
|
1583
1534
|
|
|
1584
1535
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
|
|
1585
|
-
gl.vertexAttribPointer(
|
|
1586
|
-
sha.aVertexPositionHigh,
|
|
1587
|
-
this.vertexPositionBufferHigh.itemSize,
|
|
1588
|
-
gl.FLOAT,
|
|
1589
|
-
false,
|
|
1590
|
-
0,
|
|
1591
|
-
0
|
|
1592
|
-
);
|
|
1536
|
+
gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
|
|
1593
1537
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
|
|
1594
|
-
gl.vertexAttribPointer(
|
|
1595
|
-
sha.aVertexPositionLow,
|
|
1596
|
-
this.vertexPositionBufferLow.itemSize,
|
|
1597
|
-
gl.FLOAT,
|
|
1598
|
-
false,
|
|
1599
|
-
0,
|
|
1600
|
-
0
|
|
1601
|
-
);
|
|
1538
|
+
gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
|
|
1602
1539
|
|
|
1603
1540
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
|
|
1604
1541
|
gl.vertexAttribPointer(sha.aTextureCoord, 2, gl.UNSIGNED_SHORT, true, 0, 0);
|
|
@@ -1628,13 +1565,13 @@ class Segment {
|
|
|
1628
1565
|
currHeight = 0;
|
|
1629
1566
|
}
|
|
1630
1567
|
|
|
1631
|
-
var
|
|
1632
|
-
|
|
1633
|
-
var slice = this._renderingSlices[sliceIndex];
|
|
1568
|
+
var slice = this._slices[sliceIndex];
|
|
1634
1569
|
|
|
1635
1570
|
var notEmpty = false;
|
|
1636
1571
|
|
|
1637
|
-
|
|
1572
|
+
let len = slice.layers.length;
|
|
1573
|
+
|
|
1574
|
+
for (let n = 0; n < len; n++) {
|
|
1638
1575
|
notEmpty = true;
|
|
1639
1576
|
p._samplerArr[n] = n;
|
|
1640
1577
|
gl.activeTexture(gl.TEXTURE0 + n);
|
|
@@ -1642,32 +1579,21 @@ class Segment {
|
|
|
1642
1579
|
}
|
|
1643
1580
|
|
|
1644
1581
|
if (notEmpty || !isOverlay) {
|
|
1645
|
-
gl.uniform1i(shu.samplerCount,
|
|
1582
|
+
gl.uniform1i(shu.samplerCount, len);
|
|
1646
1583
|
gl.uniform1f(shu.height, currHeight);
|
|
1647
1584
|
gl.uniform1iv(shu.samplerArr, p._samplerArr);
|
|
1585
|
+
|
|
1586
|
+
//slice.uniform(gl, shu);
|
|
1587
|
+
|
|
1648
1588
|
gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
|
|
1649
|
-
gl.
|
|
1650
|
-
gl.uniform4fv(shu.
|
|
1589
|
+
gl.uniform1fv(shu.layerOpacityArr, slice.layerOpacityArr);
|
|
1590
|
+
//gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
|
|
1651
1591
|
|
|
1652
1592
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
|
|
1653
|
-
gl.vertexAttribPointer(
|
|
1654
|
-
sha.aVertexPositionHigh,
|
|
1655
|
-
this.vertexPositionBufferHigh.itemSize,
|
|
1656
|
-
gl.FLOAT,
|
|
1657
|
-
false,
|
|
1658
|
-
0,
|
|
1659
|
-
0
|
|
1660
|
-
);
|
|
1593
|
+
gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
|
|
1661
1594
|
|
|
1662
1595
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
|
|
1663
|
-
gl.vertexAttribPointer(
|
|
1664
|
-
sha.aVertexPositionLow,
|
|
1665
|
-
this.vertexPositionBufferLow.itemSize,
|
|
1666
|
-
gl.FLOAT,
|
|
1667
|
-
false,
|
|
1668
|
-
0,
|
|
1669
|
-
0
|
|
1670
|
-
);
|
|
1596
|
+
gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
|
|
1671
1597
|
|
|
1672
1598
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
|
|
1673
1599
|
gl.vertexAttribPointer(sha.aTextureCoord, 2, gl.UNSIGNED_SHORT, true, 0, 0);
|
|
@@ -1694,9 +1620,11 @@ class Segment {
|
|
|
1694
1620
|
|
|
1695
1621
|
var notEmpty = false;
|
|
1696
1622
|
|
|
1697
|
-
var slice = this.
|
|
1623
|
+
var slice = this._slices[sliceIndex];
|
|
1624
|
+
|
|
1625
|
+
let len = slice.layers.length;
|
|
1698
1626
|
|
|
1699
|
-
for (
|
|
1627
|
+
for (let n = 0; n < len; n++) {
|
|
1700
1628
|
notEmpty = true;
|
|
1701
1629
|
|
|
1702
1630
|
var li = slice.layers[n];
|
|
@@ -1717,33 +1645,22 @@ class Segment {
|
|
|
1717
1645
|
}
|
|
1718
1646
|
|
|
1719
1647
|
if (notEmpty || !isOverlay) {
|
|
1720
|
-
gl.uniform1i(shu.samplerCount,
|
|
1648
|
+
gl.uniform1i(shu.samplerCount, len);
|
|
1721
1649
|
gl.uniform1f(shu.height, currHeight);
|
|
1722
1650
|
gl.uniform1iv(shu.samplerArr, p._samplerArr);
|
|
1723
1651
|
gl.uniform1iv(shu.pickingMaskArr, p._pickingMaskArr);
|
|
1724
|
-
gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
|
|
1725
|
-
gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
|
|
1726
|
-
gl.uniform4fv(shu.transparentColorArr, slice.transparentColorArr);
|
|
1727
1652
|
gl.uniform4fv(shu.pickingColorArr, p._pickingColorArr);
|
|
1728
1653
|
|
|
1654
|
+
//slice.uniform(gl, shu);
|
|
1655
|
+
|
|
1656
|
+
gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
|
|
1657
|
+
gl.uniform1fv(shu.layerOpacityArr, slice.layerOpacityArr);
|
|
1658
|
+
//gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
|
|
1659
|
+
|
|
1729
1660
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
|
|
1730
|
-
gl.vertexAttribPointer(
|
|
1731
|
-
sha.aVertexPositionHigh,
|
|
1732
|
-
this.vertexPositionBufferHigh.itemSize,
|
|
1733
|
-
gl.FLOAT,
|
|
1734
|
-
false,
|
|
1735
|
-
0,
|
|
1736
|
-
0
|
|
1737
|
-
);
|
|
1661
|
+
gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
|
|
1738
1662
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
|
|
1739
|
-
gl.vertexAttribPointer(
|
|
1740
|
-
sha.aVertexPositionLow,
|
|
1741
|
-
this.vertexPositionBufferLow.itemSize,
|
|
1742
|
-
gl.FLOAT,
|
|
1743
|
-
false,
|
|
1744
|
-
0,
|
|
1745
|
-
0
|
|
1746
|
-
);
|
|
1663
|
+
gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
|
|
1747
1664
|
|
|
1748
1665
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
|
|
1749
1666
|
gl.vertexAttribPointer(sha.aTextureCoord, 2, gl.UNSIGNED_SHORT, true, 0, 0);
|
|
@@ -1773,13 +1690,13 @@ class Segment {
|
|
|
1773
1690
|
currHeight = 0;
|
|
1774
1691
|
}
|
|
1775
1692
|
|
|
1776
|
-
var
|
|
1777
|
-
|
|
1778
|
-
var slice = this._renderingSlices[sliceIndex];
|
|
1693
|
+
var slice = this._slices[sliceIndex];
|
|
1779
1694
|
|
|
1780
1695
|
var notEmpty = false;
|
|
1781
1696
|
|
|
1782
|
-
|
|
1697
|
+
let len = slice.layers.length;
|
|
1698
|
+
|
|
1699
|
+
for (let n = 0; n < len; n++) {
|
|
1783
1700
|
notEmpty = true;
|
|
1784
1701
|
p._samplerArr[n] = n;
|
|
1785
1702
|
gl.activeTexture(gl.TEXTURE0 + n);
|
|
@@ -1787,32 +1704,21 @@ class Segment {
|
|
|
1787
1704
|
}
|
|
1788
1705
|
|
|
1789
1706
|
if (notEmpty || !isOverlay) {
|
|
1790
|
-
gl.uniform1i(shu.samplerCount,
|
|
1707
|
+
gl.uniform1i(shu.samplerCount, len);
|
|
1791
1708
|
gl.uniform1f(shu.height, currHeight);
|
|
1792
1709
|
gl.uniform1iv(shu.samplerArr, p._samplerArr);
|
|
1710
|
+
|
|
1711
|
+
//slice.uniform(gl, shu);
|
|
1712
|
+
|
|
1793
1713
|
gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
|
|
1794
|
-
gl.
|
|
1795
|
-
gl.uniform4fv(shu.
|
|
1714
|
+
gl.uniform1fv(shu.layerOpacityArr, slice.layerOpacityArr);
|
|
1715
|
+
//gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
|
|
1796
1716
|
|
|
1797
1717
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
|
|
1798
|
-
gl.vertexAttribPointer(
|
|
1799
|
-
sha.aVertexPositionHigh,
|
|
1800
|
-
this.vertexPositionBufferHigh.itemSize,
|
|
1801
|
-
gl.FLOAT,
|
|
1802
|
-
false,
|
|
1803
|
-
0,
|
|
1804
|
-
0
|
|
1805
|
-
);
|
|
1718
|
+
gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
|
|
1806
1719
|
|
|
1807
1720
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
|
|
1808
|
-
gl.vertexAttribPointer(
|
|
1809
|
-
sha.aVertexPositionLow,
|
|
1810
|
-
this.vertexPositionBufferLow.itemSize,
|
|
1811
|
-
gl.FLOAT,
|
|
1812
|
-
false,
|
|
1813
|
-
0,
|
|
1814
|
-
0
|
|
1815
|
-
);
|
|
1721
|
+
gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
|
|
1816
1722
|
|
|
1817
1723
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
|
|
1818
1724
|
gl.vertexAttribPointer(sha.aTextureCoord, 2, gl.UNSIGNED_SHORT, true, 0, 0);
|
|
@@ -1826,9 +1732,7 @@ class Segment {
|
|
|
1826
1732
|
var s = this.node.sideSizeLog2;
|
|
1827
1733
|
var cache = this.planet._indexesCache[Math.log2(this.gridSize)][s[0]][s[1]][s[2]][s[3]];
|
|
1828
1734
|
if (!cache.buffer) {
|
|
1829
|
-
let indexes = segmentHelper
|
|
1830
|
-
.getInstance()
|
|
1831
|
-
.createSegmentIndexes(Math.log2(this.gridSize), [s[0], s[1], s[2], s[3]]);
|
|
1735
|
+
let indexes = segmentHelper.getInstance().createSegmentIndexes(Math.log2(this.gridSize), [s[0], s[1], s[2], s[3]]);
|
|
1832
1736
|
cache.buffer = this.planet.renderer.handler.createElementArrayBuffer(indexes, 1);
|
|
1833
1737
|
this.planet._indexesCacheToRemoveCounter++;
|
|
1834
1738
|
indexes = null;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
class Slice {
|
|
4
|
+
constructor(segment) {
|
|
5
|
+
this.segment = segment;
|
|
6
|
+
this.layers = [];
|
|
7
|
+
this.tileOffsetArr = new Float32Array(segment.planet.SLICE_SIZE_4);
|
|
8
|
+
this.layerOpacityArr = new Float32Array(segment.planet.SLICE_SIZE);
|
|
9
|
+
this.init();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
init() {}
|
|
13
|
+
|
|
14
|
+
clear() {
|
|
15
|
+
this.layers = null;
|
|
16
|
+
this.tileOffsetArr = null;
|
|
17
|
+
this.layerOpacityArr = null;
|
|
18
|
+
//this.visibleExtentOffsetArr = null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
append(layer, material) {
|
|
22
|
+
let n = this.layers.length;
|
|
23
|
+
|
|
24
|
+
this.layers.push(layer);
|
|
25
|
+
|
|
26
|
+
this.layerOpacityArr[n] = layer.opacity;
|
|
27
|
+
|
|
28
|
+
let n4 = n * 4;
|
|
29
|
+
|
|
30
|
+
let arr = layer.applyMaterial(material);
|
|
31
|
+
this.tileOffsetArr[n4] = arr[0];
|
|
32
|
+
this.tileOffsetArr[n4 + 1] = arr[1];
|
|
33
|
+
this.tileOffsetArr[n4 + 2] = arr[2];
|
|
34
|
+
this.tileOffsetArr[n4 + 3] = arr[3];
|
|
35
|
+
|
|
36
|
+
//arr = this.segment._getLayerExtentOffset(layer);
|
|
37
|
+
//slice.visibleExtentOffsetArr[n4] = arr[0];
|
|
38
|
+
//slice.visibleExtentOffsetArr[n4 + 1] = arr[1];
|
|
39
|
+
//slice.visibleExtentOffsetArr[n4 + 2] = arr[2];
|
|
40
|
+
//slice.visibleExtentOffsetArr[n4 + 3] = arr[3];
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export { Slice }
|