mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 22:20:21 +00:00
Complete matrix_4x4_lookat
This commit is contained in:
parent
c8e8070c02
commit
848db5b1c5
@ -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
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user