diff options
| author | hachem <im@hachem.wtf> | 2025-08-22 12:24:05 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2025-08-22 12:24:05 +0200 |
| commit | 2c8002d30f291cba832a5750212009d48238c308 (patch) | |
| tree | 4aafc468441b3e32c267040830b8e0b5af859faf /assets/shaders/equirect_to_cubemap.glsl | |
| parent | b9de06951631d9969c52c6ed95de17a6d8aad121 (diff) | |
feat: add HDRI
Diffstat (limited to 'assets/shaders/equirect_to_cubemap.glsl')
| -rw-r--r-- | assets/shaders/equirect_to_cubemap.glsl | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/assets/shaders/equirect_to_cubemap.glsl b/assets/shaders/equirect_to_cubemap.glsl new file mode 100644 index 0000000..2b99c9b --- /dev/null +++ b/assets/shaders/equirect_to_cubemap.glsl @@ -0,0 +1,33 @@ +#type vertex + +#version 330 core +layout (location = 0) in vec3 aPos; +out vec3 WorldPos; +uniform mat4 projection; +uniform mat4 view; +void main() +{ + WorldPos = aPos; + gl_Position = projection * view * vec4(WorldPos, 1.0); +} + +#type fragment + +#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); +} |
