From f8ef00f23d5ca2dcb3e642ad11e83c1228ada702 Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Sun, 5 Jun 2016 17:36:40 +1000 Subject: [PATCH 01/15] Added f suffix to HMM_PI --- HandmadeMath.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index ed40c14..4249389 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -84,7 +84,7 @@ extern "C" #endif #define HMM_PI32 3.14159265359f -#define HMM_PI 3.14159265358979323846 +#define HMM_PI 3.14159265358979323846f #define HMM_MIN(a, b) (a) > (b) ? (b) : (a) #define HMM_MAX(a, b) (a) < (b) ? (b) : (a) From 693551b11a390b4cb0dfd5b2443ade0b5e970b6a Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Sun, 5 Jun 2016 18:02:55 +1000 Subject: [PATCH 02/15] Fixed Rotate function and precomputed SinTheta and CosTheta --- HandmadeMath.h | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index 4249389..02895a6 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -800,19 +800,22 @@ hmm_mat4 HMM_Rotate(float Angle, hmm_vec3 Axis) { hmm_mat4 Result = HMM_Mat4d(1.0f); - - Result.Elements[0][0] = Axis.X * Axis.X * (1.0f - cosf(HMM_ToRadians(Angle))) + cosf(HMM_ToRadians(Angle)); - Result.Elements[0][1] = Axis.Y * Axis.X * (1.0f - cosf(HMM_ToRadians(Angle))) + Axis.Z * (sinf(HMM_ToRadians(Angle))); - Result.Elements[0][2] = Axis.X * Axis.Z * (1.0f - cosf(HMM_ToRadians(Angle))) - Axis.Y * (sinf(HMM_ToRadians(Angle))); - - Result.Elements[1][0] = Axis.X * Axis.Y * (1.0f - cosf(HMM_ToRadians(Angle))) - Axis.Z * (sinf(HMM_ToRadians(Angle))); - Result.Elements[1][1] = Axis.Y * Axis.Y * (1.0f - cosf(HMM_ToRadians(Angle))) + (cosf(HMM_ToRadians(Angle))); - Result.Elements[1][2] = Axis.Y * Axis.Z * (1.0f - cosf(HMM_ToRadians(Angle))) + Axis.X * (sinf(HMM_ToRadians(Angle))); - - Result.Elements[2][0] = Axis.X * Axis.Z * (1.0f - cosf(HMM_ToRadians(Angle))) + Axis.Y * (sinf(HMM_ToRadians(Angle))); - Result.Elements[2][1] = Axis.Y * Axis.Z * (1.0f - cosf(HMM_ToRadians(Angle))) - Axis.X * (sinf(HMM_ToRadians(Angle))); - Result.Elements[2][2] = Axis.Z * Axis.Z * (1.0f - cosf(HMM_ToRadians(Angle))) * (cosf(HMM_ToRadians(Angle))); - + + SinTheta = sinf(HMM_ToRadians(Angle)); + CosTheta = cosf(HMM_ToRadians(Angle)); + + Result.Elements[0][0] = (Axis.X * Axis.X * (1.0f - CosTheta)) + CosTheta; + Result.Elements[0][1] = (Axis.X * Axis.Y * (1.0f - CosTheta)) - (Axis.Z * SinTheta); + Result.Elements[0][2] = (Axis.X * Axis.Z * (1.0f - CosTheta)) + (Axis.Y * SinTheta); + + Result.Elements[1][0] = (Axis.X * Axis.Y * (1.0f - CosTheta)) + (Axis.Z * SinTheta); + Result.Elements[1][1] = (Axis.Y * Axis.Y * (1.0f - CosTheta)) + CosTheta; + Result.Elements[1][2] = (Axis.Y * Axis.Z * (1.0f - CosTheta)) - (Axis.X * SinTheta); + + Result.Elements[2][0] = (Axis.X * Axis.Z * (1.0f - CosTheta)) - (Axis.Y * SinTheta); + Result.Elements[2][1] = (Axis.Y * Axis.Z * (1.0f - CosTheta)) + (Axis.X * SinTheta); + Result.Elements[2][2] = (Axis.Z * Axis.Z * (1.0f - CosTheta)) + CosTheta); + return (Result); } From a1f4117d4b1458e157819f40e494bb2cc47a03ab Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Sun, 5 Jun 2016 19:57:25 +1000 Subject: [PATCH 03/15] Fixed Rotate function and precomputed SinTheta and CosTheta --- HandmadeMath.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index 02895a6..4bdca83 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -801,8 +801,8 @@ HMM_Rotate(float Angle, hmm_vec3 Axis) { hmm_mat4 Result = HMM_Mat4d(1.0f); - SinTheta = sinf(HMM_ToRadians(Angle)); - CosTheta = cosf(HMM_ToRadians(Angle)); + float SinTheta = sinf(HMM_ToRadians(Angle)); + float CosTheta = cosf(HMM_ToRadians(Angle)); Result.Elements[0][0] = (Axis.X * Axis.X * (1.0f - CosTheta)) + CosTheta; Result.Elements[0][1] = (Axis.X * Axis.Y * (1.0f - CosTheta)) - (Axis.Z * SinTheta); From 60d035692b871a886f77ff3df8a7dd73300ab84a Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Sun, 5 Jun 2016 20:19:59 +1000 Subject: [PATCH 04/15] Added Wikipedia reference for HMM_FastInverseSquareRoot --- HandmadeMath.h | 1 + 1 file changed, 1 insertion(+) diff --git a/HandmadeMath.h b/HandmadeMath.h index 4bdca83..8877e6f 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -352,6 +352,7 @@ HMM_LengthSquareRoot(hmm_vec3 A) return (Result); } +// Refer to https://en.wikipedia.org/wiki/Fast_inverse_square_root HINLINE float HMM_FastInverseSquareRoot(float Number) { From 46ce1648806e0f9aa9ce30a7cc21cf6e08ab89c1 Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Wed, 8 Jun 2016 00:08:16 +1000 Subject: [PATCH 05/15] Modified HMM_Rotate --- HandmadeMath.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index 8877e6f..c8c8278 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -809,12 +809,12 @@ HMM_Rotate(float Angle, hmm_vec3 Axis) Result.Elements[0][1] = (Axis.X * Axis.Y * (1.0f - CosTheta)) - (Axis.Z * SinTheta); Result.Elements[0][2] = (Axis.X * Axis.Z * (1.0f - CosTheta)) + (Axis.Y * SinTheta); - Result.Elements[1][0] = (Axis.X * Axis.Y * (1.0f - CosTheta)) + (Axis.Z * SinTheta); + Result.Elements[1][0] = (Axis.Y * Axis.X * (1.0f - CosTheta)) + (Axis.Z * SinTheta); Result.Elements[1][1] = (Axis.Y * Axis.Y * (1.0f - CosTheta)) + CosTheta; Result.Elements[1][2] = (Axis.Y * Axis.Z * (1.0f - CosTheta)) - (Axis.X * SinTheta); - Result.Elements[2][0] = (Axis.X * Axis.Z * (1.0f - CosTheta)) - (Axis.Y * SinTheta); - Result.Elements[2][1] = (Axis.Y * Axis.Z * (1.0f - CosTheta)) + (Axis.X * SinTheta); + Result.Elements[2][0] = (Axis.Z * Axis.X * (1.0f - CosTheta)) - (Axis.Y * SinTheta); + Result.Elements[2][1] = (Axis.Z * Axis.Y * (1.0f - CosTheta)) + (Axis.X * SinTheta); Result.Elements[2][2] = (Axis.Z * Axis.Z * (1.0f - CosTheta)) + CosTheta); return (Result); From b4eff029121a67f5547e30cf3eec8cbf373298dc Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Wed, 8 Jun 2016 00:37:07 +1000 Subject: [PATCH 06/15] Trimmed HMM_Rotate a bit further --- HandmadeMath.h | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index c8c8278..3311ae5 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -804,18 +804,19 @@ HMM_Rotate(float Angle, hmm_vec3 Axis) float SinTheta = sinf(HMM_ToRadians(Angle)); float CosTheta = cosf(HMM_ToRadians(Angle)); + float CosValue = 1.0f - CosTheta; - Result.Elements[0][0] = (Axis.X * Axis.X * (1.0f - CosTheta)) + CosTheta; - Result.Elements[0][1] = (Axis.X * Axis.Y * (1.0f - CosTheta)) - (Axis.Z * SinTheta); - Result.Elements[0][2] = (Axis.X * Axis.Z * (1.0f - CosTheta)) + (Axis.Y * SinTheta); + Result.Elements[0][0] = (Axis.X * Axis.X * CosValue + CosTheta; + Result.Elements[0][1] = (Axis.X * Axis.Y * CosValue) - (Axis.Z * SinTheta); + Result.Elements[0][2] = (Axis.X * Axis.Z * CosValue) + (Axis.Y * SinTheta); - Result.Elements[1][0] = (Axis.Y * Axis.X * (1.0f - CosTheta)) + (Axis.Z * SinTheta); - Result.Elements[1][1] = (Axis.Y * Axis.Y * (1.0f - CosTheta)) + CosTheta; - Result.Elements[1][2] = (Axis.Y * Axis.Z * (1.0f - CosTheta)) - (Axis.X * SinTheta); + Result.Elements[1][0] = (Axis.Y * Axis.X * CosValue) + (Axis.Z * SinTheta); + Result.Elements[1][1] = (Axis.Y * Axis.Y * CosValue) + CosTheta; + Result.Elements[1][2] = (Axis.Y * Axis.Z * CosValue) - (Axis.X * SinTheta); - Result.Elements[2][0] = (Axis.Z * Axis.X * (1.0f - CosTheta)) - (Axis.Y * SinTheta); - Result.Elements[2][1] = (Axis.Z * Axis.Y * (1.0f - CosTheta)) + (Axis.X * SinTheta); - Result.Elements[2][2] = (Axis.Z * Axis.Z * (1.0f - CosTheta)) + CosTheta); + Result.Elements[2][0] = (Axis.Z * Axis.X * CosValue) - (Axis.Y * SinTheta); + Result.Elements[2][1] = (Axis.Z * Axis.Y * CosValue) + (Axis.X * SinTheta); + Result.Elements[2][2] = (Axis.Z * Axis.Z * CosValue) + CosTheta; return (Result); } From 743d03451da3c55802d2125bf9c0de5148f4ae8c Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Wed, 8 Jun 2016 00:38:27 +1000 Subject: [PATCH 07/15] Revert "Corrected errors in Perspective function" This reverts commit 136b049106f4bce180d952ea3faec2e0fe827a6b. --- HandmadeMath.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index 3311ae5..33fddab 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -773,13 +773,11 @@ HMM_Perspective(float FOV, float AspectRatio, float Near, float Far) { hmm_mat4 Result = HMM_Mat4d(1.0f); - float TanThetaOver2 = tanf(FOV * (HMM_PI32 / 360.0f)); - - Result.Elements[0][0] = 1.0f / TanThetaOver2; - Result.Elements[1][1] = AspectRatio / TanThetaOver2; + Result.Elements[0][0] = 1.0f / (AspectRatio * tanf(FOV / 2.0f)); + Result.Elements[1][1] = 1.0f / tanf(FOV / 2.0f); Result.Elements[2][3] = -1.0f; - Result.Elements[2][2] = (Near + Far) / (Near - Far); - Result.Elements[3][2] = (2.0f * Near * Far) / (Near - Far); + Result.Elements[2][2] = -(Far + Near) / (Far - Near); + Result.Elements[3][2] = -(2.0f * Far * Near) / (Far - Near); Result.Elements[3][3] = 0.0f; return (Result); From 92f5150a01631a49ccc370188cc04309ea5263c1 Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Wed, 8 Jun 2016 00:39:30 +1000 Subject: [PATCH 08/15] Revert "Revert "Corrected errors in Perspective function"" This reverts commit 743d03451da3c55802d2125bf9c0de5148f4ae8c. --- HandmadeMath.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index 33fddab..3311ae5 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -773,11 +773,13 @@ HMM_Perspective(float FOV, float AspectRatio, float Near, float Far) { hmm_mat4 Result = HMM_Mat4d(1.0f); - Result.Elements[0][0] = 1.0f / (AspectRatio * tanf(FOV / 2.0f)); - Result.Elements[1][1] = 1.0f / tanf(FOV / 2.0f); + float TanThetaOver2 = tanf(FOV * (HMM_PI32 / 360.0f)); + + Result.Elements[0][0] = 1.0f / TanThetaOver2; + Result.Elements[1][1] = AspectRatio / TanThetaOver2; Result.Elements[2][3] = -1.0f; - Result.Elements[2][2] = -(Far + Near) / (Far - Near); - Result.Elements[3][2] = -(2.0f * Far * Near) / (Far - Near); + Result.Elements[2][2] = (Near + Far) / (Near - Far); + Result.Elements[3][2] = (2.0f * Near * Far) / (Near - Far); Result.Elements[3][3] = 0.0f; return (Result); From cbcc1e583e7e3b46efc9ae3ec4dda0df26828469 Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Wed, 8 Jun 2016 00:43:39 +1000 Subject: [PATCH 09/15] Small fixes --- HandmadeMath.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index 3311ae5..f47812e 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -806,7 +806,7 @@ HMM_Rotate(float Angle, hmm_vec3 Axis) float CosTheta = cosf(HMM_ToRadians(Angle)); float CosValue = 1.0f - CosTheta; - Result.Elements[0][0] = (Axis.X * Axis.X * CosValue + CosTheta; + Result.Elements[0][0] = (Axis.X * Axis.X * CosValue) + CosTheta; Result.Elements[0][1] = (Axis.X * Axis.Y * CosValue) - (Axis.Z * SinTheta); Result.Elements[0][2] = (Axis.X * Axis.Z * CosValue) + (Axis.Y * SinTheta); From b9c83866ffee62c91b9d1d59c67a65201c7a6018 Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Wed, 8 Jun 2016 00:45:57 +1000 Subject: [PATCH 10/15] Revert "Revert "Revert "Corrected errors in Perspective function""" This reverts commit 92f5150a01631a49ccc370188cc04309ea5263c1. --- HandmadeMath.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index f47812e..ad56bd6 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -773,13 +773,11 @@ HMM_Perspective(float FOV, float AspectRatio, float Near, float Far) { hmm_mat4 Result = HMM_Mat4d(1.0f); - float TanThetaOver2 = tanf(FOV * (HMM_PI32 / 360.0f)); - - Result.Elements[0][0] = 1.0f / TanThetaOver2; - Result.Elements[1][1] = AspectRatio / TanThetaOver2; + Result.Elements[0][0] = 1.0f / (AspectRatio * tanf(FOV / 2.0f)); + Result.Elements[1][1] = 1.0f / tanf(FOV / 2.0f); Result.Elements[2][3] = -1.0f; - Result.Elements[2][2] = (Near + Far) / (Near - Far); - Result.Elements[3][2] = (2.0f * Near * Far) / (Near - Far); + Result.Elements[2][2] = -(Far + Near) / (Far - Near); + Result.Elements[3][2] = -(2.0f * Far * Near) / (Far - Near); Result.Elements[3][3] = 0.0f; return (Result); From 8a9bd47985f54d1c686377f180ebdaffbed336d5 Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Wed, 8 Jun 2016 00:48:13 +1000 Subject: [PATCH 11/15] Revert change to Perspective function --- HandmadeMath.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index ad56bd6..2d07e07 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -773,8 +773,10 @@ HMM_Perspective(float FOV, float AspectRatio, float Near, float Far) { hmm_mat4 Result = HMM_Mat4d(1.0f); - Result.Elements[0][0] = 1.0f / (AspectRatio * tanf(FOV / 2.0f)); - Result.Elements[1][1] = 1.0f / tanf(FOV / 2.0f); + float TanThetaOver2 = tanf(FOV / 2.0f); + + Result.Elements[0][0] = 1.0f / (AspectRatio * TanThetaOver2); + Result.Elements[1][1] = 1.0f / TanThetaOver2; Result.Elements[2][3] = -1.0f; Result.Elements[2][2] = -(Far + Near) / (Far - Near); Result.Elements[3][2] = -(2.0f * Far * Near) / (Far - Near); @@ -804,7 +806,7 @@ HMM_Rotate(float Angle, hmm_vec3 Axis) float CosTheta = cosf(HMM_ToRadians(Angle)); float CosValue = 1.0f - CosTheta; - Result.Elements[0][0] = (Axis.X * Axis.X * CosValue) + CosTheta; + Result.Elements[0][0] = (Axis.X * Axis.X * CosValue + CosTheta; Result.Elements[0][1] = (Axis.X * Axis.Y * CosValue) - (Axis.Z * SinTheta); Result.Elements[0][2] = (Axis.X * Axis.Z * CosValue) + (Axis.Y * SinTheta); From b63e6b558fc29d6ca33a469d455d6ec9476dd7de Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Wed, 8 Jun 2016 03:11:12 +1000 Subject: [PATCH 12/15] More changes --- HandmadeMath.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index 2d07e07..3311ae5 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -773,13 +773,13 @@ HMM_Perspective(float FOV, float AspectRatio, float Near, float Far) { hmm_mat4 Result = HMM_Mat4d(1.0f); - float TanThetaOver2 = tanf(FOV / 2.0f); + float TanThetaOver2 = tanf(FOV * (HMM_PI32 / 360.0f)); - Result.Elements[0][0] = 1.0f / (AspectRatio * TanThetaOver2); - Result.Elements[1][1] = 1.0f / TanThetaOver2; + Result.Elements[0][0] = 1.0f / TanThetaOver2; + Result.Elements[1][1] = AspectRatio / TanThetaOver2; Result.Elements[2][3] = -1.0f; - Result.Elements[2][2] = -(Far + Near) / (Far - Near); - Result.Elements[3][2] = -(2.0f * Far * Near) / (Far - Near); + Result.Elements[2][2] = (Near + Far) / (Near - Far); + Result.Elements[3][2] = (2.0f * Near * Far) / (Near - Far); Result.Elements[3][3] = 0.0f; return (Result); From 2f6b2fd260d04f81abc994dd9dcf8b1f01153238 Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Wed, 8 Jun 2016 03:30:22 +1000 Subject: [PATCH 13/15] HMM_Rotate - normalize vec3 Axis --- HandmadeMath.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/HandmadeMath.h b/HandmadeMath.h index 3311ae5..8643b23 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -802,6 +802,8 @@ HMM_Rotate(float Angle, hmm_vec3 Axis) { hmm_mat4 Result = HMM_Mat4d(1.0f); + Axis = HMM_Normalize(Axis); + float SinTheta = sinf(HMM_ToRadians(Angle)); float CosTheta = cosf(HMM_ToRadians(Angle)); float CosValue = 1.0f - CosTheta; From de5c1fbb5907974f76bbbcece38f7fee3a52d8c4 Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Wed, 8 Jun 2016 03:36:03 +1000 Subject: [PATCH 14/15] Small fix for HMM_Rotate --- HandmadeMath.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index 8643b23..1d4ff73 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -808,7 +808,7 @@ HMM_Rotate(float Angle, hmm_vec3 Axis) float CosTheta = cosf(HMM_ToRadians(Angle)); float CosValue = 1.0f - CosTheta; - Result.Elements[0][0] = (Axis.X * Axis.X * CosValue + CosTheta; + Result.Elements[0][0] = (Axis.X * Axis.X * CosValue) + CosTheta; Result.Elements[0][1] = (Axis.X * Axis.Y * CosValue) - (Axis.Z * SinTheta); Result.Elements[0][2] = (Axis.X * Axis.Z * CosValue) + (Axis.Y * SinTheta); From 2386f967b3df611fa6fc8307f9cd678038645067 Mon Sep 17 00:00:00 2001 From: Kyle De'Vir Date: Wed, 8 Jun 2016 05:19:11 +1000 Subject: [PATCH 15/15] Fixed calculations for HMM_Rotate --- HandmadeMath.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/HandmadeMath.h b/HandmadeMath.h index 1d4ff73..ddb2ef0 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -809,15 +809,15 @@ HMM_Rotate(float Angle, hmm_vec3 Axis) float CosValue = 1.0f - CosTheta; Result.Elements[0][0] = (Axis.X * Axis.X * CosValue) + CosTheta; - Result.Elements[0][1] = (Axis.X * Axis.Y * CosValue) - (Axis.Z * SinTheta); - Result.Elements[0][2] = (Axis.X * Axis.Z * CosValue) + (Axis.Y * SinTheta); + Result.Elements[0][1] = (Axis.X * Axis.Y * CosValue) + (Axis.Z * SinTheta); + Result.Elements[0][2] = (Axis.X * Axis.Z * CosValue) - (Axis.Y * SinTheta); - Result.Elements[1][0] = (Axis.Y * Axis.X * CosValue) + (Axis.Z * SinTheta); + Result.Elements[1][0] = (Axis.Y * Axis.X * CosValue) - (Axis.Z * SinTheta); Result.Elements[1][1] = (Axis.Y * Axis.Y * CosValue) + CosTheta; - Result.Elements[1][2] = (Axis.Y * Axis.Z * CosValue) - (Axis.X * SinTheta); + Result.Elements[1][2] = (Axis.Y * Axis.Z * CosValue) + (Axis.X * SinTheta); - Result.Elements[2][0] = (Axis.Z * Axis.X * CosValue) - (Axis.Y * SinTheta); - Result.Elements[2][1] = (Axis.Z * Axis.Y * CosValue) + (Axis.X * SinTheta); + Result.Elements[2][0] = (Axis.Z * Axis.X * CosValue) + (Axis.Y * SinTheta); + Result.Elements[2][1] = (Axis.Z * Axis.Y * CosValue) - (Axis.X * SinTheta); Result.Elements[2][2] = (Axis.Z * Axis.Z * CosValue) + CosTheta; return (Result);