This is ray.h in view mode; [Download] [Up]
/*
* (c) 1988 by George Kyriazis
*/
/*
* include file for the ray-tracer
*/
#ifndef NULL
#define NULL 0
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE !FALSE
#endif
#define MINT 1e-5
#define ABS(a) ( ((a) > 0 ) ? (a) : -(a) )
#define MIN(a, b) ( (a) < (b) ? (a) : (b) )
#define MAXLEVEL 3 /* maximum recursion level */
#define SPHERE 0
#define SQUARE 1
struct vector {double x,y,z;};
/* the color structure */
struct color {
double r,g,b;
};
/* the object structure */
struct obj {
int type; /* type of object */
union data {
struct sphere { /* sphere definition */
struct vector center;
double radius;
} sphere;
struct quad { /* quad definition */
struct vector p1;
struct vector p2;
struct vector p3;
} quad;
} data;
double reflection; /* precentage reflection */
double refraction; /* percentage refraction */
struct color refl_color; /* reflective color */
struct color refr_color; /* refractive color */
struct color ambient; /* ambient color */
struct color diffuse; /* diffuse color */
struct color specular; /* specular color */
double width; /* specular width factor */
double index; /* index of refraction */
double refl_diffuse; /* circle of diffusion in reflection */
double refr_diffuse; /* circle of diffusion in refraction */
struct vector time; /* motion coefficients */
};
/* light source */
struct light {
struct vector org;
double angle;
};
struct light light;
/* number of objects */
int noo;
/* number of tries per pixel */
int tries;
/* eye viewing stuff */
struct vector hor, ver, eye_dir, eye, up;
double fov;
/* time information */
double time1, time2; /* time limits */
double Time; /* current time */
/* background cuing info */
int bgflag;
#define NONE 0
#define X 1
#define Y 2
#define Z 3
/* the array of spheres */
struct obj *obj;
/* resolution */
long int xres, yres;
/* the ray structure */
struct ray {
struct vector pos; /* origin */
struct vector dir; /* direction */
struct obj *obj; /* where the ray comes from */
double theta; /* the diffusion angle */
};
/* the intersection structure */
struct intersect {
struct obj *obj; /* which object */
double t; /* where in the ray */
struct vector n; /* the normal at that point */
};
/* some statistics variables */
int raycount; /* total number of rays */
int shadowcount; /* total number of shadow rays traced */
int reflectcount; /* total number of reflected rays */
int refractcount; /* total number of refracted rays */
int intersectcount; /* total number of object intersections */
int objtestcount; /* total number of intersection tests */
int rayline; /* rays / line */
int shadowline; /* shadow rays / line */
int reflectline; /* reflected rays / line */
int refractline; /* refracted rays / line */
int intersectline; /* object intersections / line */
int objtestline; /* object intersection tests / line */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.