UNPKG

1.27 kBJavaScriptView Raw
1import { inflate } from 'pako/lib/inflate'
2import { decode } from 'base64-arraybuffer'
3
4export 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
10export 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
16export function expand(vecMin, vecMax, v) {
17 min(vecMin, v)
18 max(vecMax, v)
19}
20
21export 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
28export 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
35export 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
44export 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}