1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #define INIT_ARRAY_2(type, name, v0, v1) type name[2] = {v0, v1} #define INIT_ARRAY_4(type, name, v0, v1, v2, v3) type name[4] = {v0, v1, v2, v3} #define INIT_ARRAY_8(type, name, v0, v1, v2, v3, v4, v5, v6, v7) \ type name[8] = {v0, v1, v2, v3, v4, v5, v6, v7}
#define LIGHT_SPOT_FACTOR(lightDir, spotDir, spotAngle) \ pow(max(dot(-lightDir, spotDir), 0.0), spotAngle) #define LIGHT_SHADOW_FACTOR(shadowCoord) texture(shadowMap, shadowCoord.xy).r > shadowCoord.z ? 1.0 : 0.0
#define CALCULATE_SPOT_LIGHT(lightPos, lightDir, lightColor, lightRange, spotDir, spotAngle, \ worldPos, normal, shadowCoord) \ { \ vec3 toLight = lightPos - worldPos; \ float distance = length(toLight); \ vec3 lightDirection = toLight / distance; \ float attenuation = LIGHT_ATTENUATION(distance, lightRange); \ float spotFactor = LIGHT_SPOT_FACTOR(lightDirection, spotDir, spotAngle); \ float shadowFactor = LIGHT_SHADOW_FACTOR(shadowCoord); \ float NdotL = max(dot(normal, lightDirection), 0.0); \ return lightColor * attenuation * spotFactor * shadowFactor * NdotL; \ }
|