Computer Science 102 Major Program 3 Due 26 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. For this asssignment you will complete the ambient-lighting only raytracer that supports infinite plane and sphere type objects, and you will build your own model description file, mymodel.txt that demonstrates your program works correctly in a technically interesting and artistic way. Step 1 should be to use plane.c as a model and create sphere_init() and sphere_dump() functions. You will build the sphere_hits() function in lab this week, and should feel free to ask your TA to help with sphere_init()/sphere_dump() as well. Then, CAREFULLY FOLLOWING THE GUIDELINES described in pp. 78-85 of the notes, create the remaining components. For testing START WITH A SINGLE plane. When that works, add a second plane. Then go back a do a single sphere, then add a second sphere. Then mix spheres and planes. Some sample input/outputs are in the mp1 directory. They should be tested in the order: mp1a mp1b,.... mp1f. Finally create and turn in your own model file named mymodel.txt. You will find that the most interesting pictures (e.g. the "snowman") can be produced by using intersecting and overlapping objects and letting the ray tracer do its job of showing only the visible parts. Too many planes of quasi random orientation can create something of a mess, so please avoid that. The model should also have enough depth along with properly chosen ambient intensities that varying brightness provides visible depth cues. Its best to carefully layout spheres that intersect planes and each other. A good size for your image is 800 x 600 pixels. The turn in directory is mp1 and as usual your program should build when you say "make" and when I say "make".