From c2b5bb8de0b7c74f5e96b7b82d5b598fc33162fa Mon Sep 17 00:00:00 2001 From: gbrochar Date: Wed, 23 Dec 2020 10:51:35 +0100 Subject: [PATCH] mat4_multiply --- Makefile | 3 ++- inc/mat4.h | 6 ++++- src/mat4_multiply.c | 60 ++++++++++++++++++++++++++++++++++++++++++++ src/mat4_transpose.c | 2 +- 4 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 src/mat4_multiply.c diff --git a/Makefile b/Makefile index 52641e3..b1be310 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: gbrochar +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2020/12/17 19:47:03 by gbrochar #+# #+# # -# Updated: 2020/12/22 20:49:38 by gbrochar ### ########.fr # +# Updated: 2020/12/23 10:49:53 by gbrochar ### ########.fr # # # # **************************************************************************** # @@ -17,6 +17,7 @@ SRC_FILE = main.c \ parse_line.c \ env.c \ mat4_transpose.c \ + mat4_multiply.c \ OBJ_FILE = $(SRC_FILE:.c=.o) diff --git a/inc/mat4.h b/inc/mat4.h index b6ef346..fffbba0 100644 --- a/inc/mat4.h +++ b/inc/mat4.h @@ -6,7 +6,7 @@ /* By: gbrochar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/12/22 20:35:00 by gbrochar #+# #+# */ -/* Updated: 2020/12/22 20:48:29 by gbrochar ### ########.fr */ +/* Updated: 2020/12/23 10:50:09 by gbrochar ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,4 +20,8 @@ struct s_mat4 double data[16]; }; +t_mat4 mat4_transpose(t_mat4 m); +t_mat4 mat4_multiply(t_mat4 m, t_mat4 rhs); +t_mat4 mat4_multiply_tmp(t_mat4 m, t_mat4 rhs); + #endif diff --git a/src/mat4_multiply.c b/src/mat4_multiply.c new file mode 100644 index 0000000..a4cd154 --- /dev/null +++ b/src/mat4_multiply.c @@ -0,0 +1,60 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* mat4_mul.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gbrochar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/12/23 10:39:09 by gbrochar #+# #+# */ +/* Updated: 2020/12/23 10:49:28 by gbrochar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "mat4.h" + +t_mat4 mat4_multiply_tmp(t_mat4 m, t_mat4 rhs) +{ + t_mat4 out; + + out.data[0] = rhs.data[0] * m.data[0] + rhs.data[1] * m.data[4] + + rhs.data[2] * m.data[8] + rhs.data[3] * m.data[12]; + out.data[1] = rhs.data[0] * m.data[1] + rhs.data[1] * m.data[5] + + rhs.data[2] * m.data[9] + rhs.data[3] * m.data[13]; + out.data[2] = rhs.data[0] * m.data[2] + rhs.data[1] * m.data[6] + + rhs.data[2] * m.data[10] + rhs.data[3] * m.data[14]; + out.data[3] = rhs.data[0] * m.data[3] + rhs.data[1] * m.data[7] + + rhs.data[2] * m.data[11] + rhs.data[3] * m.data[15]; + out.data[4] = rhs.data[4] * m.data[0] + rhs.data[5] * m.data[4] + + rhs.data[6] * m.data[8] + rhs.data[7] * m.data[12]; + out.data[5] = rhs.data[4] * m.data[1] + rhs.data[5] * m.data[5] + + rhs.data[6] * m.data[9] + rhs.data[7] * m.data[13]; + out.data[6] = rhs.data[4] * m.data[2] + rhs.data[5] * m.data[6] + + rhs.data[6] * m.data[10] + rhs.data[7] * m.data[14]; + out.data[7] = rhs.data[4] * m.data[3] + rhs.data[5] * m.data[7] + + rhs.data[6] * m.data[11] + rhs.data[7] * m.data[15]; + out.data[8] = rhs.data[8] * m.data[0] + rhs.data[9] * m.data[4] + + rhs.data[10] * m.data[8] + rhs.data[11] * m.data[12]; + return (out); +} + +t_mat4 mat4_multiply(t_mat4 m, t_mat4 rhs) +{ + t_mat4 out; + + out = mat4_multiply_tmp(m, rhs); + out.data[9] = rhs.data[8] * m.data[1] + rhs.data[9] * m.data[5] + + rhs.data[10] * m.data[9] + rhs.data[11] * m.data[13]; + out.data[10] = rhs.data[8] * m.data[2] + rhs.data[9] * m.data[6] + + rhs.data[10] * m.data[10] + rhs.data[11] * m.data[14]; + out.data[11] = rhs.data[8] * m.data[3] + rhs.data[9] * m.data[7] + + rhs.data[10] * m.data[11] + rhs.data[11] * m.data[15]; + out.data[12] = rhs.data[12] * m.data[0] + rhs.data[13] * m.data[4] + + rhs.data[14] * m.data[8] + rhs.data[15] * m.data[12]; + out.data[13] = rhs.data[12] * m.data[1] + rhs.data[13] * m.data[5] + + rhs.data[14] * m.data[9] + rhs.data[15] * m.data[13]; + out.data[14] = rhs.data[12] * m.data[2] + rhs.data[13] * m.data[6] + + rhs.data[14] * m.data[10] + rhs.data[15] * m.data[14]; + out.data[15] = rhs.data[12] * m.data[3] + rhs.data[13] * m.data[7] + + rhs.data[14] * m.data[11] + rhs.data[15] * m.data[15]; + return (out); +} diff --git a/src/mat4_transpose.c b/src/mat4_transpose.c index 8a226e8..f33668d 100644 --- a/src/mat4_transpose.c +++ b/src/mat4_transpose.c @@ -6,7 +6,7 @@ /* By: gbrochar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/12/22 20:34:52 by gbrochar #+# #+# */ -/* Updated: 2020/12/22 20:48:21 by gbrochar ### ########.fr */ +/* Updated: 2020/12/23 10:50:15 by gbrochar ### ########.fr */ /* */ /* ************************************************************************** */