diff --git a/cw 7/shaders/shader_5_sun.frag b/cw 7/shaders/shader_5_sun.frag index 5cf78d5..ef44740 100644 --- a/cw 7/shaders/shader_5_sun.frag +++ b/cw 7/shaders/shader_5_sun.frag @@ -1,10 +1,17 @@ #version 430 core -uniform vec3 objectColor; -in vec3 interpNormal; +uniform float exposition; +uniform sampler2D sunTexture; +out vec4 outColor; +in vec2 TexCoords; void main() { - gl_FragColor = vec4(objectColor, 1.0); + vec3 textureColor = texture2D(sunTexture, TexCoords).xyz; + vec3 adjustedColor = 1.0 - exp(-textureColor * exposition); + + // Output the color with unchanged alpha + outColor = vec4(clamp(adjustedColor, 0.0, 1.0), 1.0); + //outColor = vec4(textureColor*min(1,exposition), 1.0); } diff --git a/cw 7/shaders/shader_5_sun.vert b/cw 7/shaders/shader_5_sun.vert index 6a0f3b2..dabd2ed 100644 --- a/cw 7/shaders/shader_5_sun.vert +++ b/cw 7/shaders/shader_5_sun.vert @@ -1,15 +1,15 @@ #version 430 core layout(location = 0) in vec3 vertexPosition; -layout(location = 1) in vec2 vertexTexCoord; -layout(location = 2) in vec3 vertexNormal; +layout(location = 1) in vec3 vertexNormal; +layout(location = 2) in vec2 vertexTexCoord; + uniform mat4 transformation; - -out vec3 interpNormal; +out vec2 TexCoords; void main() { - - interpNormal = vertexNormal; + gl_Position = transformation * vec4(vertexPosition, 1.0); + TexCoords = vertexTexCoord; } diff --git a/cw 7/src/ex_7_1.hpp b/cw 7/src/ex_7_1.hpp index e53d7c2..4bc7b15 100644 --- a/cw 7/src/ex_7_1.hpp +++ b/cw 7/src/ex_7_1.hpp @@ -190,13 +190,25 @@ void drawObjectSkyBox(Core::RenderContext& context, glm::mat4 modelMatrix) { glUniformMatrix4fv(glGetUniformLocation(programSkyBox, "transformation"), 1, GL_FALSE, (float*)&transformation); glUniformMatrix4fv(glGetUniformLocation(programSkyBox, "modelMatrix"), 1, GL_FALSE, (float*)&modelMatrix); glUniform3f(glGetUniformLocation(programSkyBox, "lightPos"), 0, 0, 0); - //Core::SetActiveTexture(textureID, "colorTexture", programSkyBox, 0); glBindTexture(GL_TEXTURE_CUBE_MAP, textureID); Core::DrawContext(context); glEnable(GL_DEPTH_TEST); } +void drawObjectSun(Core::RenderContext& context, glm::mat4 modelMatrix, GLuint textureID) +{ + glUseProgram(programSun); + glm::mat4 viewProjectionMatrix = createPerspectiveMatrix() * createCameraMatrix(); + glm::mat4 transformation = viewProjectionMatrix * modelMatrix; + glUniformMatrix4fv(glGetUniformLocation(programSun, "transformation"), 1, GL_FALSE, (float*)&transformation); + glUniform1f(glGetUniformLocation(programSun, "exposition"), 1.f); + Core::SetActiveTexture(textureID, "sunTexture", programSun, 0); + glActiveTexture(GL_TEXTURE0); // Activate texture unit 0 + glBindTexture(GL_TEXTURE_2D, textureID); + Core::DrawContext(sphereContext); +} + void generateAsteroids(glm::vec3 asteroid_Pos, glm::vec3 distance, double step) { glm::vec3 normalizedDir = glm::normalize(distance); asteroid_Pos = asteroid_Pos - normalizedDir *step; @@ -307,14 +319,6 @@ void generatePlanetoidBelt() { } } - //if(star==1) - //{ - // star = 0; - //} - //else - //{ - // exit(0); - //} } glm::vec3 spaceshipSide = glm::normalize(glm::cross(spaceshipDir, glm::vec3(0.f, 1.f, 0.f))); @@ -359,12 +363,9 @@ void renderScene(GLFWwindow* window) glm::mat4 transformation; float time = glfwGetTime(); - - drawObjectSkyBox(cubeContext, glm::translate(cameraPos)); - - - drawObjectTexture(sphereContext, glm::translate(glm::vec3(20.0f, 0.0f, 0.0f)) * glm::scale(glm::mat4(), glm::vec3(2.0f, 2.0f, 2.0f)), texture::sun, texture::rustNormal, texture::metalnessSphere, texture::roughnessSphere); + + drawObjectSun(sphereContext, glm::translate(glm::vec3(20.0f, 0.0f, 0.0f)) * glm::scale(glm::mat4(), glm::vec3(2)), texture::sun); drawObjectTexture(sphereContext, glm::translate(glm::vec3(18.0f, 0.0f, 3.0f)) * glm::eulerAngleY(time) * glm::scale(glm::vec3(0.3f)), texture::earth, texture::earthNormal, texture::metalnessSphere, texture::roughnessSphere); //drawObjectTexture(sphereContext, @@ -449,8 +450,8 @@ void init(GLFWwindow* window) programTex = shaderLoader.CreateProgram("shaders/shader_5_tex.vert", "shaders/shader_5_tex.frag"); programEarth = shaderLoader.CreateProgram("shaders/shader_5_tex.vert", "shaders/shader_5_tex.frag"); programProcTex = shaderLoader.CreateProgram("shaders/shader_5_tex.vert", "shaders/shader_5_tex.frag"); - programSkyBox = shaderLoader.CreateProgram("shaders/shader_skybox.vert", "shaders/shader_skybox.frag"); + programSun = shaderLoader.CreateProgram("shaders/shader_5_sun.vert", "shaders/shader_5_sun.frag"); loadModelToContext("./models/sphere.obj", sphereContext); loadModelToContext("./models/spaceship_new.obj", shipContext);