[Bf-blender-cvs] [8ecdbe5] soc-2014-viewport_fx: (Revision 1) New Matrix and Vector Operations for Viewport FX
Jason Wilkins
noreply at git.blender.org
Fri Jun 27 05:45:23 CEST 2014
Commit: 8ecdbe5f9861b992e1d467833a435c3fb6080348
Author: Jason Wilkins
Date: Thu Jun 26 22:45:03 2014 -0500
https://developer.blender.org/rB8ecdbe5f9861b992e1d467833a435c3fb6080348
(Revision 1) New Matrix and Vector Operations for Viewport FX
Addressed concerns:
"Using const with multi-dimensional arrays gives warnings in GCC/Clang"
"This so short that I dont think its even copyrightable, (cross product and some assignments)"
"all other functions have mul_ prefix. why difference?"
I also cleaned up some whitespace.
Have not addressed concerns about the name of scale_m4 or the generality/compatibility of translate_m4.
===================================================================
M source/blender/blenlib/BLI_math_matrix.h
M source/blender/blenlib/intern/math_matrix.c
===================================================================
diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h
index a980e98..e99518a 100644
--- a/source/blender/blenlib/BLI_math_matrix.h
+++ b/source/blender/blenlib/BLI_math_matrix.h
@@ -30,8 +30,6 @@
* \ingroup bli
*/
-#include "BLI_utildefines.h" // for restrict
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -57,10 +55,10 @@ void zero_m4(float R[4][4]);
void unit_m3(float R[3][3]);
void unit_m4(float R[4][4]);
-void copy_m3_m3(float R[3][3], const float A[3][3]);
-void copy_m4_m4(float R[4][4], const float A[4][4]);
-void copy_m3_m4(float R[3][3], const float A[4][4]);
-void copy_m4_m3(float R[4][4], const float A[3][3]);
+void copy_m3_m3(float R[3][3], float A[3][3]);
+void copy_m4_m4(float R[4][4], float A[4][4]);
+void copy_m3_m4(float R[3][3], float A[4][4]);
+void copy_m4_m3(float R[4][4], float A[3][3]);
/* double->float */
void copy_m3_m3d(float R[3][3], double A[3][3]);
@@ -76,14 +74,14 @@ void add_m4_m4m4(float R[4][4], float A[4][4], float B[4][4]);
void sub_m3_m3m3(float R[3][3], float A[3][3], float B[3][3]);
void sub_m4_m4m4(float R[4][4], float A[4][4], float B[4][4]);
-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_m3m3(float R[3][3], float A[3][3], float B[3][3]);
+void mul_m4_m3m4(float R[4][4], float A[3][3], float B[4][4]);
+void mul_m4_m4m3(float R[4][4], float A[4][4], float B[3][3]);
+void mul_m4_m4m4(float R[4][4], float A[4][4], float B[4][4]);
+void mul_m3_m3m4(float R[3][3], float A[4][4], float B[3][3]);
-void mult_m4_m4m4_q(float m1[4][4], const float m3[4][4], const float m2[4][4]);
-void mult_m4_m3m4_q(float m1[4][4], const float m3[4][4], const float m2[3][3]);
+void mul_m4_m4m4_q(float m1[4][4], float m3[4][4], float m2[4][4]);
+void mul_m4_m3m4_q(float m1[4][4], float m3[4][4], float m2[3][3]);
void mul_serie_m3(float R[3][3],
float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3],
@@ -97,11 +95,11 @@ void mul_v3_m4v3(float r[3], float M[4][4], const float v[3]);
void mul_v2_m4v3(float r[2], float M[4][4], const float v[3]);
void mul_v2_m2v2(float r[2], float M[2][2], const float v[2]);
void mul_m2v2(float M[2][2], float v[2]);
-void mul_v4_m4v3(float r[4], const float M[4][4], const float v[3]);
+void mul_v4_m4v3(float r[4], float M[4][4], const float v[3]);
void mul_v3_m4v3_q(float r[3], float M[4][4], const float v[3]);
void mul_mat3_m4_v3(float M[4][4], float r[3]);
-void mul_m4_v4(const float M[4][4], float r[4]);
-void mul_v4_m4v4(float r[4], const float M[4][4], const float v[4]);
+void mul_m4_v4(float M[4][4], float r[4]);
+void mul_v4_m4v4(float r[4], float M[4][4], const float v[4]);
void mul_project_m4_v3(float M[4][4], float vec[3]);
void mul_v2_project_m4_v3(float r[2], float M[4][4], const float vec[3]);
@@ -127,7 +125,7 @@ bool invert_m3_m3_ex(float m1[3][3], float m2[3][3], const float epsilon);
bool invert_m3(float R[3][3]);
bool invert_m3_m3(float R[3][3], float A[3][3]);
bool invert_m4(float R[4][4]);
-bool invert_m4_m4(float R[4][4], const float A[4][4]);
+bool invert_m4_m4(float R[4][4], float A[4][4]);
/* double ariphmetics */
void mul_m4_v4d(float M[4][4], double r[4]);
diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c
index b8576a4..eb73aba 100644
--- a/source/blender/blenlib/intern/math_matrix.c
+++ b/source/blender/blenlib/intern/math_matrix.c
@@ -62,18 +62,18 @@ void unit_m4(float m[4][4])
m[3][0] = m[3][1] = m[3][2] = 0.0;
}
-void copy_m3_m3(float m1[3][3], const float m2[3][3])
+void copy_m3_m3(float m1[3][3], float m2[3][3])
{
/* destination comes first: */
memcpy(&m1[0], &m2[0], 9 * sizeof(float));
}
-void copy_m4_m4(float m1[4][4], const float m2[4][4])
+void copy_m4_m4(float m1[4][4], float m2[4][4])
{
memcpy(m1, m2, 4 * 4 * sizeof(float));
}
-void copy_m3_m4(float m1[3][3], const float m2[4][4])
+void copy_m3_m4(float m1[3][3], float m2[4][4])
{
m1[0][0] = m2[0][0];
m1[0][1] = m2[0][1];
@@ -88,7 +88,7 @@ void copy_m3_m4(float m1[3][3], const float m2[4][4])
m1[2][2] = m2[2][2];
}
-void copy_m4_m3(float m1[4][4], const float m2[3][3]) /* no clear */
+void copy_m4_m3(float m1[4][4], float m2[3][3]) /* no clear */
{
m1[0][0] = m2[0][0];
m1[0][1] = m2[0][1];
@@ -160,7 +160,7 @@ void swap_m4m4(float m1[4][4], float m2[4][4])
/******************************** Arithmetic *********************************/
-void mul_m4_m4m4(float m1[4][4], const float m3_[4][4], const float m2_[4][4])
+void mul_m4_m4m4(float m1[4][4], float m3_[4][4], float m2_[4][4])
{
float m2[4][4], m3[4][4];
@@ -169,10 +169,10 @@ void mul_m4_m4m4(float m1[4][4], const float m3_[4][4], const float m2_[4][4])
copy_m4_m4(m3, m3_);
/* matrix product: m1[j][k] = m2[j][i].m3[i][k] */
- mult_m4_m4m4_q(m1, m3, m2);
+ mul_m4_m4m4_q(m1, m3, m2);
}
-void mul_m3_m3m3(float m1[3][3], const float m3_[3][3], const float m2_[3][3])
+void mul_m3_m3m3(float m1[3][3], float m3_[3][3], float m2_[3][3])
{
float m2[3][3], m3[3][3];
@@ -194,7 +194,7 @@ void mul_m3_m3m3(float m1[3][3], const float m3_[3][3], 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];
}
-void mul_m4_m4m3(float m1[4][4], const float m3_[4][4], const float m2_[3][3])
+void mul_m4_m4m3(float m1[4][4], float m3_[4][4], float m2_[3][3])
{
float m2[3][3], m3[4][4];
@@ -214,7 +214,7 @@ void mul_m4_m4m3(float m1[4][4], const float m3_[4][4], const float m2_[3][3])
}
/* 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_m3m4(float m1[3][3], float m3_[4][4], float m2_[3][3])
{
float m2[3][3], m3[4][4];
@@ -236,7 +236,7 @@ void mul_m3_m3m4(float m1[3][3], 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];
}
-void mul_m4_m3m4(float m1[4][4], const float m3_[3][3], const float m2_[4][4])
+void mul_m4_m3m4(float m1[4][4], float m3_[3][3], float m2_[4][4])
{
float m2[4][4], m3[3][3];
@@ -255,7 +255,7 @@ 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 mult_m4_m4m4_q(float m1[4][4], const float m3[4][4], const float m2[4][4])
+void mul_m4_m4m4_q(float m1[4][4], float m3[4][4], float m2[4][4])
{
/* matrix product: m1[j][k] = m2[j][i].m3[i][k] */
m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] + m2[0][2] * m3[2][0] + m2[0][3] * m3[3][0];
@@ -279,7 +279,7 @@ void mult_m4_m4m4_q(float m1[4][4], const float m3[4][4], const float m2[4][4])
m1[3][3] = m2[3][0] * m3[0][3] + m2[3][1] * m3[1][3] + m2[3][2] * m3[2][3] + m2[3][3] * m3[3][3];
}
-void mult_m4_m3m4_q(float m1[4][4], const float m3[4][4], const float m2[3][3])
+void mul_m4_m3m4_q(float m1[4][4], float m3[4][4], float m2[3][3])
{
/* matrix product: m1[j][k] = m2[j][i].m3[i][k] */
m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] + m2[0][2] * m3[2][0];
@@ -434,7 +434,7 @@ void mul_m2v2(float mat[2][2], float vec[2])
mul_v2_m2v2(vec, mat, vec);
}
-void mul_v4_m4v3(float out[4], const float mat[][4], const float vec[3])
+void mul_v4_m4v3(float out[4], float mat[][4], const float vec[3])
{
out[0] = vec[0] * mat[0][0] + vec[1] * mat[1][0] + mat[2][0] * vec[2] + mat[3][0];
out[1] = vec[0] * mat[0][1] + vec[1] * mat[1][1] + mat[2][1] * vec[2] + mat[3][1];
@@ -481,7 +481,7 @@ void mul_v2_project_m4_v3(float r[2], float mat[4][4], const float vec[3])
r[1] /= w;
}
-void mul_v4_m4v4(float r[4], const float mat[4][4], const float v[4])
+void mul_v4_m4v4(float r[4], float mat[4][4], const float v[4])
{
float x, y, z;
@@ -495,7 +495,7 @@ void mul_v4_m4v4(float r[4], const float mat[4][4], const float v[4])
r[3] = x * mat[0][3] + y * mat[1][3] + z * mat[2][3] + mat[3][3] * v[3];
}
-void mul_m4_v4(const float mat[4][4], float r[4])
+void mul_m4_v4(float mat[4][4], float r[4])
{
mul_v4_m4v4(r, mat, r);
}
@@ -760,7 +760,7 @@ bool invert_m4(float m[4][4])
* Mark Segal - 1992
*/
-bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
+bool invert_m4_m4(float inverse[4][4], float mat[4][4])
{
int i, j, k;
double temp;
@@ -2227,63 +2227,25 @@ void pseudoinverse_m4_m4(float Ainv[4][4], float A[4][4], float epsilon)
mul_serie_m4(Ainv, U, Wm, V, NULL, NULL, NULL, NULL, NULL);
}
-
void mat4_ortho_set(float m[][4], float left, float right, float bottom, float top, float nearVal, float farVal)
{
- m[0][0] = 2.0f/(right-left); m[1][0] = 0.0f; m[2][0] = 0.0f; m[3][0] = -(right+left)/(right-left);
- m[0][1] = 0.0f; m[1][1] = 2.0f/(top-bottom); m[2][1] = 0.0f; m[3][1] = -(top+bottom)/(top-bottom);
- m[0][2] = 0.0f; m[1][2] = 0.0f; m[2][2] = -2.0f/(farVal-nearVal); m[3][2] = -(farVal+nearVal)/(farVal-nearVal);
- m[0][3] = 0.0f; m[1][3] = 0.0f; m[2][3] = 0.0f; m[3][3] = 1.0f;
+ m[0][0] = 2/(right-left); m[1][0] = 0; m[2][0] = 0; m[3][0] = -(right+left)/(right-left);
+ m[0][1] = 0; m[1][1] = 2/(top-bottom); m[2][1] = 0; m[3][1] = -(top+bottom)/(top-bottom);
+ m[0][2] = 0; m[1][2] = 0; m[2][2] = -2/(farVal-nearVal); m[3][2] = -(farVal+nearVal)/(farVal-nearVal);
+ m[0][3] = 0; m[1][3] = 0; m[2][3] = 0; m[3][3] = 1;
}
-
void mat4_frustum_set(float m[][4], float left, float right, float bottom, float top, float nearVal, float farVal)
{
- m[0][0] = 2.0f*nearVal/(right-left); m[1][0] = 0.0f; m[2][0] = (right+left)/(right-left); m[3][0] = 0.0f;
- m[0][1]
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list