The good news is that Computer Graphics is fun: fun to look at, fun to use, and when done properly even fun to program and debug. There are also many fun applications of Computer Graphics, ranging from video games, to animated cartoons, to full length feature movies. If you learn Computer Graphics and Geometric Modeling, you might even get a job in a field where you can have lots of fun. Art and architecture, biomedical imaging, computational photography: whatever you can see, or whatever you imagine you can see, you can design with Geometric Modeling and you can display with Computer Graphics.

Broadly, the major themes of Computer Graphics can be divided into three categories: graphics, modeling, and mathematical foundations. Graphics consists of lighting and shading—reflection and refraction, recursive ray tracing, radiosity, illumination models, polygon shading, and hidden surface procedures. Modeling is the theory of curves, surfaces, and solids—planes and polygons, spheres and quadrics, algebraics and parametrics, constructive solid geometry, boundary files, and octrees, interpolation and approximation, Bezier and B-spline methods, fractal algorithms and subdivision techniques. The mathematical foundations are mostly linear algebra, but from a somewhat idiosyncratic perspective not typically encountered in standard linear algebra classes—vector geometry and vector algebra, affine spaces and Grassmann spaces, affine maps and projective transformations, matrices and quaternions.

Unlike some Graphics courses at other universities, this course focuses on more advanced graphics, modeling, and mathematical methods—ray tracing, polygon shading, radiosity, fractals, freeform curves and surfaces, vector methods, and transformation techniques. Low level graphics algorithms such as line drawing, polygon filling, and clipping are bypassed to give more time and space to high level graphics techniques such as ray-tracing, polygon shading, and radiosity.

I have written a book specifically for this course. I have kept the chapters for each lecture relatively short in the expectation that students will read them in full. Lots of exercises and projects are included to flesh out the text. Your job in this class will be to read and absorb the text, and to work on a few fun projects that will give you a feel for the excitement and the power of Computer Graphics. We hope you have lots of fun and that you learn a lot while enjoying this class.

This class will teach the fundamental techniques and mathematical background of computer graphics. The topics of this class include 2D fractals, affine/projective transformations, ray-tracing, shading, radiosity, and curves, surfaces and solids. These concepts form the backbones of modern-day graphical applications in computer gaming, computer animation, and scientific visualization.

Prerequisites: You should be comfortable with the following concepts.

- Trigonometry
- Trigonometric Identities
- Law of Sines and Law of Cosines

- Vector Geometry and Vector Algebra
- Addition, Subtraction, Scalar Multiplication
- Dot Product, Cross Product, Determinant
- Vector Algebra
- Matrix Multiplication

- Calculus
- Differentiation

- Programming
- General familiarity with software design at least equivalent to COMP 212

Time and Location: TR 2:30-3:45 PM @ DCH 1075 (located near the stairs)

Instructor:
Dr. Ron Goldman

DCH 3116

Office Hours: Monday 9:55-11:55 AM, or by appointment

rng[at]rice.edu

Visit Pataranutaporn

DCH 3002

Office Hours: Monday 1-3 PM, or by appointment

vp11[at]rice.edu

Each chapter of the text will correspond to roughly one lecture. Class Discussion will be informal. You should try to answer all the questions at the end of each chapter. Preparation is crucial. You should read the text BEFORE coming to class and submit a brief written essay with questions you have about the chapter.

Attendance is MANDATORY. One point (per lecture) will be taken off of your final grade if you

- missed class without a valid excuse
- failed to submit a written essay (see below)
- neglected to do the Problem of the Day (see below)

The purpose of the written essay is to prepare you for the class discussion. The essay should be one typed page in grammatically correct English (see hints for good writing). The essay should cover:

- The main themes of the chapter
- What you learned from reading the text
- What you did not understand in the text
- Errors in the text
- Questions on the text and on the problems at the end of the chapter.

Each student will be assigned one problem for each lecture. The solution should be handed in at the beginning of class. Students should be prepared to present their work during class time.

There will be 3 required programming assignments (or labs) for undergrads and 4 for grad students, each lasting between 2 and 4 weeks. For the first two labs, you will work by yourself. But for lab3 and lab4 you can work in pairs. You are free to choose your partner. If you have trouble finding a partner, send the labby an email and we will try to pair you up.

Labs must be implemented in C or C++, using the OpenGL API for drawing. There
will be a tutorial on C++ and OpenGL during the first week of classes (probably Wednesday in Symonds II at 7:00 PM).

NOTE: You will need a PC password for Symonds II (talk to the labby for instructions to obtain a password).

- Exams/Homeworks: One midterm, and one final, probably take-home, and homework. 50% of the final grade.
- Labs: 3 required programming assignments for undergrads, 4 for grad students. 50% of the final grade.
- each approximately 2-4 weeks long

- Extra Credit Lab: The 4th optional programming assignment, only for undergrads.
- For students who do poorly on some of the labs and exams
- For A students who wish to be exempt from the final exam
- Worth up to a full letter grade
- See programming projects at the end of various lectures

If you submit a programming lab late, your grade will be adjusted as follows:

(`Late Grade`) = max{(`On-time Grade`) — 2^{H/24 + 1}, 0}

where `H` is the number of hours after the deadline that the lab was submitted. You are allowed to consult different sources. However, copying code is considered cheating and will
not be tolerated.

You are encouraged to consult with your classmates, TA, or instructor on the programming projects. Do not seek solutions or code from anyone not in the class; for example, you may not post questions to programming forums or get solutions from senior students. You may not transmit or receive code from anyone in the class in any way—visually (by showing someone your code), electronically (by emailing, posting, or otherwise sending someone your code), verbally (by reading your code to someone), or in any other way.

You may search the web and use the information you find to help understand the problem. However, you cannot take more than two lines of code from an external resource and actually include it in one of your assignments. Changing variable names or rewriting code you find does not void the "two line rule."

Exams are pledged, and you should discuss them with nobody except Dr. Goldman until everyone in the class has finished.

Any violations of these rules will be reported to the honor council.

Any student with a disability requiring accommodations in this course is encouraged to contact Dr. Goldman after class or during office hours; all discussions will remain confidential. Additionally, students will need to contact Disability Support Services in the Ley Student Center.

Each student must have a copy of the required text for the class:

— R. Goldman, CRC Press 2009*An Integrated Introduction to Computer Graphics and Geometric Modeling*

- General:
— Foley, Van Dam, Feiner, Hughes*Computer Graphics: Principles and Practice*— Hearn and Baker*Computer Graphics*

- Fractals:
— Abelson and DiSessa*Turtle Geometry*— Barnsley*Fractals Everywhere*

- Freeform Curves and Surface — Bezier and Lagrange:
— G. Farin*Curves and Surfaces for Computer Aided Geometric Design: A Practical Guide*— R. Goldman*Pyramid Algorithms: A Dynamic Programming Approach to Curves and Surfaces for Geometric Modeling*

- OpenGL References:
- OpenGL Programming Guide (The Red Book)
- OpenGL Reference Manual (The Blue Book)
- NeHe OpenGL Tutorials
- OpenGL Utility Toolkit (GLUT) API Reference

- C++ References:

We will be covering the following topics in class this semester.

- 2-Dimensional Computer Graphics (Fractals)
- Turtle Graphics - 1.5 Weeks
- Affine Graphics - 1.5 Weeks

- Mathematical Methods for Computer Graphics
- Coordinate Free Methods - 1.5 Weeks
- Dot and Cross Products
- Determinants

- Vector and Matrix Techniques - 1.5 Weeks
- Affine and Projective Transformations
- Quaternions

- Coordinate Free Methods - 1.5 Weeks
- 3-Dimensional Computer Graphics (Realistic Rendering)
- Recursive Ray Tracing - 1 Week
- Surface Modeling - 1 Week
- Solid Modeling - 1 Week
- Polygonal Modeling - 1 Week
- Hidden Surface Algorithms - 1 Lecture
- Shading Algorithms - 1 Lecture

- Radiosity - 1 Week
- Freefrom Curves and Surfaces - 2 Weeks
- Other topics - As time permits

Date | Topic | Resources |
---|---|---|

08/23/16 | Introduction |
Rules for writing Textbook Ch.1 |

08/25/16 | Turtle Graphics | WheelRosette |

09/12/16 | Fractal Examples | BarnsleyFigs |

10/04/16 | Chpt 15: Quaternions (revised) | QuaternionsChina |

Due Date | Exam |
---|---|

Thursday, 10/13/16, 4:00 PM | Midterm Exam |

Wednesday, 12/14/16, NOON | Final Exam |

- Lab Submission: All labs should be submitted through OWL-Space. Please remember to remove any binaries and submit only the source and compilation files. These include VC++ files such as .dll, .suo, .ncb, .user, .sdf, and the debug/release folders.
- Project Files: All labs will be supplied with a Visual C++ Express 2015 project file. Please make sure to turn in your project with the project file properly configured so that the TA will not have any problem compiling your project.

Due Date | Labs | Resources |
---|---|---|

08/29/16, 11:55 PM | Lab 0 - Intro | Code |

09/12/16, 11:55 PM | Lab 1 - Turtle Graphics | Code |

09/26/16, 11:55 PM | Lab 2 - Iterated Function Systems | Code |

11/09/16, 11:55 PM | Lab 3 - Ray Tracing | Code |

12/02/16, 11:55 PM | Lab 4 - Hidden Surface Removal | Code |