X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=data%2Fr2c2%2Fsky.shader;h=529050e93f9fd50a68c2f073d0d17b4173ca4559;hb=a9bbf8d37a2f94a720897fe4f0ab06a016779c69;hp=66dd8ec0e9e308a2d4ec805443e4936e961175f5;hpb=78d36019ec11d62d6fd016fcbe19f566d11771ff;p=r2c2.git diff --git a/data/r2c2/sky.shader b/data/r2c2/sky.shader index 66dd8ec..529050e 100644 --- a/data/r2c2/sky.shader +++ b/data/r2c2/sky.shader @@ -2,7 +2,7 @@ vertex_shader " varying vec3 eye_look_dir; void main() { - vec4 eye_pos = vec4(mat3(gl_ModelViewMatrix)*gl_Vertex.xyz, 1); + vec4 eye_pos = vec4((gl_ModelViewMatrix*vec4(gl_Vertex.xyz, 0.0)).xyz, 1.0); gl_Position = gl_ProjectionMatrix*eye_pos; eye_look_dir = eye_pos.xyz; }"; @@ -13,6 +13,7 @@ fragment_shader " uniform float scatter_constant; uniform float sun_intensity; uniform float sun_size; + uniform bool srgb_output; varying vec3 eye_look_dir; float thickness(float c, float r) { @@ -24,14 +25,14 @@ fragment_shader " if(c<0.0031308) return 12.92*c; else - return (1.055)*pow(c, 1.0/2.4)-0.055; + return 1.055*pow(c, 1.0/2.4)-0.055; } void main() { vec3 n_eye_look_dir = normalize(eye_look_dir); vec3 n_eye_sun_dir = normalize(gl_LightSource[0].position.xyz); - if(dot(n_eye_look_dir, eye_sky_dir)>0) + if(dot(n_eye_look_dir, eye_sky_dir)>0.0) { float look_scale = thickness(dot(n_eye_look_dir, eye_sky_dir), 635.0); float sun_scale = thickness(dot(n_eye_sun_dir, eye_sky_dir), 635.0); @@ -47,7 +48,10 @@ fragment_shader " color = sun_intensity*scatter_strength*(exp(-scatter_factor*sun_scale)-exp(-scatter_factor*look_scale))/(1.0-sun_scale/look_scale); if(dot(n_eye_look_dir, n_eye_sun_dir)>cos(sun_size)) color += exp(-scatter_factor*look_scale)*sun_intensity; - gl_FragColor = vec4(srgb(color.r), srgb(color.g), srgb(color.b), 1.0); + if(srgb_output) + gl_FragColor = vec4(srgb(color.r), srgb(color.g), srgb(color.b), 1.0); + else + gl_FragColor = vec4(color, 1.0); } else gl_FragColor = vec4(vec3(0.0), 1.0);