@thi.ng/matrices
Version:
Matrix & quaternion operations for 2D/3D geometry processing
43 lines (42 loc) • 764 B
JavaScript
import { DEG2RAD } from "@thi.ng/math/api";
import { setC } from "@thi.ng/vectors/setc";
const frustum = (out, left, right, bottom, top, near, far) => {
const dx = 1 / (right - left);
const dy = 1 / (top - bottom);
const dz = 1 / (far - near);
return setC(
out || [],
near * 2 * dx,
0,
0,
0,
0,
near * 2 * dy,
0,
0,
(right + left) * dx,
(top + bottom) * dy,
-(far + near) * dz,
-1,
0,
0,
-(far * near * 2) * dz,
0
);
};
const frustumBounds = (fovy, aspect, near, far) => {
const top = near * Math.tan(fovy * DEG2RAD / 2);
const right = top * aspect;
return {
left: -right,
right,
bottom: -top,
top,
near,
far
};
};
export {
frustum,
frustumBounds
};