36 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
uniform sampler2D uNormal;
 | 
						|
uniform sampler2D uSmoke;
 | 
						|
uniform float z;
 | 
						|
 | 
						|
void main(void)
 | 
						|
{
 | 
						|
	vec3 normal = 2.0 * texture2D (uNormal, gl_TexCoord[0].st).rgb - 1.0;
 | 
						|
 | 
						|
	
 | 
						|
	//Load only the Alpha from the smoke texture
 | 
						|
	vec4 diffuseMaterial = texture2D (uSmoke, gl_TexCoord[0].st);
 | 
						|
	diffuseMaterial.rgb = vec3(1);
 | 
						|
	
 | 
						|
	//Get Ambient light
 | 
						|
	vec4 ambientLight = gl_LightSource[1].ambient;
 | 
						|
	
 | 
						|
	//Calculate diffuse light from "sun"
 | 
						|
	vec3 diffuseNormal = normal;
 | 
						|
	diffuseNormal.b = diffuseNormal.b * 0.5;
 | 
						|
	diffuseNormal = normalize (gl_NormalMatrix * diffuseNormal);
 | 
						|
	vec4 diffuseLight = gl_LightSource[1].diffuse;
 | 
						|
	float diffuseFactor = max (dot (gl_LightSource[1].position.xyz, diffuseNormal), 0.0) ;
 | 
						|
	diffuseFactor = diffuseFactor * .6 + .4;
 | 
						|
	vec4 diffuseBump = vec4(diffuseFactor,diffuseFactor,diffuseFactor,1);
 | 
						|
	
 | 
						|
	
 | 
						|
	vec4 flameColor = gl_LightSource[2].diffuse;
 | 
						|
	float flameFactor =  max (dot (vec3(0,0,1), diffuseNormal), 0.0);
 | 
						|
	flameFactor = flameFactor * (1.0 - z / 1.0);
 | 
						|
	flameFactor = flameFactor * diffuseMaterial.a * gl_Color.a * 10.0;
 | 
						|
	flameFactor = clamp(flameFactor,0.0,1.0);
 | 
						|
	
 | 
						|
	vec4 light = diffuseLight * diffuseBump + ambientLight;
 | 
						|
	
 | 
						|
	gl_FragColor =	gl_Color * diffuseMaterial * light  + flameColor * flameFactor;
 | 
						|
} |