-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlights.js
More file actions
111 lines (85 loc) · 1.98 KB
/
lights.js
File metadata and controls
111 lines (85 loc) · 1.98 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
class BaseLight extends GameComponent {
constructor(intensity) {
super();
this._intensity = intensity;
}
get intensity() {
return this._intensity;
}
set intensity(inten) {
this._intensity = inten;
}
}
class Attenuation {
constructor(exponent, linear, constant) {
this._exponent = exponent;
this._linear = linear;
this._constant = constant;
}
get exponent() {
return this._exponent;
}
set exponent(expo) {
this._exponent = expo;
}
get linear() {
return this._linear;
}
set linear(lin) {
this._linear = lin;
}
get constant() {
return this._constant;
}
set constant(con) {
this._constant = con;
}
}
class DirectionalLight extends BaseLight {
constructor(intensity, direction) {
super(intensity);
this._direction = direction;
}
get direction() {
return this._direction;
}
set direction(dir) {
this._direction = dir;
}
}
class PointLight extends BaseLight {
constructor(intensity, attenuation) {
super(intensity);
this._attenuation = attenuation;
var COLOR_DEPTH = 256;
var a = attenuation.exponent;
var b = attenuation.linear;
var c = attenuation.constant - COLOR_DEPTH * intensity;
this._range = (-b * Math.sqrt(b * b - 4 * a * c)/(2 * a));
}
get range() {
return this._range;
}
get attenuation() {
return this._attenuation;
}
}
class SpotLight extends PointLight {
constructor(intensity, attenuation, direction, cutoff) {
super(intensity, attenuation);
this._cutoff = cutoff;
this._direction = direction;
}
get direction() {
return this._direction;
}
set direction(dir) {
this._direction = dir;
}
get cutoff() {
return this._cutoff;
}
set cutoff(cut) {
this._cutoff = cut;
}
}