@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
33 lines (28 loc) • 1.2 kB
JavaScript
import { v3_dot_array_array } from "../../vec3/v3_dot_array_array.js";
import { v3_matrix4_multiply } from "../../vec3/v3_matrix4_multiply.js";
import { v3_matrix4_rotate } from "../../vec3/v3_matrix4_rotate.js";
import { v3_multiply_scalar } from "../../vec3/v3_multiply_scalar.js";
const scratch_v3_0 = new Float32Array(3);
/**
*
* @param {number[]|Float64Array|Float32Array} destination
* @param {number} destination_offset
* @param {number[]|Float32Array|Float64Array} matrix
* @param {number} x
* @param {number} y
* @param {number} z
* @param {number} w
*/
export function plane3_matrix4_project(
destination, destination_offset,
matrix,
x, y, z, w,
) {
// build reference point in the new pane
v3_multiply_scalar(scratch_v3_0, 0, x, y, z, -w);
v3_matrix4_multiply(scratch_v3_0, 0, scratch_v3_0, 0, matrix);
// construct rotation matrix for the normal
v3_matrix4_rotate(destination, destination_offset, x, y, z, matrix);
// figure out new planar offset using new orientation and a reference point
destination[destination_offset + 3] = -v3_dot_array_array(scratch_v3_0, 0, destination, destination_offset);
}