3dexperiments/src/engine/utility.js

84 lines
1.7 KiB
JavaScript

import { vec3 } from 'gl-matrix'
export function randomInt (min, max) {
return Math.floor(Math.random() * (max - min + 1) + min)
}
export function clamp (num, min, max) {
return Math.min(Math.max(num, min), max)
}
export function dim3to1 (x, y, z, xMax, yMax) {
if (xMax && !yMax) yMax = xMax
return (z * xMax * yMax) + (y * xMax) + x
}
export function dim1to3 (idx, xMax, yMax) {
if (xMax && !yMax) yMax = xMax
const z = idx / (yMax * xMax)
idx -= (z * xMax * yMax)
const y = idx / xMax
const x = idx % xMax
return { x, y, z }
}
export function addv3 (one, two) {
if (one.length !== 3) return null
if (typeof two !== 'object') {
return [
one[0] + two, one[1] + two, one[2] + two
]
}
return [
one[0] + two[0], one[1] + two[1], one[2] + two[2]
]
}
export function subv3 (one, two) {
if (one.length !== 3) return null
if (typeof two !== 'object') {
return [
one[0] - two, one[1] - two, one[2] - two
]
}
return [
one[0] - two[0], one[1] - two[1], one[2] - two[2]
]
}
export function mulv3 (one, two) {
if (one.length !== 3) return null
if (typeof two !== 'object') {
return [
one[0] * two, one[1] * two, one[2] * two
]
}
return [
one[0] * two[0], one[1] * two[1], one[2] * two[2]
]
}
export function divv3 (one, two) {
if (one.length !== 3) return null
if (typeof two !== 'object') {
return [
one[0] / two, one[1] / two, one[2] / two
]
}
return [
one[0] / two[0], one[1] / two[1], one[2] / two[2]
]
}
export function normalv3 (vec) {
const res = []
vec3.normalize(res, vec)
return res
}
export function crossv3 (vec1, vec2) {
const res = []
vec3.cross(res, vec1, vec2)
return res
}