$29
For this project, you will write a program in C that implements a simple ray casting renderer and produces a 2D image of spheres. A file of sphere information will be provided. Your code should produce a PPM image of 1000x1000 pixels.
Your code must be modular and use functions, structures, and typedefs. We will discuss the algorithm and PPM files in class. Your solution should consist of four files with data types and functions listed below:
rc.h
RAY_T with origin and direction fields
COLOR_T with R, G, B fields
SPHERE_T with center and radius
OBJ_T with sphere, color, and next fields
rc.c
void read_objs (OBJ_T **list)
reads spheres from stdin; creates linked list using dynamic memory
int intersect_sphere (RAY_T ray, SPHERE_T sphere, double *t)
computes intersection of ray and sphere; returns 1 if intersection, 0 otherwise; t is set to distance from camera to sphere intersection
COLOR_T cast (RAY_T ray, OBJ_T *list)
iterates through linked list; finds closest intersection using intersect_sphere; returns color of closest sphere
main
calls read_objs; initializes image file; loops through pixels: sets ray, calls cast, prints pixel; frees linked list
vec.h
VEC_T with x, y, and z fields
vec.c
VEC_T normalize (VEC_T v)
computes and returns normalized vector v
double dot (VEC_T v1, VEC_T v2)
computes and returns dot product of v1 and v2
The program can be compiled with the command: gcc rc.c vec.c –lm –o rc
The program can be executed with the command: ./rc < spheres.txt > img.ppm