10 |
float x, y; |
float x, y; |
11 |
int ind = 0, i, j; |
int ind = 0, i, j; |
12 |
|
|
13 |
|
enum { AMBIENT = 0, DIFFUSE, SPECULAR, SHADOW }; |
14 |
int type = params->getStringEnum("light", 0, "ambient", "diffuse", "specular", "shadow", 0); |
int type = params->getStringEnum("light", 0, "ambient", "diffuse", "specular", "shadow", 0); |
15 |
int power = (int)params->getFloat("power", 8); |
int power = (int)params->getFloat("power", 8); |
16 |
|
|
33 |
float alpha = d > .5 ? 0 : d > -.5 ? .5 - d : 1; |
float alpha = d > .5 ? 0 : d > -.5 ? .5 - d : 1; |
34 |
float dot; |
float dot; |
35 |
|
|
36 |
if (type == 3) { |
if (type == SHADOW) { |
37 |
float d = fabs(y) - r; |
float d = fabs(y) - r; |
38 |
alpha = .7 * (d < -.5 ? 1 : 1 - (d + .5) * (d + .5) * (d + .5) * (d + .5) * 16); |
alpha = .7 * (d < -.5 ? 1 : 1 - (d + .5) * (d + .5) * (d + .5) * (d + .5) * 16); |
39 |
dot = 0; |
dot = 0; |
41 |
|
|
42 |
alpha *= h; |
alpha *= h; |
43 |
|
|
44 |
if (type == 0) { |
if (type == AMBIENT) { |
45 |
dot = 1; |
dot = 1; |
46 |
} |
} |
47 |
else dot = f > 0 ? 1 / sqrt(dx * dx + dy * dy + 1) : 0; |
else dot = f > 0 ? 1 / sqrt(dx * dx + dy * dy + 1) : 0; |
48 |
|
|
49 |
if (type == 2) { |
if (type == SPECULAR) { |
50 |
for (int p = power; p >>= 1; ) |
for (int p = power; p >>= 1; ) |
51 |
dot *= dot; |
dot *= dot; |
52 |
} |
} |