mirror of
https://github.com/JoeyDeVries/LearnOpenGL.git
synced 2026-01-30 20:13:22 +08:00
IBL irradiance shader source file fix.
This commit is contained in:
16
src/6.pbr/2.1.2.ibl_irradiance/2.1.2.background.frag
Normal file
16
src/6.pbr/2.1.2.ibl_irradiance/2.1.2.background.frag
Normal 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);
|
||||||
|
}
|
||||||
17
src/6.pbr/2.1.2.ibl_irradiance/2.1.2.background.vs
Normal file
17
src/6.pbr/2.1.2.ibl_irradiance/2.1.2.background.vs
Normal 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;
|
||||||
|
}
|
||||||
14
src/6.pbr/2.1.2.ibl_irradiance/2.1.2.cubemap.vs
Normal file
14
src/6.pbr/2.1.2.ibl_irradiance/2.1.2.cubemap.vs
Normal 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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -78,9 +78,9 @@ int main()
|
|||||||
// load and initialize shaders
|
// load and initialize shaders
|
||||||
// ----------------------
|
// ----------------------
|
||||||
Shader pbrShader("2.1.2.pbr.vs", "2.1.2.pbr.frag");
|
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 equirectangularToCubemapShader("2.1.2.cubemap.vs", "2.1.2.equirectangular_to_cubemap.frag");
|
||||||
Shader irradianceShader("2.1.1.cubemap.vs", "2.1.2.irradiance_convolution.frag");
|
Shader irradianceShader("2.1.2.cubemap.vs", "2.1.2.irradiance_convolution.frag");
|
||||||
Shader backgroundShader("2.1.1.background.vs", "2.1.1.background.frag");
|
Shader backgroundShader("2.1.2.background.vs", "2.1.2.background.frag");
|
||||||
|
|
||||||
pbrShader.Use();
|
pbrShader.Use();
|
||||||
glUniform1i(glGetUniformLocation(pbrShader.Program, "irradianceMap"), 0);
|
glUniform1i(glGetUniformLocation(pbrShader.Program, "irradianceMap"), 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user