Complete the set of matrix multiplication functions.
Also, mul_m3_m3m4 was named incorrectly.
This commit is contained in:
@@ -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_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_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_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
|
/* special matrix multiplies
|
||||||
* uniq: R <-- AB, R is neither A nor B
|
* 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[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 */
|
/* 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];
|
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];
|
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
|
/** \name Macro helpers for: mul_m3_series
|
||||||
* \{ */
|
* \{ */
|
||||||
|
Reference in New Issue
Block a user