/* order. */ vec3 operator* (const vec3& v, const mat3& m) { /* Multiply column one by the vector to get the new x component */ float x = m.getColumn(0) * v; /* Multiply column two by the vector to get the new y component */ float y = m.getColumn(1) * v; /* Multiply column three by the vector to get the new z component */ float z = m.getColumn(2) * v; /* Return a new vector with the new components */ return vec3(x, y, z); }
// matrix multiplication (m1 * m2) mat3 operator* (const mat3& m1, const mat3& m2) { mat3 mult; mult[0][0] = m1[0] * m2.getColumn(0); mult[0][1] = m1[0] * m2.getColumn(1); mult[0][2] = m1[0] * m2.getColumn(2); mult[1][0] = m1[1] * m2.getColumn(0); mult[1][1] = m1[1] * m2.getColumn(1); mult[1][2] = m1[1] * m2.getColumn(2); mult[2][0] = m1[2] * m2.getColumn(0); mult[2][1] = m1[2] * m2.getColumn(1); mult[2][2] = m1[2] * m2.getColumn(2); return mult; }
/* Multiply the given two 3x3 matrices and return the new matrix. */ mat3 operator* (const mat3& m1, const mat3& m2) { /* Multiply first row by the columns of m2 */ vec3 row1 = vec3(m1[0] * m2.getColumn(0), m1[0] * m2.getColumn(1), m1[0] * m2.getColumn(2)); /* Multiply second row by the columns of m2 */ vec3 row2 = vec3(m1[1] * m2.getColumn(0), m1[1] * m2.getColumn(1), m1[1] * m2.getColumn(2)); /* Multiply third row by the columns of m2 */ vec3 row3 = vec3(m1[2] * m2.getColumn(0), m1[2] * m2.getColumn(1), m1[2] * m2.getColumn(2)); /* Return a new matrix of the new vectors */ return mat3(row1, row2, row3); }