From 7202551838ea525920e44aac4155d47d06fd9634 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Wed, 23 Nov 2022 14:56:20 +0800 Subject: [PATCH] Added Vector rotation with Quaternions --- SHADE_Engine/src/Math/Vector/SHVec3.cpp | 10 +++++++++- SHADE_Engine/src/Math/Vector/SHVec3.h | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.cpp b/SHADE_Engine/src/Math/Vector/SHVec3.cpp index a696f341..4b77636a 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.cpp +++ b/SHADE_Engine/src/Math/Vector/SHVec3.cpp @@ -35,7 +35,7 @@ namespace SHADE SHVec3 const SHVec3::Back { 0.0f, 0.0f, -1.0f }; SHVec3 const SHVec3::UnitX { 1.0f, 0.0f, 0.0f }; SHVec3 const SHVec3::UnitY { 0.0f, 1.0f, 0.0f }; - SHVec3 const SHVec3::UnitZ { 0.0f, 0.0f, 1.0f }; + SHVec3 const SHVec3::UnitZ { 0.0f, 0.0f, -1.0f }; /*-----------------------------------------------------------------------------------*/ /* Constructors & Destructor Definitions */ @@ -411,6 +411,14 @@ namespace SHADE return result; } + SHVec3 SHVec3::Rotate(const SHVec3& v, const SHQuaternion& q) noexcept + { + SHVec3 result; + + XMStoreFloat3(&result, XMVector3Rotate(v, q)); + return result; + } + SHVec3 SHVec3::RotateX(const SHVec3& v, float angleInRad) noexcept { SHVec3 result; diff --git a/SHADE_Engine/src/Math/Vector/SHVec3.h b/SHADE_Engine/src/Math/Vector/SHVec3.h index eab96b30..de37d6a5 100644 --- a/SHADE_Engine/src/Math/Vector/SHVec3.h +++ b/SHADE_Engine/src/Math/Vector/SHVec3.h @@ -25,6 +25,8 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Forward Declarations */ /*-----------------------------------------------------------------------------------*/ + + class SHQuaternion; class SHMatrix; /*-----------------------------------------------------------------------------------*/ @@ -136,6 +138,7 @@ namespace SHADE [[nodiscard]] static SHVec3 Project (const SHVec3& v, const SHVec3& u) noexcept; [[nodiscard]] static SHVec3 Reflect (const SHVec3& v, const SHVec3& normal) noexcept; [[nodiscard]] static SHVec3 Rotate (const SHVec3& v, const SHVec3& axis, float angleInRad) noexcept; + [[nodiscard]] static SHVec3 Rotate (const SHVec3& v, const SHQuaternion& q) noexcept; [[nodiscard]] static SHVec3 RotateX (const SHVec3& v, float angleInRad) noexcept; [[nodiscard]] static SHVec3 RotateY (const SHVec3& v, float angleInRad) noexcept; [[nodiscard]] static SHVec3 RotateZ (const SHVec3& v, float angleInRad) noexcept;