optimization: improved matrix vec3 mult
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
#define REPEAT_2(FN) REPEAT_1(FN) FN(1)
|
#define REPEAT_2(FN) REPEAT_1(FN) FN(1)
|
||||||
#define REPEAT_3(FN) REPEAT_2(FN) FN(2)
|
#define REPEAT_3(FN) REPEAT_2(FN) FN(2)
|
||||||
#define REPEAT_4(FN) REPEAT_3(FN) FN(3)
|
#define REPEAT_4(FN) REPEAT_3(FN) FN(3)
|
||||||
|
#define REPEAT_4N(FN) REPEAT_3(FN) FN(3)
|
||||||
|
|
||||||
#define add(i) r[i] = a[i] + b[i];
|
#define add(i) r[i] = a[i] + b[i];
|
||||||
#define set(i) r[i] = v;
|
#define set(i) r[i] = v;
|
||||||
@@ -130,11 +131,7 @@ LINMATH_H_FUNC void vec4_reflect(vec4 r, vec4 const v, vec4 const n) {
|
|||||||
|
|
||||||
typedef vec4 mat4x4[4];
|
typedef vec4 mat4x4[4];
|
||||||
|
|
||||||
LINMATH_H_FUNC void mat4x4_getPos(vec3 r, mat4x4 const M) {
|
LINMATH_H_FUNC float *mat4x4_getPos(mat4x4 M) { return M[3]; }
|
||||||
r[0] = M[3][0];
|
|
||||||
r[1] = M[3][1];
|
|
||||||
r[2] = M[3][2];
|
|
||||||
}
|
|
||||||
|
|
||||||
LINMATH_H_FUNC void mat4x4_identity(mat4x4 M) {
|
LINMATH_H_FUNC void mat4x4_identity(mat4x4 M) {
|
||||||
int i, j;
|
int i, j;
|
||||||
@@ -198,14 +195,36 @@ LINMATH_H_FUNC void mat4x4_mul(mat4x4 M, mat4x4 const a, mat4x4 const b) {
|
|||||||
}
|
}
|
||||||
mat4x4_dup(M, temp);
|
mat4x4_dup(M, temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
LINMATH_H_FUNC void mat4x4_mul_vec4(vec4 r, mat4x4 const M, vec4 const v) {
|
LINMATH_H_FUNC void mat4x4_mul_vec4(vec4 r, mat4x4 const M, vec4 const v) {
|
||||||
int i, j;
|
r[0] = M[0][0] * v[0];
|
||||||
for (j = 0; j < 4; ++j) {
|
r[0] += M[1][0] * v[1];
|
||||||
r[j] = 0.f;
|
r[0] += M[2][0] * v[2];
|
||||||
for (i = 0; i < 4; ++i)
|
r[0] += M[3][0] * v[3];
|
||||||
r[j] += M[i][j] * v[i];
|
|
||||||
}
|
r[1] = M[0][1] * v[0];
|
||||||
|
r[1] += M[1][1] * v[1];
|
||||||
|
r[1] += M[2][1] * v[2];
|
||||||
|
r[1] += M[3][1] * v[3];
|
||||||
|
|
||||||
|
r[2] = M[0][2] * v[0];
|
||||||
|
r[2] += M[1][2] * v[1];
|
||||||
|
r[2] += M[2][2] * v[2];
|
||||||
|
r[2] += M[3][2] * v[3];
|
||||||
|
|
||||||
|
r[3] = M[0][3] * v[0];
|
||||||
|
r[3] += M[1][3] * v[1];
|
||||||
|
r[3] += M[2][3] * v[2];
|
||||||
|
r[3] += M[3][3] * v[3];
|
||||||
}
|
}
|
||||||
|
// LINMATH_H_FUNC void mat4x4_mul_vec4(vec4 r, mat4x4 const M, vec4 const v) {
|
||||||
|
// int i, j;
|
||||||
|
// for (j = 0; j < 4; ++j) {
|
||||||
|
// r[j] = 0.f;
|
||||||
|
// for (i = 0; i < 4; ++i)
|
||||||
|
// r[j] += M[i][j] * v[i];
|
||||||
|
// }
|
||||||
|
// }
|
||||||
LINMATH_H_FUNC void mat4x4_translate(mat4x4 T, float x, float y, float z) {
|
LINMATH_H_FUNC void mat4x4_translate(mat4x4 T, float x, float y, float z) {
|
||||||
mat4x4_identity(T);
|
mat4x4_identity(T);
|
||||||
T[3][0] = x;
|
T[3][0] = x;
|
||||||
|
|||||||
Reference in New Issue
Block a user