From 46fdcfb171fa639565e02ae9562ffbf05a40b5e6 Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Sun, 29 May 2016 02:58:27 +1000 Subject: [PATCH 1/3] Added HMM_MultiplyMat4ByVec4 function Multiplies a 4x4 matrix by a 4x4 vector and returns it. --- HandmadeMath.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/HandmadeMath.h b/HandmadeMath.h index 97899d0..53efc77 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -257,6 +257,7 @@ HMMDEF hmm_vec4 HMM_DivideVec4(hmm_vec4 Left, hmm_vec4 Right); HMMDEF hmm_mat4 HMM_Mat4(void); HMMDEF hmm_mat4 HMM_Mat4d(float Diagonal); HMMDEF hmm_mat4 HMM_MultiplyMat4(hmm_mat4 Left, hmm_mat4 Right); +HMMDEF hmm_vec4 HMM_MultiplyMat4ByVec4(hmm_mat4 Matrix, hmm_vec4 Vector); HMMDEF hmm_mat4 HMM_Orthographic(float Left, float Right, float Bottom, float Top, float Near, float Far); HMMDEF hmm_mat4 HMM_Perspective(float FOV, float AspectRatio, float Near, float Far); @@ -708,6 +709,26 @@ HMM_MultiplyMat4(hmm_mat4 Left, hmm_mat4 Right) return (Result); } +hmm_vec4 +HMM_MultiplyMat4ByVec4(hmm_mat4 Matrix, hmm_vec4 Vector) +{ + hmm_vec4 Result = HMM_Vec4(0.0f, 0.0f, 0.0f, 0.0f); + + int Rows, Columns; + for(Rows = 0; Rows < 4; ++Rows) + { + float Sum = 0; + for(Columns = 0; Columns < 4; ++Columns) + { + Sum += Matrix.Elements[Rows][Columns] * Vector.Elements[Columns]; + } + + Result.Elements[Rows] = Sum; + } + + return (Result); +} + hmm_mat4 HMM_Orthographic(float Left, float Right, float Bottom, float Top, float Near, float Far) { From a72ff828a6103e2f707b6d6f78371c749efd0f42 Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Sun, 29 May 2016 03:29:29 +1000 Subject: [PATCH 2/3] Added C++ HMM_MultiplyMat4ByVec4 functionality Added operator overloaded HMM_MultiplyMat4ByVec4 functionality. --- HandmadeMath.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/HandmadeMath.h b/HandmadeMath.h index 53efc77..9856715 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -917,6 +917,14 @@ Multiply(hmm_mat4 Left, hmm_mat4 Right) return (Result); } +HINLINE hmm_vec4 +Multiply(hmm_mat4 Matrix, hmm_vec4 Vector) +{ + hmm_vec4 Result = HMM_MultiplyMat4ByVec4(Matrix, Vector); + + return (Result); +} + HINLINE hmm_vec2 Divide(hmm_vec2 Left, hmm_vec2 Right) { @@ -1036,6 +1044,14 @@ operator*(hmm_vec4 Left, hmm_vec4 Right) return (Result); } +HINLINE hmm_vec4 +operator*(hmm_mat4 Matrix, hmm_vec4 Vector) +{ + hmm_vec4 Result = Multiply(Matrix, Vector); + + return (Result); +} + HINLINE hmm_mat4 operator*(hmm_mat4 Left, hmm_mat4 Right) { From 9b2c7bf3012d1116cfb90453601e5673937bee15 Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Sun, 29 May 2016 03:39:08 +1000 Subject: [PATCH 3/3] Added C++ HMM_MultiplyMat4ByVec4 functionality Added missing prototypes --- HandmadeMath.h | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index 9856715..8db5f05 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -285,6 +285,7 @@ HMMDEF hmm_vec2 HMM_Multiply(int X, int Y); HMMDEF hmm_vec3 HMM_Multiply(int X, int Y, int Z); HMMDEF hmm_vec4 HMM_Multiply(int X, int Y, int Z, int W); HMMDEF hmm_mat4 HMM_Multiply(hmm_mat4 Left, hmm_mat4 Right); +HMMDEF hmm_vec4 HMM_Multiply(hmm_mat4 Matrix, hmm_vec4 Vector); HMMDEF hmm_vec2 HMM_Divide(int X, int Y); HMMDEF hmm_vec3 HMM_Divide(int X, int Y, int Z); @@ -306,6 +307,8 @@ HMMDEF hmm_mat4 operator*(hmm_mat4 Left, hmm_mat4 Right); HMMDEF hmm_vec3 operator*(hmm_vec3 Left, float Right); HMMDEF hmm_vec2 operator*(hmm_vec2 Left, float Right); +HMMDEF hmm_vec4 operator*(hmm_mat4 Matrix, hmm_vec4 Vector); + HMMDEF hmm_vec2 operator/(hmm_vec2 Left, hmm_vec2 Right); HMMDEF hmm_vec3 operator/(hmm_vec3 Left, hmm_vec3 Right); HMMDEF hmm_vec4 operator/(hmm_vec4 Left, hmm_vec4 Right); @@ -1044,14 +1047,6 @@ operator*(hmm_vec4 Left, hmm_vec4 Right) return (Result); } -HINLINE hmm_vec4 -operator*(hmm_mat4 Matrix, hmm_vec4 Vector) -{ - hmm_vec4 Result = Multiply(Matrix, Vector); - - return (Result); -} - HINLINE hmm_mat4 operator*(hmm_mat4 Left, hmm_mat4 Right) { @@ -1060,6 +1055,14 @@ operator*(hmm_mat4 Left, hmm_mat4 Right) return (Result); } +HINLINE hmm_vec4 +operator*(hmm_mat4 Matrix, hmm_vec4 Vector) +{ + hmm_vec4 Result = Multiply(Matrix, Vector); + + return (Result); +} + HINLINE hmm_vec2 operator/(hmm_vec2 Left, hmm_vec2 Right) {