Browse Source

gamma

master
alistair 3 years ago
parent
commit
7a4813e9f1
  1. 23
      src/main.cpp
  2. 17
      src/mesh.cpp
  3. 12
      src/shaders/test.frag

23
src/main.cpp

@ -77,7 +77,7 @@ class Cubemap { @@ -77,7 +77,7 @@ class Cubemap {
}
}
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
@ -132,7 +132,7 @@ class SDLGLGLWindow { @@ -132,7 +132,7 @@ class SDLGLGLWindow {
unsigned int texture[2];
unsigned int cubemap;
glm::vec3 *translations = new glm::vec3[100000];
glm::vec3 *translations = new glm::vec3[1000];
glm::vec3 cubePositions[10] = {
glm::vec3( 0.0f, 0.0f, 0.0f),
@ -351,7 +351,7 @@ class SDLGLGLWindow { @@ -351,7 +351,7 @@ class SDLGLGLWindow {
std::default_random_engine generator;
std::uniform_real_distribution<float> distribution(-50,50);
for (int i = 0; i < 100000; i ++) {
for (int i = 0; i < 1000; i ++) {
float x = distribution(generator) ;
float y = distribution(generator) ;
float z = distribution(generator) ;
@ -382,13 +382,13 @@ class SDLGLGLWindow { @@ -382,13 +382,13 @@ class SDLGLGLWindow {
if (data) {
glBindTexture(GL_TEXTURE_2D, texture[0]);
glCheckError();
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
glCheckError();
stbi_image_free(data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
@ -620,8 +620,8 @@ class SDLGLGLWindow { @@ -620,8 +620,8 @@ class SDLGLGLWindow {
shader->setVec3("lights[0].direction", glm::vec3(0,-1,0));
shader->setVec3("lights[0].position", camera_pos);
shader->setVec3("lights[0].ambient", glm::vec3(0.3));
shader->setVec3("lights[0].diffuse", glm::vec3(0.8,0.7,1.0));
shader->setVec3("lights[0].ambient", glm::vec3(0.1));
shader->setVec3("lights[0].diffuse", glm::vec3(0.8,0.7,1.0) * glm::vec3(0.5));
shader->setVec3("lights[0].specular", glm::vec3(1.0));
shader->setBool("lights[0].attenuate", false);
// shader->setVec3("lights[0].attenuation", glm::vec3(1.0, 0.09, 0.032));
@ -629,8 +629,8 @@ class SDLGLGLWindow { @@ -629,8 +629,8 @@ class SDLGLGLWindow {
shader->setInt("lights[1].type", 1);
shader->setVec3("lights[1].position", lightPositions[0]);
shader->setVec3("lights[1].ambient", glm::vec3(0.3));
shader->setVec3("lights[1].diffuse", glm::vec3(0.9, 0.7, 0.7));
shader->setVec3("lights[1].ambient", glm::vec3(0.1));
shader->setVec3("lights[1].diffuse", glm::vec3(0.6, 0.4, 0.4));
shader->setVec3("lights[1].specular", glm::vec3(1.0));
shader->setBool("lights[1].attenuate", false);
shader->setVec3("lights[1].attenuation", glm::vec3(1.0, 0.09, 0.032));
@ -647,7 +647,7 @@ class SDLGLGLWindow { @@ -647,7 +647,7 @@ class SDLGLGLWindow {
glUniform3f(glGetUniformLocation(shader->program, "cameraPosition"), camera_pos.x, camera_pos.y, camera_pos.z);
shader->setVec3("material.specular", glm::vec3(0.7));
shader->setVec3("material.diffuse", glm::vec3(1.0, 0.7, 0.8));
shader->setVec3("material.ambient", glm::vec3(0.4));
shader->setVec3("material.ambient", glm::vec3(0.2));
shader->setFloat("material.shininess", 32);
glCheckError();
@ -708,6 +708,7 @@ class SDLGLGLWindow { @@ -708,6 +708,7 @@ class SDLGLGLWindow {
glCheckError();
glBindTexture(GL_TEXTURE_CUBE_MAP, cubemap);
bp_model->draw(*shader);
glCheckError();
@ -716,7 +717,7 @@ class SDLGLGLWindow { @@ -716,7 +717,7 @@ class SDLGLGLWindow {
glBindVertexArray(gVAO);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glCheckError();
glDrawArraysInstanced(GL_TRIANGLES, 0,36,100000);
glDrawArraysInstanced(GL_TRIANGLES, 0,36,1000);
glCheckError();
/*

17
src/mesh.cpp

@ -179,15 +179,24 @@ unsigned int Model::texture_from_file(const char *fname, std::string directory) @@ -179,15 +179,24 @@ unsigned int Model::texture_from_file(const char *fname, std::string directory)
if (data)
{
GLenum format;
if (nrComponents == 1)
GLenum formatout;
if (nrComponents == 1) {
format = GL_RED;
else if (nrComponents == 3)
formatout = GL_RED;
}
else if (nrComponents == 3) {
format = GL_RGB;
else if (nrComponents == 4)
formatout = GL_SRGB;
}
else if (nrComponents == 4) {
format = GL_RGBA;
formatout = GL_SRGB_ALPHA;
} else {
throw std::exception();
}
glBindTexture(GL_TEXTURE_2D, textureID);
glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);
glTexImage2D(GL_TEXTURE_2D, 0, formatout, width, height, 0, format, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

12
src/shaders/test.frag

@ -9,6 +9,9 @@ in vec3 FragPos; @@ -9,6 +9,9 @@ in vec3 FragPos;
uniform vec3 cameraPosition;
uniform samplerCube skybox;
float gamma = 2.2;
struct Material {
sampler2D texture_diffuse1;
sampler2D texture_diffuse2;
@ -71,8 +74,13 @@ float @@ -71,8 +74,13 @@ float
attenuation(int i)
{
float dist = length(lights[i].position - FragPos);
// for no gamma correction
//float attenuation = 1.0 / (lights[i].attenuation.x + lights[i].attenuation.y *
//dist + lights[i].attenuation.y * (dist * dist));
// for gamma correction
float attenuation = 1.0 / (lights[i].attenuation.x + lights[i].attenuation.y *
dist + lights[i].attenuation.y * (dist * dist));
dist + lights[i].attenuation.y * (dist));
return attenuation;
}
@ -134,7 +142,9 @@ main() @@ -134,7 +142,9 @@ main()
}
vec4 parta = (vec4(endResult, 1.0)) * texture(material.texture_diffuse1, vec2(theTexCoord));
// gamma correction
LFragment = parta;
LFragment.rgb = pow(parta.rgb, vec3(1.0/gamma));
}

Loading…
Cancel
Save