61 lines
1.5 KiB
GLSL
61 lines
1.5 KiB
GLSL
#version 400
|
|
|
|
in vec3 position;
|
|
in vec2 textureCoordinates;
|
|
in vec3 normal;
|
|
in vec3 tangent;
|
|
|
|
out vec2 pass_textureCoordinates;
|
|
out vec3 toLightVector[4];
|
|
out vec3 toCameraVector;
|
|
out float visibility;
|
|
out vec3 pass_tangent;
|
|
|
|
uniform mat4 transformationMatrix;
|
|
uniform mat4 projectionMatrix;
|
|
uniform mat4 viewMatrix;
|
|
uniform vec3 lightPositionEyeSpace[4];
|
|
|
|
uniform float numberOfRows;
|
|
uniform vec2 offset;
|
|
|
|
const float density = 0;
|
|
const float gradient = 5.0;
|
|
|
|
uniform vec4 plane;
|
|
|
|
void main(void){
|
|
|
|
|
|
vec4 worldPosition = transformationMatrix * vec4(position,1.0);
|
|
gl_ClipDistance[0] = dot(worldPosition, plane);
|
|
mat4 modelViewMatrix = viewMatrix * transformationMatrix;
|
|
vec4 positionRelativeToCam = modelViewMatrix * vec4(position,1.0);
|
|
gl_Position = projectionMatrix * positionRelativeToCam;
|
|
|
|
pass_textureCoordinates = (textureCoordinates);
|
|
|
|
vec3 surfaceNormal = (modelViewMatrix * vec4(normal,0.0)).xyz;
|
|
|
|
vec3 norm = normalize(surfaceNormal);
|
|
vec3 tang = normalize((modelViewMatrix * vec4(tangent, 0.0)).xyz);
|
|
vec3 bitang = normalize(cross(norm, tang));
|
|
|
|
mat3 toTangentSpace = mat3(
|
|
|
|
tang.x, bitang.x, norm.x,
|
|
tang.y, bitang.y, norm.y,
|
|
tang.z, bitang.z, norm.z
|
|
);
|
|
|
|
for(int i=0;i<4;i++){
|
|
toLightVector[i] = toTangentSpace * (lightPositionEyeSpace[i] - positionRelativeToCam.xyz);
|
|
}
|
|
toCameraVector = toTangentSpace * (-positionRelativeToCam.xyz);
|
|
|
|
float distance = length(positionRelativeToCam.xyz);
|
|
visibility = exp(-pow((distance*density),gradient));
|
|
visibility = clamp(visibility,0.0,1.0);
|
|
|
|
}
|