Tachyon (current)  Current Main Branch
light.h
Go to the documentation of this file.
1 /*
2  * light.h - this file includes declarations and defines for light sources.
3  *
4  * (C) Copyright 1994-2022 John E. Stone
5  * SPDX-License-Identifier: BSD-3-Clause
6  *
7  * $Id: light.h,v 1.17 2022/02/18 17:55:28 johns Exp $
8  *
9  */
10 
11 #include "shade.h"
12 
13 typedef struct light_t {
14  RT_OBJECT_HEAD
15  flt (* shade_diffuse)(struct light_t *, shadedata *);
16 } light;
17 
18 typedef struct point_light_t {
19  RT_OBJECT_HEAD
20  flt (* shade_diffuse)(struct point_light_t *, shadedata *);
21  vector ctr;
22  flt rad;
23  flt (* attenuationfunc)(void *, flt);
24  flt Kc;
25  flt Kl;
26  flt Kq;
27  flt (* spotfunc)(void *, vector *);
28  vector spotdir;
31 } point_light;
32 
33 typedef struct directional_light_t {
34  RT_OBJECT_HEAD
35  flt (* shade_diffuse)(struct directional_light_t *, shadedata *);
36  vector dir;
38 
39 
40 void free_light_special(void *voidlight);
41 
42 directional_light * newdirectionallight(void *, vector);
43 
44 point_light * newpointlight(void *, vector, flt);
45 point_light * newspotlight(void * tex, vector ctr, flt rad, vector dir,
46  flt fallstart, flt fallend);
47 
48 point_light * newlight(void *, vector, flt);
49 point_light * newspotlight(void * tex, vector ctr, flt rad, vector dir,
50  flt fallstart, flt fallend);
51 
52 void light_set_attenuation(point_light * li, flt Kc, flt Kl, flt Kq);
53 
54 
55 #ifdef LIGHT_PRIVATE
56 static int light_bbox(void * obj, vector * min, vector * max);
57 static void light_intersect(const point_light *, ray *);
58 static void light_normal(const point_light *, const vector *, const ray *, vector *);
59 static flt light_no_attenuation(void * vli, flt Llen);
60 static flt light_complex_attenuation(void * vli, flt Llen);
61 static flt light_no_falloff(void * vli, vector * L);
62 static flt light_spotlight_falloff(void * vli, vector * L);
63 static flt point_light_shade_diffuse(point_light * li, shadedata *);
64 static flt simple_point_light_shade_diffuse(point_light * li, shadedata *);
65 static flt directional_light_shade_diffuse(directional_light * li, shadedata *);
66 #endif
67 
static flt directional_light_shade_diffuse(directional_light *li, shadedata *shadevars)
Definition: light.c:148
flt Kq
quadratic attenuation factor
Definition: light.h:26
static flt light_complex_attenuation(void *vli, flt Llen)
Definition: light.c:210
static flt light_no_falloff(void *vli, vector *L)
Definition: light.c:219
flt fallstart
fallof start angle
Definition: light.h:29
Definition: light.h:13
flt Kl
linear attenuation factor
Definition: light.h:25
static flt simple_point_light_shade_diffuse(point_light *li, shadedata *shadevars)
Definition: light.c:161
static int light_bbox(void *obj, vector *min, vector *max)
Definition: light.c:243
struct directional_light_t directional_light
flt rad
point light radius when visible
Definition: light.h:22
flt(* attenuationfunc)(void *, flt)
attenuation fctn pointer
Definition: light.h:23
point_light * newpointlight(void *, vector, flt)
Definition: light.c:63
flt(* spotfunc)(void *, vector *)
spotlight fctn pointer
Definition: light.h:27
RT_OBJECT_HEAD flt(* shade_diffuse)(struct light_t *, shadedata *)
diffuse shading function
Definition: light.h:15
static void light_normal(const point_light *l, const vector *pnt, const ray *incident, vector *N)
Definition: light.c:275
static flt light_no_attenuation(void *vli, flt Llen)
Definition: light.c:206
double flt
generic floating point number, using double
Definition: tachyon.h:47
flt fallend
fallof end angle
Definition: light.h:30
void light_set_attenuation(point_light *li, flt Kc, flt Kl, flt Kq)
Definition: light.c:129
void free_light_special(void *voidlight)
Definition: light.c:35
flt Kc
constant attenuation factor
Definition: light.h:24
vector ctr
point light position
Definition: light.h:21
point_light * newlight(void *, vector, flt)
RT_OBJECT_HEAD flt(* shade_diffuse)(struct directional_light_t *, shadedata *)
diffuse shading function
Definition: light.h:35
static flt light_spotlight_falloff(void *vli, vector *L)
Definition: light.c:224
struct point_light_t point_light
vector spotdir
spotlight direction
Definition: light.h:28
point_light * newspotlight(void *tex, vector ctr, flt rad, vector dir, flt fallstart, flt fallend)
Definition: light.c:95
struct light_t light
static flt point_light_shade_diffuse(point_light *li, shadedata *shadevars)
Definition: light.c:183
static void light_intersect(const point_light *l, ray *ry)
Definition: light.c:248
RT_OBJECT_HEAD flt(* shade_diffuse)(struct point_light_t *, shadedata *)
diffuse shading function
Definition: light.h:20
vector dir
lighting direction
Definition: light.h:36
directional_light * newdirectionallight(void *, vector)
Definition: light.c:42