Shaders/shade3D.frag

Sat, 08 Mar 2014 13:55:46 +0200

author
larukedi
date
Sat, 08 Mar 2014 13:55:46 +0200
changeset 401
85c7261e590a
parent 338
096d3af2ccb2
permissions
-rw-r--r--

added LICENSE and README.md files

#version 330

uniform sampler2D diffuse_tex;
uniform sampler2D normal_tex;
uniform sampler2D depth_tex;

uniform mat3 world_to_view; // for transforming normals

struct PointLight {
	vec3 intensity;
	vec3 position;
};

uniform PointLight point_light;
uniform vec3 ambient;

smooth in vec3 position;
smooth in vec2 texcoord;

out vec4 output_color;

vec3 ShadePointLight(PointLight point_light, vec3 position, vec3 normal, vec3 diffuse)
{
	float	dist		= distance(point_light.position, position);
	vec3	light		= normalize(point_light.position - position);
	float	NdotL		= clamp(dot(light, normal), 0.0f, 1.0f);
	float	attenuation = 1.0f / (1.0f + dist * dist);

	return point_light.intensity * diffuse * NdotL * attenuation;
	//return vec3(position.z * 0.01);
	//return diffuse;
}

void main()
{
    vec4 diffuse	= texture(diffuse_tex, texcoord);
	vec3 normal		= texture(normal_tex, texcoord).xyz;
	float depth		= texture(depth_tex, texcoord).x;
	vec3 pos		= position; pos.z += depth;
	vec3 norm		= world_to_view * normal;

	output_color = vec4(ShadePointLight(point_light, pos, norm, diffuse.xyz) + ambient * diffuse.xyz, diffuse.a);
	//output_color = vec4(0.0f, 1.0f, 0.0f, 0.5f);
}

mercurial