UNPKG

@jscad/modeling

Version:

Constructive Solid Geometry (CSG) Library for JSCAD

52 lines (46 loc) 1.54 kB
/** * Translate the matrix by the given offset vector. * * @param {mat4} out - receiving matrix * @param {mat4} matrix - matrix to translate * @param {vec3} offsets - offset vector to translate by * @returns {mat4} out * @alias module:modeling/maths/mat4.translate */ const translate = (out, matrix, offsets) => { const x = offsets[0] const y = offsets[1] const z = offsets[2] let a00 let a01 let a02 let a03 let a10 let a11 let a12 let a13 let a20 let a21 let a22 let a23 if (matrix === out) { // 0-11 assignments are unnecessary out[12] = matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12] out[13] = matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13] out[14] = matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14] out[15] = matrix[3] * x + matrix[7] * y + matrix[11] * z + matrix[15] } else { a00 = matrix[0]; a01 = matrix[1]; a02 = matrix[2]; a03 = matrix[3] a10 = matrix[4]; a11 = matrix[5]; a12 = matrix[6]; a13 = matrix[7] a20 = matrix[8]; a21 = matrix[9]; a22 = matrix[10]; a23 = matrix[11] out[0] = a00; out[1] = a01; out[2] = a02; out[3] = a03 out[4] = a10; out[5] = a11; out[6] = a12; out[7] = a13 out[8] = a20; out[9] = a21; out[10] = a22; out[11] = a23 out[12] = a00 * x + a10 * y + a20 * z + matrix[12] out[13] = a01 * x + a11 * y + a21 * z + matrix[13] out[14] = a02 * x + a12 * y + a22 * z + matrix[14] out[15] = a03 * x + a13 * y + a23 * z + matrix[15] } return out } module.exports = translate