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;