cesium-examples/map/libs/computeVertexNormals.js

61 lines
2.6 KiB
JavaScript

(function () {
"use strict";
function n(t) {
var e = t.indices, i = t.attributes, n = e.length;
if (i.position) {
var o = i.position.values;
if (void 0 === i.normal)
i.normal = new Cesium.GeometryAttribute({
componentDatatype: Cesium.ComponentDatatype.FLOAT,
componentsPerAttribute: 3,
values: new Float32Array(o.length)
});
else
for (var a = i.normal.values, s = 0; s < n; s++)
a[s] = 0;
for (var u, l, h, d = i.normal.values, m = new Cesium.Cartesian3, f = new Cesium.Cartesian3, p = new Cesium.Cartesian3, c = new Cesium.Cartesian3, _ = new Cesium.Cartesian3, s = 0; s < n; s += 3)
u = 3 * e[s + 0],
l = 3 * e[s + 1],
h = 3 * e[s + 2],
Cesium.Cartesian3.fromArray(o, u, m),
Cesium.Cartesian3.fromArray(o, l, f),
Cesium.Cartesian3.fromArray(o, h, p),
Cesium.Cartesian3.subtract(p, f, c),
Cesium.Cartesian3.subtract(m, f, _),
Cesium.Cartesian3.cross(c, _, c),
d[u] += c.x,
d[u + 1] += c.y,
d[u + 2] += c.z,
d[l] += c.x,
d[l + 1] += c.y,
d[l + 2] += c.z,
d[h] += c.x, d[h + 1] += c.y,
d[h + 2] += c.z;
r(t),
i.normal.needsUpdate = !0
} return t
}
function r(t) {
for (var e, i, n, r, o = t.attributes.normal.values, a = 0; a < o.length; a += 3)
e = o[a], i = o[a + 1], n = o[a + 2], r = 1 / Math.sqrt(e * e + i * i + n * n), o[a] = e * r, o[a + 1] = i * r, o[a + 2] = n * r
}
function o(t, e, i, n) {
n = n || Cesium.Ellipsoid.WGS84, Cesium.Matrix4.multiplyByPoint(e, t, a),
Cesium.Cartesian3.subtract(a, i.origin, i.direction),
Cesium.Cartesian3.normalize(i.direction, i.direction);
var r = Cesium.IntersectionTests.rayEllipsoid(i, n), o = null;
if (r && (o = Cesium.Ray.getPoint(i, r.start)), o)
try {
Cesium.Cartographic.fromCartesian(o, null, s)
}
catch (t) {
return null
}
return o
}
Object.defineProperty(Cesium, "__esModule", {
value: !0
});
var a = new Cesium.Cartesian3, s = (new Cesium.Ray, new Cesium.Cartographic);
Cesium.computeVertexNormals = n, Cesium.extend2Earth = o
})()