/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* mat4_rotate.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: gbrochar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/12/24 12:24:54 by gbrochar #+# #+# */ /* Updated: 2020/12/26 09:10:47 by gbrochar ### ########.fr */ /* */ /* ************************************************************************** */ #include "mat4.h" t_mat4 mat4_rotatex(t_mat4 m, double theta) { double s = sin(theta); double c = cos(theta); t_mat4 ret; ret.data[0] = m.data[0]; ret.data[1] = m.data[1]; ret.data[2] = m.data[2]; ret.data[3] = m.data[3]; ret.data[4] = m.data[4] * c + m.data[8] * s; ret.data[5] = m.data[5] * c + m.data[9] * s; ret.data[6] = m.data[6] * c + m.data[10] * s; ret.data[7] = m.data[7] * c + m.data[11] * s; ret.data[8] = m.data[8] * c - m.data[4] * s; ret.data[9] = m.data[9] * c - m.data[5] * s; ret.data[10] = m.data[10] * c - m.data[6] * s; ret.data[11] = m.data[11] * c - m.data[7] * s; ret.data[12] = m.data[12]; ret.data[13] = m.data[13]; ret.data[14] = m.data[14]; ret.data[15] = m.data[15]; return (ret); } t_mat4 mat4_rotatey(t_mat4 m, double theta) { double s = sin(theta); double c = cos(theta); t_mat4 ret; ret.data[0] = m.data[0] * c - m.data[8] * s; ret.data[1] = m.data[1] * c - m.data[9] * s; ret.data[2] = m.data[2] * c - m.data[10] * s; ret.data[3] = m.data[3] * c - m.data[11] * s; ret.data[4] = m.data[4]; ret.data[5] = m.data[5]; ret.data[6] = m.data[6]; ret.data[7] = m.data[7]; ret.data[8] = m.data[8] * c + m.data[0] * s; ret.data[9] = m.data[9] * c + m.data[1] * s; ret.data[10] = m.data[10] * c + m.data[2] * s; ret.data[11] = m.data[11] * c + m.data[3] * s; ret.data[12] = m.data[12]; ret.data[13] = m.data[13]; ret.data[14] = m.data[14]; ret.data[15] = m.data[15]; return (ret); } t_mat4 mat4_rotatez(t_mat4 m, double theta) { double s = sin(theta); double c = cos(theta); t_mat4 ret; ret.data[0] = m.data[0] * c + m.data[4] * s; ret.data[1] = m.data[1] * c + m.data[5] * s; ret.data[2] = m.data[2] * c + m.data[6] * s; ret.data[3] = m.data[3] * c + m.data[7] * s; ret.data[4] = m.data[4] * c - m.data[0] * s; ret.data[5] = m.data[5] * c - m.data[1] * s; ret.data[6] = m.data[6] * c - m.data[2] * s; ret.data[7] = m.data[7] * c - m.data[3] * s; ret.data[8] = m.data[8]; ret.data[9] = m.data[9]; ret.data[10] = m.data[10]; ret.data[11] = m.data[11]; ret.data[12] = m.data[12]; ret.data[13] = m.data[13]; ret.data[14] = m.data[14]; ret.data[15] = m.data[15]; return (ret); } t_mat4 mat4_rotatexyz(t_mat4 m, t_vec3 theta) { return ( mat4_rotatey(mat4_rotatex(mat4_rotatez(m, theta.z), theta.x), theta.y)); }