Shader streak

Click on the filename to display or download the file.

streak.mi
declare shader 
    color "streak" ( 
        scalar "max_distance" default .1 ) 
    version 1 
    apply lens 
    scanline off 
    trace on 
end declare 

streak.c
#include "shader.h" 
#include "miaux.h" 
 
struct streak { 
    miScalar max_distance; 
}; 
 
DLLEXPORT 
int streak_version(void) { return 1; } 
 
DLLEXPORT 
miBoolean streak ( 
    miColor *result, miState *state, struct streak *params  ) 
{ 
    miScalar max_distance = *mi_eval_scalar(&params->max_distance); 
    state->org.z += miaux_random_range(-max_distance, max_distance); 
    return mi_trace_eye(result, state, &state->org, &state->dir); 
} 

streak_util.c
result->r += miaux_random_range(-red_variance, red_variance); 
    result->r = miaux_clamp(result->r, 0.0, 1.0); 
    result->g += miaux_random_range(-green_variance, green_variance); 
    result->g = miaux_clamp(result->g, 0.0, 1.0); 
    result->b += miaux_random_range(-blue_variance, blue_variance); 
    result->b = miaux_clamp(result->b, 0.0, 1.0); 
} 
 
double miaux_fit( 
    double v, double oldmin, double oldmax, double newmin, double newmax)     
{ 
    return newmin + ((v - oldmin) / (oldmax - oldmin)) * (newmax - newmin); 
} 

22 April 2008 23:40:58