2013-12-29 13:23:36 -05:00
|
|
|
#version 130
|
2013-12-31 20:11:44 -05:00
|
|
|
uniform mat4 ProjectionMatrix;
|
|
|
|
uniform mat4 ViewMatrix;
|
2014-01-07 16:06:06 -05:00
|
|
|
uniform float track_x;
|
|
|
|
uniform float track_z;
|
|
|
|
uniform float track_x_len;
|
|
|
|
uniform float track_z_len;
|
|
|
|
uniform samplerBuffer heightmap;
|
|
|
|
uniform bool hasHeightMap;
|
2013-12-31 12:25:10 -05:00
|
|
|
|
2013-12-31 15:39:00 -05:00
|
|
|
in vec2 quadcorner;
|
|
|
|
in vec2 texcoord;
|
2013-12-29 14:24:19 -05:00
|
|
|
in vec3 position;
|
2013-12-31 12:25:10 -05:00
|
|
|
in float lifetime;
|
2013-12-31 20:11:44 -05:00
|
|
|
in float size;
|
2013-12-31 12:25:10 -05:00
|
|
|
|
|
|
|
out float lf;
|
2013-12-31 15:39:00 -05:00
|
|
|
out vec2 tc;
|
2013-12-29 13:23:36 -05:00
|
|
|
|
|
|
|
void main(void)
|
|
|
|
{
|
2013-12-31 15:39:00 -05:00
|
|
|
tc = texcoord;
|
2013-12-31 12:25:10 -05:00
|
|
|
lf = lifetime;
|
2014-01-07 16:06:06 -05:00
|
|
|
vec3 newposition = position;
|
|
|
|
|
|
|
|
float i_as_float = clamp(256. * (position.x - track_x) / track_x_len, 0., 255.);
|
|
|
|
float j_as_float = clamp(256. * (position.z - track_z) / track_z_len, 0., 255.);
|
|
|
|
int i = int(i_as_float);
|
|
|
|
int j = int(j_as_float);
|
|
|
|
|
|
|
|
if (hasHeightMap) {
|
|
|
|
float h = position.y - texelFetch(heightmap, i * 256 + j).r;
|
|
|
|
newposition.y = (h > 0.)? position.y : position.y - h;
|
|
|
|
}
|
|
|
|
|
|
|
|
vec4 viewpos = ViewMatrix * vec4(newposition, 1.0);
|
2013-12-31 20:11:44 -05:00
|
|
|
viewpos += size * vec4(quadcorner, 0., 0.);
|
|
|
|
gl_Position = ProjectionMatrix * viewpos;
|
2013-12-29 13:23:36 -05:00
|
|
|
}
|