precision highp float; attribute vec3 land; attribute vec2 landnormal; uniform float rot; uniform float world_x; uniform float world_y; uniform mat4 MV; uniform mat4 P; varying vec2 worldxy; varying mat4 pre; varying vec2 norm; void main() { norm = landnormal; mat2 rotate = mat2( cos(rot), -sin(rot), sin(rot), cos(rot) ); worldxy = vec2(world_x, world_y); pre = P * MV; vec2 local = (land.xy - worldxy) * rotate; float z_scale = 0.5; // clamp so that everything becomes orthographic once we move away float xoff = clamp(land.z * local.x * z_scale, -0.5, 0.5); float yoff = clamp(land.z * local.y * z_scale, -0.5, 0.5); gl_Position = P * MV * vec4(local.xy - vec2(xoff, yoff), land.z, 1.0); }