diff --git a/BaseGLProject/BaseGLProject.vcxproj b/BaseGLProject/BaseGLProject.vcxproj index b50e812..7d58e40 100644 --- a/BaseGLProject/BaseGLProject.vcxproj +++ b/BaseGLProject/BaseGLProject.vcxproj @@ -208,6 +208,10 @@ + + + + diff --git a/BaseGLProject/BaseGLProject.vcxproj.filters b/BaseGLProject/BaseGLProject.vcxproj.filters index 1dfe156..45b7284 100644 --- a/BaseGLProject/BaseGLProject.vcxproj.filters +++ b/BaseGLProject/BaseGLProject.vcxproj.filters @@ -164,4 +164,12 @@ Shaders + + + Resource Files + + + Resource Files + + \ No newline at end of file diff --git a/BaseGLProject/Dataset.h b/BaseGLProject/Dataset.h index 4ebc039..2e69500 100644 --- a/BaseGLProject/Dataset.h +++ b/BaseGLProject/Dataset.h @@ -15,10 +15,13 @@ public: { vertices.clear(); normals.clear(); + colors.clear(); + tex_mapping.clear(); } void simpleCube() { + clear(); vertices = { { -1.0, -1.0, 1.0}, { 1.0, -1.0, 1.0}, { 1.0, 1.0, 1.0}, { 1.0, 1.0, 1.0}, { -1.0, 1.0, 1.0}, { -1.0, -1.0, 1.0}, { 1.0, -1.0, 1.0}, { 1.0, -1.0, -1.0}, { 1.0, 1.0, -1.0}, @@ -67,55 +70,47 @@ public: void simpleFloor() { + clear(); vertices = {{-10.0, 0.0, -10.0}, {-10.0, 0.0, 10.0}, {10.0, 0.0, -10.0}, {10.0, 0.0, 10.0}, {10.0, 0.0, -10.0}, {-10.0, 0.0, 10.0}}; colors = { {0.7, 0.7, 0.7}, {0.7, 0.7, 0.7}, {0.7, 0.7, 0.7}, {0.7, 0.7, 0.7}, {0.7, 0.7, 0.7}, {0.7, 0.7, 0.7} }; - genEmptyTexture(); genNormals(); } void checkeredFloor(float size, int squares, glm::vec3 light_color, glm::vec3 dark_color) { + clear(); float maxX = size / 2.f, maxY = size / 2.f; - float minX = -size / 2.f, minY = -size / 2.f; - float side_size = size / (float)squares; - int color = 1; - - for (float x = minX; x < maxX; x += side_size) - { - for (float y = minY; y < maxY; y += side_size) - { - color *= -1; - glm::vec3 tile_color = (color > 0) ? light_color : dark_color; - //gen 1 carré - vertices.emplace_back(x, 0, y); //upleft - vertices.emplace_back(x, 0, y + side_size); //downleft - vertices.emplace_back(x + side_size, 0, y + side_size); //downright - - vertices.emplace_back(x + side_size, 0, y + side_size); //downright - vertices.emplace_back(x + side_size, 0, y); //upright - vertices.emplace_back(x, 0, y); //upleft - - for (int z = 0; z < 6; z++) - colors.push_back(tile_color); - } + float minX = -size / 2.f, minY = -size / 2.f; + float side_size = size / (float)squares; + int color = 1; + + for (float x = minX; x < maxX; x += side_size) + { + for (float y = minY; y < maxY; y += side_size) + { color *= -1; + glm::vec3 tile_color = (color > 0) ? light_color : dark_color; + //gen 1 carré + vertices.emplace_back(x, 0, y); //upleft + vertices.emplace_back(x, 0, y + side_size); //downleft + vertices.emplace_back(x + side_size, 0, y + side_size); //downright + vertices.emplace_back(x + side_size, 0, y + side_size); //downright + vertices.emplace_back(x + side_size, 0, y); //upright + vertices.emplace_back(x, 0, y); //upleft + + for (int z = 0; z < 6; z++) + colors.push_back(tile_color); } - genEmptyTexture(); - genNormals(); + color *= -1; + } + genNormals(); } -private: - void genEmptyTexture() - { - tex_mapping.clear(); - for (auto vert : vertices) - for (int i = 0; i < 6; i++) - tex_mapping.push_back(glm::vec2(0, 0)); - } +private: void genNormals() { diff --git a/BaseGLProject/Models/Mesh.cpp b/BaseGLProject/Models/Mesh.cpp index 972540b..0eaf2bd 100644 --- a/BaseGLProject/Models/Mesh.cpp +++ b/BaseGLProject/Models/Mesh.cpp @@ -22,6 +22,7 @@ Mesh::MeshEntry::MeshEntry(Dataset &set, Mesh *m) { renderType = NO_INDEX; parent = m; + shininessStrength = 0; vbo[VERTEX_BUFFER] = NULL; vbo[NORMAL_BUFFER] = NULL; @@ -51,27 +52,30 @@ Mesh::MeshEntry::MeshEntry(Dataset &set, Mesh *m) glEnableVertexAttribArray(NORMAL_BUFFER); //Copy texture mapping to VBO + if (set.tex_mapping.size() > 0) + { + glGenBuffers(1, &vbo[TEXCOORD_BUFFER]); + glBindBuffer(GL_ARRAY_BUFFER, vbo[TEXCOORD_BUFFER]); + glBufferData(GL_ARRAY_BUFFER, 2 * set.tex_mapping.size() * sizeof(GLfloat), set.tex_mapping.data(), GL_STATIC_DRAW); - glGenBuffers(1, &vbo[TEXCOORD_BUFFER]); - glBindBuffer(GL_ARRAY_BUFFER, vbo[TEXCOORD_BUFFER]); - glBufferData(GL_ARRAY_BUFFER, 2 * set.tex_mapping.size() * sizeof(GLfloat), set.tex_mapping.data(), GL_STATIC_DRAW); - - glVertexAttribPointer(TEXCOORD_BUFFER, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 2, NULL); - glEnableVertexAttribArray(TEXCOORD_BUFFER); + glVertexAttribPointer(TEXCOORD_BUFFER, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 2, NULL); + glEnableVertexAttribArray(TEXCOORD_BUFFER); + } //Copy vertice color to VBO + if (set.colors.size() > 0) + { + glGenBuffers(1, &vbo[COLOR_BUFFER]); + glBindBuffer(GL_ARRAY_BUFFER, vbo[COLOR_BUFFER]); + glBufferData(GL_ARRAY_BUFFER, set.colors.size() * 3 * sizeof(GLfloat), set.colors.data(), GL_STATIC_DRAW); - glGenBuffers(1, &vbo[COLOR_BUFFER]); - glBindBuffer(GL_ARRAY_BUFFER, vbo[COLOR_BUFFER]); - glBufferData(GL_ARRAY_BUFFER, set.colors.size() * 3 * sizeof(GLfloat), set.colors.data(), GL_STATIC_DRAW); - - glVertexAttribPointer(COLOR_BUFFER, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 3, NULL); - glEnableVertexAttribArray(COLOR_BUFFER); + glVertexAttribPointer(COLOR_BUFFER, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 3, NULL); + glEnableVertexAttribArray(COLOR_BUFFER); + } dset_size = set.vertices.size(); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); - shininessStrength = 0; } @@ -208,8 +212,9 @@ Mesh::MeshEntry::~MeshEntry() { /** * Renders this MeshEntry **/ -void Mesh::MeshEntry::render() { +void Mesh::MeshEntry::render(SceneContext ctx) { + glBindTexture(GL_TEXTURE_2D, ctx.textures); glBindVertexArray(vao); if (renderType == NO_INDEX) { @@ -222,6 +227,7 @@ void Mesh::MeshEntry::render() { glDrawElements(GL_TRIANGLES, size / sizeof(unsigned int), GL_UNSIGNED_INT, NULL); } glBindVertexArray(0); + glBindTexture(GL_TEXTURE_2D, 0); } /** @@ -333,7 +339,7 @@ void Mesh::draw(SceneContext ctx) { shader->setUniforms(ctx); - meshEntries.at(i)->render(); + meshEntries.at(i)->render(ctx); model.glPopMatrix(); } disableCulling(); diff --git a/BaseGLProject/Models/Mesh.h b/BaseGLProject/Models/Mesh.h index 2d8e394..e9815ff 100644 --- a/BaseGLProject/Models/Mesh.h +++ b/BaseGLProject/Models/Mesh.h @@ -58,7 +58,7 @@ public: MeshEntry(Dataset &set, Mesh *m); ~MeshEntry(); Mesh * parent; - void render(); + void render(SceneContext ctx); }; public: diff --git a/BaseGLProject/MyGLWindow.cpp b/BaseGLProject/MyGLWindow.cpp index dfab2b1..24aa21b 100644 --- a/BaseGLProject/MyGLWindow.cpp +++ b/BaseGLProject/MyGLWindow.cpp @@ -1,4 +1,4 @@ -#include +#include #include "MyGlWindow.h" //Getting the projection matrix glm::mat4x4 perspective(float fovy, float aspect, float near, float far) @@ -58,8 +58,8 @@ void MyGlWindow::setBgColor(float bgColor[3]) void MyGlWindow::setup() { glActiveTexture(GL_TEXTURE0); - glGenTextures(1, &_textures); //tex_2d is a member variable - glBindTexture(GL_TEXTURE_2D, _textures); + glGenTextures(1, &_scnctx.textures); //tex_2d is a member variable + glBindTexture(GL_TEXTURE_2D, _scnctx.textures); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); @@ -67,7 +67,7 @@ void MyGlWindow::setup() glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); int width, height, channel; - unsigned char * image = stbi_load("brick.jpg", &width, &height, &channel, 0); + unsigned char * image = stbi_load("brick1.jpg", &width, &height, &channel, 0); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image); @@ -76,11 +76,15 @@ void MyGlWindow::setup() stbi_image_free(image); glBindTexture(GL_TEXTURE_2D, 0); - _scnctx.lights.emplace("Light1", Light(glm::vec3(0.0f, 0.5f, 0.5f), glm::vec4(10, 10, 0, 1))); + //Showcase lights + _scnctx.lights.emplace("Light1", Light(glm::vec3(0.8f), glm::vec4(3, 10, 5, 1))); + + //Party lights + /*_scnctx.lights.emplace("Light1", Light(glm::vec3(0.0f, 0.5f, 0.5f), glm::vec4(10, 10, 0, 1))); _scnctx.lights.emplace("Light2", Light(glm::vec3(0.0f, 0.0f, 0.5f), glm::vec4(3.09, 10, 9.51, 1))); _scnctx.lights.emplace("Light3", Light(glm::vec3(0.5f, 0.0f, 0.0f), glm::vec4(-8.09, 10, 5.87, 1))); _scnctx.lights.emplace("Light4", Light(glm::vec3(0.0f, 0.5f, 0.0f), glm::vec4(-8.09, 10, -5.87, 1))); - _scnctx.lights.emplace("Light5", Light(glm::vec3(0.5f, 0.5f, 0.5f), glm::vec4(3.09, 10, -9.51, 1))); + _scnctx.lights.emplace("Light5", Light(glm::vec3(0.5f, 0.5f, 0.5f), glm::vec4(3.09, 10, -9.51, 1)));*/ shaders["Simple"] = new Shader("simple.vert", "simple.frag"); shaders["Simple"]->uniformFlags = ShaderFlags::MVP_FLAG; diff --git a/BaseGLProject/MyGLWindow.h b/BaseGLProject/MyGLWindow.h index 4d07b6f..2f971b8 100644 --- a/BaseGLProject/MyGLWindow.h +++ b/BaseGLProject/MyGLWindow.h @@ -38,7 +38,6 @@ private: float _bgColor[3]; - GLuint _textures; GLuint _vaoHandle; GLuint _iboHandle; diff --git a/BaseGLProject/SceneContext.h b/BaseGLProject/SceneContext.h index 535209e..d2e22b1 100644 --- a/BaseGLProject/SceneContext.h +++ b/BaseGLProject/SceneContext.h @@ -15,4 +15,6 @@ struct SceneContext glm::mat4x4 mvpMatrix; glm::mat4x4 modelViewMatrix; glm::mat3x3 normalMatrix; + + GLuint textures; }; \ No newline at end of file diff --git a/BaseGLProject/Shader.h b/BaseGLProject/Shader.h index 40caf9c..ca072d7 100644 --- a/BaseGLProject/Shader.h +++ b/BaseGLProject/Shader.h @@ -44,9 +44,9 @@ public: { _program.use(); glUniform3fv(_program.addUniform(name), 1, glm::value_ptr(data)); ; _program.disable(); } - void addUnform(const std::string name, int data) + void addUniform(const std::string name, int data) { - _program.use(); glUniform1iv(_program.addUniform(name), 1, &data); _program.disable(); + _program.use(); glUniform1i(_program.addUniform(name), data); _program.disable(); } void addUniform(const std::string name, float data) { diff --git a/BaseGLProject/Source.cpp b/BaseGLProject/Source.cpp index 698cb32..7ac0683 100644 --- a/BaseGLProject/Source.cpp +++ b/BaseGLProject/Source.cpp @@ -175,7 +175,7 @@ int loop(GLFWwindow *window) { ImGui::SetWindowPos(ImVec2(20, 20)); - static float bgColor[3] = { .3f, .3f, .3f }; + static float bgColor[3] = { .0f, .0f, .1f }; ImGui::ColorEdit3("Background", bgColor, 0); glWin.setBgColor(bgColor); diff --git a/BaseGLProject/Resources/brick1.jpg b/BaseGLProject/brick1.jpg similarity index 100% rename from BaseGLProject/Resources/brick1.jpg rename to BaseGLProject/brick1.jpg diff --git a/BaseGLProject/Resources/earth.jpg b/BaseGLProject/earth.jpg similarity index 100% rename from BaseGLProject/Resources/earth.jpg rename to BaseGLProject/earth.jpg diff --git a/BaseGLProject/fog.vert b/BaseGLProject/fog.vert index 9d33437..f00529b 100644 --- a/BaseGLProject/fog.vert +++ b/BaseGLProject/fog.vert @@ -2,8 +2,8 @@ layout(location=0) in vec3 coord3d; layout(location=1) in vec3 v_normal; -layout(location=2) in vec2 v_texmap; -layout(location=3) in vec3 v_color; +layout(location=2) in vec3 v_color; +layout(location=3) in vec2 v_texmap; uniform mat4 mvp; uniform mat3 NormalMatrix; diff --git a/BaseGLProject/light.frag b/BaseGLProject/light.frag index 67b7445..4452a05 100644 --- a/BaseGLProject/light.frag +++ b/BaseGLProject/light.frag @@ -46,7 +46,6 @@ void main() specular_sum += specular; } - vec4 texColor = texture(tex1, texCoord); - FragColors = (vec4(diffuse_sum + ambient, 1) * texColor + vec4(specular_sum, 1.0)); + FragColors = (vec4(diffuse_sum + ambient, 1) * texColor + vec4(specular_sum, 1.0)); } diff --git a/BaseGLProject/light.vert b/BaseGLProject/light.vert index c22208c..c0a4ac5 100644 --- a/BaseGLProject/light.vert +++ b/BaseGLProject/light.vert @@ -2,8 +2,8 @@ layout(location=0) in vec3 coord3d; layout(location=1) in vec3 v_normal; -layout(location=2) in vec2 v_texmap; -layout(location=3) in vec3 v_color; +layout(location=2) in vec3 v_color; +layout(location=3) in vec2 v_texmap; uniform mat4 mvp; uniform mat3 NormalMatrix; diff --git a/BaseGLProject/silhouette.vert b/BaseGLProject/silhouette.vert index f4b0b10..19b9e23 100644 --- a/BaseGLProject/silhouette.vert +++ b/BaseGLProject/silhouette.vert @@ -2,8 +2,8 @@ layout(location=0) in vec3 coord3d; layout(location=1) in vec3 v_normal; -layout(location=2) in vec2 v_texmap; -layout(location=3) in vec3 v_color; +layout(location=2) in vec3 v_color; +layout(location=3) in vec2 v_texmap; uniform mat4 mvp; uniform float sil_offset; diff --git a/BaseGLProject/simple.vert b/BaseGLProject/simple.vert index bc84943..1aaa846 100644 --- a/BaseGLProject/simple.vert +++ b/BaseGLProject/simple.vert @@ -2,8 +2,9 @@ layout(location=0) in vec3 coord3d; layout(location=1) in vec3 v_normal; -layout(location=2) in vec2 v_texmap; -layout(location=3) in vec3 v_color; +layout(location=2) in vec3 v_color; +layout(location=3) in vec2 v_texmap; + out vec3 f_color;