| 9 | |
| 10 | /* thanks for dnt's Matrix3D */ |
| 11 | class Matrix3D { |
| 12 | constructor(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) { |
| 13 | this.elements = window.Float32Array ? new Float32Array(16) : []; |
| 14 | var te = this.elements; |
| 15 | te[0] = (n11 !== undefined) ? n11 : 1; te[4] = n12 || 0; te[8] = n13 || 0; te[12] = n14 || 0; |
| 16 | te[1] = n21 || 0; te[5] = (n22 !== undefined) ? n22 : 1; te[9] = n23 || 0; te[13] = n24 || 0; |
| 17 | te[2] = n31 || 0; te[6] = n32 || 0; te[10] = (n33 !== undefined) ? n33 : 1; te[14] = n34 || 0; |
| 18 | te[3] = n41 || 0; te[7] = n42 || 0; te[11] = n43 || 0; te[15] = (n44 !== undefined) ? n44 : 1; |
| 19 | } |
| 20 | |
| 21 | static get DEG_TO_RAD() { |
| 22 | return Math.PI / 180; |
| 23 | } |
| 24 | |
| 25 | set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) { |
| 26 | var te = this.elements; |
| 27 | te[0] = n11; te[4] = n12; te[8] = n13; te[12] = n14; |
| 28 | te[1] = n21; te[5] = n22; te[9] = n23; te[13] = n24; |
| 29 | te[2] = n31; te[6] = n32; te[10] = n33; te[14] = n34; |
| 30 | te[3] = n41; te[7] = n42; te[11] = n43; te[15] = n44; |
| 31 | return this; |
| 32 | } |
| 33 | |
| 34 | identity() { |
| 35 | this.set( |
| 36 | 1, 0, 0, 0, |
| 37 | 0, 1, 0, 0, |
| 38 | 0, 0, 1, 0, |
| 39 | 0, 0, 0, 1 |
| 40 | ); |
| 41 | return this; |
| 42 | } |
| 43 | |
| 44 | multiplyMatrices(a, be) { |
| 45 | |
| 46 | var ae = a.elements; |
| 47 | var te = this.elements; |
| 48 | var a11 = ae[0], a12 = ae[4], a13 = ae[8], a14 = ae[12]; |
| 49 | var a21 = ae[1], a22 = ae[5], a23 = ae[9], a24 = ae[13]; |
| 50 | var a31 = ae[2], a32 = ae[6], a33 = ae[10], a34 = ae[14]; |
| 51 | var a41 = ae[3], a42 = ae[7], a43 = ae[11], a44 = ae[15]; |
| 52 | |
| 53 | var b11 = be[0], b12 = be[1], b13 = be[2], b14 = be[3]; |
| 54 | var b21 = be[4], b22 = be[5], b23 = be[6], b24 = be[7]; |
| 55 | var b31 = be[8], b32 = be[9], b33 = be[10], b34 = be[11]; |
| 56 | var b41 = be[12], b42 = be[13], b43 = be[14], b44 = be[15]; |
| 57 | |
| 58 | te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; |
| 59 | te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; |
| 60 | te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; |
| 61 | te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; |
| 62 | |
| 63 | te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; |
| 64 | te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; |
| 65 | te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; |
| 66 | te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; |
| 67 | |
| 68 | te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; |
nothing calls this directly
no outgoing calls
no test coverage detected