diff --git a/SHADE_Managed/src/Math/Vector3.cxx b/SHADE_Managed/src/Math/Vector3.cxx index edd78f6b..d2862ac7 100644 --- a/SHADE_Managed/src/Math/Vector3.cxx +++ b/SHADE_Managed/src/Math/Vector3.cxx @@ -21,6 +21,9 @@ of DigiPen Institute of Technology is prohibited. #include // Project Headers #include "Math.hxx" +#include "Quaternion.hxx" +#include "Math/Vector/SHVec3.h" +#include "Utility/Convert.hxx" namespace SHADE { @@ -148,21 +151,21 @@ namespace SHADE { return vec - (Project(vec, normal.GetNormalised()) * 2.0f); } - Vector3 Vector3::RotateRadians(Vector3 vec, float radians) + Vector3 Vector3::RotateX(Vector3 vec, float radians) { - const float SINE = sin(radians); - const float COSINE = cos(radians); - - return Vector3 - ( - vec.x * COSINE - vec.y * SINE, - vec.x * SINE + vec.y * COSINE, - vec.z - ); + return Convert::ToCLI(SHVec3::RotateX(Convert::ToNative(vec), radians)); } - Vector3 Vector3::RotateDegrees(Vector3 vec, float degrees) + Vector3 Vector3::RotateY(Vector3 vec, float radians) { - return RotateRadians(vec, Math::DegreesToRadians(degrees)); + return Convert::ToCLI(SHVec3::RotateY(Convert::ToNative(vec), radians)); + } + Vector3 Vector3::RotateZ(Vector3 vec, float radians) + { + return Convert::ToCLI(SHVec3::RotateZ(Convert::ToNative(vec), radians)); + } + Vector3 Vector3::Rotate(Vector3 vec, Vector3 axis, float radians) + { + return Convert::ToCLI(SHVec3::Rotate(Convert::ToNative(vec), Convert::ToNative(axis), radians)); } Vector3 Vector3::Min(Vector3 lhs, Vector3 rhs) { diff --git a/SHADE_Managed/src/Math/Vector3.hxx b/SHADE_Managed/src/Math/Vector3.hxx index 189f2930..76b11420 100644 --- a/SHADE_Managed/src/Math/Vector3.hxx +++ b/SHADE_Managed/src/Math/Vector3.hxx @@ -19,6 +19,8 @@ of DigiPen Institute of Technology is prohibited. // Project Includes #include "Vector2.hxx" +value struct Quaternion; + namespace SHADE { /// @@ -266,7 +268,7 @@ namespace SHADE /// The Vector3 that represents vec reflected across normal. static Vector3 Reflect(Vector3 vec, Vector3 normal); /// - /// Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise + /// Rotates a Vector3 about the X-axis by a specified angle in an anti-clockwise /// direction. /// /// A Vector3 to rotate. @@ -274,17 +276,37 @@ namespace SHADE /// Angle to rotate the vector by in an anti-clockwise direction in radians. /// /// The Vector3 that represents the rotated vector. - static Vector3 RotateRadians(Vector3 vec, float radians); + static Vector3 RotateX(Vector3 vec, float radians); /// - /// Rotates a Vector3 on the Z-axis by a specified angle in an anti-clockwise + /// Rotates a Vector3 about the Y-axis by a specified angle in an anti-clockwise /// direction. /// /// A Vector3 to rotate. - /// - /// Angle to rotate the vector by in an anti-clockwise direction in degrees. + /// + /// Angle to rotate the vector by in an anti-clockwise direction in radians. /// /// The Vector3 that represents the rotated vector. - static Vector3 RotateDegrees(Vector3 vec, float degrees); + static Vector3 RotateY(Vector3 vec, float radians); + /// + /// Rotates a Vector3 about the Z-axis by a specified angle in an anti-clockwise + /// direction. + /// + /// A Vector3 to rotate. + /// + /// Angle to rotate the vector by in an anti-clockwise direction in radians. + /// + /// The Vector3 that represents the rotated vector. + static Vector3 RotateZ(Vector3 vec, float radians); + /// + /// Rotates a Vector3 about an arbitrary axis by a specified angle in an anti-clockwise + /// direction. + /// + /// A Vector3 to rotate. + /// + /// Angle to rotate the vector by in an anti-clockwise direction in radians. + /// + /// The Vector3 that represents the rotated vector. + static Vector3 Rotate(Vector3 vec, Vector3 axis, float radians); /// /// Computes and returns a Vector3 that is made from the smallest components of /// the two specified Vector3s. diff --git a/SHADE_Managed/src/Utility/Convert.hxx b/SHADE_Managed/src/Utility/Convert.hxx index 04407f77..fb373c51 100644 --- a/SHADE_Managed/src/Utility/Convert.hxx +++ b/SHADE_Managed/src/Utility/Convert.hxx @@ -25,7 +25,6 @@ of DigiPen Institute of Technology is prohibited. // Project Includes #include "Engine/Entity.hxx" #include "Math/Vector2.hxx" -#include "Math/Vector3.hxx" #include "Math/Quaternion.hxx" #include "Math/Ray.hxx" #include "Physics/RaycastHit.hxx" @@ -34,6 +33,8 @@ of DigiPen Institute of Technology is prohibited. #include "Graphics/Color.hxx" #include "Physics/Collision/SHPhysicsRaycastResult.h" +value struct Vector3; + namespace SHADE { ///