@realsee/dnalogel
Version:
32 lines (31 loc) • 2.52 kB
JavaScript
import * as P from "three";
const g = (B) => {
const n = B.elements, e = n[0], o = n[1], t = n[2], c = n[3], r = n[4], s = n[5], i = n[6], a = n[7], l = n[8], p = n[9], f = n[10], d = n[11], u = n[12], x = n[13], m = n[14], v = n[15], M = p * m * a - x * f * a + x * i * d - s * m * d - p * i * v + s * f * v, W = u * f * a - l * m * a - u * i * d + r * m * d + l * i * v - r * f * v, E = l * x * a - u * p * a + u * s * d - r * x * d - l * s * v + r * p * v, w = u * p * i - l * x * i - u * s * f + r * x * f + l * s * m - r * p * m, h = e * M + o * W + t * E + c * w;
if (h === 0)
return B.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
const y = 1 / h;
return n[0] = M * y, n[1] = (x * f * c - p * m * c - x * t * d + o * m * d + p * t * v - o * f * v) * y, n[2] = (s * m * c - x * i * c + x * t * a - o * m * a - s * t * v + o * i * v) * y, n[3] = (p * i * c - s * f * c - p * t * a + o * f * a + s * t * d - o * i * d) * y, n[4] = W * y, n[5] = (l * m * c - u * f * c + u * t * d - e * m * d - l * t * v + e * f * v) * y, n[6] = (u * i * c - r * m * c - u * t * a + e * m * a + r * t * v - e * i * v) * y, n[7] = (r * f * c - l * i * c + l * t * a - e * f * a - r * t * d + e * i * d) * y, n[8] = E * y, n[9] = (u * p * c - l * x * c - u * o * d + e * x * d + l * o * v - e * p * v) * y, n[10] = (r * x * c - u * s * c + u * o * a - e * x * a - r * o * v + e * s * v) * y, n[11] = (l * s * c - r * p * c - l * o * a + e * p * a + r * o * d - e * s * d) * y, n[12] = w * y, n[13] = (l * x * t - u * p * t + u * o * f - e * x * f - l * o * m + e * p * m) * y, n[14] = (u * s * t - r * x * t - u * o * i + e * x * i + r * o * m - e * s * m) * y, n[15] = (r * p * t - l * s * t + l * o * i - e * p * i - r * o * f + e * s * f) * y, B;
};
function A(B) {
const n = new P.Box3(), e = new P.Vector3();
if (B.updateWorldMatrix(!1, !1), B.traverse((o) => {
var c;
if (o.name === "shadow")
return;
const t = o.geometry;
if (o.updateWorldMatrix(!1, !1), t !== void 0)
if ((c = t == null ? void 0 : t.attributes) != null && c.position) {
const r = t.attributes.position;
for (let s = 0, i = r.count; s < i; s++)
e.fromBufferAttribute(r, s).applyMatrix4(o.matrixWorld), n.expandByPoint(e);
} else
t.vertices.forEach((r) => {
const s = r.clone().applyMatrix4(o.matrixWorld);
n.expandByPoint(s);
});
}), !n.isEmpty())
return n.applyMatrix4(g(B.matrixWorld.clone())), n;
}
export {
A as boundingBox
};