matrix4x4 Multiply question help
Posted: Wed Dec 03, 2014 6:20 pm
core::matrix4 a;
core::matrix4 b;
core::matrix4 c;
c = a * b;
//in matrix4.h
inline CMatrix4<T> CMatrix4<T>::operator*(const CMatrix4<T>& m2) const
{
#if defined ( USE_MATRIX_TEST )
// Testing purpose..
if ( this->isIdentity() )
return m2;
if ( m2.isIdentity() )
return *this;
#endif
CMatrix4<T> m3 ( EM4CONST_NOTHING );
const T *m1 = M;
m3[0] = m1[0]*m2[0] + m1[4]*m2[1] + m1[8]*m2[2] + m1[12]*m2[3];
m3[1] = m1[1]*m2[0] + m1[5]*m2[1] + m1[9]*m2[2] + m1[13]*m2[3];
m3[2] = m1[2]*m2[0] + m1[6]*m2[1] + m1[10]*m2[2] + m1[14]*m2[3];
m3[3] = m1[3]*m2[0] + m1[7]*m2[1] + m1[11]*m2[2] + m1[15]*m2[3];
m3[4] = m1[0]*m2[4] + m1[4]*m2[5] + m1[8]*m2[6] + m1[12]*m2[7];
m3[5] = m1[1]*m2[4] + m1[5]*m2[5] + m1[9]*m2[6] + m1[13]*m2[7];
m3[6] = m1[2]*m2[4] + m1[6]*m2[5] + m1[10]*m2[6] + m1[14]*m2[7];
m3[7] = m1[3]*m2[4] + m1[7]*m2[5] + m1[11]*m2[6] + m1[15]*m2[7];
m3[8] = m1[0]*m2[8] + m1[4]*m2[9] + m1[8]*m2[10] + m1[12]*m2[11];
m3[9] = m1[1]*m2[8] + m1[5]*m2[9] + m1[9]*m2[10] + m1[13]*m2[11];
m3[10] = m1[2]*m2[8] + m1[6]*m2[9] + m1[10]*m2[10] + m1[14]*m2[11];
m3[11] = m1[3]*m2[8] + m1[7]*m2[9] + m1[11]*m2[10] + m1[15]*m2[11];
m3[12] = m1[0]*m2[12] + m1[4]*m2[13] + m1[8]*m2[14] + m1[12]*m2[15];
m3[13] = m1[1]*m2[12] + m1[5]*m2[13] + m1[9]*m2[14] + m1[13]*m2[15];
m3[14] = m1[2]*m2[12] + m1[6]*m2[13] + m1[10]*m2[14] + m1[14]*m2[15];
m3[15] = m1[3]*m2[12] + m1[7]*m2[13] + m1[11]*m2[14] + m1[15]*m2[15];
return m3;
}
why the matrix multiply is not normal ????
like follows is normal
http://www.calcul.com/show/calculator/m ... n_;4;4;4;4
const float _m0 = (m0 * B.m0 + m1 * B.m4 + m2 * B.m8 + m3 * B.m12);
const float _m1 = (m0 * B.m1 + m1 * B.m5 + m2 * B.m9 + m3 * B.m13);
const float _m2 = (m0 * B.m2 + m1 * B.m6 + m2 * B.m10 + m3 * B.m14);
const float _m3 = (m0 * B.m3 + m1 * B.m7 + m2 * B.m11 + m3 * B.m15);
const float _m4 = (m4 * B.m0 + m5 * B.m4 + m6 * B.m8 + m7 * B.m12);
const float _m5 = (m4 * B.m1 + m5 * B.m5 + m6 * B.m9 + m7 * B.m13);
const float _m6 = (m4 * B.m2 + m5 * B.m6 + m6 * B.m10 + m7 * B.m14);
const float _m7 = (m4 * B.m3 + m5 * B.m7 + m6 * B.m11 + m7 * B.m15);
const float _m8 = (m8 * B.m0 + m9 * B.m4 + m10 * B.m8 + m11 * B.m12);
const float _m9 = (m8 * B.m1 + m9 * B.m5 + m10 * B.m9 + m11 * B.m13);
const float _m10 = (m8 * B.m2 + m9 * B.m6 + m10 * B.m10 + m11 * B.m14);
const float _m11 = (m8 * B.m3 + m9 * B.m7 + m10 * B.m11 + m11 * B.m15);
const float _m12 = (m12 * B.m0 + m13 * B.m4 + m14 * B.m8 + m15 * B.m12);
const float _m13 = (m12 * B.m1 + m13 * B.m5 + m14 * B.m9 + m15 * B.m13);
const float _m14 = (m12 * B.m2 + m13 * B.m6 + m14 * B.m10 + m15 * B.m14);
const float _m15 = (m12 * B.m3 + m13 * B.m7 + m14 * B.m11 + m15 * B.m15);
core::matrix4 b;
core::matrix4 c;
c = a * b;
//in matrix4.h
inline CMatrix4<T> CMatrix4<T>::operator*(const CMatrix4<T>& m2) const
{
#if defined ( USE_MATRIX_TEST )
// Testing purpose..
if ( this->isIdentity() )
return m2;
if ( m2.isIdentity() )
return *this;
#endif
CMatrix4<T> m3 ( EM4CONST_NOTHING );
const T *m1 = M;
m3[0] = m1[0]*m2[0] + m1[4]*m2[1] + m1[8]*m2[2] + m1[12]*m2[3];
m3[1] = m1[1]*m2[0] + m1[5]*m2[1] + m1[9]*m2[2] + m1[13]*m2[3];
m3[2] = m1[2]*m2[0] + m1[6]*m2[1] + m1[10]*m2[2] + m1[14]*m2[3];
m3[3] = m1[3]*m2[0] + m1[7]*m2[1] + m1[11]*m2[2] + m1[15]*m2[3];
m3[4] = m1[0]*m2[4] + m1[4]*m2[5] + m1[8]*m2[6] + m1[12]*m2[7];
m3[5] = m1[1]*m2[4] + m1[5]*m2[5] + m1[9]*m2[6] + m1[13]*m2[7];
m3[6] = m1[2]*m2[4] + m1[6]*m2[5] + m1[10]*m2[6] + m1[14]*m2[7];
m3[7] = m1[3]*m2[4] + m1[7]*m2[5] + m1[11]*m2[6] + m1[15]*m2[7];
m3[8] = m1[0]*m2[8] + m1[4]*m2[9] + m1[8]*m2[10] + m1[12]*m2[11];
m3[9] = m1[1]*m2[8] + m1[5]*m2[9] + m1[9]*m2[10] + m1[13]*m2[11];
m3[10] = m1[2]*m2[8] + m1[6]*m2[9] + m1[10]*m2[10] + m1[14]*m2[11];
m3[11] = m1[3]*m2[8] + m1[7]*m2[9] + m1[11]*m2[10] + m1[15]*m2[11];
m3[12] = m1[0]*m2[12] + m1[4]*m2[13] + m1[8]*m2[14] + m1[12]*m2[15];
m3[13] = m1[1]*m2[12] + m1[5]*m2[13] + m1[9]*m2[14] + m1[13]*m2[15];
m3[14] = m1[2]*m2[12] + m1[6]*m2[13] + m1[10]*m2[14] + m1[14]*m2[15];
m3[15] = m1[3]*m2[12] + m1[7]*m2[13] + m1[11]*m2[14] + m1[15]*m2[15];
return m3;
}
why the matrix multiply is not normal ????
like follows is normal
http://www.calcul.com/show/calculator/m ... n_;4;4;4;4
const float _m0 = (m0 * B.m0 + m1 * B.m4 + m2 * B.m8 + m3 * B.m12);
const float _m1 = (m0 * B.m1 + m1 * B.m5 + m2 * B.m9 + m3 * B.m13);
const float _m2 = (m0 * B.m2 + m1 * B.m6 + m2 * B.m10 + m3 * B.m14);
const float _m3 = (m0 * B.m3 + m1 * B.m7 + m2 * B.m11 + m3 * B.m15);
const float _m4 = (m4 * B.m0 + m5 * B.m4 + m6 * B.m8 + m7 * B.m12);
const float _m5 = (m4 * B.m1 + m5 * B.m5 + m6 * B.m9 + m7 * B.m13);
const float _m6 = (m4 * B.m2 + m5 * B.m6 + m6 * B.m10 + m7 * B.m14);
const float _m7 = (m4 * B.m3 + m5 * B.m7 + m6 * B.m11 + m7 * B.m15);
const float _m8 = (m8 * B.m0 + m9 * B.m4 + m10 * B.m8 + m11 * B.m12);
const float _m9 = (m8 * B.m1 + m9 * B.m5 + m10 * B.m9 + m11 * B.m13);
const float _m10 = (m8 * B.m2 + m9 * B.m6 + m10 * B.m10 + m11 * B.m14);
const float _m11 = (m8 * B.m3 + m9 * B.m7 + m10 * B.m11 + m11 * B.m15);
const float _m12 = (m12 * B.m0 + m13 * B.m4 + m14 * B.m8 + m15 * B.m12);
const float _m13 = (m12 * B.m1 + m13 * B.m5 + m14 * B.m9 + m15 * B.m13);
const float _m14 = (m12 * B.m2 + m13 * B.m6 + m14 * B.m10 + m15 * B.m14);
const float _m15 = (m12 * B.m3 + m13 * B.m7 + m14 * B.m11 + m15 * B.m15);