From 7a69bb3faccccb0b8cfd2093c08b5e0c177aaa90 Mon Sep 17 00:00:00 2001 From: Tobias Dahl Date: Sun, 9 Mar 2014 20:13:02 +0100 Subject: [PATCH 1/6] WIP Renderer 65% --- Escape-the-Dawn/Model.cpp | 1 + Escape-the-Dawn/Model.h | 2 + Escape-the-Dawn/Renderer.cpp | 70 ++++++++++++++++++++++++++- Escape-the-Dawn/Renderer.h | 5 ++ Escape-the-Dawn/ShaderProgram.cpp | 5 ++ Escape-the-Dawn/ShaderProgram.h | 2 + Escape-the-Dawn/Shaders/Fragment.glsl | 2 +- Escape-the-Dawn/Shaders/Vertex.glsl | 2 +- 8 files changed, 85 insertions(+), 4 deletions(-) diff --git a/Escape-the-Dawn/Model.cpp b/Escape-the-Dawn/Model.cpp index cd0f28d..685833c 100644 --- a/Escape-the-Dawn/Model.cpp +++ b/Escape-the-Dawn/Model.cpp @@ -142,6 +142,7 @@ bool Model::Loadobj(const char* path, std::vector & out_vertices, st } + void Model::CreateBuffers( std::vector _Vertices, std::vector _Normals, std::vector_TextureCoords) { diff --git a/Escape-the-Dawn/Model.h b/Escape-the-Dawn/Model.h index 3be26dc..5ce4c11 100644 --- a/Escape-the-Dawn/Model.h +++ b/Escape-the-Dawn/Model.h @@ -46,6 +46,8 @@ public: std::vector &out_normals, std::vector & out_TextureCoords ); + + glm::mat4 GetMatrix(); void CreateBuffers( std::vector _Vertices, diff --git a/Escape-the-Dawn/Renderer.cpp b/Escape-the-Dawn/Renderer.cpp index f567de0..739ecd8 100644 --- a/Escape-the-Dawn/Renderer.cpp +++ b/Escape-the-Dawn/Renderer.cpp @@ -4,6 +4,47 @@ Renderer::Renderer() { } +// ------------ TEMPCAMERA -------------------- +struct Camera +{ + glm::vec3 Position; + float Pitch; + float Yaw; + float Roll; + + glm::mat4 getViewMatrix() + { + glm::mat4 view; + view = glm::rotate(view, Pitch, glm::vec3(1,0,0)); + view = glm::rotate(view, Yaw, glm::vec3(0,1,0)); + view = glm::rotate(view, Roll, glm::vec3(0,0,1)); + view = glm::translate(view, -Position); + + return view; + } + + glm::vec3 Forward() + { + glm::mat4 Orientation; + Orientation = glm::rotate(Orientation, Pitch, glm::vec3(1,0,0)); + Orientation = glm::rotate(Orientation, Yaw, glm::vec3(0,1,0)); + + return glm::vec3(glm::vec4(0,0,-1,0) * Orientation); + } + + glm::vec3 Right() + { + glm::mat4 Orientation; + Orientation = glm::rotate(Orientation, Pitch, glm::vec3(1,0,0)); + Orientation = glm::rotate(Orientation, Yaw, glm::vec3(0,1,0)); + + return glm::vec3(glm::vec4(1,0,0,0) * Orientation); + } + + Camera() : Position(0.0f, 2.0f, 0.0f), Pitch(1.0f), Yaw(4.5f), Roll(0.f) { } +} MyCamera; +//-----------------TempCamera-.--------------------- + void Renderer::Initialize() { // Initialize GLFW @@ -13,7 +54,9 @@ void Renderer::Initialize() } // Create a window - m_Window = glfwCreateWindow(1280, 720, "OpenGL", nullptr, nullptr); + WIDTH = 1280; + HEIGHT = 720; + m_Window = glfwCreateWindow(WIDTH, HEIGHT, "OpenGL", nullptr, nullptr); if (!m_Window) { LOG_ERROR("GLFW: Failed to create window"); exit(EXIT_FAILURE); @@ -47,7 +90,28 @@ void Renderer::Draw(double _dt) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(1.0f, 1.0f, 0.0f, 1.0f); - //m_ShaderProgram->Bind(); + m_ShaderProgram.Bind(); + + viewMatrix = glm::mat4(); + + viewMatrix = MyCamera.getViewMatrix(); //TEMP + + glm::mat4 MVP; + + for(int i = 0; i < ModelsToRender.size(); i++) + { + glActiveTexture(GL_TEXTURE0); + //FIXA MED FLERA TEXTURER + glBindTexture(GL_TEXTURE_2D, ModelsToRender[i]->texture[0]->texture); + //MVP = projectionMatrix * viewMatrix * /* ModelMatrix */; + glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); + glBindVertexArray(ModelsToRender[i]->VAO); + glDrawArrays(GL_TRIANGLES, 0, ModelsToRender[i]->Vertices.size()); + } + +// Vertices; +// std::vector Normals; +// std::vector TextureCoords; glfwSwapBuffers(m_Window); } @@ -75,4 +139,6 @@ void Renderer::LoadContent() m_ShaderProgram.AddShader(std::unique_ptr(new FragmentShader("Shaders/Fragment.glsl"))); m_ShaderProgram.Compile(); m_ShaderProgram.Link(); + + projectionMatrix = glm::perspective(45.0f, (float)WIDTH / HEIGHT, 0.01f, 100.0f); } diff --git a/Escape-the-Dawn/Renderer.h b/Escape-the-Dawn/Renderer.h index c8e4fd0..8a93f9f 100644 --- a/Escape-the-Dawn/Renderer.h +++ b/Escape-the-Dawn/Renderer.h @@ -26,9 +26,14 @@ class Renderer { public: ShaderProgram m_ShaderProgram; + glm::mat4 viewMatrix; + glm::mat4 projectionMatrix; + + int HEIGHT, WIDTH; std::vector ModelsToRender; + Renderer(); void Initialize(); diff --git a/Escape-the-Dawn/ShaderProgram.cpp b/Escape-the-Dawn/ShaderProgram.cpp index 7c5d133..cd08061 100644 --- a/Escape-the-Dawn/ShaderProgram.cpp +++ b/Escape-the-Dawn/ShaderProgram.cpp @@ -128,6 +128,11 @@ GLuint ShaderProgram::Link() return m_ShaderProgramHandle; } +GLuint ShaderProgram::GetHandle() +{ + return m_ShaderProgramHandle; +} + void ShaderProgram::Bind() { if (m_ShaderProgramHandle == 0) diff --git a/Escape-the-Dawn/ShaderProgram.h b/Escape-the-Dawn/ShaderProgram.h index 3f2dfb1..894575a 100644 --- a/Escape-the-Dawn/ShaderProgram.h +++ b/Escape-the-Dawn/ShaderProgram.h @@ -76,6 +76,8 @@ public: void Compile(); GLuint Link(); + GLuint GetHandle(); + void Bind(); void Unbind(); diff --git a/Escape-the-Dawn/Shaders/Fragment.glsl b/Escape-the-Dawn/Shaders/Fragment.glsl index d74889f..2efef52 100644 --- a/Escape-the-Dawn/Shaders/Fragment.glsl +++ b/Escape-the-Dawn/Shaders/Fragment.glsl @@ -1,4 +1,4 @@ -#version 440 +#version 430 uniform mat4 MVP; uniform sampler2D texture0; diff --git a/Escape-the-Dawn/Shaders/Vertex.glsl b/Escape-the-Dawn/Shaders/Vertex.glsl index 92b8723..042411c 100644 --- a/Escape-the-Dawn/Shaders/Vertex.glsl +++ b/Escape-the-Dawn/Shaders/Vertex.glsl @@ -1,4 +1,4 @@ -#version 440 +#version 430 uniform mat4 MVP; From fcbf802cc262d14b53cf54bc58c8f9b3089a4ac0 Mon Sep 17 00:00:00 2001 From: imon Date: Sun, 9 Mar 2014 20:32:57 +0100 Subject: [PATCH 2/6] Added Camera. --- Escape-the-Dawn/Camera.cpp | 74 +++++++++++++++++++ Escape-the-Dawn/Camera.h | 53 +++++++++++++ Escape-the-Dawn/Escape-the-Dawn.vcxproj | 2 + .../Escape-the-Dawn.vcxproj.filters | 2 + Escape-the-Dawn/Renderer.cpp | 51 ++----------- Escape-the-Dawn/Renderer.h | 5 +- 6 files changed, 140 insertions(+), 47 deletions(-) create mode 100644 Escape-the-Dawn/Camera.cpp create mode 100644 Escape-the-Dawn/Camera.h diff --git a/Escape-the-Dawn/Camera.cpp b/Escape-the-Dawn/Camera.cpp new file mode 100644 index 0000000..6deeed0 --- /dev/null +++ b/Escape-the-Dawn/Camera.cpp @@ -0,0 +1,74 @@ +#include "Camera.h" + +Camera::Camera(float yFOV, float aspectRatio, float nearClip, float farClip) +{ + m_FOV = yFOV; + m_AspectRatio = aspectRatio; + m_NearClip = nearClip; + m_FarClip = farClip; + + m_Position = glm::vec3(0.0); + m_Pitch = 0.f; + m_Yaw = 0.f; + + UpdateProjectionMatrix(); + UpdateViewMatrix(); +} + +glm::vec3 Camera::Forward() +{ + return glm::rotate(glm::vec3(0.f, 0.f, -1.f), -m_Yaw, glm::vec3(0.f, 1.f, 0.f)); +} + +glm::vec3 Camera::Right() +{ + return glm::rotate(glm::vec3(1.f, 0.f, 0.f), -m_Yaw, glm::vec3(0.f, 1.f, 0.f)); +} + +glm::mat4 Camera::Orientation() +{ + glm::mat4 orientation(1.f); + orientation = glm::rotate(orientation, m_Pitch, glm::vec3(1.f, 0.f, 0.f)); + orientation = glm::rotate(orientation, m_Yaw, glm::vec3(0.f, 1.f, 0.f)); + return orientation; +} + +void Camera::AspectRatio(float val) +{ + m_AspectRatio = val; + UpdateProjectionMatrix(); +} + +void Camera::Position(glm::vec3 val) +{ + m_Position = val; + UpdateViewMatrix(); +} + + +void Camera::Pitch(float val) +{ + m_Pitch = val; + UpdateViewMatrix(); +} + +void Camera::Yaw(float val) +{ + m_Yaw = val; + UpdateViewMatrix(); +} + +void Camera::UpdateProjectionMatrix() +{ + m_ProjectionMatrix = glm::perspective( + m_FOV, + m_AspectRatio, + m_NearClip, + m_FarClip + ); +} + +void Camera::UpdateViewMatrix() +{ + m_ViewMatrix = glm::translate(Orientation(), -m_Position); +} diff --git a/Escape-the-Dawn/Camera.h b/Escape-the-Dawn/Camera.h new file mode 100644 index 0000000..0b6ecb5 --- /dev/null +++ b/Escape-the-Dawn/Camera.h @@ -0,0 +1,53 @@ +#ifndef Camera_h__ +#define Camera_h__ + +#define GLM_FORCE_RADIANS +#include +#include +#include +#include + +class Camera +{ +public: + Camera(float yFOV, float aspectRatio, float nearClip, float farClip); + + glm::vec3 Forward(); + glm::vec3 Right(); + glm::mat4 Orientation(); + + float AspectRatio() const { return m_AspectRatio; } + void AspectRatio(float val); + + glm::vec3 Position() const { return m_Position; } + void Position(glm::vec3 val); + + float Pitch() const { return m_Pitch; } + void Pitch(float val); + float Yaw() const { return m_Yaw; } + void Yaw(float val); + + glm::mat4 ProjectionMatrix() const { return m_ProjectionMatrix; } + void ProjectionMatrix(glm::mat4 val) { m_ProjectionMatrix = val; } + + glm::mat4 ViewMatrix() const { return m_ViewMatrix; } + void ViewMatrix(glm::mat4 val) { m_ViewMatrix = val; } + +private: + void UpdateProjectionMatrix(); + void UpdateViewMatrix(); + + float m_FOV; + float m_AspectRatio; + float m_NearClip; + float m_FarClip; + + glm::vec3 m_Position; + float m_Pitch; + float m_Yaw; + + glm::mat4 m_ProjectionMatrix; + glm::mat4 m_ViewMatrix; +}; + +#endif // Camera_h__ diff --git a/Escape-the-Dawn/Escape-the-Dawn.vcxproj b/Escape-the-Dawn/Escape-the-Dawn.vcxproj index 04d7205..f2c42f7 100644 --- a/Escape-the-Dawn/Escape-the-Dawn.vcxproj +++ b/Escape-the-Dawn/Escape-the-Dawn.vcxproj @@ -97,6 +97,7 @@ + @@ -117,6 +118,7 @@ + diff --git a/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters b/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters index ca2171c..80dae46 100644 --- a/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters +++ b/Escape-the-Dawn/Escape-the-Dawn.vcxproj.filters @@ -43,6 +43,7 @@ GUI + @@ -140,6 +141,7 @@ GUI + diff --git a/Escape-the-Dawn/Renderer.cpp b/Escape-the-Dawn/Renderer.cpp index 739ecd8..1ad7dee 100644 --- a/Escape-the-Dawn/Renderer.cpp +++ b/Escape-the-Dawn/Renderer.cpp @@ -4,47 +4,6 @@ Renderer::Renderer() { } -// ------------ TEMPCAMERA -------------------- -struct Camera -{ - glm::vec3 Position; - float Pitch; - float Yaw; - float Roll; - - glm::mat4 getViewMatrix() - { - glm::mat4 view; - view = glm::rotate(view, Pitch, glm::vec3(1,0,0)); - view = glm::rotate(view, Yaw, glm::vec3(0,1,0)); - view = glm::rotate(view, Roll, glm::vec3(0,0,1)); - view = glm::translate(view, -Position); - - return view; - } - - glm::vec3 Forward() - { - glm::mat4 Orientation; - Orientation = glm::rotate(Orientation, Pitch, glm::vec3(1,0,0)); - Orientation = glm::rotate(Orientation, Yaw, glm::vec3(0,1,0)); - - return glm::vec3(glm::vec4(0,0,-1,0) * Orientation); - } - - glm::vec3 Right() - { - glm::mat4 Orientation; - Orientation = glm::rotate(Orientation, Pitch, glm::vec3(1,0,0)); - Orientation = glm::rotate(Orientation, Yaw, glm::vec3(0,1,0)); - - return glm::vec3(glm::vec4(1,0,0,0) * Orientation); - } - - Camera() : Position(0.0f, 2.0f, 0.0f), Pitch(1.0f), Yaw(4.5f), Roll(0.f) { } -} MyCamera; -//-----------------TempCamera-.--------------------- - void Renderer::Initialize() { // Initialize GLFW @@ -82,6 +41,9 @@ void Renderer::Initialize() } glEnable(GL_DEPTH_TEST); + // Create Camera + m_Camera = std::make_shared(90.f, WIDTH / HEIGHT, 0.01f, 1000.f); + LoadContent(); } @@ -92,18 +54,15 @@ void Renderer::Draw(double _dt) m_ShaderProgram.Bind(); - viewMatrix = glm::mat4(); - - viewMatrix = MyCamera.getViewMatrix(); //TEMP + glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix() * m_Camera->ViewMatrix(); glm::mat4 MVP; - for(int i = 0; i < ModelsToRender.size(); i++) { glActiveTexture(GL_TEXTURE0); //FIXA MED FLERA TEXTURER glBindTexture(GL_TEXTURE_2D, ModelsToRender[i]->texture[0]->texture); - //MVP = projectionMatrix * viewMatrix * /* ModelMatrix */; + MVP = cameraMatrix; // * ModelMatrix; glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); glBindVertexArray(ModelsToRender[i]->VAO); glDrawArrays(GL_TRIANGLES, 0, ModelsToRender[i]->Vertices.size()); diff --git a/Escape-the-Dawn/Renderer.h b/Escape-the-Dawn/Renderer.h index 8a93f9f..99c7ef7 100644 --- a/Escape-the-Dawn/Renderer.h +++ b/Escape-the-Dawn/Renderer.h @@ -19,6 +19,7 @@ #include #include "glerror.h" +#include "Camera.h" #include "ShaderProgram.h" #include "Model.h" @@ -33,7 +34,6 @@ public: std::vector ModelsToRender; - Renderer(); void Initialize(); @@ -46,11 +46,14 @@ public: void LoadContent(); GLFWwindow* GetWindow() const { return m_Window; } + std::shared_ptr GetCamera() const { return m_Camera; } private: GLFWwindow* m_Window; GLint m_glVersion[2]; GLchar* m_glVendor; + + std::shared_ptr m_Camera; }; #endif // Renderer_h__ \ No newline at end of file From a9e3e91203b27f88625d9d3120ddaf2248e4a17e Mon Sep 17 00:00:00 2001 From: Tobias Dahl Date: Sun, 9 Mar 2014 20:36:19 +0100 Subject: [PATCH 3/6] WIP Renderer --- Escape-the-Dawn/Renderer.cpp | 13 +++++++------ Escape-the-Dawn/Renderer.h | 12 ++++++++++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/Escape-the-Dawn/Renderer.cpp b/Escape-the-Dawn/Renderer.cpp index 739ecd8..188b918 100644 --- a/Escape-the-Dawn/Renderer.cpp +++ b/Escape-the-Dawn/Renderer.cpp @@ -102,13 +102,14 @@ void Renderer::Draw(double _dt) { glActiveTexture(GL_TEXTURE0); //FIXA MED FLERA TEXTURER - glBindTexture(GL_TEXTURE_2D, ModelsToRender[i]->texture[0]->texture); - //MVP = projectionMatrix * viewMatrix * /* ModelMatrix */; + glBindTexture(GL_TEXTURE_2D, ModelsToRender[i]->model->texture[0]->texture); + MVP = projectionMatrix * viewMatrix * ModelsToRender[i]->modelMatrix; glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); - glBindVertexArray(ModelsToRender[i]->VAO); - glDrawArrays(GL_TRIANGLES, 0, ModelsToRender[i]->Vertices.size()); + glBindVertexArray(ModelsToRender[i]->model->VAO); + glDrawArrays(GL_TRIANGLES, 0, ModelsToRender[i]->model->Vertices.size()); } + ModelsToRender.clear(); // Vertices; // std::vector Normals; // std::vector TextureCoords; @@ -126,9 +127,9 @@ void Renderer::AddTextToDraw() //Add to draw shit vector } -void Renderer::AddModelToDraw(Model* _model) +void Renderer::AddModelToDraw(Model* _model, glm::mat4 _modelMatrix) { - ModelsToRender.push_back(_model); + ModelsToRender.push_back(new ModelData(_model, _modelMatrix)); } //Fixa med shaders, lägga in alla verts osv. diff --git a/Escape-the-Dawn/Renderer.h b/Escape-the-Dawn/Renderer.h index 8a93f9f..8820753 100644 --- a/Escape-the-Dawn/Renderer.h +++ b/Escape-the-Dawn/Renderer.h @@ -31,7 +31,15 @@ public: int HEIGHT, WIDTH; - std::vector ModelsToRender; + struct ModelData + { + Model* model; + glm::mat4 modelMatrix; + ModelData(Model* _model, glm::mat4 _modelMatrix) : model(_model), modelMatrix(_modelMatrix) + {} + }; + + std::vector ModelsToRender; Renderer(); @@ -40,7 +48,7 @@ public: void Draw(double dt); void DrawText(); - void AddModelToDraw(Model*); + void AddModelToDraw(Model*, glm::mat4); void AddTextToDraw(); void LoadContent(); From 1cf158b3a2a9516bcf7a7fe7e7c6cac5f6a0acef Mon Sep 17 00:00:00 2001 From: ViktorLjung Date: Sun, 9 Mar 2014 21:07:51 +0100 Subject: [PATCH 4/6] RenderSystem --- Escape-the-Dawn/Components/Model.h | 2 +- Escape-the-Dawn/Systems/RenderSystem.cpp | 43 ++++++++++++++++++++++++ Escape-the-Dawn/Systems/RenderSystem.h | 41 ++++++++++++++++++++++ 3 files changed, 85 insertions(+), 1 deletion(-) diff --git a/Escape-the-Dawn/Components/Model.h b/Escape-the-Dawn/Components/Model.h index ce27b3b..11297da 100644 --- a/Escape-the-Dawn/Components/Model.h +++ b/Escape-the-Dawn/Components/Model.h @@ -11,7 +11,7 @@ namespace Components struct Model : Component { - std::string ModelFile; + const char* ModelFile; Color Color; }; diff --git a/Escape-the-Dawn/Systems/RenderSystem.cpp b/Escape-the-Dawn/Systems/RenderSystem.cpp index e69de29..ca4d33b 100644 --- a/Escape-the-Dawn/Systems/RenderSystem.cpp +++ b/Escape-the-Dawn/Systems/RenderSystem.cpp @@ -0,0 +1,43 @@ +#include "RenderSystem.h" +#include "World.h" + + + +void Systems::RenderSystem::OnComponentCreated( std::string type, std:: shared_ptr component ) +{ + if(type == "Model") + { + auto modelComponent = std::static_pointer_cast(component); + + if (m_CachedModels.find(modelComponent->ModelFile) != m_CachedModels.end()) { + m_CachedModels[modelComponent->ModelFile] = new Model(modelComponent->ModelFile); + } + + } +} + +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; + + Model* model = m_CachedModels[modelComponent->ModelFile]; + + + + + m_Renderer->AddModelToDraw(model, transformComponent->Position, transformComponent->Orientation); +} + +void Systems::RenderSystem::Update( double dt ) +{ + +} + + + + diff --git a/Escape-the-Dawn/Systems/RenderSystem.h b/Escape-the-Dawn/Systems/RenderSystem.h index e69de29..6f02f56 100644 --- a/Escape-the-Dawn/Systems/RenderSystem.h +++ b/Escape-the-Dawn/Systems/RenderSystem.h @@ -0,0 +1,41 @@ +#ifndef RenderSystem_h__ +#define RenderSystem_h__ + +#include "System.h" +#include "Model.h" +#include "Texture.h" +#include "Components/Model.h" +#include "Components/Transform.h" +#include "Renderer.h" +#include + +namespace Systems +{ + + class RenderSystem : public System + { + public: + RenderSystem(World* world, std::shared_ptr renderer) + : System(world), m_Renderer(renderer) {} + + + std::unordered_map m_CachedModels; + + + void AddModelToDraw(); + void OnComponentCreated(std::string type, std:: shared_ptr component) override; + void UpdateEntity(double dt, EntityID entity, EntityID parent) override; + void Update(double dt) override; + + private: + std::shared_ptr m_Renderer; + + }; + + +} + + + + +#endif //RenderSystem_h__ \ No newline at end of file From d749bd34647bbc5b709ffc9a57efcf2b9e82a567 Mon Sep 17 00:00:00 2001 From: Tobias Dahl Date: Sun, 9 Mar 2014 21:15:40 +0100 Subject: [PATCH 5/6] WIP Renderer --- Escape-the-Dawn/Renderer.cpp | 14 ++++++-------- Escape-the-Dawn/Renderer.h | 8 +++++--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Escape-the-Dawn/Renderer.cpp b/Escape-the-Dawn/Renderer.cpp index 655391c..a038c16 100644 --- a/Escape-the-Dawn/Renderer.cpp +++ b/Escape-the-Dawn/Renderer.cpp @@ -60,18 +60,13 @@ void Renderer::Draw(double _dt) for(int i = 0; i < ModelsToRender.size(); i++) { glActiveTexture(GL_TEXTURE0); - //FIXA MED FLERA TEXTURER glBindTexture(GL_TEXTURE_2D, ModelsToRender[i]->model->texture[0]->texture); - MVP = cameraMatrix; // * ModelMatrix; + MVP = cameraMatrix * ModelsToRender[i]->ModelMatrix; glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); glBindVertexArray(ModelsToRender[i]->model->VAO); glDrawArrays(GL_TRIANGLES, 0, ModelsToRender[i]->model->Vertices.size()); } - ModelsToRender.clear(); -// Vertices; -// std::vector Normals; -// std::vector TextureCoords; glfwSwapBuffers(m_Window); } @@ -86,9 +81,12 @@ void Renderer::AddTextToDraw() //Add to draw shit vector } -void Renderer::AddModelToDraw(Model* _model, glm::mat4 _modelMatrix) +void Renderer::AddModelToDraw(Model* _model, glm::vec3 _position, glm::quat _orientation) { - ModelsToRender.push_back(new ModelData(_model, _modelMatrix)); + glm::mat4 RotationMatrix = glm::toMat4(_orientation); + glm::mat4 ModelMatrix = glm::translate(glm::mat4(), _position) * RotationMatrix ; + // You can now use ModelMatrix to build the MVP matrix + ModelsToRender.push_back(new ModelData(_model, ModelMatrix)); } //Fixa med shaders, lägga in alla verts osv. diff --git a/Escape-the-Dawn/Renderer.h b/Escape-the-Dawn/Renderer.h index dfe0333..e526ccd 100644 --- a/Escape-the-Dawn/Renderer.h +++ b/Escape-the-Dawn/Renderer.h @@ -17,6 +17,8 @@ #include #include #include +#include +#include #include "glerror.h" #include "Camera.h" @@ -35,8 +37,8 @@ public: struct ModelData { Model* model; - glm::mat4 modelMatrix; - ModelData(Model* _model, glm::mat4 _modelMatrix) : model(_model), modelMatrix(_modelMatrix) + glm::mat4 ModelMatrix; + ModelData(Model* _model, glm::mat4 _modelMatrix) : model(_model), ModelMatrix(_modelMatrix) {} }; @@ -48,7 +50,7 @@ public: void Draw(double dt); void DrawText(); - void AddModelToDraw(Model*, glm::mat4); + void AddModelToDraw(Model*, glm::vec3, glm::quat); void AddTextToDraw(); void LoadContent(); From 3138eea0c23c96354d4b31dadea66187a4ee1819 Mon Sep 17 00:00:00 2001 From: ViktorLjung Date: Sun, 9 Mar 2014 21:27:33 +0100 Subject: [PATCH 6/6] Fixade lite i obj load --- Escape-the-Dawn/Model.cpp | 12 ++++++++---- Escape-the-Dawn/Systems/RenderSystem.cpp | 6 ------ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/Escape-the-Dawn/Model.cpp b/Escape-the-Dawn/Model.cpp index 685833c..0dca89d 100644 --- a/Escape-the-Dawn/Model.cpp +++ b/Escape-the-Dawn/Model.cpp @@ -170,16 +170,20 @@ void Model::CreateBuffers( std::vector _Vertices, std::vectorAddModelToDraw(model, transformComponent->Position, transformComponent->Orientation); } -void Systems::RenderSystem::Update( double dt ) -{ - -} -