#version 430 compatibility layout(location = 0) in vec3 vertexPosition; layout(location = 1) in vec3 vertexNormal; out vec3 interpNormal; out vec3 fragPos; out vec3 TexCoords; out vec3 incident; out float v_fresnel; uniform vec3 viewPos; // Indices of refraction const float Air = 1.0; const float Glass = 4; //1.51714;//4 // Air to glass ratio of the indices of refraction (Eta) const float Eta = Air / Glass; // see http://en.wikipedia.org/wiki/Refractive_index Reflectivity const float R0 = ((Air - Glass) * (Air - Glass)) / ((Air + Glass) * (Air + Glass)); uniform mat4 modelMatrix; uniform mat4 modelViewProjectionMatrix; layout (binding = 0) uniform samplerCube tex_map; void main() { vec4 vertex = modelMatrix * vec4( vertexPosition, 1.0 ); vec4 camera = vec4( viewPos, 1.0 ); incident = normalize( vec3( vertex - camera ) ); v_fresnel = R0 + (1.0 - R0) * pow( (1.0 - dot( -incident, vertexNormal ) ), 5.0); interpNormal = mat3(transpose(inverse(modelMatrix))) * vertexNormal; fragPos = (modelMatrix * vec4(vertexPosition, 1.0)).xyz; gl_Position = modelViewProjectionMatrix * vec4(vertexPosition, 1.0); }