提交 c2903521 编写于 作者: B Ben Houston

simplify light factories.

上级 8c8f538f
......@@ -10,11 +10,14 @@ uniform vec3 ambientLightColor;
uniform DirectionalLight directionalLights[ MAX_DIR_LIGHTS ];
void getDirectionalDirectLight( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {
IncidentLight getDirectionalDirectLight( const in DirectionalLight directionalLight, const in GeometricContext geometry ) {
IncidentLight directLight;
directLight.color = directionalLight.color;
directLight.direction = directionalLight.direction;
return directLight;
}
#endif
......@@ -31,8 +34,10 @@ uniform vec3 ambientLightColor;
uniform PointLight pointLights[ MAX_POINT_LIGHTS ];
void getPointDirectLight( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {
IncidentLight getPointDirectLight( const in PointLight pointLight, const in GeometricContext geometry ) {
IncidentLight directLight;
vec3 lightPosition = pointLight.position;
vec3 lVector = lightPosition - geometry.position;
......@@ -41,6 +46,7 @@ uniform vec3 ambientLightColor;
directLight.color = pointLight.color;
directLight.color *= calcLightAttenuation( length( lVector ), pointLight.distance, pointLight.decay );
return directLight;
}
#endif
......@@ -60,8 +66,10 @@ uniform vec3 ambientLightColor;
uniform SpotLight spotLights[ MAX_SPOT_LIGHTS ];
void getSpotDirectLight( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {
IncidentLight getSpotDirectLight( const in SpotLight spotLight, const in GeometricContext geometry ) {
IncidentLight directLight;
vec3 lightPosition = spotLight.position;
vec3 lVector = lightPosition - geometry.position;
......@@ -73,6 +81,7 @@ uniform vec3 ambientLightColor;
directLight.color = spotLight.color;
directLight.color *= ( spotEffect * calcLightAttenuation( length( lVector ), spotLight.distance, spotLight.decay ) );
return directLight;
}
#endif
......@@ -88,14 +97,17 @@ uniform vec3 ambientLightColor;
uniform HemisphereLight hemisphereLights[ MAX_HEMI_LIGHTS ];
void getHemisphereIndirectLight( const in HemisphereLight hemiLight, const in GeometricContext geometry, out IncidentLight indirectLight ) {
IncidentLight getHemisphereIndirectLight( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {
IncidentLight directLight;
float dotNL = dot( geometry.normal, hemiLight.direction );
float hemiDiffuseWeight = 0.5 * dotNL + 0.5;
indirectLight.color = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );
indirectLight.direction = geometry.normal;
return indirectLight;
}
#endif
......@@ -10,9 +10,7 @@ ReflectedLight backReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );
for ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {
IncidentLight directLight;
getPointDirectLight( pointLights[ i ], geometry, directLight );
IncidentLight directLight = getPointDirectLight( pointLights[ i ], geometry );
BRDF_Lambert( directLight, geometry, diffuse, frontReflectedLight );
......@@ -30,9 +28,7 @@ ReflectedLight backReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );
for ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {
IncidentLight directLight;
getSpotDirectLight( spotLights[ i ], geometry, directLight );
IncidentLight directLight = getSpotDirectLight( spotLights[ i ], geometry );
BRDF_Lambert( directLight, geometry, diffuse, frontReflectedLight );
......@@ -50,9 +46,7 @@ ReflectedLight backReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );
for ( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {
IncidentLight directLight;
getDirectionalDirectLight( directionalLights[ i ], geometry, directLight );
IncidentLight directLight = getDirectionalDirectLight( directionalLights[ i ], geometry );
BRDF_Lambert( directLight, geometry, diffuse, frontReflectedLight );
......@@ -70,9 +64,7 @@ ReflectedLight backReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );
for ( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {
IncidentLight indirectLight;
getHemisphereIndirectLight( hemisphereLights[ i ], geometry, indirectLight );
IncidentLight indirectLight = getHemisphereIndirectLight( hemisphereLights[ i ], geometry );
BRDF_Lambert( indirectLight, geometry, diffuse, frontReflectedLight );
......
......@@ -25,9 +25,7 @@ ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 )
for ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {
IncidentLight directLight;
getPointDirectLight( pointLights[ i ], geometry, directLight );
IncidentLight directLight = getPointDirectLight( pointLights[ i ], geometry );
BRDF_Lambert( directLight, geometry, diffuse, directReflectedLight );
//BRDF_OrenNayar( directLight, geometry, diffuse, 0.5, directReflectedLight );
......@@ -42,9 +40,7 @@ ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 )
for ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {
IncidentLight directLight;
getSpotDirectLight( spotLights[ i ], geometry, directLight );
IncidentLight directLight = getSpotDirectLight( spotLights[ i ], geometry );
BRDF_Lambert( directLight, geometry, diffuse, directReflectedLight );
//BRDF_OrenNayar( directLight, geometry, diffuse, 0.5, directReflectedLight );
......@@ -59,9 +55,7 @@ ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 )
for( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {
IncidentLight directLight;
getDirectionalDirectLight( directionalLights[ i ], geometry, directLight );
IncidentLight directLight = getDirectionalDirectLight( directionalLights[ i ], geometry );
BRDF_Lambert( directLight, geometry, diffuse, directReflectedLight );
//BRDF_OrenNayar( directLight, geometry, diffuse, 0.5, directReflectedLight );
......@@ -76,9 +70,7 @@ ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 )
for( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {
IncidentLight indirectLight;
getHemisphereIndirectLight( hemisphereLights[ i ], geometry, indirectLight );
IncidentLight indirectLight = getHemisphereIndirectLight( hemisphereLights[ i ], geometry );
BRDF_Lambert( indirectLight, geometry, diffuse, indirectReflectedLight );
//BRDF_OrenNayar( indirectLight, geometry, diffuse, 0.5, indirectReflectedLight );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册