IBL irradiance shader source file fix.

This commit is contained in:
Joey de Vries
2017-02-25 12:00:34 +01:00
parent 691215afa3
commit 6a41899478
5 changed files with 72 additions and 3 deletions

View File

@@ -0,0 +1,16 @@
#version 330 core
out vec4 FragColor;
in vec3 WorldPos;
uniform samplerCube environmentMap;
void main()
{
vec3 envColor = texture(environmentMap, WorldPos).rgb;
// HDR tonemap and gamma correct
envColor = envColor / (envColor + vec3(1.0));
envColor = pow(envColor, vec3(1.0/2.2));
FragColor = vec4(envColor, 1.0);
}

View File

@@ -0,0 +1,17 @@
#version 330 core
layout (location = 0) in vec3 pos;
uniform mat4 projection;
uniform mat4 view;
out vec3 WorldPos;
void main()
{
WorldPos = pos;
mat4 rotView = mat4(mat3(view));
vec4 clipPos = projection * rotView * vec4(WorldPos, 1.0);
gl_Position = clipPos.xyww;
}

View File

@@ -0,0 +1,14 @@
#version 330 core
layout (location = 0) in vec3 pos;
out vec3 WorldPos;
uniform mat4 projection;
uniform mat4 view;
void main()
{
WorldPos = pos;
gl_Position = projection * view * vec4(WorldPos, 1.0);
}

View File

@@ -0,0 +1,22 @@
#version 330 core
out vec4 FragColor;
in vec3 WorldPos;
uniform sampler2D equirectangularMap;
const vec2 invAtan = vec2(0.1591, 0.3183);
vec2 SampleSphericalMap(vec3 v)
{
vec2 uv = vec2(atan(v.z, v.x), asin(v.y));
uv *= invAtan;
uv += 0.5;
return uv;
}
void main()
{
vec2 uv = SampleSphericalMap(normalize(WorldPos));
vec3 color = texture(equirectangularMap, uv).rgb;
FragColor = vec4(color, 1.0);
}

View File

@@ -78,9 +78,9 @@ int main()
// load and initialize shaders
// ----------------------
Shader pbrShader("2.1.2.pbr.vs", "2.1.2.pbr.frag");
Shader equirectangularToCubemapShader("2.1.1.cubemap.vs", "2.1.1.equirectangular_to_cubemap.frag");
Shader irradianceShader("2.1.1.cubemap.vs", "2.1.2.irradiance_convolution.frag");
Shader backgroundShader("2.1.1.background.vs", "2.1.1.background.frag");
Shader equirectangularToCubemapShader("2.1.2.cubemap.vs", "2.1.2.equirectangular_to_cubemap.frag");
Shader irradianceShader("2.1.2.cubemap.vs", "2.1.2.irradiance_convolution.frag");
Shader backgroundShader("2.1.2.background.vs", "2.1.2.background.frag");
pbrShader.Use();
glUniform1i(glGetUniformLocation(pbrShader.Program, "irradianceMap"), 0);