/* A barebones mental ray shader that colors a surface based on 'u' texture coordinates. */ #include "shader.h" #include //#include #include "lighting.h" struct fred { miColor fillcolor; /* [1 1 1] your comment can go here */ miColor backcolor; /* [1 1 1] your comment can go here */ miScalar v_cutoff; /* [0.5]*/ miScalar frequ; /* [10]*/ miScalar amp; /* [0.25]*/ miScalar Kd; /* [1]*/ miBoolean switch_test; /* [true] */ int i_light; int n_light; miTag light[1]; }; DLLEXPORT int fred_version(void) { return(1); } DLLEXPORT miBoolean fred ( miColor *result, miState *state, struct fred *params) { miColor *fillcolorPtr = mi_eval_color(¶ms->fillcolor); miColor *backcolorPtr = mi_eval_color(¶ms->backcolor); miScalar v_cutoff = *mi_eval_scalar(¶ms->v_cutoff); miScalar frequ = *mi_eval_scalar(¶ms->frequ); miScalar amp = *mi_eval_scalar(¶ms->amp); miScalar Kd = *mi_eval_scalar(¶ms->Kd); miBoolean switch_test = *mi_eval_boolean(¶ms->switch_test); miScalar u = state->tex_list[0].x; miScalar v = state->tex_list[0].y; miScalar curve = 0; if(switch_test == 0) curve = fabs(sin(u * frequ)); else curve = (1 - fabs(sin(u * frequ))); //fillcolorPtr->r = u; //fillcolorPtr->b = v; if(v >= amp * curve + v_cutoff) *result = *fillcolorPtr; else *result = *backcolorPtr; //miColor diffuseColor = diffuse(state, params->light, params->i_light, params->n_light, Kd); //multRGB(result, &diffuseColor); return miTRUE; }