diff --git a/Escape-the-Dawn/Camera.h b/Escape-the-Dawn/Camera.h index caf217c..baea8a5 100644 --- a/Escape-the-Dawn/Camera.h +++ b/Escape-the-Dawn/Camera.h @@ -37,6 +37,15 @@ public: glm::mat4 ViewMatrix() const { return m_ViewMatrix; } void ViewMatrix(glm::mat4 val) { m_ViewMatrix = val; } + + float FOV() const { return m_FOV; } + void FOV(float val) { m_FOV = val; } + + float NearClip() const { return m_NearClip; } + void NearClip(float val) { m_NearClip = val; } + + float FarClip() const { return m_FarClip; } + void FarClip(float val) { m_FarClip = val; } private: void UpdateProjectionMatrix(); @@ -46,6 +55,7 @@ private: float m_AspectRatio; float m_NearClip; float m_FarClip; + glm::vec3 m_Position; glm::quat m_Orientation; diff --git a/Escape-the-Dawn/Components/Camera.h b/Escape-the-Dawn/Components/Camera.h index c836df4..62d6905 100644 --- a/Escape-the-Dawn/Components/Camera.h +++ b/Escape-the-Dawn/Components/Camera.h @@ -8,9 +8,9 @@ namespace Components struct Camera : Component { - int FOV; - int NearClip; - int FarClip; + float FOV; + float NearClip; + float FarClip; }; } diff --git a/Escape-the-Dawn/GameWorld.h b/Escape-the-Dawn/GameWorld.h index 43d871b..8c10dcb 100644 --- a/Escape-the-Dawn/GameWorld.h +++ b/Escape-the-Dawn/GameWorld.h @@ -60,11 +60,26 @@ void GameWorld::Initialize() //AddSystem("SoundSystem"); AddSystem("RenderSystem"); - EntityID ent = CreateEntity(); - auto transform = AddComponent(ent, "Transform"); + std::shared_ptr transform; + std::shared_ptr model; + std::shared_ptr camera; + EntityID ent; + + ent = CreateEntity(); + transform = AddComponent(ent, "Transform"); transform->Position = glm::vec3(0.f, 0.f, 0.f); - auto model = AddComponent(ent, "Model"); + model = AddComponent(ent, "Model"); model->ModelFile = "ship.obj"; + + ent = CreateEntity(); + SetProperty(ent, "Name", "Camera"); + transform = AddComponent(ent, "Transform"); + transform->Position = glm::vec3(0.f, 0.f, 10.f); + camera = AddComponent(ent, "Camera"); + camera->FOV = 45.f; + camera->FarClip = 1000.f; + camera->NearClip = 0.01f; + } void GameWorld::RegisterSystems() diff --git a/Escape-the-Dawn/Renderer.cpp b/Escape-the-Dawn/Renderer.cpp index 428a554..3268949 100644 --- a/Escape-the-Dawn/Renderer.cpp +++ b/Escape-the-Dawn/Renderer.cpp @@ -42,6 +42,7 @@ void Renderer::Initialize() glEnable(GL_DEPTH_TEST); // Create Camera + m_Camera = std::make_shared(45.f, (float)WIDTH / HEIGHT, 0.01f, 1000.f); m_Camera->Position(glm::vec3(0.0f, 0.0f, 2.f)); diff --git a/Escape-the-Dawn/Systems/RenderSystem.cpp b/Escape-the-Dawn/Systems/RenderSystem.cpp index 2be19c1..1db226c 100644 --- a/Escape-the-Dawn/Systems/RenderSystem.cpp +++ b/Escape-the-Dawn/Systems/RenderSystem.cpp @@ -12,18 +12,31 @@ void Systems::RenderSystem::OnComponentCreated( std::string type, std:: shared_p void Systems::RenderSystem::UpdateEntity( double dt, EntityID entity, EntityID parent ) { - auto modelComponent = m_World->GetComponent(entity, "Model"); - if (modelComponent == nullptr) - return; auto transformComponent = m_World->GetComponent(entity, "Transform"); if (transformComponent == nullptr) return; + auto modelComponent = m_World->GetComponent(entity, "Model"); + if (modelComponent != nullptr) + { + if (m_CachedModels.find(modelComponent->ModelFile) == m_CachedModels.end()){ + m_CachedModels[modelComponent->ModelFile] = new Model(modelComponent->ModelFile); + } - if (m_CachedModels.find(modelComponent->ModelFile) == m_CachedModels.end()) { - m_CachedModels[modelComponent->ModelFile] = new Model(modelComponent->ModelFile); + Model* model = m_CachedModels[modelComponent->ModelFile]; + m_Renderer->AddModelToDraw(model, transformComponent->Position, transformComponent->Orientation); } - Model* model = m_CachedModels[modelComponent->ModelFile]; - m_Renderer->AddModelToDraw(model, transformComponent->Position, transformComponent->Orientation); + auto cameraComponent = m_World->GetComponent(entity, "Camera"); + if (cameraComponent != nullptr) + { + m_Renderer->GetCamera()->Position(transformComponent->Position); + m_Renderer->GetCamera()->Orientation(transformComponent->Orientation); + + m_Renderer->GetCamera()->FOV(cameraComponent->FOV); + m_Renderer->GetCamera()->NearClip(cameraComponent->NearClip); + m_Renderer->GetCamera()->FarClip(cameraComponent->FarClip); + } + + } diff --git a/Escape-the-Dawn/Systems/RenderSystem.h b/Escape-the-Dawn/Systems/RenderSystem.h index 539cd83..fab25ea 100644 --- a/Escape-the-Dawn/Systems/RenderSystem.h +++ b/Escape-the-Dawn/Systems/RenderSystem.h @@ -6,6 +6,7 @@ #include "Texture.h" #include "Components/Model.h" #include "Components/Transform.h" +#include "Components/Camera.h" #include "Renderer.h" #include diff --git a/Escape-the-Dawn/shiptexture.png b/Escape-the-Dawn/shiptexture.png index 5b56a63..ed6b9e4 100644 Binary files a/Escape-the-Dawn/shiptexture.png and b/Escape-the-Dawn/shiptexture.png differ