summaryrefslogtreecommitdiff
path: root/advanced_lighting/6.hdr/shaders/blinn.frag
blob: 5dca1f783b856c8e44fb4a3c5fa6a862436e7d2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#version 330 core

in VS_OUT {
	vec3		fpos;
	vec3		fn;
	vec2		texc;
} fsin;

out vec4		fcolor;

uniform sampler2D	diftex;

const int		lmax = 30;

uniform int		lcount;
uniform	vec3		lpos[lmax];
uniform vec3		vpos;

void main(void)
{
	vec3	l, v, n, difcolor, lcolor, ambient, halfdir, result;
	float	diff, spec, specf, dist, attenuation;
	int	i;

	n = normalize(fsin.fn);
	v = normalize(vpos-fsin.fpos);

	ambient = vec3(0.001);

	difcolor = vec3(texture(diftex, fsin.texc));

	/* lcolor = vec3(0.3, 0.0, 0.1); */
	lcolor = vec3(1.0);

	specf = 0.2;

	result = vec3(0.0);

	for (i = 0; i < lcount; i++) {
		l = normalize(lpos[i]-fsin.fpos);
		halfdir = normalize(l+v);

		diff = max(dot(n, l), 0.0);

		spec = pow(max(dot(n, halfdir), 0.0), 16.0)*specf;

		dist = length(lpos[i]-fsin.fpos);
		attenuation = 1.0/dist;

		result += (diff+spec)*difcolor*lcolor*attenuation;
	}

	fcolor = vec4(ambient+result, 1.0);
}