Correctly initialize matrices.

This commit is contained in:
Themaister 2013-05-09 16:44:46 +02:00
parent 435a7dc467
commit c2822ded51

View File

@ -95,44 +95,31 @@ void matrix_ortho(math_matrix *mat,
void matrix_scale(math_matrix *out, float x, float y,
float z)
{
math_matrix mat;
MAT_ELEM(mat, 0, 0) = x;
MAT_ELEM(mat, 1, 1) = y;
MAT_ELEM(mat, 2, 2) = z;
MAT_ELEM(mat, 3, 3) = 1.0;
*out = mat;
memset(out, 0, sizeof(*out));
MAT_ELEM(*out, 0, 0) = x;
MAT_ELEM(*out, 1, 1) = y;
MAT_ELEM(*out, 2, 2) = z;
MAT_ELEM(*out, 3, 3) = 1.0f;
}
void matrix_translate(math_matrix *out, float x,
float y, float z)
{
math_matrix mat;
MAT_ELEM(mat, 0, 0) = 1.0;
MAT_ELEM(mat, 1, 1) = 1.0;
MAT_ELEM(mat, 2, 2) = 1.0;
MAT_ELEM(mat, 3, 3) = 1.0;
MAT_ELEM(mat, 0, 3) = x;
MAT_ELEM(mat, 1, 3) = y;
MAT_ELEM(mat, 2, 3) = z;
*out = mat;
matrix_identity(out);
MAT_ELEM(*out, 0, 3) = x;
MAT_ELEM(*out, 1, 3) = y;
MAT_ELEM(*out, 2, 3) = z;
}
void matrix_projection(math_matrix *out, float znear,
float zfar)
{
math_matrix mat;
MAT_ELEM(mat, 0, 0) = znear;
MAT_ELEM(mat, 1, 1) = zfar;
MAT_ELEM(mat, 2, 2) = (zfar + znear) / (zfar - znear);
MAT_ELEM(mat, 2, 3) = -2.0f * zfar * znear / (zfar - znear);
MAT_ELEM(mat, 3, 2) = -1.0f;
*out = mat;
matrix_identity(out);
MAT_ELEM(*out, 0, 0) = znear;
MAT_ELEM(*out, 1, 1) = zfar;
MAT_ELEM(*out, 2, 2) = (zfar + znear) / (zfar - znear);
MAT_ELEM(*out, 2, 3) = -2.0f * zfar * znear / (zfar - znear);
MAT_ELEM(*out, 3, 2) = -1.0f;
}
void matrix_multiply(math_matrix *out,
@ -153,3 +140,4 @@ void matrix_multiply(math_matrix *out,
*out = mat;
}