diff --git a/libretro-common/gfx/math/matrix_4x4.c b/libretro-common/gfx/math/matrix_4x4.c index b197af76b0..3fe4379655 100644 --- a/libretro-common/gfx/math/matrix_4x4.c +++ b/libretro-common/gfx/math/matrix_4x4.c @@ -240,46 +240,42 @@ void matrix_4x4_projection(math_matrix_4x4 *out, MAT_ELEM_4X4(*out, 3, 3) = 1.0f; } -/* TODO/FIXME - finish */ void matrix_4x4_lookat(math_matrix_4x4 *out, vec3_t eye, vec3_t center, vec3_t up) { - vec3_t s, t, f; + vec3_t zaxis; /* the "forward" vector */ + vec3_t xaxis; /* the "right" vector */ + vec3_t yaxis; /* the "up" vector */ - vec3_copy(&f[0], center); - vec3_subtract(&f[0], eye); - vec3_normalize(&f[0]); + vec3_copy(&zaxis[0], center); + vec3_subtract(&zaxis[0], eye); + vec3_normalize(&zaxis[0]); - vec3_cross(&s[0], &f[0], up); - vec3_normalize(&s[0]); - vec3_cross(&t[0], &s[0], f); + vec3_cross(&xaxis[0], &zaxis[0], up); + vec3_normalize(&xaxis[0]); + vec3_cross(&yaxis[0], &xaxis[0], zaxis); - MAT_ELEM_4X4(*out, 0, 0) = s[0]; - MAT_ELEM_4X4(*out, 0, 1) = t[0]; - MAT_ELEM_4X4(*out, 0, 2) = -f[0]; - MAT_ELEM_4X4(*out, 0, 3) = 0.0f; + MAT_ELEM_4X4(*out, 0, 0) = xaxis[0]; + MAT_ELEM_4X4(*out, 0, 1) = yaxis[0]; + MAT_ELEM_4X4(*out, 0, 2) = -zaxis[0]; + MAT_ELEM_4X4(*out, 0, 3) = 0.0; - MAT_ELEM_4X4(*out, 1, 0) = s[1]; - MAT_ELEM_4X4(*out, 1, 1) = t[1]; - MAT_ELEM_4X4(*out, 1, 2) = -f[1]; + MAT_ELEM_4X4(*out, 1, 0) = xaxis[1]; + MAT_ELEM_4X4(*out, 1, 1) = yaxis[1]; + MAT_ELEM_4X4(*out, 1, 2) = -zaxis[1]; MAT_ELEM_4X4(*out, 1, 3) = 0.0f; - MAT_ELEM_4X4(*out, 2, 0) = s[2]; - MAT_ELEM_4X4(*out, 2, 1) = t[2]; - MAT_ELEM_4X4(*out, 2, 2) = -f[2]; + MAT_ELEM_4X4(*out, 2, 0) = xaxis[2]; + MAT_ELEM_4X4(*out, 2, 1) = yaxis[2]; + MAT_ELEM_4X4(*out, 2, 2) = -zaxis[2]; MAT_ELEM_4X4(*out, 2, 3) = 0.0f; - MAT_ELEM_4X4(*out, 3, 0) = 0.0f; - MAT_ELEM_4X4(*out, 3, 1) = 0.0f; - MAT_ELEM_4X4(*out, 3, 2) = 0.0f; + MAT_ELEM_4X4(*out, 3, 0) = -(xaxis[0] * eye[0] + xaxis[1] * eye[1] + xaxis[2] * eye[2]); + MAT_ELEM_4X4(*out, 3, 1) = -(yaxis[0] * eye[0] + yaxis[1] * eye[1] + yaxis[2] * eye[2]); + MAT_ELEM_4X4(*out, 3, 2) = -(zaxis[0] * eye[0] + zaxis[1] * eye[1] + zaxis[2] * eye[2]); MAT_ELEM_4X4(*out, 3, 3) = 1.f; - -#if 0 - mat4x4_translate_in_place(m, -eye[0], -eye[1], -eye[2]); -#endif - } /*