Click on the filename to display or download the file.
fog.mi
declare shader
color "fog" (
scalar "full_fade_distance" default 10,
color "fog_color" default 1 1 1 )
version 1
apply volume
end declare
fog.c
#include "shader.h"
#include "miaux.h"
struct fog {
miScalar full_fade_distance;
miColor fog_color;
};
DLLEXPORT
int fog_version(void) { return 1; }
DLLEXPORT
miBoolean fog (
miColor *result, miState *state, struct fog *params )
{
miScalar full_fade_distance = *mi_eval_scalar(¶ms->full_fade_distance);
miColor *fog_color = mi_eval_color(¶ms->fog_color);
if (state->dist > full_fade_distance || state->dist == 0.0)
*result = *fog_color;
else
miaux_blend_colors(
result, fog_color, result, state->dist/full_fade_distance);
return miTRUE;
}
fog_util.c
void miaux_blend_colors(miColor *result,
miColor *color1, miColor *color2, miScalar factor)
{
result->r = miaux_blend(color1->r, color2->r, factor);
result->g = miaux_blend(color1->g, color2->g, factor);
result->b = miaux_blend(color1->b, color2->b, factor);
}
double miaux_blend(miScalar a, miScalar b, miScalar factor)
{
return a * factor + b * (1.0 - factor);
}
22 April 2008 23:40:49