Skip to content
Snippets Groups Projects
dome.vs 1.04 KiB
Newer Older
  • Learn to ignore specific revisions
  • #version 110
    
    // uniform parameters
    float zoom = 1.0;
    float tilt = 45.0;
    
    
    const float pi_2 = 1.5707963267949;
    
    float Pzz = gl_ProjectionMatrix[2][2]; 
    float Pwz = gl_ProjectionMatrix[3][2]; 
    float nearclip = Pwz / (Pzz - 1.0);
    
    float aspect = gl_ProjectionMatrix[0][0] / gl_ProjectionMatrix[1][1];
    float xstretch = (aspect < 1.0) ? aspect : 1.0;
    float ystretch = (aspect > 1.0) ? 1.0/aspect : 1.0;
    
    float stilt = sin(radians(tilt));
    float ctilt = cos(radians(tilt));
    
    
    mat4 Ttilt = mat4( 1.0, 0.0,   0.0,    0.0,
    		   0.0,  ctilt, -stilt, 0.0,
    		   0.0,  stilt,  ctilt, 0.0,
    		   0.0, 0.0,   0.0,    1.0 );
    
    mat4 TtiltModelView = Ttilt * gl_ModelViewMatrix;
    
    
    void main() {
    
       vec4 p = TtiltModelView * gl_Vertex;
    
       float r = sqrt(p.x*p.x + p.y*p.y);
       float arc = atan( r / p.z );
       float w = (p.z < -nearclip && abs(arc) < pi_2) ? pi_2*zoom : -pi_2*zoom;
    
       float arc_r = arc / r;
    
       gl_Position = vec4( -xstretch * p.x * arc_r, -ystretch * p.y * arc_r, 0.5, w );
    
       gl_FrontColor = gl_Color;
       gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
    }