diff --git a/BaseGLProject/Models/Mesh.cpp b/BaseGLProject/Models/Mesh.cpp index 6c82207..ff1a971 100644 --- a/BaseGLProject/Models/Mesh.cpp +++ b/BaseGLProject/Models/Mesh.cpp @@ -475,8 +475,9 @@ void Mesh::draw(SceneContext &ctx) { shader->mat.shininess = shininess; // Setting the space matrixes uniques to the object - ctx.mvpMatrix = ctx.projectionMatrix * ctx.viewMatrix * model.getMatrix(); - ctx.modelViewMatrix = ctx.viewMatrix * model.getMatrix(); + ctx.modelMatrix = model.getMatrix(); + ctx.mvpMatrix = ctx.projectionMatrix * ctx.viewMatrix * ctx.modelMatrix; + ctx.modelViewMatrix = ctx.viewMatrix * ctx.modelMatrix; ctx.normalMatrix = glm::mat3(glm::transpose(glm::inverse(ctx.modelViewMatrix))); //Sending the uniform data to the shader diff --git a/BaseGLProject/MyGLWindow.cpp b/BaseGLProject/MyGLWindow.cpp index 2c4b352..ba2266c 100644 --- a/BaseGLProject/MyGLWindow.cpp +++ b/BaseGLProject/MyGLWindow.cpp @@ -110,6 +110,9 @@ void MyGlWindow::shaderSetup() shaders["Toon"]->uniformFlags &= ~ShaderFlags::SHINE_FLAG; shaders["Skybox"] = new Shader("skybox.vert", "skybox.frag"); + shaders["Skybox"]->uniformFlags = MVP_FLAG | KA_FLAG | MODEL_MATRIX_FLAG | SKYBOX_TEX_FLAG; + shaders["Skybox"]->mat.enabled = true; + shaders["Skybox"]->mat.ka = glm::vec3(0.4, 0.4, 0.4); } @@ -137,6 +140,7 @@ void MyGlWindow::setup() shaderSetup(); skybox.initialize("Models/Skybox/", shaders["Skybox"]); skybox.scale = 10; + _scnctx.skybox_tex = skybox.getTexID(); lightSetup(); //meshes.emplace("Ogre", new Mesh("ogre/ogre.obj", shaders["TexNmapLight"])); @@ -191,6 +195,8 @@ void MyGlWindow::setup() //meshes.emplace("Teapot", new Mesh("teapot.obj", shaders["Toon"])); //meshes["Teapot"]->addTranslation(glm::vec4(5, 0, 3, 1)); //meshes["Teapot"]->cullMode = BACK; + + meshes.emplace("Teapot", new Mesh("teapot.obj", shaders["Skybox"])); } @@ -208,8 +214,8 @@ void MyGlWindow::draw() _scnctx.viewMatrix = view; _scnctx.projectionMatrix = projection; - - //_scnctx.adjustSpots(); + + shaders["Skybox"]->addUniform("WorldCamPos", eye); for (auto it = meshes.begin(); it != meshes.end(); it++) (*it).second->draw(_scnctx); skybox.draw(shaders["Skybox"], _scnctx); diff --git a/BaseGLProject/SceneContext.h b/BaseGLProject/SceneContext.h index bf09fd3..1bbc23a 100644 --- a/BaseGLProject/SceneContext.h +++ b/BaseGLProject/SceneContext.h @@ -16,8 +16,11 @@ struct SceneContext glm::mat4x4 mvpMatrix; glm::mat4x4 modelViewMatrix; + glm::mat4x4 modelMatrix; glm::mat3x3 normalMatrix; + GLuint skybox_tex; + std::map textures; void adjustSpots() diff --git a/BaseGLProject/Shader.cpp b/BaseGLProject/Shader.cpp index 7f9d287..8f5d587 100644 --- a/BaseGLProject/Shader.cpp +++ b/BaseGLProject/Shader.cpp @@ -39,6 +39,8 @@ void Shader::setCamera(SceneContext ctx) glUniformMatrix3fv(_program.addUniform("NormalMatrix"), 1, GL_FALSE, glm::value_ptr(ctx.normalMatrix)); if ((uniformFlags & ShaderFlags::MODELVIEW_FLAG) == ShaderFlags::MODELVIEW_FLAG) glUniformMatrix4fv(_program.addUniform("ModelViewMatrix"), 1, GL_FALSE, glm::value_ptr(ctx.modelViewMatrix)); + if ((uniformFlags & ShaderFlags::MODEL_MATRIX_FLAG) == ShaderFlags::MODEL_MATRIX_FLAG) + glUniformMatrix4fv(_program.addUniform("ModelMatrix"), 1, GL_FALSE, glm::value_ptr(ctx.modelMatrix)); } void Shader::setLights(SceneContext ctx) @@ -72,4 +74,10 @@ void Shader::setUniforms(SceneContext ctx) setCamera(ctx); setLights(ctx); setMaterial(ctx); + + if ((uniformFlags & ShaderFlags::SKYBOX_TEX_FLAG) == ShaderFlags::SKYBOX_TEX_FLAG) + { + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_CUBE_MAP, ctx.skybox_tex); + } } diff --git a/BaseGLProject/Shader.h b/BaseGLProject/Shader.h index 90d82e3..09fb2d2 100644 --- a/BaseGLProject/Shader.h +++ b/BaseGLProject/Shader.h @@ -21,7 +21,9 @@ enum ShaderFlags MVP_FLAG = 16, NORMAL_MAT_FLAG = 32, MODELVIEW_FLAG = 64, - LIGHTS_FLAG = 128, + LIGHTS_FLAG = 128, + MODEL_MATRIX_FLAG = 256, + SKYBOX_TEX_FLAG = 512 }; class Shader diff --git a/BaseGLProject/Skybox.cpp b/BaseGLProject/Skybox.cpp index 5915244..380fcd1 100644 --- a/BaseGLProject/Skybox.cpp +++ b/BaseGLProject/Skybox.cpp @@ -98,6 +98,8 @@ void Skybox::initialize(std::string skybox_dir, Shader *sky) glBindTexture(GL_TEXTURE_CUBE_MAP, 0); sky->enable(); sky->addUniform("DrawSkyBox", (int)GL_FALSE); + sky->addUniform("CubeMapTex", (int)0); + sky->addUniform("ReflectFactor", (float)0.85); sky->disable(); } @@ -108,6 +110,12 @@ Skybox::~Skybox() glDeleteVertexArrays(1, &vao); } + +// //Things to add +// //Per model : +// // - ModelMatrix +// // - MaterialColor + void Skybox::draw(Shader *sky_shader, SceneContext &ctx) { sky_shader->enable(); @@ -118,7 +126,6 @@ void Skybox::draw(Shader *sky_shader, SceneContext &ctx) sky_shader->addUniform("mvp", mvpMatrix); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_CUBE_MAP, texID); - sky_shader->addUniform("CubeMapTex", (int)0); glBindVertexArray(vao); sky_shader->addUniform("DrawSkyBox", (int)GL_TRUE); diff --git a/BaseGLProject/skybox.frag b/BaseGLProject/skybox.frag index 310b29c..9ead26f 100644 --- a/BaseGLProject/skybox.frag +++ b/BaseGLProject/skybox.frag @@ -4,7 +4,7 @@ out vec4 FragColors; in vec3 reflectDir; -uniform vec3 MaterialColor; +uniform vec3 Ka; uniform float ReflectFactor; uniform bool DrawSkyBox; uniform samplerCube CubeMapTex; @@ -19,5 +19,5 @@ void main() if (DrawSkyBox == true) FragColors = texColor; else - FragColors = vec4(mix(texColor.xyz,MaterialColor,ReflectFactor), 1); + FragColors = vec4(mix(Ka, texColor.xyz, ReflectFactor), 1); }