From 53fc0c970ca0a2d0f27b23b76bac7d3e97e965bd Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Tue, 25 Oct 2022 17:30:11 +0800 Subject: [PATCH 1/3] Added a DegreesToRadians when setting rotation of camera comp --- SHADE_Engine/src/Camera/SHCameraComponent.cpp | 7 ++++--- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index 5d49c887..f2cb4ead 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -4,6 +4,7 @@ #include "SHCameraSystem.h" #include "ECS_Base/Managers/SHSystemManager.h" #include "Math/Transform/SHTransformComponent.h" +#include "Math/SHMath.h" namespace SHADE { @@ -28,7 +29,7 @@ namespace SHADE { auto transform = SHComponentManager::GetComponent(GetEID()); SHVec3 rotation = transform->GetWorldRotation(); - transform->SetWorldRotation(SHVec3{rotation.x,yaw, rotation.z}); + transform->SetWorldRotation(SHVec3{rotation.x,SHMath::DegreesToRadians(yaw), rotation.z}); } dirtyView = true; } @@ -40,7 +41,7 @@ namespace SHADE { auto transform = SHComponentManager::GetComponent(GetEID()); SHVec3 rotation = transform->GetWorldRotation(); - transform->SetWorldRotation(SHVec3{ pitch,rotation.y, rotation.z }); + transform->SetWorldRotation(SHVec3{ SHMath::DegreesToRadians(pitch),rotation.y, rotation.z }); } dirtyView = true; } @@ -52,7 +53,7 @@ namespace SHADE { auto transform = SHComponentManager::GetComponent(GetEID()); SHVec3 rotation = transform->GetWorldRotation(); - transform->SetWorldRotation(SHVec3{ rotation.x,rotation.y, roll}); + transform->SetWorldRotation(SHVec3{ rotation.x,rotation.y, SHMath::DegreesToRadians(roll)}); } dirtyView = true; } diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 07995fc5..66018495 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -69,7 +69,7 @@ namespace SHADE if (SHInputManager::GetKey(SHInputManager::SH_KEYCODE::A)) { - std::cout << "Camera movement: "<UpdateCameraComponent(system->editorCamera); } From 012070ba6d3e5724816095c33a90c36ec0617c7b Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Thu, 27 Oct 2022 09:26:49 +0800 Subject: [PATCH 2/3] Added RTTR registration --- SHADE_Engine/src/Camera/SHCameraComponent.cpp | 67 +++++++++++++++++-- SHADE_Engine/src/Camera/SHCameraComponent.h | 15 ++++- .../Inspector/SHEditorInspector.cpp | 7 ++ 3 files changed, 81 insertions(+), 8 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index f2cb4ead..402175dd 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -146,6 +146,17 @@ namespace SHADE dirtyProj = true; } + void SHCameraComponent::SetIsPerspective(bool persp) noexcept + { + this->perspProj = persp; + dirtyProj = true; + } + + SHVec3 const& SHCameraComponent::GetPosition() const noexcept + { + return position; + } + float SHCameraComponent::GetYaw() const noexcept { return yaw; @@ -159,6 +170,27 @@ namespace SHADE { return roll; } + + float SHCameraComponent::GetWidth() const noexcept + { + return width; + } + + float SHCameraComponent::GetHeight() const noexcept + { + return height; + } + + float SHCameraComponent::GetNear() const noexcept + { + return zNear; + } + + float SHCameraComponent::GetFar() const noexcept + { + return zFar; + } + float SHCameraComponent::GetAspectRatio() const noexcept { return width/height; @@ -169,6 +201,11 @@ namespace SHADE return fov; } + bool SHCameraComponent::GetIsPerspective() const noexcept + { + return perspProj; + } + const SHMatrix& SHCameraComponent::GetViewMatrix() const noexcept { return viewMatrix; @@ -179,12 +216,32 @@ namespace SHADE return projMatrix; } - void SHCameraComponent::SetMainCamera(size_t directorCameraIndex) noexcept - { - auto system = SHSystemManager::GetSystem(); - system->GetDirector(directorCameraIndex)->SetMainCamera(*this); - } + //void SHCameraComponent::SetMainCamera(size_t directorCameraIndex) noexcept + //{ + // auto system = SHSystemManager::GetSystem(); + // system->GetDirector(directorCameraIndex)->SetMainCamera(*this); + //} +}//namespace SHADE + + +RTTR_REGISTRATION +{ + using namespace SHADE; + using namespace rttr; + + registration::class_("Camera Component") + .property("Position", &SHCameraComponent::GetPosition, select_overload(&SHCameraComponent::SetPosition)) + .property("Pitch", &SHCameraComponent::GetPitch, &SHCameraComponent::SetPitch) + .property("Yaw", &SHCameraComponent::GetYaw, &SHCameraComponent::SetYaw) + .property("Roll", &SHCameraComponent::GetRoll, &SHCameraComponent::SetRoll) + .property("Width", &SHCameraComponent::GetWidth, &SHCameraComponent::SetWidth) + .property("Height", &SHCameraComponent::GetHeight, &SHCameraComponent::SetHeight) + .property("Near", &SHCameraComponent::GetNear, &SHCameraComponent::SetNear) + .property("Far", &SHCameraComponent::GetFar, &SHCameraComponent::SetFar) + .property("Perspective", &SHCameraComponent::GetIsPerspective, &SHCameraComponent::SetIsPerspective); + + } diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.h b/SHADE_Engine/src/Camera/SHCameraComponent.h index 1149b1e1..19ce4232 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.h +++ b/SHADE_Engine/src/Camera/SHCameraComponent.h @@ -1,5 +1,7 @@ #pragma once +#include + #include "ECS_Base/Components/SHComponent.h" #include "Math/Vector/SHVec3.h" #include "Math/SHMatrix.h" @@ -57,20 +59,27 @@ namespace SHADE void SetNear(float znear) noexcept; void SetFar(float zfar) noexcept; void SetFOV(float fov) noexcept; + void SetIsPerspective(bool persp) noexcept; - + SHVec3 const& GetPosition() const noexcept; float GetYaw() const noexcept; float GetPitch() const noexcept; float GetRoll() const noexcept; + float GetWidth() const noexcept; + float GetHeight() const noexcept; + float GetNear() const noexcept; + float GetFar() const noexcept; + float GetAspectRatio() const noexcept; float GetFOV() const noexcept; + bool GetIsPerspective() const noexcept; const SHMatrix& GetViewMatrix() const noexcept; const SHMatrix& GetProjMatrix() const noexcept; - void SetMainCamera(size_t cameraDirectorIndex = 0) noexcept; + //void SetMainCamera(size_t cameraDirectorIndex = 0) noexcept; float movementSpeed; @@ -80,7 +89,7 @@ namespace SHADE - + RTTR_ENABLE() }; diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index d9b235e5..42b516aa 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -20,6 +20,7 @@ #include "AudioSystem/SHAudioSystem.h" #include "Physics/Components/SHRigidBodyComponent.h" #include "Physics/Components/SHColliderComponent.h" +#include "Camera/SHCameraComponent.h" namespace SHADE { @@ -99,6 +100,10 @@ namespace SHADE { DrawComponent(rigidbodyComponent); } + if (auto cameraComponent = SHComponentManager::GetComponent_s(eid)) + { + DrawComponent(cameraComponent); + } ImGui::Separator(); // Render Scripts SHScriptEngine* scriptEngine = static_cast(SHSystemManager::GetSystem()); @@ -107,12 +112,14 @@ namespace SHADE if(ImGui::BeginMenu(std::format("{} Add Component", ICON_MD_LIBRARY_ADD).data())) { DrawAddComponentButton(eid); + DrawAddComponentButton(eid); // Components that require Transforms DrawAddComponentWithEnforcedComponentButton(eid); DrawAddComponentWithEnforcedComponentButton(eid); DrawAddComponentWithEnforcedComponentButton(eid); + ImGui::EndMenu(); } From dee4e9acbd94da1cafca320fecc45ad956347d89 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Thu, 27 Oct 2022 10:33:54 +0800 Subject: [PATCH 3/3] Fixed RTTR registration. Added back Camera Clamp --- SHADE_Engine/src/Camera/SHCameraComponent.cpp | 6 +++--- SHADE_Engine/src/Camera/SHCameraComponent.h | 8 ++++---- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index 402175dd..31afe2ac 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -103,7 +103,7 @@ namespace SHADE } dirtyView = true; } - void SHCameraComponent::SetPosition(SHVec3& pos) noexcept + void SHCameraComponent::SetPosition(SHVec3 pos) noexcept { this->position = pos; if (SHComponentManager::HasComponent(GetEID())) @@ -152,7 +152,7 @@ namespace SHADE dirtyProj = true; } - SHVec3 const& SHCameraComponent::GetPosition() const noexcept + SHVec3 SHCameraComponent::GetPosition() const noexcept { return position; } @@ -233,7 +233,7 @@ RTTR_REGISTRATION using namespace rttr; registration::class_("Camera Component") - .property("Position", &SHCameraComponent::GetPosition, select_overload(&SHCameraComponent::SetPosition)) + .property("Position", &SHCameraComponent::GetPosition, select_overload(&SHCameraComponent::SetPosition)) .property("Pitch", &SHCameraComponent::GetPitch, &SHCameraComponent::SetPitch) .property("Yaw", &SHCameraComponent::GetYaw, &SHCameraComponent::SetYaw) .property("Roll", &SHCameraComponent::GetRoll, &SHCameraComponent::SetRoll) diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.h b/SHADE_Engine/src/Camera/SHCameraComponent.h index 19ce4232..f5e08af4 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.h +++ b/SHADE_Engine/src/Camera/SHCameraComponent.h @@ -52,7 +52,7 @@ namespace SHADE void SetPositionY(float y) noexcept; void SetPositionZ(float z) noexcept; void SetPosition(float x, float y, float z) noexcept; - void SetPosition(SHVec3& pos) noexcept; + void SetPosition(SHVec3 pos) noexcept; void SetWidth(float width) noexcept; void SetHeight(float height) noexcept; @@ -62,7 +62,7 @@ namespace SHADE void SetIsPerspective(bool persp) noexcept; - SHVec3 const& GetPosition() const noexcept; + SHVec3 GetPosition() const noexcept; float GetYaw() const noexcept; float GetPitch() const noexcept; float GetRoll() const noexcept; @@ -84,12 +84,12 @@ namespace SHADE float movementSpeed; SHVec3 turnSpeed; - + RTTR_ENABLE() protected: - RTTR_ENABLE() + }; diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 0d86c17a..609805f8 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -154,7 +154,7 @@ namespace SHADE SHVec3 view, right, UP; - //ClampCameraRotation(camera); + ClampCameraRotation(camera); GetCameraAxis(camera, view, right, UP); @@ -221,8 +221,8 @@ namespace SHADE SHVec3 up = { 0.0f,1.0f,0.0f }; + target = SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); target = SHVec3::RotateY(target, SHMath::DegreesToRadians(camera.yaw)); - target =SHVec3::RotateX(target, SHMath::DegreesToRadians(camera.pitch)); target += camera.position; ////SHVec3::RotateZ(target, SHMath::DegreesToRadians(camera.roll));