Computer Science 102 Short Program 3 Due 12 February 11:59PM For this program the ONLY authorized source of assistance is Dr. Westall or the TA's. ANY OTHER DISCUSSION of the program no matter how "high level" or "peripheral" (e.g. Have you started/finished it yet?) is STRICTLY FORBIDDEN. Any student who observes improper behavior is encouraged to report it to Dr. Westall. Reports that can be verified will be rewarded with a 20 point bonus on the assignment for the student doing the reporting and an F for the course for the student being reported!! Adhere to the following programming standards. Violations will lead to deductions. (1) no function should be longer than 30 lines code + whitespace. (2) the maximum nesting level in any function is ONE (3) code lines should not extend beyond column 72 (4) no more that one statement may be written on a single line (5) use reasonably descriptive names for variables and functions (6) package all functions into a single source code module named camera.c (7) your program should compile without any warnings with gcc -Wall (8) indenting should be consistent with logical nesting (9) diagnostic / debug prints should be disabled/deleted in your submission. The assns/sp3 subdirectory contains a sample main1.c along with header files ray.h rayhdrs.h rayfuns.h and a makefile. DO NOT MODIFY ANY OF THESE FILES!!! You will supply camera.c, list.c, model.c, material.c and vector.h from previous work. For this assignment you will write components of three new modules and a new component of an existing module. MODULE COMPONENT ------- ----------- object.c object_init(), object_dump() plane.c plane_init(), plane_dump() sphere.c sphere_init(), sphere_dump() material.c material_find() A skeleton for the plane_init() function is on page 57 of the notes. You don't need to provide "hits" functions here so you can safely ignore (for now) the instruction to do so. The full code for object_init() has been provided free-of-charge on page 58 of the notes. The structure of the dumpers is described on the next page. For attribute parsing you may either continue to write entity-type specific parsers or you are free to use the generalized parser described in the notes. The material_find() function will be passed a color name such as "light_blue". It will search the material list and if it finds a material_t with the name "light_blue" it will return a pointer to that material_t. If it can't find a material with the specified name it will return NULL. Your program must build correctly when you enter the command make Sample input, output, and the main program are found in the directory sp3.