UNPKG

@jscad/modeling

Version:

Constructive Solid Geometry (CSG) Library for JSCAD

68 lines (62 loc) 1.74 kB
/** * Multiplies the two matrices. * * @param {mat4} out - receiving matrix * @param {mat4} a - first operand * @param {mat4} b - second operand * @returns {mat4} out * @alias module:modeling/maths/mat4.multiply */ const multiply = (out, a, b) => { const a00 = a[0] const a01 = a[1] const a02 = a[2] const a03 = a[3] const a10 = a[4] const a11 = a[5] const a12 = a[6] const a13 = a[7] const a20 = a[8] const a21 = a[9] const a22 = a[10] const a23 = a[11] const a30 = a[12] const a31 = a[13] const a32 = a[14] const a33 = a[15] // Cache only the current line of the second matrix let b0 = b[0] let b1 = b[1] let b2 = b[2] let b3 = b[3] out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30 out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31 out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32 out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33 b0 = b[4] b1 = b[5] b2 = b[6] b3 = b[7] out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30 out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31 out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32 out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33 b0 = b[8] b1 = b[9] b2 = b[10] b3 = b[11] out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30 out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31 out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32 out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33 b0 = b[12] b1 = b[13] b2 = b[14] b3 = b[15] out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30 out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31 out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32 out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33 return out } module.exports = multiply