38 lines
1.0 KiB
Plaintext
38 lines
1.0 KiB
Plaintext
#version 400 core
|
|
|
|
in vec3 position;
|
|
in vec2 textureCoords;
|
|
in vec3 normal;
|
|
|
|
out vec2 pass_textureCoordinates;
|
|
out vec3 surfaceNormal;
|
|
out vec3 toLightVector;
|
|
out vec3 toCameraVector;
|
|
// FOW: Fog Of War result calculation
|
|
out float visibility;
|
|
|
|
uniform mat4 transformationMatrix;
|
|
uniform mat4 projectionMatrix;
|
|
uniform mat4 viewMatrix;
|
|
uniform vec3 lightPosition;
|
|
|
|
const float density = 0.007;
|
|
const float gradient = 2.5;
|
|
|
|
void main(void) {
|
|
vec4 worldPosition = transformationMatrix * vec4(position, 1.0);
|
|
vec4 positionRelativeToCam = viewMatrix * worldPosition;
|
|
gl_Position = projectionMatrix * positionRelativeToCam;
|
|
pass_textureCoordinates = textureCoords;
|
|
|
|
surfaceNormal = (transformationMatrix * vec4(normal, 0.0)).xyz;
|
|
toLightVector = lightPosition - worldPosition.xyz;
|
|
toCameraVector = (inverse(viewMatrix) * vec4(0.0,0.0,0.0,1.0)).xyz - worldPosition.xyz;
|
|
|
|
float distance = length(positionRelativeToCam.xyz);
|
|
visibility = exp(-pow((distance*density),gradient));
|
|
visibility = clamp(visibility, 0.0, 1.0);
|
|
|
|
}
|
|
|