Complete the set of matrix multiplication functions.
Also, mul_m3_m3m4 was named incorrectly.
This commit is contained in:
parent
9abcae1fda
commit
3380fb3646
|
@ -69,7 +69,9 @@ void mul_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3]);
|
|||
void mul_m4_m3m4(float R[4][4], const float A[3][3], const float B[4][4]);
|
||||
void mul_m4_m4m3(float R[4][4], const float A[4][4], const float B[3][3]);
|
||||
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4]);
|
||||
void mul_m3_m3m4(float R[3][3], const float A[4][4], const float B[3][3]);
|
||||
void mul_m3_m3m4(float R[3][3], const float A[3][3], const float B[4][4]);
|
||||
void mul_m3_m4m3(float R[3][3], const float A[4][4], const float B[3][3]);
|
||||
void mul_m3_m4m4(float R[3][3], const float A[4][4], const float B[4][4]);
|
||||
|
||||
/* special matrix multiplies
|
||||
* uniq: R <-- AB, R is neither A nor B
|
||||
|
|
|
@ -316,8 +316,32 @@ void mul_m4_m4m3(float m1[4][4], const float m3_[4][4], const float m2_[3][3])
|
|||
m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2];
|
||||
}
|
||||
|
||||
/* m1 = m2 * m3, ignore the elements on the 4th row/column of m2 */
|
||||
void mul_m3_m3m4(float m1[3][3], const float m3_[3][3], const float m2_[4][4])
|
||||
{
|
||||
float m2[4][4], m3[3][3];
|
||||
|
||||
/* copy so it works when m1 is the same pointer as m2 or m3 */
|
||||
/* TODO: avoid copying when matrices are different */
|
||||
copy_m4_m4(m2, m2_);
|
||||
copy_m3_m3(m3, m3_);
|
||||
|
||||
/* m1[i][j] = m2[i][k] * m3[k][j] */
|
||||
m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] + m2[0][2] * m3[2][0];
|
||||
m1[0][1] = m2[0][0] * m3[0][1] + m2[0][1] * m3[1][1] + m2[0][2] * m3[2][1];
|
||||
m1[0][2] = m2[0][0] * m3[0][2] + m2[0][1] * m3[1][2] + m2[0][2] * m3[2][2];
|
||||
|
||||
m1[1][0] = m2[1][0] * m3[0][0] + m2[1][1] * m3[1][0] + m2[1][2] * m3[2][0];
|
||||
m1[1][1] = m2[1][0] * m3[0][1] + m2[1][1] * m3[1][1] + m2[1][2] * m3[2][1];
|
||||
m1[1][2] = m2[1][0] * m3[0][2] + m2[1][1] * m3[1][2] + m2[1][2] * m3[2][2];
|
||||
|
||||
m1[2][0] = m2[2][0] * m3[0][0] + m2[2][1] * m3[1][0] + m2[2][2] * m3[2][0];
|
||||
m1[2][1] = m2[2][0] * m3[0][1] + m2[2][1] * m3[1][1] + m2[2][2] * m3[2][1];
|
||||
m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2];
|
||||
}
|
||||
|
||||
/* m1 = m2 * m3, ignore the elements on the 4th row/column of m3 */
|
||||
void mul_m3_m3m4(float m1[3][3], const float m3_[4][4], const float m2_[3][3])
|
||||
void mul_m3_m4m3(float m1[3][3], const float m3_[4][4], const float m2_[3][3])
|
||||
{
|
||||
float m2[3][3], m3[4][4];
|
||||
|
||||
|
@ -360,6 +384,18 @@ void mul_m4_m3m4(float m1[4][4], const float m3_[3][3], const float m2_[4][4])
|
|||
m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2];
|
||||
}
|
||||
|
||||
void mul_m3_m4m4(float m1[3][3], const float m3[4][4], const float m2[4][4])
|
||||
{
|
||||
m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] + m2[0][2] * m3[2][0];
|
||||
m1[0][1] = m2[0][0] * m3[0][1] + m2[0][1] * m3[1][1] + m2[0][2] * m3[2][1];
|
||||
m1[0][2] = m2[0][0] * m3[0][2] + m2[0][1] * m3[1][2] + m2[0][2] * m3[2][2];
|
||||
m1[1][0] = m2[1][0] * m3[0][0] + m2[1][1] * m3[1][0] + m2[1][2] * m3[2][0];
|
||||
m1[1][1] = m2[1][0] * m3[0][1] + m2[1][1] * m3[1][1] + m2[1][2] * m3[2][1];
|
||||
m1[1][2] = m2[1][0] * m3[0][2] + m2[1][1] * m3[1][2] + m2[1][2] * m3[2][2];
|
||||
m1[2][0] = m2[2][0] * m3[0][0] + m2[2][1] * m3[1][0] + m2[2][2] * m3[2][0];
|
||||
m1[2][1] = m2[2][0] * m3[0][1] + m2[2][1] * m3[1][1] + m2[2][2] * m3[2][1];
|
||||
m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2];
|
||||
}
|
||||
|
||||
/** \name Macro helpers for: mul_m3_series
|
||||
* \{ */
|
||||
|
|
Loading…
Reference in New Issue