22
33const float zero = 0.00000001 ;
44
5- #define UnfoldParallelSingle(n) if (i == n){ \
6- color += CalculateParallelLight(eye, lightCollection.parallel[n], material);\
7- }
8- #define UnfoldParallel UnfoldParallelSingle(0 )\
9- UnfoldParallelSingle(1 )\
10- UnfoldParallelSingle(2 )\
11- UnfoldParallelSingle(3 )\
12- UnfoldParallelSingle(4 )
13- #define UnfoldPointSingle(n) if (i == n){ \
14- color += CalculatePointLight(eye, lightCollection.point[n], material);\
15- }
16- #define UnfoldPoint UnfoldPointSingle(0 )\
17- UnfoldPointSingle(1 )\
18- UnfoldPointSingle(2 )\
19- UnfoldPointSingle(3 )\
20- UnfoldPointSingle(4 )
21- #define UnfoldSpotSingle(n) if (i == n){ \
22- color += CalculateSpotLight(eye, lightCollection.spot[n], material);\
23- }
24- #define UnfoldSpot UnfoldSpotSingle(0 )\
25- UnfoldSpotSingle(1 )\
26- UnfoldSpotSingle(2 )\
27- UnfoldSpotSingle(3 )\
28- UnfoldSpotSingle(4 )
29-
30-
315struct Attenuation {
326 float range;
337 float constant;
@@ -66,9 +40,9 @@ struct LightCollectionTotal {
6640struct LightCollection {
6741 vec3 ambient;
6842 LightCollectionTotal total;
69- ParallelLight parallel[1 ];
70- PointLight point[1 ];
71- SpotLight spot[1 ];
43+ ParallelLight parallel[4 ];
44+ PointLight point[4 ];
45+ SpotLight spot[4 ];
7246};
7347
7448struct PureColorMaterial {
@@ -90,7 +64,7 @@ in vec3 vNormal;
9064
9165out vec4 fragColor;
9266
93- vec3 CalculatePointlLight (Eye eye, PointLight light, PureColorMaterial material) {
67+ vec3 CalculatePointLight (Eye eye, PointLight light, PureColorMaterial material) {
9468 vec3 lightDirection = normalize (light.position - vPosition);
9569 float diffuseFactor = max (dot (vNormal, lightDirection), 0.0 ) * light.intensity;
9670
@@ -146,16 +120,46 @@ vec3 CalculateSpotLight(Eye eye, SpotLight light, PureColorMaterial material) {
146120vec3 CalculateFragmentColor(Eye eye, LightCollection lightCollection, PureColorMaterial material) {
147121 vec3 color = lightCollection.ambient;
148122 for (int i = 0 ; i < lightCollection.total.parallel; i++ ) {
149- // UnfoldParallel
150- color += CalculateParallelLight(eye, lightCollection.parallel[i], material);
123+ if (i == 0 ){
124+ color += CalculateParallelLight(eye, lightCollection.parallel[0 ], material);
125+ }
126+ if (i == 1 ){
127+ color += CalculateParallelLight(eye, lightCollection.parallel[1 ], material);
128+ }
129+ if (i == 2 ){
130+ color += CalculateParallelLight(eye, lightCollection.parallel[2 ], material);
131+ }
132+ if (i == 3 ){
133+ color += CalculateParallelLight(eye, lightCollection.parallel[3 ], material);
134+ }
151135 }
152136 for (int i = 0 ; i < lightCollection.total.point; i++ ) {
153- // UnfoldPoint
154- color += CalculatePointlLight(eye, lightCollection.point[i], material);
137+ if (i == 0 ){
138+ color += CalculatePointLight(eye, lightCollection.point[0 ], material);
139+ }
140+ if (i == 1 ){
141+ color += CalculatePointLight(eye, lightCollection.point[1 ], material);
142+ }
143+ if (i == 2 ){
144+ color += CalculatePointLight(eye, lightCollection.point[2 ], material);
145+ }
146+ if (i == 3 ){
147+ color += CalculatePointLight(eye, lightCollection.point[3 ], material);
148+ }
155149 }
156150 for (int i = 0 ; i < lightCollection.total.spot; i++ ) {
157- // UnfoldSpot
158- color += CalculateSpotLight(eye, lightCollection.spot[i], material);
151+ if (i == 0 ){
152+ color += CalculateSpotLight(eye, lightCollection.spot[0 ], material);
153+ }
154+ if (i == 1 ){
155+ color += CalculateSpotLight(eye, lightCollection.spot[1 ], material);
156+ }
157+ if (i == 2 ){
158+ color += CalculateSpotLight(eye, lightCollection.spot[2 ], material);
159+ }
160+ if (i == 3 ){
161+ color += CalculateSpotLight(eye, lightCollection.spot[3 ], material);
162+ }
159163 }
160164 return color;
161165}
0 commit comments