Shader shadow_color

Click on the filename to display or download the file.

shadow_color.mi
declare shader 
    color "shadow_color" ( 
        color "color" default 1 1 1, 
        color "transparency" default .5 .5 .5 ) 
    version 1 
    apply shadow 
end declare 

shadow_color.c
/*  
   This is an incorrect calculation of the shadow color -- you can't 
   just multiply the original light color by the transparency and 
   surface colors. 
*/ 
 
#include "shader.h" 
#include "miaux.h" 
 
DLLEXPORT 
int shadow_color_version(void) { return 1; } 
 
struct shadow_color { 
    miColor color; 
    miColor transparency; 
}; 
 
DLLEXPORT 
miBoolean shadow_color (  
    miColor *result, miState *state, struct shadow_color *params  ) 
{ 
    miColor *color = mi_eval_color(&params->color); 
    miColor *transparency = mi_eval_color(&params->transparency); 
 
    result->r *= color->r * transparency->r; 
    result->g *= color->g * transparency->g; 
    result->b *= color->b * transparency->b; 
 
    return miaux_all_channels_equal(result, 0.0) ? miFALSE : miTRUE; 
} 

shadow_color_util.c
miBoolean miaux_all_channels_equal(miColor *c, miScalar v) 
{ 
    if (c->r == v && c->g == v && c->b == v && c->a == v) 
	return miTRUE; 
    else 
	return miFALSE; 
} 

22 April 2008 23:40:14