GRK-Projekt/grafika_projekt/shaders/bubble.vert

39 lines
1.1 KiB
GLSL
Raw Normal View History

2022-01-02 01:26:44 +01:00
#version 430 compatibility
2022-01-01 12:21:15 +01:00
layout(location = 0) in vec3 vertexPosition;
layout(location = 1) in vec3 vertexNormal;
2021-12-30 12:14:47 +01:00
2022-01-01 12:21:15 +01:00
out vec3 interpNormal;
out vec3 fragPos;
2022-01-02 01:26:44 +01:00
out vec3 TexCoords;
2022-01-02 02:22:53 +01:00
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));
2021-12-30 12:14:47 +01:00
2022-01-01 12:21:15 +01:00
uniform mat4 modelMatrix;
uniform mat4 modelViewProjectionMatrix;
2022-01-02 01:26:44 +01:00
layout (binding = 0) uniform samplerCube tex_map;
2021-12-30 12:14:47 +01:00
void main()
{
2022-01-02 02:22:53 +01:00
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);
2022-01-02 01:26:44 +01:00
interpNormal = mat3(transpose(inverse(modelMatrix))) * vertexNormal;
fragPos = (modelMatrix * vec4(vertexPosition, 1.0)).xyz;
2022-01-01 12:35:51 +01:00
gl_Position = modelViewProjectionMatrix * vec4(vertexPosition, 1.0);
2022-01-02 01:26:44 +01:00
2022-01-01 12:21:15 +01:00
}