#version 120 attribute vec3 pos; attribute vec2 tex; uniform float theta1; uniform float theta2; vec3 rotate(vec3 v) { float ct1 = cos(theta1); float st1 = sin(theta1); float ct2 = cos(theta2); float st2 = sin(theta2); float x0 = v.x; float y0 = v.y; float z0 = v.z; float x1 = x0; float y1 = y0 * ct1 - z0 * st1; float z1 = y0 * st1 + z0 * ct1; float x2 = x1 * ct2 - z1 * st2; float y2 = y1; float z2 = x1 * st2 + z1 * ct2; return vec3(x2 * 0.2, y2 * 0.2, z2 * 0.2 + 0.5); } void main() { vec3 rpos = rotate(pos); gl_Position = vec4(rpos.xy, -rpos.z * rpos.z, rpos.z); gl_TexCoord[0] = vec4(tex, 0, 0); }