Ignore:
Timestamp:
06/29/13 20:32:29 (12 years ago)
Author:
epyon
Message:
  • program - set_opt_uniform added
  • example extended to feature per-pixel lighting, self-illumination mapping, specular mapping and dual custom colors mapping
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/objload_test/obj.frag

    r137 r139  
    11#version 120
    2 varying vec2 f_texcoord;
    3 varying float f_diffuse_value;
    4 uniform sampler2D tex;
     2
     3uniform sampler2D diffuse;
     4uniform sampler2D specular;
     5uniform vec4 light_diffuse;
     6uniform vec4 light_specular;
     7uniform vec3 custom_color_1;
     8uniform vec3 custom_color_2;
     9
     10varying vec2 v_texcoord;
     11varying vec3 v_normal;
     12varying vec3 v_light_vector;
     13varying vec3 v_view_vector;
    514 
    615void main(void) {
    7         gl_FragColor = vec4( texture2D( tex, f_texcoord ).rgb * f_diffuse_value, 1.0 );
     16        vec3 nnormal         = normalize( v_normal );
     17        vec3 nlight_vector   = normalize( v_light_vector );
     18        vec3 nview_vector    = normalize( v_view_vector );
     19        vec3 nreflect_vector = reflect( -nlight_vector, nnormal );
     20
     21        float specular_value = clamp( dot( nreflect_vector, nview_vector ), 0.0, 1.0 );
     22        specular_value       = pow( specular_value, 6.0 );
     23        float diffuse_value  = max( dot( nlight_vector, nnormal ), 0.0 );
     24
     25        vec3 diff_texel      = vec3( texture2D( diffuse, v_texcoord ) );       
     26        vec4 spec_texel      = texture2D( specular, v_texcoord );
     27       
     28        float specular_amount = spec_texel.x;
     29        float diffuse_amount  = 1.0 - specular_amount;
     30
     31        vec3 custom_color     = (custom_color_1 * (1.0-spec_texel.z) + custom_color_2 * (1.0-spec_texel.a))*0.4;
     32
     33        float final_specular = specular_amount * specular_value;
     34        float final_diffuse  = diffuse_amount * diffuse_value;
     35
     36        vec3 self_ilum_color = spec_texel.y * diff_texel;
     37        vec3 diffuse_color   = light_diffuse.xyz * final_diffuse * clamp( diff_texel + custom_color, 0.0, 1.0 );
     38        vec3 specular_color  = light_specular.xyz * final_specular;
     39
     40        gl_FragColor = vec4( max( self_ilum_color, diffuse_color + specular_color), 1.0 );
    841}
Note: See TracChangeset for help on using the changeset viewer.