CSC3224_Computer_Games_Development / GameEngine / Engine_Resources / Shaders / BumpFragment.glsl
BumpFragment.glsl
Raw
#version  150  core

uniform  sampler2D  diffuseTex;
uniform sampler2D bumpTex;

uniform  vec3    cameraPos;
uniform  vec4    lightColour;
uniform  vec3    lightPos;
uniform  float   lightRadius;

 in  Vertex {
     vec3  colour;
     vec2  texCoord;
     vec3  normal;
	 vec3  tangent;   
     vec3  binormal; 
     vec3  worldPos;
 } IN;

 out  vec4  fragColour;

void  main(void)    {
     vec4  diffuse       = texture(diffuseTex , IN.texCoord);
	 
	 mat3  TBN           = mat3(IN.tangent , IN.binormal , IN.normal );

     vec3  normal        = normalize(TBN * (texture(bumpTex , IN.texCoord ).rgb * 2.0 - 1.0));
	 

     vec3   incident     = normalize(lightPos  - IN.worldPos);
     float  lambert      = max(0.0, dot(incident , IN.normal));

	 float  dist          = length(lightPos  - IN.worldPos);
     float  atten         = 1.0 - clamp(dist / lightRadius , 0.0,  1.0);

	 vec3  viewDir       = normalize(cameraPos  - IN.worldPos);
     vec3  halfDir       = normalize(incident + viewDir);

     float  rFactor      = max(0.0, dot(halfDir , IN.normal));
     float  sFactor      = pow(rFactor , 50.0);

     vec3 colour         =   (diffuse.rgb * lightColour.rgb);
     colour           += (lightColour.rgb * sFactor) * 0.33;
     fragColour       =   vec4(colour * atten * lambert , diffuse.a);
     fragColour.rgb   += (diffuse.rgb * lightColour.rgb) * 0.1;
 }