@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
43 lines (35 loc) • 1.31 kB
JavaScript
import { assert } from "../../../assert.js";
import { plane3_matrix4_project } from "../plane/plane3_matrix4_project.js";
/**
* Perform affine transform on a given frustum
* @param {number[]|Float32Array|Float64Array} output
* @param {number} output_offset
* @param {number[]|Float32Array|Float64Array} input
* @param {number} input_offset
* @param {number[]|Float32Array|Float64Array} matrix4
*/
export function frustum_matrix4_project(
output, output_offset,
input, input_offset,
matrix4
) {
assert.isArrayLike(output, 'output');
assert.isNonNegativeInteger(output_offset, "output_offset");
assert.isArrayLike(input, 'input');
assert.greaterThanOrEqual(input.length, input_offset + 24, 'input too small');
assert.isNonNegativeInteger(input_offset, "input_offset");
assert.isArrayLike(matrix4, 'matrix4');
for (let plane_index = 0; plane_index < 6; plane_index++) {
const frustum_offset = plane_index * 4;
const i = input_offset + frustum_offset;
const o = output_offset + frustum_offset;
plane3_matrix4_project(
output, o,
matrix4,
input[i],
input[i + 1],
input[i + 2],
input[i + 3],
);
}
}