|
| 1 | +#version 330 core |
| 2 | + |
| 3 | +layout (location = 0) in vec3 a_pos; |
| 4 | +layout (location = 1) in vec2 a_texcoord; |
| 5 | +layout (location = 3) in float a_ao; |
| 6 | +layout (location = 2) in uint a_tile; |
| 7 | + |
| 8 | +out vec2 v_texcoord; |
| 9 | +out float v_ao; |
| 10 | +flat out uint v_tile; |
| 11 | +out float v_fog_amount; |
| 12 | + |
| 13 | +uniform mat4 mvp_matrix; |
| 14 | +uniform vec3 cam_pos; |
| 15 | +uniform float fog_dist; |
| 16 | + |
| 17 | +uniform float time; |
| 18 | + |
| 19 | +#define PI 3.1415926538 |
| 20 | + |
| 21 | +float map(float value, float min1, float max1, float min2, float max2) |
| 22 | +{ |
| 23 | + return min2 + (value - min1) * (max2 - min2) / (max1 - min1); |
| 24 | +} |
| 25 | + |
| 26 | +void main() |
| 27 | +{ |
| 28 | + gl_Position = vec4(a_pos, 1.0); |
| 29 | + v_ao = a_ao; |
| 30 | + v_tile = a_tile; |
| 31 | + v_texcoord = a_texcoord; |
| 32 | + |
| 33 | + float dist_to_cam = distance(cam_pos.xz, a_pos.xz); |
| 34 | + float dist_x = distance(cam_pos.x, a_pos.x); |
| 35 | + float dist_y = distance(cam_pos.y, a_pos.y); |
| 36 | + v_fog_amount = 0.001 * pow(clamp(dist_to_cam / fog_dist, 0.0, 1.0), 2.0); |
| 37 | + |
| 38 | + gl_Position.y += 25 * sin(dist_to_cam * sin(time * 0.075) * 0.5) * min(dist_to_cam / 100, 1); |
| 39 | + //gl_Position.y += 145 * sin(dist_to_cam * 0.025) * min(dist_to_cam / 100, 1) * sin(time * 0.7); |
| 40 | + float x = gl_Position.x; |
| 41 | + float y = gl_Position.y; |
| 42 | + float om = sin(dist_to_cam * sin(time * 0.1) * 0.1) * sin(time * 0.75); |
| 43 | + om *= 0.25; |
| 44 | + om *= min(dist_to_cam / 50, 1); |
| 45 | + gl_Position.x = x * cos(om) - y * sin(om); |
| 46 | + gl_Position.y = x * sin(om) + y * cos(om); |
| 47 | + |
| 48 | + //gl_Position.y += 0.05 * dist_to_cam * dist_to_cam; |
| 49 | + //if (dist_to_cam > 2) |
| 50 | + // gl_Position.y += 5; |
| 51 | + |
| 52 | + //gl_Position.x = cam_pos.x + 10 * (sin(dist_x / 10 + 3.1415 / 2) - 1); |
| 53 | + |
| 54 | + // Huge cylinder! |
| 55 | + //float r = 10; |
| 56 | + //gl_Position.x = cam_pos.x + r * sin(dist_x / r) * sign(a_pos.x - cam_pos.x); |
| 57 | + //gl_Position.y += (r - dist_y / 2) * (sin(dist_x / r - PI / 2) + 1); |
| 58 | + |
| 59 | + gl_Position = mvp_matrix * gl_Position; |
| 60 | +} |
0 commit comments