16 #define TACHYON_INTERNAL 1    28   (
void (*)(
const void *, 
const void *, 
const void *, 
void *))(
light_normal),
    51   l->tex->flags = RT_TEXTURE_SHADOWCAST | RT_TEXTURE_ISLIGHT;
    72   l->tex->flags = RT_TEXTURE_SHADOWCAST | RT_TEXTURE_ISLIGHT;
    96                            flt fallstart, 
flt fallend) {
   105   l->tex->flags = RT_TEXTURE_SHADOWCAST | RT_TEXTURE_ISLIGHT;
   107   l->tex->specular=0.0;
   150   shadevars->L = li->
dir;                 
   151   shadevars->Llen = FHUGE;                
   152   VDOT(inten, (shadevars->N), li->
dir)    
   164   VSUB(li->
ctr, (shadevars->hit), (shadevars->L))  
   167   len = 
SQRT(shadevars->L.x*shadevars->L.x + shadevars->L.y*shadevars->L.y + shadevars->L.z*shadevars->L.z) + EPSILON;
   169   shadevars->L.x /= len;                  
   170   shadevars->L.y /= len;
   171   shadevars->L.z /= len;
   172   shadevars->Llen = len;                  
   174   VDOT(inten, shadevars->N, shadevars->L) 
   186   VSUB(li->
ctr, (shadevars->hit), (shadevars->L))  
   189   len = 
SQRT(shadevars->L.x*shadevars->L.x + shadevars->L.y*shadevars->L.y + shadevars->L.z*shadevars->L.z) + EPSILON;
   191   shadevars->L.x /= len;                  
   192   shadevars->L.y /= len;
   193   shadevars->L.z /= len;
   194   shadevars->Llen = len;                  
   196   VDOT(inten, shadevars->N, shadevars->L) 
   198   inten *= li->
spotfunc(li, &shadevars->L);
   212   return 1.0 / (li->
Kc + ((li->
Kl + li->
Kq*Llen) * Llen));
   243 static int light_bbox(
void * obj, vector * min, vector * max) {
   249   flt b, disc, t1, t2, temp;
   253   if (ry->flags & RT_RAY_SHADOW)
   260   disc=b*b + l->
rad*l->
rad - temp;
   262   if (disc<=0.0) 
return;
   268   ry->add_intersection(t2, (
object *) l, ry);  
   272     ry->add_intersection(t1, (
object *) l, ry);  
   278   N->x = pnt->x - l->
ctr.x;
   279   N->y = pnt->y - l->
ctr.y;
   280   N->z = pnt->z - l->
ctr.z;
   282   invlen = 1.0 / 
SQRT(N->x*N->x + N->y*N->y + N->z*N->z);
   288   if (
VDot(N, &(incident->d)) > 0.0)  {
 static flt directional_light_shade_diffuse(directional_light *li, shadedata *shadevars)
 
flt Kq
quadratic attenuation factor 
 
static flt light_complex_attenuation(void *vli, flt Llen)
 
static flt light_no_falloff(void *vli, vector *L)
 
flt fallstart
fallof start angle 
 
flt Kl
linear attenuation factor 
 
static flt simple_point_light_shade_diffuse(point_light *li, shadedata *shadevars)
 
static int light_bbox(void *obj, vector *min, vector *max)
 
flt rad
point light radius when visible 
 
flt(* attenuationfunc)(void *, flt)
attenuation fctn pointer 
 
flt(* spotfunc)(void *, vector *)
spotlight fctn pointer 
 
RT_OBJECT_HEAD flt(* shade_diffuse)(struct light_t *, shadedata *)
diffuse shading function 
 
static void light_normal(const point_light *l, const vector *pnt, const ray *incident, vector *N)
 
flt VDot(apivector *a, apivector *b)
 
point_light * newpointlight(void *tex, vector ctr, flt rad)
 
static flt light_no_attenuation(void *vli, flt Llen)
 
double flt
generic floating point number, using double 
 
static object_methods light_methods
 
flt fallend
fallof end angle 
 
flt Kc
constant attenuation factor 
 
vector ctr
point light position 
 
#define VDOT(return, a, b)
 
void light_set_attenuation(point_light *li, flt Kc, flt Kl, flt Kq)
 
RT_OBJECT_HEAD flt(* shade_diffuse)(struct directional_light_t *, shadedata *)
diffuse shading function 
 
static flt light_spotlight_falloff(void *vli, vector *L)
 
Tachyon cross-platform timers, special math function wrappers, and RNGs. 
 
vector spotdir
spotlight direction 
 
point_light * newspotlight(void *tex, vector ctr, flt rad, vector dir, flt fallstart, flt fallend)
 
static flt point_light_shade_diffuse(point_light *li, shadedata *shadevars)
 
static void light_intersect(const point_light *l, ray *ry)
 
RT_OBJECT_HEAD flt(* shade_diffuse)(struct point_light_t *, shadedata *)
diffuse shading function 
 
Tachyon public API function prototypes and declarations used to drive the ray tracing engine...
 
vector dir
lighting direction 
 
directional_light * newdirectionallight(void *tex, vector dir)
 
void free_light_special(void *voidlight)