123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- varying vec3 frontLighting;
- varying vec3 backLighting;
- varying vec3 frontSpecular;
- varying vec3 backSpecular;
- varying vec3 eyePos;
- varying vec2 texCoord;
-
- uniform vec3 ambientColor;
- uniform float emission;
- uniform sampler2D diffuse1;
- uniform vec2 scale1;
-
- uniform float mistEnable;
- uniform float mistStart;
- uniform float mistDistance;
- uniform float mistIntensity;
- uniform float mistType;
- uniform vec3 mistColor;
-
- // ########################################Functions########################################
-
- float linearrgb_to_srgb(float c)
- {
- if(c < 0.0031308)
- return (c < 0.0) ? 0.0: c * 12.92;
- else
- return 1.055 * pow(c, 1.0/2.4) - 0.055;
- }
-
- float srgb_to_linearrgb(float c)
- {
- if(c < 0.04045)
- return (c < 0.0) ? 0.0: c * (1.0 / 12.92);
- else
- return pow((c + 0.055)*(1.0/1.055), 2.4);
- }
-
- vec3 linearrgb_to_srgb(vec3 col_from)
- {
- vec3 col_to;
- col_to.r = linearrgb_to_srgb(col_from.r);
- col_to.g = linearrgb_to_srgb(col_from.g);
- col_to.b = linearrgb_to_srgb(col_from.b);
-
- return col_to;
- }
-
- vec3 srgb_to_linearrgb(vec3 col_from)
- {
- vec3 col_to;
- col_to.r = srgb_to_linearrgb(col_from.r);
- col_to.g = srgb_to_linearrgb(col_from.g);
- col_to.b = srgb_to_linearrgb(col_from.b);
-
- return col_to;
- }
-
- vec3 shade_mist_blend(vec3 co, float enable, float miststa, float mistdist, float misttype, float intensity, vec3 col1, vec3 col2)
- {
- float mist = 0.0;
- if(enable == 1.0)
- {
- float fac, zcor;
-
- zcor = (gl_ProjectionMatrix[3][3] == 0.0)? length(co): -co[2];
-
- fac = clamp((zcor - miststa) / mistdist, 0.0, 1.0);
- if(misttype == 0.0) fac *= fac;
- else if(misttype == 1.0);
- else fac = sqrt(fac);
-
- mist = 1.0 - (1.0 - fac) * (1.0 - intensity);
- }
-
- float mixFac = clamp(mist, 0.0, 1.0);
- vec3 result = mix(col1, col2, mixFac);
-
- return result;
- }
-
- // ########################################Main-Function########################################
-
- void main()
- {
- vec2 ofs = (1.0 - scale1) / 2.0;
- vec4 dif1 = texture2D(diffuse1, texCoord*scale1+ofs);
- dif1.rgb = srgb_to_linearrgb(dif1.rgb);
- vec4 color = dif1;
-
- if (gl_FrontFacing)
- {
- color.rgb = (emission * dif1.rgb) + ambientColor + (frontLighting * dif1.rgb) + frontSpecular;
- }
- else
- {
- color.rgb = (emission * dif1.rgb) + ambientColor + (backLighting * dif1.rgb) + backSpecular;
- }
- color.rgb = shade_mist_blend(eyePos, mistEnable, mistStart, mistDistance, mistType, mistIntensity, color.rgb, mistColor);
-
- color.rgb = linearrgb_to_srgb(color.rgb);
- gl_FragColor = color;
- }
|