Fundamentals of Computer GraphicsDepartment of Mathematics and Computer Science Hobart and William Smith Colleges Spring, 2004. Instructor: David J. Eck (email@example.com). Monday and Friday, 12:20--1:15. Room Lansing 300. Wednesday, 12:20--1:15. Room Lansing 312 (Math/CS Computer Lab).
Computer graphics is simply the art and science of producing and manipulating images on a computer. It is one of the most visible and exciting aspects of computer science. And unlike some fields of computer science, it has a rigorous foundation in theory and mathematics (some of which will be covered in the course).
Computer graphics is a very large field, and this course is only a survey of some of the most important ideas. We will cover both two dimensional and three dimensional graphics and animation. We will cover graphics programming, theory, and techniques. We will look at several sophisticated graphics application programs. The major topics that you will encounter include:
- OpenGL programming. OpenGL is a graphics standard that is available on a wide variety of computers, and is implemented in hardware on many graphics cards. It has been used for many computer games. For the programmer, OpenGL is just a large library of subroutines that can be used for creating 2D and 3D images. We will be doing OpenGL programming in C and C++. Programming will be, very roughly, 40% of the course.
- GIMP, an image processing program. GIMP is a program for creating and manipulating two-dimensional images. It is very similar in capability to the commercial program Photoshop. While you can use GIMP to create images from scratch, it is most often used for touching up photographs, color-correction of images, adding visual effects, and composing images from pieces of other images.
- Blender, a 3D modeling program. Blender lets you build three-dimensional scenes and animations using a graphical user interface. It's difficult to design an interface for building a three-dimensional model on a two-dimensional screen. No program that does this will ever be really easy to use. Blender has an unusual interface that does a better job than other programs I have used. Some of you will never get used to it, but some will come to like it.
- POV-Ray, a ray-tracing program. Ray tracing is one of the techniques that are used to produce very realistic computer-generated 3D images. POV-Ray has been around for a long time, and it now supports many other techniques as well. However, it is not a modeling program. It is an interpreter for scripts written in a "scene description language." We will look at this language, as well as some of the other features that it implements.
- Theory of computer graphics. Behind everything that we do, there is theory, and the treatment of theory will be woven throughout the entire course. This is the part of the course that you will remember five years from now, when you have only a vague recollection of how to program in OpenGL or what a POV-Ray scene description looks like. From my point of view, everything "practical" that we do is done to illustrate the theory.
The three graphics programs -- Gimp, Blender, and POV-Ray -- are available for both Windows and Linux, and they are all free. In lab, you will use the Linux versions. You might want to install the Windows versions on your own computer. For OpenGL programming, we will be using a free Linux version known as Mesa. Mesa is a full implementation of OpenGL but doesn't use the name because of trademark issues.
As a textbook on OpenGL, we will use the OpenGL Programming Guide, fourth edition, from the OpenGL Architecture Review Board. An older edition of the book should also be OK, since there have been few changes in the parts of the book that we will use. In addition to the programming, this book also covers some of the theory of three-dimensional graphics.
Labs, Homework, and Programming Assignments
Every Wednesday, we will have a "lab" in the Math/CS Computer Lab, Lansing 312. Labs will cover OpenGL programming, as well as the graphics applications Gimp, Blender, and POV-Ray. Many of the labs will include exercises that you can start in lab and finish for homework. Some of the exercises will be fairly large-scale programming assignments that you will have several weeks to complete. Non-programming exercises will generally be due within a week after the lab.
In addition to other assignments, there will be a final project for this course. The final project replaces the final exam and is due no later than the scheduled final exam period for this course. You will select your own final project. I encourage you to start thinking about it soon. I will have more information for you later in the term, but here are some ideas about the kinds of projects you might do:
- Write an interactive graphics program using OpenGL.
- Work with GIMP, Blender, or POV-Ray. For example, a Blender animation or a series of image compositions with GIMP.
- Investigate and work with some other graphics program. For example, you might look at Maya Personal Learning Edition for Windows or MacOS X, a free version of one of the premier commercial 3D modeling programs (which costs $1999). See http://www.aliaswavefront.com/.
- A traditional ten to fifteen page research paper on some aspect of computer graphics, such as: Using 3D on the Web (see http://www.web3d.org/, which is developing X3D, an XML-based standard for publishing 3D content); Graphics file formats; SVG, the XML graphics language; How computer graphics is used in Hollywood.
You are required to make a Web portfolio of the work you do for this course. Your portfolio will include material from the labs and from your final project. For much of the work that you do in the labs, the only thing that you turn in for grading will be material in your Web portfolio. At the end of the term, there will also be an overall grade for the portfolio. The grading at that point will be very simple: If you have fulfilled the basic requirements, you get 6 points. Extra effort or particularly nice appearance will get you a 7 or 8. If material is missing or obviously sub-standard, you will get less than 6 points.
To begin your Web portfolio, create a directory named cs324 inside the www directory in your Linux account. Put a file named index.html in your cs324 directory. This will be the home page for your site and will be accessible on the Web at the URL http://math.hws.edu/~username/cs324/ where username is your user name. The main index.html page should have links to other pages that contain your work. Details about what should be on your pages will be forthcoming in labs and assignments. Your web portfolio must be in final form by the scheduled final exam period for this course.
I do not expect you to use very fancy HTML for your pages. However, I do expects them to be attractive and well-organized. If you don't know anything about HTML, you can find the basics in Section 6.2 of my on-line Java textbook, at http://math.hws.edu/javanotes/c6/s2.html.
Tests and Grading
There will be three in-class tests, which will be given on Monday, February 16; Monday, March 29; and Friday, April 30. There is no final exam, but the final project is due at the scheduled final exam period, 8:30 AM on Monday, May 10.
Your grade for the course will be computed as follows:First Test: 15% Second Test: 15% Third Test: 15% Labs/Homework: 30% Final Project: 17% Web Portfolio: 8%
Office Hours, E-mail, and WWW
My office is room 301 in Lansing Hall. My office phone extension is 3398. I am on campus most days, and you are welcome to come in any time you can find me there. I will announce regular office hours (when I promise to try my best to definitely be in my office) as soon as I schedule them.
My e-mail address is firstname.lastname@example.org. E-mail is good way to communicate with me, since I usually answer messages the day I receive them.
The Web page for this course is at http://math.hws.edu/eck/cs324/. This page will contain links to on-line readings and other on-line resources, links to each student's graphics web pages, and information about weekly assignments and labs.
Tentative Weekly Schedule
Here is a tentative schedule for the course. While we will certainly cover all the major topics on this schedule, I might make changes to this schedule as the term proceeds. See the course web page for updated weekly information.
Dates What's Happening Jan. 19, 21, 23 Introduction to graphics.
Lab: Basic 2D Painting with the GIMP.
Jan. 26, 28, 30 Introduction to OpenGL and GLUT.
Lab: 2D Graphics with OpenGL and GLUT.
Feb. 2, 4, 6 More on OpenGL programming; Introduction to 3D.
Lab: Basic 3D Modeling in Blender and POV-Ray.
Feb. 9, 11, 13 Color; Image manipulation with the GIMP.
Lab: GIMP Color and Selections.
Feb. 16, 18, 20 More on the GIMP; Moving to 3D.
Test on Monday
Lab: GIMP Image Processing.
Feb. 23, 25, 27 Three-dimensional objects and transformations.
Lab: Blender Viewing and Modeling.
Mar. 1, 3, 5 More on 3D geometry; Scene description languages.
Lab: Blender Animation.
Mar. 8, 10 Viewing in 3D.
Lab: 3D Graphics in OpenGL.
Friday March 12 -- Sunday, March 21
Mar. 22, 24, 28 Lighting and materials.
Lab: Lighting and Materials in OpenGL.
Mar. 29, 31; Apr. 2 More on lighting, materials and textures.
Test on Monday
Lab: Materials and textures in Blender.
Apr. 5, 7, 9 Hierarchical modeling.
Lab: Hierarchical Modeling in OpenGL
Apr. 12, 14, 16 More on hierarchical modeling.
Lab: Blender particle systems, etc.
Apr. 19, 21, 23 Rendering and ray-tracing.
Apr. 26, 28, 30 More rendering and radiosity.
Test on Friday
Lab: More on POV-Ray.
May 3 Last day of class.
Wrapping up the course.
May 10 Monday, May 10, 8:30--11:30 AM,
Scheduled Final Exam Period.
Final project and Web portfolio are due.