* Applies a transformation matrix to the current matrix. * * This method multiplies the current matrix by another matrix, which can be provided * in several forms: another Matrix instance, an array representing a matrix, or as * individual arguments representing the elements of a 4x4 mat
(multMatrix)
| 821 | * } |
| 822 | */ |
| 823 | apply(multMatrix) { |
| 824 | let _src; |
| 825 | |
| 826 | if (multMatrix === this || multMatrix === this.matrix) { |
| 827 | _src = this.copy().matrix; // only need to allocate in this rare case |
| 828 | } else if (multMatrix instanceof Matrix) { |
| 829 | _src = multMatrix.matrix; |
| 830 | } else if (isMatrixArray(multMatrix)) { |
| 831 | _src = multMatrix; |
| 832 | } else if (arguments.length === 16) { |
| 833 | _src = arguments; |
| 834 | } else { |
| 835 | return; // nothing to do. |
| 836 | } |
| 837 | |
| 838 | const mat4 = this.matrix; |
| 839 | |
| 840 | // each row is used for the multiplier |
| 841 | const m0 = mat4[0]; |
| 842 | const m4 = mat4[4]; |
| 843 | const m8 = mat4[8]; |
| 844 | const m12 = mat4[12]; |
| 845 | mat4[0] = _src[0] * m0 + _src[1] * m4 + _src[2] * m8 + _src[3] * m12; |
| 846 | mat4[4] = _src[4] * m0 + _src[5] * m4 + _src[6] * m8 + _src[7] * m12; |
| 847 | mat4[8] = _src[8] * m0 + _src[9] * m4 + _src[10] * m8 + _src[11] * m12; |
| 848 | mat4[12] = _src[12] * m0 + _src[13] * m4 + _src[14] * m8 + _src[15] * m12; |
| 849 | |
| 850 | const m1 = mat4[1]; |
| 851 | const m5 = mat4[5]; |
| 852 | const m9 = mat4[9]; |
| 853 | const m13 = mat4[13]; |
| 854 | mat4[1] = _src[0] * m1 + _src[1] * m5 + _src[2] * m9 + _src[3] * m13; |
| 855 | mat4[5] = _src[4] * m1 + _src[5] * m5 + _src[6] * m9 + _src[7] * m13; |
| 856 | mat4[9] = _src[8] * m1 + _src[9] * m5 + _src[10] * m9 + _src[11] * m13; |
| 857 | mat4[13] = _src[12] * m1 + _src[13] * m5 + _src[14] * m9 + _src[15] * m13; |
| 858 | |
| 859 | const m2 = mat4[2]; |
| 860 | const m6 = mat4[6]; |
| 861 | const m10 = mat4[10]; |
| 862 | const m14 = mat4[14]; |
| 863 | mat4[2] = _src[0] * m2 + _src[1] * m6 + _src[2] * m10 + _src[3] * m14; |
| 864 | mat4[6] = _src[4] * m2 + _src[5] * m6 + _src[6] * m10 + _src[7] * m14; |
| 865 | mat4[10] = _src[8] * m2 + _src[9] * m6 + _src[10] * m10 + _src[11] * m14; |
| 866 | mat4[14] = _src[12] * m2 + _src[13] * m6 + _src[14] * m10 + _src[15] * m14; |
| 867 | |
| 868 | const m3 = mat4[3]; |
| 869 | const m7 = mat4[7]; |
| 870 | const m11 = mat4[11]; |
| 871 | const m15 = mat4[15]; |
| 872 | mat4[3] = _src[0] * m3 + _src[1] * m7 + _src[2] * m11 + _src[3] * m15; |
| 873 | mat4[7] = _src[4] * m3 + _src[5] * m7 + _src[6] * m11 + _src[7] * m15; |
| 874 | mat4[11] = _src[8] * m3 + _src[9] * m7 + _src[10] * m11 + _src[11] * m15; |
| 875 | mat4[15] = _src[12] * m3 + _src[13] * m7 + _src[14] * m11 + _src[15] * m15; |
| 876 | |
| 877 | return this; |
| 878 | } |
| 879 | |
| 880 | /** |
no test coverage detected