You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
415 lines
12 KiB
415 lines
12 KiB
9 months ago
|
define([
|
||
|
'./AxisAlignedBoundingBox-1feb0c48',
|
||
|
'./Matrix2-f2da41d4',
|
||
|
'./when-229515d6',
|
||
|
'./TerrainEncoding-6355a4fe',
|
||
|
'./IndexDatatype-b10faa0b',
|
||
|
'./ComponentDatatype-17b06483',
|
||
|
'./RuntimeError-ffe03243',
|
||
|
'./Transforms-7cd3197b',
|
||
|
'./WebMercatorProjection-d69cec15',
|
||
|
'./createTaskProcessorWorker',
|
||
|
'./AttributeCompression-0af3c035',
|
||
|
'./WebGLConstants-4e26b85a',
|
||
|
'./combine-8ce3f24b',
|
||
|
], function (e, t, r, i, n, o, a, s, d, c, h, u, I) {
|
||
|
'use strict';
|
||
|
function l() {
|
||
|
a.DeveloperError.throwInstantiationError();
|
||
|
}
|
||
|
Object.defineProperties(l.prototype, {
|
||
|
errorEvent: { get: a.DeveloperError.throwInstantiationError },
|
||
|
credit: { get: a.DeveloperError.throwInstantiationError },
|
||
|
tilingScheme: { get: a.DeveloperError.throwInstantiationError },
|
||
|
ready: { get: a.DeveloperError.throwInstantiationError },
|
||
|
readyPromise: { get: a.DeveloperError.throwInstantiationError },
|
||
|
hasWaterMask: { get: a.DeveloperError.throwInstantiationError },
|
||
|
hasVertexNormals: { get: a.DeveloperError.throwInstantiationError },
|
||
|
availability: { get: a.DeveloperError.throwInstantiationError },
|
||
|
});
|
||
|
var g = [];
|
||
|
l.getRegularGridIndices = function (e, t) {
|
||
|
var i = g[e];
|
||
|
r.defined(i) || (g[e] = i = []);
|
||
|
var n = i[t];
|
||
|
return (
|
||
|
r.defined(n) ||
|
||
|
E(
|
||
|
e,
|
||
|
t,
|
||
|
(n =
|
||
|
e * t < o.CesiumMath.SIXTY_FOUR_KILOBYTES
|
||
|
? (i[t] = new Uint16Array((e - 1) * (t - 1) * 6))
|
||
|
: (i[t] = new Uint32Array((e - 1) * (t - 1) * 6))),
|
||
|
0
|
||
|
),
|
||
|
n
|
||
|
);
|
||
|
};
|
||
|
var m = [];
|
||
|
l.getRegularGridIndicesAndEdgeIndices = function (e, t) {
|
||
|
var i = m[e];
|
||
|
r.defined(i) || (m[e] = i = []);
|
||
|
var n = i[t];
|
||
|
if (!r.defined(n)) {
|
||
|
var o = l.getRegularGridIndices(e, t),
|
||
|
a = f(e, t),
|
||
|
s = a.westIndicesSouthToNorth,
|
||
|
d = a.southIndicesEastToWest,
|
||
|
c = a.eastIndicesNorthToSouth,
|
||
|
h = a.northIndicesWestToEast;
|
||
|
n = i[t] = {
|
||
|
indices: o,
|
||
|
westIndicesSouthToNorth: s,
|
||
|
southIndicesEastToWest: d,
|
||
|
eastIndicesNorthToSouth: c,
|
||
|
northIndicesWestToEast: h,
|
||
|
};
|
||
|
}
|
||
|
return n;
|
||
|
};
|
||
|
var T = [];
|
||
|
function f(e, t) {
|
||
|
var r,
|
||
|
i = new Array(t),
|
||
|
n = new Array(e),
|
||
|
o = new Array(t),
|
||
|
a = new Array(e);
|
||
|
for (r = 0; r < e; ++r) (a[r] = r), (n[r] = e * t - 1 - r);
|
||
|
for (r = 0; r < t; ++r) (o[r] = (r + 1) * e - 1), (i[r] = (t - r - 1) * e);
|
||
|
return {
|
||
|
westIndicesSouthToNorth: i,
|
||
|
southIndicesEastToWest: n,
|
||
|
eastIndicesNorthToSouth: o,
|
||
|
northIndicesWestToEast: a,
|
||
|
};
|
||
|
}
|
||
|
function E(e, t, r, i) {
|
||
|
for (var n = 0, o = 0; o < t - 1; ++o) {
|
||
|
for (var a = 0; a < e - 1; ++a) {
|
||
|
var s = n,
|
||
|
d = s + e,
|
||
|
c = d + 1,
|
||
|
h = s + 1;
|
||
|
(r[i++] = s), (r[i++] = d), (r[i++] = h), (r[i++] = h), (r[i++] = d), (r[i++] = c), ++n;
|
||
|
}
|
||
|
++n;
|
||
|
}
|
||
|
}
|
||
|
function v(e, t, r, i) {
|
||
|
for (var n = e[0], o = e.length, a = 1; a < o; ++a) {
|
||
|
var s = e[a];
|
||
|
(r[i++] = n),
|
||
|
(r[i++] = s),
|
||
|
(r[i++] = t),
|
||
|
(r[i++] = t),
|
||
|
(r[i++] = s),
|
||
|
(r[i++] = t + 1),
|
||
|
(n = s),
|
||
|
++t;
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
(l.getRegularGridAndSkirtIndicesAndEdgeIndices = function (e, t) {
|
||
|
var i = T[e];
|
||
|
r.defined(i) || (T[e] = i = []);
|
||
|
var o = i[t];
|
||
|
if (!r.defined(o)) {
|
||
|
var a = e * t,
|
||
|
s = (e - 1) * (t - 1) * 6,
|
||
|
d = 2 * e + 2 * t,
|
||
|
c = a + d,
|
||
|
h = s + 6 * Math.max(0, d - 4),
|
||
|
u = f(e, t),
|
||
|
I = u.westIndicesSouthToNorth,
|
||
|
g = u.southIndicesEastToWest,
|
||
|
m = u.eastIndicesNorthToSouth,
|
||
|
v = u.northIndicesWestToEast,
|
||
|
p = n.IndexDatatype.createTypedArray(c, h);
|
||
|
E(e, t, p, 0),
|
||
|
l.addSkirtIndices(I, g, m, v, a, p, s),
|
||
|
(o = i[t] =
|
||
|
{
|
||
|
indices: p,
|
||
|
westIndicesSouthToNorth: I,
|
||
|
southIndicesEastToWest: g,
|
||
|
eastIndicesNorthToSouth: m,
|
||
|
northIndicesWestToEast: v,
|
||
|
indexCountWithoutSkirts: s,
|
||
|
});
|
||
|
}
|
||
|
return o;
|
||
|
}),
|
||
|
(l.addSkirtIndices = function (e, t, r, i, n, o, a) {
|
||
|
var s = n;
|
||
|
(a = v(e, s, o, a)),
|
||
|
(a = v(t, (s += e.length), o, a)),
|
||
|
(a = v(r, (s += t.length), o, a)),
|
||
|
v(i, (s += r.length), o, a);
|
||
|
}),
|
||
|
(l.heightmapTerrainQuality = 0.25),
|
||
|
(l.getEstimatedLevelZeroGeometricErrorForAHeightmap = function (e, t, r) {
|
||
|
return (2 * e.maximumRadius * Math.PI * l.heightmapTerrainQuality) / (t * r);
|
||
|
}),
|
||
|
(l.prototype.requestTileGeometry = a.DeveloperError.throwInstantiationError),
|
||
|
(l.prototype.getLevelMaximumGeometricError = a.DeveloperError.throwInstantiationError),
|
||
|
(l.prototype.getTileDataAvailable = a.DeveloperError.throwInstantiationError),
|
||
|
(l.prototype.loadTileDataAvailability = a.DeveloperError.throwInstantiationError);
|
||
|
var p = 32767,
|
||
|
y = new t.Cartesian3(),
|
||
|
N = new t.Cartesian3(),
|
||
|
w = new t.Cartesian3(),
|
||
|
S = new t.Cartographic(),
|
||
|
b = new t.Cartesian2();
|
||
|
function M(e, r, i, n, a, s, d, c, h) {
|
||
|
var u = Number.POSITIVE_INFINITY,
|
||
|
I = a.north,
|
||
|
l = a.south,
|
||
|
g = a.east,
|
||
|
m = a.west;
|
||
|
g < m && (g += o.CesiumMath.TWO_PI);
|
||
|
for (var T = e.length, f = 0; f < T; ++f) {
|
||
|
var E = e[f],
|
||
|
v = i[E],
|
||
|
p = n[E];
|
||
|
(S.longitude = o.CesiumMath.lerp(m, g, p.x)),
|
||
|
(S.latitude = o.CesiumMath.lerp(l, I, p.y)),
|
||
|
(S.height = v - r);
|
||
|
var N = s.cartographicToCartesian(S, y);
|
||
|
t.Matrix4.multiplyByPoint(d, N, N),
|
||
|
t.Cartesian3.minimumByComponent(N, c, c),
|
||
|
t.Cartesian3.maximumByComponent(N, h, h),
|
||
|
(u = Math.min(u, S.height));
|
||
|
}
|
||
|
return u;
|
||
|
}
|
||
|
function x(e, t, i, n, a, s, c, h, u, I, l, g, m, T) {
|
||
|
var f = r.defined(c),
|
||
|
E = u.north,
|
||
|
v = u.south,
|
||
|
p = u.east,
|
||
|
N = u.west;
|
||
|
p < N && (p += o.CesiumMath.TWO_PI);
|
||
|
for (var w = i.length, M = 0; M < w; ++M) {
|
||
|
var x = i[M],
|
||
|
A = a[x],
|
||
|
C = s[x];
|
||
|
(S.longitude = o.CesiumMath.lerp(N, p, C.x) + m),
|
||
|
(S.latitude = o.CesiumMath.lerp(v, E, C.y) + T),
|
||
|
(S.height = A - I);
|
||
|
var W,
|
||
|
P,
|
||
|
D = h.cartographicToCartesian(S, y);
|
||
|
if (f) {
|
||
|
var k = 2 * x;
|
||
|
(b.x = c[k]), (b.y = c[k + 1]);
|
||
|
}
|
||
|
n.hasWebMercatorT &&
|
||
|
(W = (d.WebMercatorProjection.geodeticLatitudeToMercatorAngle(S.latitude) - l) * g),
|
||
|
n.hasGeodeticSurfaceNormals && (P = h.geodeticSurfaceNormal(D)),
|
||
|
(t = n.encode(e, t, D, C, S.height, b, W, P));
|
||
|
}
|
||
|
}
|
||
|
function A(e, t) {
|
||
|
var i;
|
||
|
return (
|
||
|
'function' == typeof e.slice && 'function' != typeof (i = e.slice()).sort && (i = void 0),
|
||
|
r.defined(i) || (i = Array.prototype.slice.call(e)),
|
||
|
i.sort(t),
|
||
|
i
|
||
|
);
|
||
|
}
|
||
|
return c(function (a, c) {
|
||
|
var h,
|
||
|
u,
|
||
|
I = a.quantizedVertices,
|
||
|
g = I.length / 3,
|
||
|
m = a.octEncodedNormals,
|
||
|
T =
|
||
|
a.westIndices.length + a.eastIndices.length + a.southIndices.length + a.northIndices.length,
|
||
|
f = a.includeWebMercatorT,
|
||
|
E = a.exaggeration,
|
||
|
v = a.exaggerationRelativeHeight,
|
||
|
C = 1 !== E,
|
||
|
W = t.Rectangle.clone(a.rectangle),
|
||
|
P = W.west,
|
||
|
D = W.south,
|
||
|
k = W.east,
|
||
|
F = W.north,
|
||
|
H = t.Ellipsoid.clone(a.ellipsoid),
|
||
|
_ = a.minimumHeight,
|
||
|
G = a.maximumHeight,
|
||
|
V = a.relativeToCenter,
|
||
|
Y = s.Transforms.eastNorthUpToFixedFrame(V, H),
|
||
|
O = t.Matrix4.inverseTransformation(Y, new t.Matrix4());
|
||
|
f &&
|
||
|
((h = d.WebMercatorProjection.geodeticLatitudeToMercatorAngle(D)),
|
||
|
(u = 1 / (d.WebMercatorProjection.geodeticLatitudeToMercatorAngle(F) - h)));
|
||
|
var B = I.subarray(0, g),
|
||
|
R = I.subarray(g, 2 * g),
|
||
|
L = I.subarray(2 * g, 3 * g),
|
||
|
j = r.defined(m),
|
||
|
U = new Array(g),
|
||
|
z = new Array(g),
|
||
|
q = new Array(g),
|
||
|
Q = f ? new Array(g) : [],
|
||
|
K = C ? new Array(g) : [],
|
||
|
X = N;
|
||
|
(X.x = Number.POSITIVE_INFINITY),
|
||
|
(X.y = Number.POSITIVE_INFINITY),
|
||
|
(X.z = Number.POSITIVE_INFINITY);
|
||
|
var Z = w;
|
||
|
(Z.x = Number.NEGATIVE_INFINITY),
|
||
|
(Z.y = Number.NEGATIVE_INFINITY),
|
||
|
(Z.z = Number.NEGATIVE_INFINITY);
|
||
|
for (
|
||
|
var J = Number.POSITIVE_INFINITY,
|
||
|
$ = Number.NEGATIVE_INFINITY,
|
||
|
ee = Number.POSITIVE_INFINITY,
|
||
|
te = Number.NEGATIVE_INFINITY,
|
||
|
re = 0;
|
||
|
re < g;
|
||
|
++re
|
||
|
) {
|
||
|
var ie = B[re],
|
||
|
ne = R[re],
|
||
|
oe = ie / p,
|
||
|
ae = ne / p,
|
||
|
se = o.CesiumMath.lerp(_, G, L[re] / p);
|
||
|
(S.longitude = o.CesiumMath.lerp(P, k, oe)),
|
||
|
(S.latitude = o.CesiumMath.lerp(D, F, ae)),
|
||
|
(S.height = se),
|
||
|
(J = Math.min(S.longitude, J)),
|
||
|
($ = Math.max(S.longitude, $)),
|
||
|
(ee = Math.min(S.latitude, ee)),
|
||
|
(te = Math.max(S.latitude, te));
|
||
|
var de = H.cartographicToCartesian(S);
|
||
|
(U[re] = new t.Cartesian2(oe, ae)),
|
||
|
(z[re] = se),
|
||
|
(q[re] = de),
|
||
|
f &&
|
||
|
(Q[re] = (d.WebMercatorProjection.geodeticLatitudeToMercatorAngle(S.latitude) - h) * u),
|
||
|
C && (K[re] = H.geodeticSurfaceNormal(de)),
|
||
|
t.Matrix4.multiplyByPoint(O, de, y),
|
||
|
t.Cartesian3.minimumByComponent(y, X, X),
|
||
|
t.Cartesian3.maximumByComponent(y, Z, Z);
|
||
|
}
|
||
|
var ce,
|
||
|
he = A(a.westIndices, function (e, t) {
|
||
|
return U[e].y - U[t].y;
|
||
|
}),
|
||
|
ue = A(a.eastIndices, function (e, t) {
|
||
|
return U[t].y - U[e].y;
|
||
|
}),
|
||
|
Ie = A(a.southIndices, function (e, t) {
|
||
|
return U[t].x - U[e].x;
|
||
|
}),
|
||
|
le = A(a.northIndices, function (e, t) {
|
||
|
return U[e].x - U[t].x;
|
||
|
});
|
||
|
_ < 0 &&
|
||
|
(ce = new i.EllipsoidalOccluder(H).computeHorizonCullingPointPossiblyUnderEllipsoid(V, q, _));
|
||
|
var ge = _;
|
||
|
(ge = Math.min(ge, M(a.westIndices, a.westSkirtHeight, z, U, W, H, O, X, Z))),
|
||
|
(ge = Math.min(ge, M(a.southIndices, a.southSkirtHeight, z, U, W, H, O, X, Z))),
|
||
|
(ge = Math.min(ge, M(a.eastIndices, a.eastSkirtHeight, z, U, W, H, O, X, Z))),
|
||
|
(ge = Math.min(ge, M(a.northIndices, a.northSkirtHeight, z, U, W, H, O, X, Z)));
|
||
|
for (
|
||
|
var me = new e.AxisAlignedBoundingBox(X, Z, V),
|
||
|
Te = new i.TerrainEncoding(V, me, ge, G, Y, j, f, C, E, v),
|
||
|
fe = Te.stride,
|
||
|
Ee = new Float32Array(g * fe + T * fe),
|
||
|
ve = 0,
|
||
|
pe = 0;
|
||
|
pe < g;
|
||
|
++pe
|
||
|
) {
|
||
|
if (j) {
|
||
|
var ye = 2 * pe;
|
||
|
(b.x = m[ye]), (b.y = m[ye + 1]);
|
||
|
}
|
||
|
ve = Te.encode(Ee, ve, q[pe], U[pe], z[pe], b, Q[pe], K[pe]);
|
||
|
}
|
||
|
var Ne = Math.max(0, 2 * (T - 4)),
|
||
|
we = a.indices.length + 3 * Ne,
|
||
|
Se = n.IndexDatatype.createTypedArray(g + T, we);
|
||
|
Se.set(a.indices, 0);
|
||
|
var be = 1e-4,
|
||
|
Me = ($ - J) * be,
|
||
|
xe = (te - ee) * be,
|
||
|
Ae = -Me,
|
||
|
Ce = Me,
|
||
|
We = xe,
|
||
|
Pe = -xe,
|
||
|
De = g * fe;
|
||
|
return (
|
||
|
x(Ee, De, he, Te, z, U, m, H, W, a.westSkirtHeight, h, u, Ae, 0),
|
||
|
x(
|
||
|
Ee,
|
||
|
(De += a.westIndices.length * fe),
|
||
|
Ie,
|
||
|
Te,
|
||
|
z,
|
||
|
U,
|
||
|
m,
|
||
|
H,
|
||
|
W,
|
||
|
a.southSkirtHeight,
|
||
|
h,
|
||
|
u,
|
||
|
0,
|
||
|
Pe
|
||
|
),
|
||
|
x(
|
||
|
Ee,
|
||
|
(De += a.southIndices.length * fe),
|
||
|
ue,
|
||
|
Te,
|
||
|
z,
|
||
|
U,
|
||
|
m,
|
||
|
H,
|
||
|
W,
|
||
|
a.eastSkirtHeight,
|
||
|
h,
|
||
|
u,
|
||
|
Ce,
|
||
|
0
|
||
|
),
|
||
|
x(
|
||
|
Ee,
|
||
|
(De += a.eastIndices.length * fe),
|
||
|
le,
|
||
|
Te,
|
||
|
z,
|
||
|
U,
|
||
|
m,
|
||
|
H,
|
||
|
W,
|
||
|
a.northSkirtHeight,
|
||
|
h,
|
||
|
u,
|
||
|
0,
|
||
|
We
|
||
|
),
|
||
|
l.addSkirtIndices(he, Ie, ue, le, g, Se, a.indices.length),
|
||
|
c.push(Ee.buffer, Se.buffer),
|
||
|
{
|
||
|
vertices: Ee.buffer,
|
||
|
indices: Se.buffer,
|
||
|
westIndicesSouthToNorth: he,
|
||
|
southIndicesEastToWest: Ie,
|
||
|
eastIndicesNorthToSouth: ue,
|
||
|
northIndicesWestToEast: le,
|
||
|
vertexStride: fe,
|
||
|
center: V,
|
||
|
minimumHeight: _,
|
||
|
maximumHeight: G,
|
||
|
occludeePointInScaledSpace: ce,
|
||
|
encoding: Te,
|
||
|
indexCountWithoutSkirts: a.indices.length,
|
||
|
}
|
||
|
);
|
||
|
});
|
||
|
});
|