1
0
Fork 0
fgdata/Shaders/HDR/quad_cubemap.vert

40 lines
1.2 KiB
GLSL

#version 330 core
layout(location = 0) in vec4 pos;
layout(location = 3) in vec4 multitexcoord0;
out vec3 cubemap_coord;
uniform mat4 osg_ModelViewProjectionMatrix;
uniform int fg_CubemapFace;
void main()
{
gl_Position = osg_ModelViewProjectionMatrix * pos;
vec2 texcoord = multitexcoord0.xy * 2.0 - 1.0;
// Map the quad texture coordinates to a direction vector to sample
// the cubemap. This assumes that we are using the weird left-handed
// orientations given by the OpenGL spec.
// See https://www.khronos.org/opengl/wiki/Cubemap_Texture#Upload_and_orientation
switch(fg_CubemapFace) {
case 0: // +X
cubemap_coord = vec3(1.0, -texcoord.y, -texcoord.x);
break;
case 1: // -X
cubemap_coord = vec3(-1.0, -texcoord.y, texcoord.x);
break;
case 2: // +Y
cubemap_coord = vec3(texcoord.x, 1.0, texcoord.y);
break;
case 3: // -Y
cubemap_coord = vec3(texcoord.x, -1.0, -texcoord.y);
break;
case 4: // +Z
cubemap_coord = vec3(texcoord.x, -texcoord.y, 1.0);
break;
case 5: // -Z
cubemap_coord = vec3(-texcoord.x, -texcoord.y, -1.0);
break;
}
}