1 /* 2 * light.h 3 * 4 * Copyright (C) 1989, 1991, Craig E. Kolb 5 * All rights reserved. 6 * 7 * This software may be freely copied, modified, and redistributed 8 * provided that this copyright notice is preserved on all copies. 9 * 10 * You may not distribute this software, in whole or in part, as part of 11 * any commercial product without the express consent of the authors. 12 * 13 * There is no warranty or other guarantee of fitness of this software 14 * for any purpose. It is provided solely "as is". 15 * 16 * $Id: light.h,v 4.0 91/07/17 14:35:10 kolb Exp Locker: kolb $ 17 * 18 * $Log: light.h,v $ 19 * Revision 4.0 91/07/17 14:35:10 kolb 20 * Initial version. 21 * 22 */ 23 #ifndef LIGHT_H 24 #define LIGHT_H 25 26 #include "libobj/geom.h" 27 28 #define SHADOW_NONE 001 29 #define SHADOW_TRANSP 002 30 #define SHADOW_CSG 004 31 #define SHADOW_CACHE 010 32 #define SHADOW_BLUR 020 33 34 #define NOSHADOWS(f) ((f) & SHADOW_NONE) 35 #define SHADOWTRANSP(f) ((f) & SHADOW_TRANSP) 36 #define SHADOWCSG(f) ((f) & SHADOW_CSG) 37 #define SHADOWCACHE(f) ((f) & SHADOW_CACHE) 38 #define SHADOWBLUR(f) ((f) & SHADOW_BLUR) 39 40 #define SHADOW_EPSILON (4. * EPSILON) 41 42 typedef char * LightRef; 43 44 typedef struct { 45 struct Geom *obj; /* Pointer to cached object */ 46 RSMatrix trans; /* World-to-object transformation */ 47 char dotrans; /* TRUE if above trans is non-identity */ 48 } ShadowCache; 49 50 typedef struct { 51 int (*intens)(); /* intensity method */ 52 void (*dir)(), /* direction method */ 53 (*user)(); /* user-defined method */ 54 } LightMethods; 55 56 typedef struct Light { 57 Color color; /* Light source color & intensity */ 58 int shadow; /* Does light source cast shadows? */ 59 LightRef light; /* Pointer to light information */ 60 LightMethods *methods; /* Light source methods */ 61 ShadowCache *cache; /* Shadow cache, if any */ 62 struct Light *next; /* Next light in list */ 63 } Light; 64 65 extern LightMethods *LightMethodsCreate(); 66 extern Light *LightCreate(); 67 extern void LightAllocateCache(), LightAddToDefined(); 68 extern int LightIntens(), LightDirection(); 69 extern void ShadowSetOptions(), ShadowStats(); 70 71 #endif /* LIGHT_H */ 72