omicron/shaders/tblock_vertex.glsl

40 lines
1018 B
GLSL

#version 130
uniform mat4 matrix;
uniform vec3 camera;
uniform float fog_distance;
uniform int ortho;
attribute vec4 position;
attribute vec3 normal;
attribute vec4 uv;
varying vec2 fragment_uv;
varying float fragment_ao;
varying float fragment_light;
varying float fog_factor;
varying float fog_height;
varying float diffuse;
const float pi = 3.14159265;
const vec3 light_direction = normalize(vec3(-1.0, 1.0, -1.0));
void main() {
gl_Position = matrix * position;
fragment_uv = uv.xy;
fragment_ao = 0.3 + (1.0 - uv.z) * 0.7;
fragment_light = uv.w;
diffuse = min(0.6, dot(normal, light_direction));
if (bool(ortho)) {
fog_factor = 0.0;
fog_height = 0.0;
} else {
float camera_distance = distance(camera, vec3(position));
fog_factor = pow(clamp(camera_distance / fog_distance, 0.0, 1.0), 4.0);
float dy = position.y - camera.y;
float dx = distance(position.xz, camera.xz);
fog_height = (atan(dy, dx) + pi / 2) / pi;
}
}