Computer Science 102 Short Program 3 Due 9 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 six functions. MODULE COMPONENT ------- ----------- object.c object_init(), object_dump() plane.c plane_init(), plane_dump() sphere.c sphere_init(), sphere_dump() You will need to add calls to plane_init() and sphere_init() to your model.c module. A skeleton for the plane_init() function is on page 63 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 64 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. Your program must build correctly when you enter the command make Sample input, output, and the main program are found in the directory sp3.