diff --git a/src/cam.c b/src/cam.c index 957f87a..091d5e3 100644 --- a/src/cam.c +++ b/src/cam.c @@ -59,4 +59,46 @@ Mat4f_t lookAt(Vec4f_t* eye, Vec4f_t* center, Vec4f_t* up) }; return mat4f_from_array(m); +} + +Mat4f_t rotateX(float angle) +{ + Mat4f_t r = mat4f_identity(); + float c = cosf(angle); + float s = sinf(angle); + + r.m[5] = c; + r.m[6] = -s; + r.m[9] = s; + r.m[10] = c; + + return r; +} + +Mat4f_t rotateY(float angle) +{ + Mat4f_t r = mat4f_identity(); + float c = cosf(angle); + float s = sinf(angle); + + r.m[0] = c; + r.m[2] = s; + r.m[8] = -s; + r.m[10] = c; + + return r; +} + +Mat4f_t rotateZ(float angle) +{ + Mat4f_t r = mat4f_identity(); + float c = cosf(angle); + float s = sinf(angle); + + r.m[0] = c; + r.m[1] = -s; + r.m[4] = s; + r.m[5] = c; + + return r; } \ No newline at end of file diff --git a/src/cam.h b/src/cam.h index f533b32..366dbb3 100644 --- a/src/cam.h +++ b/src/cam.h @@ -3,4 +3,10 @@ Mat4f_t perspCam(float fov, float asp, float near, float far); Vec4f_t* normCoord_r(Vec4f_t* vec); -Vec4f_t* viewport_r(Vec4f_t* vec, float width, float height); \ No newline at end of file +Vec4f_t* viewport_r(Vec4f_t* vec, float width, float height); + +Mat4f_t lookAt(Vec4f_t* eye, Vec4f_t* center, Vec4f_t* up); + +Mat4f_t rotateX(float angle); +Mat4f_t rotateY(float angle); +Mat4f_t rotateZ(float angle); \ No newline at end of file