CMSI 371/671
Homework #3

This homework assignment is really a term project, so get started early.

  1. Write an interesting graphics application. Generally, interesting means 3-D and interactive. Let me know what you want to work on before you start. One example of an "interesting" project is a flight simulator using OpenGL with the following minimal requirements.

    Other possible projects include:

    Regardless of the project you choose, you must turn in a 10 page "report" on your design and implementation that includes some UML diagrams. The report has to be well-written and organized along the usual lines (introduction, background, purpose, design, implementation, conclusions, references, etc.). You must also give an 8 minute in-class presentation to the rest of the class and answer questions.

    The paper should have a title, abstract, numbered sections, and references, as is typical in most ACM or IEEE conference proceedings or journals. A suggested outline is:

    Title (For example, "An OpenGL Flight Simulator")
    
    Abstract - Read some conference papers or journal articles
               to get the gist of a properly written abstract.
    
    1. Introduction - Describe the goals of the project.  Do not
                      say anything about the fact you are a student
                      trying to learn something.  Do not reference
                      the class, the school or the professor in
                      anyway.  Assume, rightly, that you are an
                      accomplished developer documenting a
                      fabulous application that shows off the
                      strengths of OpenGL as a graphics API.
                      Close the section with the usual "the
                      rest of this paper is organized
                      as follows"-type paragraph.
    
    2. Background - Talk about different graphics APIs and programming
                    languages that could be used for your project.
                    Make sure you sound like an educated computer
                    scientist.
    
    3. Design - Describe the project's architecture.  Use UML
                Component and Class Diagrams.  Justify major
                design decisions.  This section can be organized
                into subsections (3.1, 3.2, 3.3 and so on),
                each subsection describing the highlights of
                each of the major "components."  In cases where
                you have borrowed, or even extended someone
                else's code (usually mine?) cite the author of
                the original code and state where and why you
                improved on it.
    
                Also point out where, if ever, you took an
                object-oriented design approach, even though
                OpenGL is not very object-oriented at all.
    
    4. Implementation - Describe your overall implementation,
                        focusing on a few of the interesting
                        components.  Use UML Interaction and
                        Activity Diagrams, and State Diagrams
                        if interesting.  Justify implementation
                        decisions.
    
                        Important: You must ensure that your
                        implementation has taken into consideration
                        all of the OpenGL Performance Tips
                        in Appendix G of the OpenGL Programming Guide.
                        Call out a few of these tips in your paper
                        and state how you followed them.  Be specific
                        and point to certain methods in certain classes
                        of your implementation.
    
    5. Future Enhancements - Describe at least three features you
                             could add to your project to make it better.
                             Point out to what extent your beautifully
                             written code allows these features to be
                             gracefully and painlessly added (you did
                             take the texture map files as command line
                             arguments, didn't you?)  Do not use
                             self-deprecating language in this section;
                             it only makes you sound like an idiot.
    
    A. Source Code - You must post your code on a web site where I can
                     find it from outside the university's firewall.
                     In this Appendix, give the URI(s).
    
    B. Bitmaps and Textures - In this appendix, attach pages with
                              the bitmaps and textures used in your
                              application.  Use a color printer if
                              possible.  Put captions on each picture.
    
    References - Include a list of references, properly formatted
                 according to some acceptable standard.
    
    

    Grading

    You will be graded on spelling, grammar, organization, and the professionalism of the report. Do not write in the first person. Do not come off like a juvenile. Imagine someone that you don't know will be reading this and deciding whether or not you should be hired for a $500,000/yr job.

    Note: I have decided to omit a paragraph which was going to say something about the fact that you were no longer in high school and therefore no longer hold the mistaken belief that you do not need to learn how to write well because those grownups were all lying when they told you that people make important judgements about you on your ability to write (and speak).