1 | import { inflate } from 'pako/lib/inflate'
|
2 | import { decode } from 'base64-arraybuffer'
|
3 |
|
4 | export function min(vec, v) {
|
5 | vec[0] = Math.min(vec[0], v[0])
|
6 | vec[1] = Math.min(vec[1], v[1])
|
7 | vec[2] = Math.min(vec[2], v[2])
|
8 | }
|
9 |
|
10 | export function max(vec, v) {
|
11 | vec[0] = Math.max(vec[0], v[0])
|
12 | vec[1] = Math.max(vec[1], v[1])
|
13 | vec[2] = Math.max(vec[2], v[2])
|
14 | }
|
15 |
|
16 | export function expand(vecMin, vecMax, v) {
|
17 | min(vecMin, v)
|
18 | max(vecMax, v)
|
19 | }
|
20 |
|
21 | export function cross(vec, v) {
|
22 | let [x, y, z] = vec
|
23 | vec[0] = y * v[2] - z * v[1]
|
24 | vec[1] = z * v[0] - x * v[2]
|
25 | vec[2] = x * v[1] - y * v[0]
|
26 | }
|
27 |
|
28 | export function applyMatrix(vec, e) {
|
29 | let [x, y, z] = vec
|
30 | vec[0] = e[0] * x + e[4] * y + e[8] * z + e[12]
|
31 | vec[1] = e[1] * x + e[5] * y + e[9] * z + e[13]
|
32 | vec[2] = e[2] * x + e[6] * y + e[10] * z + e[14]
|
33 | }
|
34 |
|
35 | export function distance(v1, v2) {
|
36 | let [x1, y1, z1] = v1
|
37 | let [x2, y2, z2] = v2
|
38 | let dx = x1 - x2,
|
39 | dy = y1 - y2,
|
40 | dz = z1 - z2
|
41 | return Math.sqrt(dx * dx + dy * dy + dz * dz)
|
42 | }
|
43 |
|
44 | export function unpack(blob) {
|
45 | let stream = blob.data
|
46 | if (!(stream instanceof Uint8Array)) stream = decode(blob.data)
|
47 | blob.data = JSON.parse(inflate(stream, { raw: true, to: 'string' }))
|
48 | blob.size = stream.length
|
49 | }
|