From e377b874381027f177bd19f73418750e701425ef Mon Sep 17 00:00:00 2001 From: izenynn Date: Thu, 20 Feb 2025 13:02:33 +0100 Subject: [PATCH] wip: practica1 --- project/ugine3d.vcxproj | 4 + .../Debug/Practica3D.tlog/CL.command.1.tlog | Bin 1478 -> 3032 bytes .../x64/Debug/Practica3D.tlog/CL.read.1.tlog | Bin 37138 -> 112940 bytes .../x64/Debug/Practica3D.tlog/CL.write.1.tlog | Bin 1036 -> 5266 bytes .../x64/Debug/Practica3D.tlog/Cl.items.tlog | 3 + .../Debug/Practica3D.tlog/link.command.1.tlog | Bin 1866 -> 2406 bytes .../Debug/Practica3D.tlog/link.read.1.tlog | Bin 4578 -> 5400 bytes .../Debug/Practica3D.tlog/link.write.1.tlog | Bin 708 -> 1116 bytes .../Debug/Practica3D.tlog/unsuccessfulbuild | 0 project/x64/Debug/ugine3d.log | 11 ++- src/buffer.cpp | 32 +++++++- src/buffer.h | 15 +++- src/main.cpp | 70 ++++++++++++++---- src/shader.cpp | 44 ++++++++++- src/shader.h | 16 +++- 15 files changed, 173 insertions(+), 22 deletions(-) create mode 100644 project/x64/Debug/Practica3D.tlog/unsuccessfulbuild diff --git a/project/ugine3d.vcxproj b/project/ugine3d.vcxproj index e873992..d358ad2 100644 --- a/project/ugine3d.vcxproj +++ b/project/ugine3d.vcxproj @@ -79,6 +79,7 @@ true ../lib/glew GLEW_STATIC;_MBCS;%(PreprocessorDefinitions) + stdcpp20 ../lib/glfw @@ -93,6 +94,7 @@ true ../lib/glew GLEW_STATIC;_MBCS;%(PreprocessorDefinitions) + stdcpp20 ../lib/glfw @@ -109,6 +111,7 @@ true ../lib/glew GLEW_STATIC;_MBCS;%(PreprocessorDefinitions) + stdcpp20 true @@ -127,6 +130,7 @@ true ../lib/glew GLEW_STATIC;_MBCS;%(PreprocessorDefinitions) + stdcpp20 true diff --git a/project/x64/Debug/Practica3D.tlog/CL.command.1.tlog b/project/x64/Debug/Practica3D.tlog/CL.command.1.tlog index 6abd271bb8641ac82f28629188bc732ad01366d7..651e310516f1b07680f9f1296ebee6908b87cb32 100644 GIT binary patch delta 197 zcmX@ceM5YM6Ek-(g9n2ngA0QzL(pbV=2Aw%Vulii6b37XWCm>@G-5EAyp!dpFp@F` yJqBln0EU3cPnlx5!$2AtLV#ohKJ7@#P_#QSgfh4RA%5E>kd(o+Gw?ESF#rHnDkt~= delta 49 ycmca1evEsA6EnLngCm0{gWqOH&Qiw7cNiy4j^j=efeJF{F*q{>03j~}7XtuM!6 diff --git a/project/x64/Debug/Practica3D.tlog/CL.read.1.tlog b/project/x64/Debug/Practica3D.tlog/CL.read.1.tlog index c5c3a4cc2747ba8bb2d6f1441c1786f7ec6829a5..a5383a81d5f849c21e56c593c3723a99504d2f1e 100644 GIT binary patch literal 112940 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 ZNcvPxx$eEJY@gTBQ}#q&S)U~m|Nk5sR+<0+ delta 230 zcmVGU0hhW?0VtF3OQy3N z2qXiOeqb(>V0(6xAQ*s`T(<%4lMv6AlWNe$lTbp?lTb#^v!u@u1Cy3$#*_Tz$deG( z^poI8ma^T92a_;Z5|_?V0mzdeUd*$Q=bQnv@J_G-leE&vlQ7W+lkiBsv!GGl3Aa99 z0r~;6Ea{{LvmCu{1(UXGHnV_jdIPf{N6G=0kV*l@llEVTislR!hRvq;Wd0h7|X@TG!nG5`Po diff --git a/project/x64/Debug/Practica3D.tlog/CL.write.1.tlog b/project/x64/Debug/Practica3D.tlog/CL.write.1.tlog index f7ed733443ccfbfb8f4dc23f24bff75fce4c40e8..ea26fe303cf3abf96df7d1729c3260898f489cb5 100644 GIT binary patch literal 5266 zcmeHL%MOAt5S+7#pCXCTc~?o{x^TOm z5n+r12c(!{&$eJYL5Kt^_UC+NdOV{vMh`oVZz)%^*1RLm*kXeLM+>e=xK^!O@qMRS zFW}5BIt}Y9tyxl6r0vWx!jM{HNB1Rk{=!6C%;Jo)in63-vv@N0di)q4}spz;7YjBkmQa zyW~>IZ}w5=Iqu(2Z^;D)am}8opVU99HhFK9@+4mYAL20f98~G5`Po delta 16 XcmbQF*~76RiD~jVCV|af%(EB)G9LwU diff --git a/project/x64/Debug/Practica3D.tlog/Cl.items.tlog b/project/x64/Debug/Practica3D.tlog/Cl.items.tlog index 692c598..a17c04f 100644 --- a/project/x64/Debug/Practica3D.tlog/Cl.items.tlog +++ b/project/x64/Debug/Practica3D.tlog/Cl.items.tlog @@ -1,2 +1,5 @@ C:\Users\rabil\git\utad-programacion3d\lib\glew\glew.c;C:\Users\rabil\git\utad-programacion3d\project\x64\Debug\glew.obj +C:\Users\rabil\git\utad-programacion3d\src\buffer.cpp;C:\Users\rabil\git\utad-programacion3d\project\x64\Debug\buffer.obj C:\Users\rabil\git\utad-programacion3d\src\main.cpp;C:\Users\rabil\git\utad-programacion3d\project\x64\Debug\main.obj +C:\Users\rabil\git\utad-programacion3d\src\shader.cpp;C:\Users\rabil\git\utad-programacion3d\project\x64\Debug\shader.obj +C:\Users\rabil\git\utad-programacion3d\src\vertex.cpp;C:\Users\rabil\git\utad-programacion3d\project\x64\Debug\vertex.obj diff --git a/project/x64/Debug/Practica3D.tlog/link.command.1.tlog b/project/x64/Debug/Practica3D.tlog/link.command.1.tlog index 11e8aafb839b5d4cbe171cee226a93f3f16bd4b1..9665717d2fc5c7397b3170b72db9e735526dee73 100644 GIT binary patch delta 134 zcmX@b_e^L)8MhNdD1#dix-tY!tgW5Q$1X6jtz}|c33o7q2ZJMn3sizT48&jv0g@4$ q85vF4kTp&gWjCFeBqENag+Y(OpTUX2i-DJcYht3P1d?`SDFy&v4I1VE delta 18 acmaDRbc%06*~EWSHZNk*VVnGmLj(X;D+nwA diff --git a/project/x64/Debug/Practica3D.tlog/link.read.1.tlog b/project/x64/Debug/Practica3D.tlog/link.read.1.tlog index 73545632266e57bf1399ec48a96d89ad93a3075c..c6fb7b363726dccb9755fbd8bb4253634a3be76c 100644 GIT binary patch delta 138 zcmaE)JVR?j8MhNdD1#dix-tY!tgW3`Hf3U433o7q2ZJMn3sjIh48&jv0g@4$85ylP zku^Do5Q%yuub;j%$a;fPz(TS C_aYPk delta 47 zcmbQC^+ C:\Users\rabil\git\utad-programacion3d\project\x64\Debug\Practica3D.exe + Generating Code... +C:\Users\rabil\git\utad-programacion3d\src\main.cpp(84,9): error C2660: 'Buffer::Draw': function does not take 0 arguments + C:\Users\rabil\git\utad-programacion3d\src\buffer.h(15,7): + see declaration of 'Buffer::Draw' + C:\Users\rabil\git\utad-programacion3d\src\main.cpp(84,9): + while trying to match the argument list '()' + diff --git a/src/buffer.cpp b/src/buffer.cpp index ddd683c..7c47d8b 100644 --- a/src/buffer.cpp +++ b/src/buffer.cpp @@ -1 +1,31 @@ -#include "buffer.h" \ No newline at end of file +#include "buffer.h" + +#include + +#include "../lib/glew/GL/glew.h" +#include "../lib/glfw/glfw3.h" + +#include "vertex.h" + +Buffer::Buffer(const std::vector& vertices, const std::vector& indices) +{ + glGenVertexArrays(1, &VAO); + glGenBuffers(1, &VBO); + glGenBuffers(1, &EBO); + + glBindVertexArray(VAO); + glBindBuffer(GL_ARRAY_BUFFER, VBO); + glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(Vertex), vertices.data(), GL_STATIC_DRAW); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(uint16_t), indices.data(), GL_STATIC_DRAW); + + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)0); + glEnableVertexAttribArray(0); +} + +void Buffer::Draw(const Shader& shader) const +{ + glBindVertexArray(VAO); + glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, 0); +} \ No newline at end of file diff --git a/src/buffer.h b/src/buffer.h index 3a43b3a..09af19d 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -1,10 +1,21 @@ #ifndef BUFFER_H_ #define BUFFER_H_ +#include + #include "../lib/glm/glm.hpp" -struct Buffer { - glm::vec3 position{ 0.0f, 0.0f, 0.0f }; +#include "vertex.h" +#include "shader.h" + +class Buffer { +public: + Buffer(const std::vector& vertices, const std::vector& indices); + + void Draw(const Shader& shader) const; + +private: + uint32_t VAO, VBO, EBO; }; #endif // BUFFER_H_ \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 524181f..ab954a4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,52 +3,96 @@ #endif -#include "../lib/glfw/glfw3.h" #include #include +#include "../lib/glew/GL/glew.h" +#include "../lib/glfw/glfw3.h" +#include "../lib/glm/glm.hpp" +#include "../lib/glm/gtc/matrix_transform.hpp" + +#include "vertex.h" +#include "shader.h" +#include "buffer.h" + #define SCREEN_WIDTH 800 #define SCREEN_HEIGHT 600 int main() { // init glfw - if ( !glfwInit() ) { - std::cout << "could not initialize glfw" << std::endl; - return -1; + if (!glfwInit()) { + std::cerr << "Failed to initialize glfw\n"; + return 1; } // create window + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //glfwWindowHint(GLFW_RESIZABLE, false); glfwWindowHint(GLFW_SAMPLES, 8); - GLFWwindow* win = glfwCreateWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "", nullptr, nullptr); + + GLFWwindow* win = glfwCreateWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Daniel Poveda", nullptr, nullptr); if (!win) { - std::cout << "could not create opengl window" << std::endl; + std::cerr << "Failed to create opengl window\n"; glfwTerminate(); - return -1; + return 1; } glfwMakeContextCurrent(win); - + glewExperimental = GL_TRUE; + if (glewInit() != GLEW_OK) { + std::cerr << "Failed to initialize GLEW\n"; + glfwTerminate(); + return 1; + } + + glEnable(GL_DEPTH_TEST); + Shader shader("data/vertex.glsl", "data/fragment.glsl"); + + std::vector vertices = { + {{-0.5f, -0.5f, 0.0f}}, + {{0.5f, -0.5f, 0.0f}}, + {{0.0f, 0.5f, 0.0f}} + }; + std::vector indices = { 0, 1, 2 }; + Buffer buffer(vertices, indices); + + glm::mat4 projection = glm::perspective(glm::radians(45.0f), static_cast(SCREEN_WIDTH) / SCREEN_HEIGHT, 0.1f, 100.0f); + glm::mat4 view = glm::translate(glm::mat4(1.0f), glm::vec3(0, 0, 6)); // main loop float angle = 0; double lastTime = glfwGetTime(); while ( !glfwWindowShouldClose(win) && !glfwGetKey(win, GLFW_KEY_ESCAPE) ) { // get delta time - float deltaTime = static_cast(glfwGetTime() - lastTime); - lastTime = glfwGetTime(); + float delta = static_cast(glfwGetTime() - lastTime); // get window size - int screenWidth, screenHeight; - glfwGetWindowSize(win, &screenWidth, &screenHeight); + //int screenWidth, screenHeight; + //glfwGetWindowSize(win, &screenWidth, &screenHeight); - + // Logic + glm::mat4 model = glm::rotate(glm::mat4(1.0f), glm::radians(delta * 32.0f), glm::vec3(0, 1, 0)); + glm::mat4 mvp = projection * view * model; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + //glClearColor(0, 255, 0, 255); + shader.use(); + uint32_t mvpLoc = glGetUniformLocation(shader.getId(), "MVP"); + glUniformMatrix4fv(mvpLoc, 1, GL_FALSE, &mvp[0][0]); + buffer.Draw(shader); // refresh screen glfwSwapBuffers(win); glfwPollEvents(); + + // Set last time + lastTime = glfwGetTime(); } // shutdown glfwTerminate(); + + return 0; } \ No newline at end of file diff --git a/src/shader.cpp b/src/shader.cpp index fda6ca3..4e49246 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -1 +1,43 @@ -#include "shader.h" \ No newline at end of file +#include "shader.h" + +#include +#include +#include + +#include "../lib/glew/GL/glew.h" +#include "../lib/glfw/glfw3.h" + +namespace { + std::string readShaderFile(const std::string& filename) { + std::ifstream file(filename); + if (!file) + throw std::runtime_error("Failed to open shader file: " + filename); + std::stringstream buffer; + buffer << file.rdbuf(); + return buffer.str(); + } +} // namespace + +Shader::Shader(const std::string& vertexPath, const std::string& fragmentPath) +{ + std::string vertexCode = readShaderFile(vertexPath); + std::string fragmentCode = readShaderFile(fragmentPath); + const char* vShaderCode = vertexCode.c_str(); + const char* fShaderCode = fragmentCode.c_str(); + + const uint32_t vertex = glCreateShader(GL_VERTEX_SHADER); + glShaderSource(vertex, 1, &vShaderCode, NULL); + glCompileShader(vertex); + + const uint32_t fragment = glCreateShader(GL_FRAGMENT_SHADER); + glShaderSource(fragment, 1, &fShaderCode, NULL); + glCompileShader(fragment); + + program = glCreateProgram(); + glAttachShader(program, vertex); + glAttachShader(program, fragment); + glLinkProgram(program); + + glDeleteShader(vertex); + glDeleteShader(fragment); +} \ No newline at end of file diff --git a/src/shader.h b/src/shader.h index 1479df6..eb304f4 100644 --- a/src/shader.h +++ b/src/shader.h @@ -1,10 +1,22 @@ #ifndef SHADER_H_ #define SHADER_H_ +#include + +#include "../lib/glew/GL/glew.h" +#include "../lib/glfw/glfw3.h" #include "../lib/glm/glm.hpp" -struct Shader { - glm::vec3 position{ 0.0f, 0.0f, 0.0f }; +class Shader { +public: + Shader(const std::string& vertexPath, const std::string& fragmentPath); + + void use() const { glUseProgram(program); } + uint32_t getId() const { return program; } + +private: + uint32_t program; }; + #endif // SHADER_H_ \ No newline at end of file