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.

473 lines
14 KiB

define([
'./AttributeCompression-0af3c035',
'./Transforms-7cd3197b',
'./Matrix2-f2da41d4',
'./when-229515d6',
'./TerrainEncoding-6355a4fe',
'./IndexDatatype-b10faa0b',
'./RuntimeError-ffe03243',
'./ComponentDatatype-17b06483',
'./OrientedBoundingBox-86debc5a',
'./createTaskProcessorWorker',
'./combine-8ce3f24b',
'./WebGLConstants-4e26b85a',
'./EllipsoidTangentPlane-b27cd2f7',
'./AxisAlignedBoundingBox-1feb0c48',
'./IntersectionTests-1b8a3cb9',
'./Plane-0421a8be',
], function (e, i, t, n, s, r, h, u, o, a, p, d, f, l, c, g) {
'use strict';
var m = {
clipTriangleAtAxisAlignedThreshold: function (e, i, t, s, r, h) {
var u, o, a;
n.defined(h) ? (h.length = 0) : (h = []),
i ? ((u = t < e), (o = s < e), (a = r < e)) : ((u = t > e), (o = s > e), (a = r > e));
var p,
d,
f,
l,
c,
g,
m = u + o + a;
return (
1 === m
? u
? ((p = (e - t) / (s - t)),
(d = (e - t) / (r - t)),
h.push(1),
h.push(2),
1 !== d && (h.push(-1), h.push(0), h.push(2), h.push(d)),
1 !== p && (h.push(-1), h.push(0), h.push(1), h.push(p)))
: o
? ((f = (e - s) / (r - s)),
(l = (e - s) / (t - s)),
h.push(2),
h.push(0),
1 !== l && (h.push(-1), h.push(1), h.push(0), h.push(l)),
1 !== f && (h.push(-1), h.push(1), h.push(2), h.push(f)))
: a &&
((c = (e - r) / (t - r)),
(g = (e - r) / (s - r)),
h.push(0),
h.push(1),
1 !== g && (h.push(-1), h.push(2), h.push(1), h.push(g)),
1 !== c && (h.push(-1), h.push(2), h.push(0), h.push(c)))
: 2 === m
? u || t === e
? o || s === e
? a ||
r === e ||
((d = (e - t) / (r - t)),
(f = (e - s) / (r - s)),
h.push(2),
h.push(-1),
h.push(0),
h.push(2),
h.push(d),
h.push(-1),
h.push(1),
h.push(2),
h.push(f))
: ((g = (e - r) / (s - r)),
(p = (e - t) / (s - t)),
h.push(1),
h.push(-1),
h.push(2),
h.push(1),
h.push(g),
h.push(-1),
h.push(0),
h.push(1),
h.push(p))
: ((l = (e - s) / (t - s)),
(c = (e - r) / (t - r)),
h.push(0),
h.push(-1),
h.push(1),
h.push(0),
h.push(l),
h.push(-1),
h.push(2),
h.push(0),
h.push(c))
: 3 !== m && (h.push(0), h.push(1), h.push(2)),
h
);
},
computeBarycentricCoordinates: function (e, i, s, r, h, u, o, a, p) {
var d = s - o,
f = o - h,
l = u - a,
c = r - a,
g = 1 / (l * d + f * c),
m = i - a,
x = e - o,
v = (l * x + f * m) * g,
w = (-c * x + d * m) * g,
C = 1 - v - w;
return n.defined(p) ? ((p.x = v), (p.y = w), (p.z = C), p) : new t.Cartesian3(v, w, C);
},
computeLineSegmentLineSegmentIntersection: function (e, i, s, r, h, u, o, a, p) {
var d = (a - u) * (s - e) - (o - h) * (r - i);
if (0 !== d) {
var f = ((o - h) * (i - u) - (a - u) * (e - h)) / d,
l = ((s - e) * (i - u) - (r - i) * (e - h)) / d;
return f >= 0 && f <= 1 && l >= 0 && l <= 1
? (n.defined(p) || (p = new t.Cartesian2()),
(p.x = e + f * (s - e)),
(p.y = i + f * (r - i)),
p)
: void 0;
}
},
},
x = 32767,
v = 16383,
w = [],
C = [],
B = [],
y = new t.Cartographic(),
b = new t.Cartesian3(),
I = [],
A = [],
T = [],
z = [],
M = [],
N = new t.Cartesian3(),
V = new i.BoundingSphere(),
E = new o.OrientedBoundingBox(),
R = new t.Cartesian2(),
H = new t.Cartesian3();
function O() {
(this.vertexBuffer = void 0),
(this.index = void 0),
(this.first = void 0),
(this.second = void 0),
(this.ratio = void 0);
}
(O.prototype.clone = function (e) {
return (
n.defined(e) || (e = new O()),
(e.uBuffer = this.uBuffer),
(e.vBuffer = this.vBuffer),
(e.heightBuffer = this.heightBuffer),
(e.normalBuffer = this.normalBuffer),
(e.index = this.index),
(e.first = this.first),
(e.second = this.second),
(e.ratio = this.ratio),
e
);
}),
(O.prototype.initializeIndexed = function (e, i, t, n, s) {
(this.uBuffer = e),
(this.vBuffer = i),
(this.heightBuffer = t),
(this.normalBuffer = n),
(this.index = s),
(this.first = void 0),
(this.second = void 0),
(this.ratio = void 0);
}),
(O.prototype.initializeFromClipResult = function (e, i, t) {
var n = i + 1;
return (
-1 !== e[i]
? t[e[i]].clone(this)
: ((this.vertexBuffer = void 0),
(this.index = void 0),
(this.first = t[e[n]]),
++n,
(this.second = t[e[n]]),
++n,
(this.ratio = e[n]),
++n),
n
);
}),
(O.prototype.getKey = function () {
return this.isIndexed()
? this.index
: JSON.stringify({
first: this.first.getKey(),
second: this.second.getKey(),
ratio: this.ratio,
});
}),
(O.prototype.isIndexed = function () {
return n.defined(this.index);
}),
(O.prototype.getH = function () {
return n.defined(this.index)
? this.heightBuffer[this.index]
: u.CesiumMath.lerp(this.first.getH(), this.second.getH(), this.ratio);
}),
(O.prototype.getU = function () {
return n.defined(this.index)
? this.uBuffer[this.index]
: u.CesiumMath.lerp(this.first.getU(), this.second.getU(), this.ratio);
}),
(O.prototype.getV = function () {
return n.defined(this.index)
? this.vBuffer[this.index]
: u.CesiumMath.lerp(this.first.getV(), this.second.getV(), this.ratio);
});
var S = new t.Cartesian2(),
U = -1,
F = [new t.Cartesian3(), new t.Cartesian3()],
P = [new t.Cartesian3(), new t.Cartesian3()];
function D(i, n) {
++U;
var s = F[U],
r = P[U];
return (
(s = e.AttributeCompression.octDecode(i.first.getNormalX(), i.first.getNormalY(), s)),
(r = e.AttributeCompression.octDecode(i.second.getNormalX(), i.second.getNormalY(), r)),
(b = t.Cartesian3.lerp(s, r, i.ratio, b)),
t.Cartesian3.normalize(b, b),
e.AttributeCompression.octEncode(b, n),
--U,
n
);
}
(O.prototype.getNormalX = function () {
return n.defined(this.index) ? this.normalBuffer[2 * this.index] : (S = D(this, S)).x;
}),
(O.prototype.getNormalY = function () {
return n.defined(this.index) ? this.normalBuffer[2 * this.index + 1] : (S = D(this, S)).y;
});
var W = [];
function X(e, i, t, s, r, h, u, o, a) {
if (0 !== u.length) {
for (var p = 0, d = 0; d < u.length; ) d = W[p++].initializeFromClipResult(u, d, o);
for (var f = 0; f < p; ++f) {
var l = W[f];
if (l.isIndexed())
(l.newIndex = h[l.index]),
(l.uBuffer = e),
(l.vBuffer = i),
(l.heightBuffer = t),
a && (l.normalBuffer = s);
else {
var c = l.getKey();
if (n.defined(h[c])) l.newIndex = h[c];
else {
var g = e.length;
e.push(l.getU()),
i.push(l.getV()),
t.push(l.getH()),
a && (s.push(l.getNormalX()), s.push(l.getNormalY())),
(l.newIndex = g),
(h[c] = g);
}
}
}
3 === p
? (r.push(W[0].newIndex), r.push(W[1].newIndex), r.push(W[2].newIndex))
: 4 === p &&
(r.push(W[0].newIndex),
r.push(W[1].newIndex),
r.push(W[2].newIndex),
r.push(W[0].newIndex),
r.push(W[2].newIndex),
r.push(W[3].newIndex));
}
}
return (
W.push(new O()),
W.push(new O()),
W.push(new O()),
W.push(new O()),
a(function (e, n) {
var h = e.isEastChild,
a = e.isNorthChild,
p = h ? v : 0,
d = h ? x : v,
f = a ? v : 0,
l = a ? x : v,
c = I,
g = A,
S = T,
U = M;
(c.length = 0), (g.length = 0), (S.length = 0), (U.length = 0);
var F = z;
F.length = 0;
var P = {},
D = e.vertices,
W = e.indices;
W = W.subarray(0, e.indexCountWithoutSkirts);
var k,
K,
L,
Y,
_,
G = s.TerrainEncoding.clone(e.encoding),
J = G.hasVertexNormals,
Z = 0,
j = e.vertexCountWithoutSkirts,
q = e.minimumHeight,
Q = e.maximumHeight,
$ = new Array(j),
ee = new Array(j),
ie = new Array(j),
te = J ? new Array(2 * j) : void 0;
for (K = 0, L = 0; K < j; ++K, L += 2) {
var ne = G.decodeTextureCoordinates(D, K, R);
if (
((k = G.decodeHeight(D, K)),
(Y = u.CesiumMath.clamp((ne.x * x) | 0, 0, x)),
(_ = u.CesiumMath.clamp((ne.y * x) | 0, 0, x)),
(ie[K] = u.CesiumMath.clamp((((k - q) / (Q - q)) * x) | 0, 0, x)),
Y < 20 && (Y = 0),
_ < 20 && (_ = 0),
x - Y < 20 && (Y = x),
x - _ < 20 && (_ = x),
($[K] = Y),
(ee[K] = _),
J)
) {
var se = G.getOctEncodedNormal(D, K, H);
(te[L] = se.x), (te[L + 1] = se.y);
}
((h && Y >= v) || (!h && Y <= v)) &&
((a && _ >= v) || (!a && _ <= v)) &&
((P[K] = Z),
c.push(Y),
g.push(_),
S.push(ie[K]),
J && (U.push(te[L]), U.push(te[L + 1])),
++Z);
}
var re = [];
re.push(new O()), re.push(new O()), re.push(new O());
var he,
ue = [];
for (ue.push(new O()), ue.push(new O()), ue.push(new O()), K = 0; K < W.length; K += 3) {
var oe = W[K],
ae = W[K + 1],
pe = W[K + 2],
de = $[oe],
fe = $[ae],
le = $[pe];
re[0].initializeIndexed($, ee, ie, te, oe),
re[1].initializeIndexed($, ee, ie, te, ae),
re[2].initializeIndexed($, ee, ie, te, pe);
var ce = m.clipTriangleAtAxisAlignedThreshold(v, h, de, fe, le, w);
(he = 0) >= ce.length ||
(he = ue[0].initializeFromClipResult(ce, he, re)) >= ce.length ||
(he = ue[1].initializeFromClipResult(ce, he, re)) >= ce.length ||
((he = ue[2].initializeFromClipResult(ce, he, re)),
X(
c,
g,
S,
U,
F,
P,
m.clipTriangleAtAxisAlignedThreshold(v, a, ue[0].getV(), ue[1].getV(), ue[2].getV(), C),
ue,
J
),
he < ce.length &&
(ue[2].clone(ue[1]),
ue[2].initializeFromClipResult(ce, he, re),
X(
c,
g,
S,
U,
F,
P,
m.clipTriangleAtAxisAlignedThreshold(
v,
a,
ue[0].getV(),
ue[1].getV(),
ue[2].getV(),
C
),
ue,
J
)));
}
var ge = h ? -32767 : 0,
me = a ? -32767 : 0,
xe = [],
ve = [],
we = [],
Ce = [],
Be = Number.MAX_VALUE,
ye = -Be,
be = B;
be.length = 0;
var Ie = t.Ellipsoid.clone(e.ellipsoid),
Ae = t.Rectangle.clone(e.childRectangle),
Te = Ae.north,
ze = Ae.south,
Me = Ae.east,
Ne = Ae.west;
for (Me < Ne && (Me += u.CesiumMath.TWO_PI), K = 0; K < c.length; ++K)
(Y = Math.round(c[K])) <= p
? (xe.push(K), (Y = 0))
: Y >= d
? (we.push(K), (Y = x))
: (Y = 2 * Y + ge),
(c[K] = Y),
(_ = Math.round(g[K])) <= f
? (ve.push(K), (_ = 0))
: _ >= l
? (Ce.push(K), (_ = x))
: (_ = 2 * _ + me),
(g[K] = _),
(k = u.CesiumMath.lerp(q, Q, S[K] / x)) < Be && (Be = k),
k > ye && (ye = k),
(S[K] = k),
(y.longitude = u.CesiumMath.lerp(Ne, Me, Y / x)),
(y.latitude = u.CesiumMath.lerp(ze, Te, _ / x)),
(y.height = k),
Ie.cartographicToCartesian(y, b),
be.push(b.x),
be.push(b.y),
be.push(b.z);
var Ve = i.BoundingSphere.fromVertices(be, t.Cartesian3.ZERO, 3, V),
Ee = o.OrientedBoundingBox.fromRectangle(Ae, Be, ye, Ie, E),
Re = new s.EllipsoidalOccluder(
Ie
).computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid(
Ve.center,
be,
3,
Ve.center,
Be,
N
),
He = ye - Be,
Oe = new Uint16Array(c.length + g.length + S.length);
for (K = 0; K < c.length; ++K) Oe[K] = c[K];
var Se = c.length;
for (K = 0; K < g.length; ++K) Oe[Se + K] = g[K];
for (Se += g.length, K = 0; K < S.length; ++K) Oe[Se + K] = (x * (S[K] - Be)) / He;
var Ue,
Fe = r.IndexDatatype.createTypedArray(c.length, F);
if (J) {
var Pe = new Uint8Array(U);
n.push(Oe.buffer, Fe.buffer, Pe.buffer), (Ue = Pe.buffer);
} else n.push(Oe.buffer, Fe.buffer);
return {
vertices: Oe.buffer,
encodedNormals: Ue,
indices: Fe.buffer,
minimumHeight: Be,
maximumHeight: ye,
westIndices: xe,
southIndices: ve,
eastIndices: we,
northIndices: Ce,
boundingSphere: Ve,
orientedBoundingBox: Ee,
horizonOcclusionPoint: Re,
};
})
);
});