CVS: data/Shaders reflect.frag, NONE, 1.1 reflect.vert, NONE, 1.1

Vivian Meazza <[email protected]>
Newsgroups gmane.games.flightgear.cvc
Message-ID <[email protected]>
Update of /var/cvs/FlightGear-0.9/data/Shaders
In directory baron.flightgear.org:/tmp/cvs-serv9496

Added Files:
	reflect.frag reflect.vert 
Log Message:
A simple reflection effect - needs this patch ftp://ftp.abbeytheatre2.org.uk/fgfs/Shader/Reflect/cube-map.patch which will be included in Simgear soon (hopefully).

--- NEW FILE "reflect.frag" ---
#version 120

varying vec4  ecPosition;
varying vec3  VNormal;
varying vec3  Normal;
varying vec4  constantColor;
varying vec3  vViewVec;
varying vec3  reflVec;

varying vec3 Diffuse;
varying vec3 lightDir, halfVector;
varying float alpha, fogCoord;

uniform samplerCube Environment;
uniform sampler2D Rainbow;
uniform sampler2D BaseTex;
uniform sampler2D Fresnel;

uniform float transparency;
uniform float rainbowiness;
uniform float fresneliness;
uniform float correction;


void main (void)
{
    if (!gl_FrontFacing) discard;

    vec3 n, halfV;
    float NdotL, NdotHV;
    vec4 color = constantColor;
    vec4 specular = vec4(0.0);
    n = VNormal;
    NdotL = max(0.0, dot(n, lightDir));

    //calculate the specular light
    if (NdotL > 0.0) {
        color += vec4(Diffuse, 1.0) * NdotL;
        halfV = normalize(halfVector);
        NdotHV = max(dot(n, halfV), 0.0);
        if (gl_FrontMaterial.shininess > 0.0)
            specular.rgb = (gl_FrontMaterial.specular.rgb
            * gl_LightSource[0].specular.rgb
            * pow(NdotHV, gl_FrontMaterial.shininess));
    }

    color.a = alpha;
    color = clamp(color, 0.0, 1.0);
    vec4 texel = texture2D(BaseTex, gl_TexCoord[0].st);
    vec4 texelcolor = color * texel + specular;

    // calculate the fog factor
    float fogCoord = ecPosition.z;
    const float LOG2 = 1.442695;
    float fogFactor = exp2(-gl_Fog.density * gl_Fog.density * fogCoord * fogCoord * LOG2);
    fogFactor = clamp(fogFactor, 0.0, 1.0);

    if(gl_Fog.density == 1.0)
        fogFactor=1.0;

    vec3 normal = normalize(VNormal);
    vec3 viewVec = normalize(vViewVec);

    // Map a rainbowish color
    float v = dot(viewVec, normal);
    vec4 rainbow = texture2D(Rainbow, vec2(v, 0.0));

    // Map a fresnel effect
    vec4 fresnel = texture2D(Fresnel, vec2(v, 0.0));

    //map the refection of the environment
    vec4 reflection = textureCube(Environment, reflVec);

    //add fringing fresnel and rainbow effects and modulate by transparency
    vec4 reflcolor = mix(reflection, rainbow, rainbowiness * v);
    vec4 reflfrescolor = mix(reflcolor, fresnel, fresneliness * v);
    vec4 raincolor = vec4(reflfrescolor.rgb, 1.0) * transparency;
    vec4 mixedcolor = mix(texel, raincolor, transparency);

    //the final reflection
    vec4 ambient_correction = mix(gl_LightSource[0].ambient, vec4(1.0, 1.0, 0.9, 1.0), 0.5) * correction;
    vec4 reflColor = color * mixedcolor + specular + ambient_correction ;
    reflColor = clamp(reflColor, 0.0, 1.0);

    gl_FragColor = mix(gl_Fog.color, reflColor, fogFactor);
}

--- NEW FILE "reflect.vert" ---
varying vec4  ecPosition;
varying vec3  VNormal;
varying vec3  Normal;
varying vec4  constantColor;
varying vec3 vViewVec;
varying vec3 reflVec;

varying vec3 Diffuse;
varying vec3 normal, lightDir, halfVector;
varying float alpha, fogCoord;

uniform mat4 osg_ViewMatrixInverse;

//attribute vec3 tangent, binormal, normal;

void main(void)
{
    ecPosition = gl_ModelViewMatrix * gl_Vertex;
    vec3 ecPosition3 = vec3(gl_ModelViewMatrix * gl_Vertex) / ecPosition.w;

    vec3 t = normalize(cross(gl_Normal, vec3(1.0,0.0,0.0)));
    vec3 b = normalize(cross(gl_Normal,t));
    vec3 n = normalize(gl_Normal);

    VNormal = normalize(gl_NormalMatrix * gl_Normal);
    Normal = normalize(gl_Normal);

    lightDir = normalize(vec3(gl_LightSource[0].position));
    halfVector = normalize(gl_LightSource[0].halfVector.xyz);
    Diffuse = gl_Color * gl_LightSource[0].diffuse;
    //Diffuse= gl_Color.rgb * max(0.0, dot(normalize(VNormal), gl_LightSource[0].position.xyz));
    // Super hack: if diffuse material alpha is less than 1, assume a
    // transparency animation is at work
    if (gl_FrontMaterial.diffuse.a < 1.0)
        alpha = gl_FrontMaterial.diffuse.a;
    else
        alpha = gl_Color.a;

    fogCoord = abs(ecPosition3.z);

    // Vertex in eye coordinates
    vec3 vertVec = ecPosition.xyz;

    vViewVec.x = dot(t, vertVec);
    vViewVec.y = dot(b, vertVec);
    vViewVec.z = dot(n, vertVec);

    // calculate the reflection vector
    vec4 reflect_eye = vec4(reflect(vertVec, VNormal), 0.0);
    reflVec = normalize(gl_ModelViewMatrixInverse * reflect_eye);

    gl_FrontColor = gl_Color;
    constantColor = gl_FrontMaterial.emission
        + gl_Color * (gl_LightModel.ambient + gl_LightSource[0].ambient);

    gl_Position = ftransform();
    gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
}

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev

_______________________________________________
Flightgear-cvslogs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/flightgear-cvslogs
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.