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(¶ms->color);
miColor *transparency = mi_eval_color(¶ms->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