W Randolph Franklin home page
... (old version) Login

ECSE-4750 Computer Graphics, Fall 2007, W. Randolph Franklin
Rensselaer Polytechnic Institute, Troy NY USA


Final exam assists:

The exam

  1. Wed 12/12 3-6 pm in JEC5119
  2. Allowed: books, xeroxes, notes, papers
  3. Not allowed: computers, calculators, communication devices, sharing with other students during the exam
  4. The exam

Open hours before final exam

  1. Mon 12/10: Jon will be in JEC6204 from 3 to 6 pm.
  2. Tues 12/11: WRF will be in JEC3205 from 4 to 5.
  3. Wed 12/12: Jon will be in JEC6204 from 11am to 2pm.

Old exams

  1. Fall 2006
  2. Fall 2005
  3. Fall 2005 sample questions
  4. Spring 2005

(:showhide div=syl init=hide lshow='Show Syllabus' :)


ECSE-4750 Computer Graphics

Electrical, Computer, and Systems Engineering Dept.

Rensselaer Polytechnic Institute

Troy NY 12180 USA

Fall 2007

Updated Catalog Description

ECSE-4750 Computer Graphics

Introduction to Interactive Computer Graphics, with an emphasis on applications programming. Objects and viewers, and the synthetic camera model. Graphics architectures, the graphics pipeline, clipping, rasterization, and programmable shaders. Input and interaction. Geometric objects, homogeneous coordinates, and transformations. Viewing, hidden surface removal, frame and depth buffers, compositing, and anti-aliasing. Shading, light and materials, texture mapping, ray tracing, and radiosity. Intellectual property concerns. Extensive programming with the OpenGL API and C++. Prerequisite: ECSE-2610 or equivalent. Fall term annually. 3 credit hours

Course Objectives

  1. to learn the principles and commonly used techniques of computer graphics
  2. to develop a facility with the relevant mathematics
  3. to gain an introductory proficiency with OpenGL, one of the most widely used APIs.

Why Take This Course?

  1. Graphics is fun. It's got a history, since it is a takeoff from geometry, which is at least 2500 years old. There are pretty pictures involved. It's based on state-of-the-art hardware.
  2. It has applications, and is tied into the real world, and is not just theoretical.
  3. Nevertheless, it's not just practical stuff with no depth, but has some theory and math also.
  4. It teaches practical knowledge, e.g., OpenGL that can lead directly to a job.

Why Not To Take This Course

  1. You don't like programming.
  2. You don't like documenting your programs.
  3. You don't like math.
  4. You don't like reading.
  5. You don't like writing exams at the official scheduled times.


This is a senior CSYS course, and assumes a moderate computer maturity, represented in the catalog by ECSE-2610 (Computer Components & Operations). You should know some HW, but if you don't have that specific course, don't worry.

Since there is programming in C or C++, you also must know some high level language, which you can translate into a knowledge of some C. If you don't know what a pointer is, then drop this course and take Computing Languages first. A good review book on C is Kelley & Pohl, A Book on C.

Computer Graphics also assumes that you know, or be able to learn, some basic linear algebra, up to the level of what an eigenvalue is.

If you're uncertain about taking this course, then, by all means, talk to me, or to previous people in it. If there is one specific fact that is unfamiliar, such as eigenvalue, then there's no problem at all.


W. Randolph Franklin. BSc (Toronto), AM, PhD (Harvard)

I've been doing graphics related programming since the 1960s, and have been teaching versions of this course since 1982. I've been at RPI since 1978, apart from several absences, including a year at Berkeley, 3 months at Genoa, and shorter times at Laval University in Quebec City, the Commonwealth Scientific and Industrial Research Organization in Canberra, and the National University of Singapore. I also spent 2 years 7 months as Director of the Numeric, Symbolic, and Geometric Computation Program at the [[http://www.nsf.gov/|National Science Foundation]], recommending how to spend your tax dollars (thanks!).

My current research on representing terrain, is largely supported by the Defense Science Office of the Defense Advanced Research Projects Agency. DARPA people are crazy. My main worry is that I'm not crazy enough for them.

W. Randolph Franklin
Jonsson Engineering Center (JEC) 6026
(518) 276-6077
wrfATecseDOTrpiDOTedu, making the obvious substitutions.
Office hours
after each lecture. Usually I stay as long as anyone wants to talk.
Preferred communication medium

Course Homepage


Reading Material


As listed on the RPI Bookstore site:

 ECSE - 4750 - 01 - TROY
 Author: ANGEL 	Edition: 4TH 	 
 Pub: AW 	Req / Opt: R 	 
 New Price: $106.25 	Used Price: $79.75 	 

 ECSE - 4750 - 01 - TROY
 Author: WRIGHT 	Edition: 4TH 	 
 Pub: PH 	Req / Opt: O 	 
 New Price: $59.99 	Used Price: $45.00 	

Angel's web site for his text is here.

There are also several other good OpenGL books, if you have the money. One good (and cheap) one is:

OpenGL : A Primer (2nd Edition) (Paperback) by Edward Angel.

My Notes on Various Graphics Topics

I've prepared web notes on some topics that I think I describe better than the text. They'll be linked from the appropriate lecture.

Assorted online material

There is a lot of good, free, online material about OpenGL and graphics in general. I'll mention some of it; Google can find more.

Class-Only Online Material

Material that for copyright reasons is restricted to the class is here. Log in with user name 4750. I will announce the password in class.

Computer Systems Used

You may use any system that works for you, and that can do the work. My examples will generally be in Linux.

Times & Places


Mon & Thurs, 2-3:20pm, in Sage 3510. The SIS CRN is 80747.

Attendance is not taken. However, I may base an exam question on a student question in class. Also, students may be expected to present some topics in class.

There is plenty of space for new students to enroll.


Wed 2-3:50 in Low 3051.

There will be no scheduled labs at first. I may use the time to make up missed classes.



Midterm Exam

There will be a midterm exam in class as listed in the calendar. You may bring in any printed material, but no computers. No collaboration or communication (except with the staff) is allowed.

The exam may contain some recycled homework questions.


There will be a homework approximately every week. You may do it in teams of 2.

Term Project

A term project will be due. You may do it in teams of up to 3 people. You will implement, demonstrate, and document something related to Computer Graphics. You will present a 15 minute talk on your project TA in one of the last two classes.

Final Exam

There will be a final exam on a date set by the Registrar. You may bring in any printed material, but no computers. You may not share the material with each other during the exam. No collaboration or communication (except with the staff) is allowed. The final exam will contain material from the whole course, but more from the last half.

Weights and Cutoffs

All the homeworks together25%
Midterm exam25%
Term project25%
Final exam25%

Even if the homeworks be out of different numbers of points, they will be normalized so that each homework has the same weight.

Course percentageLetter grade

Missing or Late Work

We will drop the lowest homework grade. That will handle excused absences, unexcused absences, dying relatives, illnesses, team trips, and other problems. Unless otherwise stated, the homeworks will be due on paper in the lecture. Late homeworks will not be accepted.

If you miss the midterm because of an excused absence, we will use your final exam grade also as your midterm grade.

If you miss the final exam because of an excused absence, you may demonstrate your knowledge of the 2nd half of the course at an individual oral makeup exam.

If your term project is late, you will be offered an incomplete and the project will be graded in Jan 2008.

Grade Distribution

Whenever there is a new grade, we'll email the class.

Verifying Grades

When we return a graded homework or exam to you, please report any errors within one week.

When we report grades to you, please report any missing grades within one week.

It is not allowed to wait until the end of the semester, and then go back 4 months to try to find extra points. It is especially not allowed to wait until the end of the following semester, and then to try this. (Yes, someone tried this last year.)

Honesty Policy

You may collaborate on homeworks, but each team of 1 or 2 people must write up the solution separately using their own words. We willingly give hints to anyone who asks.

The penalty for two teams handing in identical work is a zero for both.

You may get help from anyone for the term project. You may build on a previous project, either your own or someone else's. However you must describe and acknowledge any other work you use, and have the other person's permission, which may be implicit. E.g., my web site gives a blanket permission to other people to use it for nonprofit research or teaching. You must add something creative to the previous work.

The penalty for plagiarism is a zero grade.

You must not communicate with other people or machines or use electronic aids like computers and PDAs during exams. That includes not exchanging books and notes during the exam. You may use as many paper books and notes as you can carry, wheel, or drag into the room.

The penalty is a zero grade on the exam.

Also, all cheating will be reported to the Dean of Students Office.

The penalty for handing in the answer for a slightly different question that was on last year's homework or exam, because you copied but didn't even see that the question was different this time, is a zero and our scornful laughter.

Ditto for writing an exam answer that was more appropriate for the version of the exam handed out to other people in the room.

(:showhide div=syl:)

(:showhide div=ann init=show lshow='Show Announcements' :)


Date Event
Sep 4

Jon Muckell assigned as TA. His email is


He will hold office hours in the scheduled lab session.

Sep 10

The simple.c program that I discussed in class today needs one more line to run. It's glutInit(&argc,argv); in main. I've added it and called the new file simple2.c .

Sep 10

In order to cover more material, for awhile we'll have lectures also in the labs, on Wed, starting this Wed, Sep 12.

Sep 12

Homework 2 is online.

Sep 20

Homework 3 is online.

Sep 24 To compile the OpenGL examples in Visual C: If you get a

redefinition error for exit, then do not include stdlib.h in your program. It is already included by another include file, and it lacks an inclusion guard. Thanks to Julio.

Oct 4

Homework 5 is online.

Oct 4

Final exam is set for Wed Dec 12 at 3-6 pm. Please tell me if you have a conflict (and what that conflict is).

Oct 10

Homework3Solution.doc and Homework4Solution.doc are online.

Oct 24

Summer Opportunity - SIGGRAPH Student Volunteer

is the biggest Computer Graphics conference. In 2008, it's Aug 11 to 15 in Los Angeles.

Everyone who likes graphics should see it once. Student interns can see it cheap. If you work halftime then admission and a place to stay are free, and they might also pay for transportation. Hard deadline: Feb 24.

I strongly recommend this opportunity.

Oct 24

Term project details and Homework 6 online.

Nov 14

It's time to get those project proposals (and even first progress reports) in.

Nov 14

Would anyone be interested in spending a few weeks in Brazil learning to collaborate on research with Brazilian colleagues? This question is to gauge student interest, as I'm considering writing an NSF proposal.

Nov 28 All the Wed Dec 5 slots for presenting term projects are

full, so any one who did not sign up is assigned to Monday Dec 3.

(:showhide div=ann:)

(:showhide div=exams init=hide lshow='Show Exams' :)


I've moved dates about homeworks, labs and lectures to their sections. This avoids redundancy.

Date Event
Oct 11 Midterm F2007 MidtermSolution.doc

Scatterplot of Midterm Grade vs Finish Order

Oct 19 last day to drop classes
Dec 12 final exam, 3-6 pm.

(:showhide div=tp init=hide lshow='Show Term Project' :)

Term Project


  1. For the latter part of the course, most of your homework time will be spent on a term project.
  2. You may do it in teams of up to 3 people. A team of 3 people would be expected to do twice as much work as 1 person.
  3. You may combine this with work for another course, provided that both courses know about this and agree. I always agree.
  4. You may build on existing work, either your own or others'. You have to say what's new, and have the right to use the other work. E.g., using any GPLed code or any code on my website is automatically allowable.
  5. You will implement, demonstrate, produce a video on, and document something vaguely related to Computer Graphics.
  6. You will sign up later on Google calendar to demo it in one of the last few classes.


  1. Nov 1: title, team members, 100 word summary.
  2. Nov 15: brief progress report.
  3. Nov 29: brief progress report.
  4. Dec 3 or 5: 10 minute talk in class. There will be a signup sheet; sign up early to get your first choice.
  5. Dec 6: final project report including code, video, documentation.


  1. An implementation showing dynamic interactive or 3D graphics.
  2. A video showing it running.
  3. An implementation manual showing major design decisions.
  4. A 10 minute talk in class.


Anything vaguely related to Computer Graphics is ok.

  1. A tutorial program to demo some idea in this course, such as quaternions, which I might use in future years.
  2. A 3D game.
  3. A psychophysics experiment to test how well users can match colors.
  4. A physical simulation of 3 body orbits.
  5. A 3D fractal or julia set generator.
  6. An L-systems generator for random plants (as in botany).
  7. Get an idea from Pittsburgh's CS 1566: Introduction to Computer Graphics Class Project Repository

(:showhide div=hw init=hide lshow='Show Homeworks' :)


There will be about a dozen homeworks.

Due Questions Solution
Sep 6 Homework 1 Homework1Solution.pdf
Sep 20 Homework 2 Homework2Solution.doc
Sep 27 Homework 3 Homework3Solution.doc
Oct 4 Homework 4 Homework4Solution.doc
Oct 11 Homework 5
Wed Oct 31 Homework 6

(:showhide init=hide div=lec1 lshow='Show Aug and Sept Lectures and Labs' lhide='Hide Aug and Sept Lectures and Labs' :) (:showhide init=hide div=lec2 lshow='Show Oct Lectures and Labs' lhide='Hide Oct Lectures and Labs' :) (:showhide init=show div=lec3 lshow='Show Nov-Dec Lectures and Labs' lhide='Hide Nov-Dec Lectures and Labs' :)

I'll write a one sentence summary of each lecture, after the class.

No Date Summary
1 Mon Aug 27 Intro by Prof Nagy
Wed Aug 29 no class
Thu Aug 30 no class
2 Thu Sep 6
  1. Engineering Grounded In Reality
  2. Angel powerpoint lecture slide set 1. I'll give the password in class.
  3. A little on API philosophy, e.g, PortabilityAndStandards, and submarine patents.
  4. Angel powerpoint lecture slide set 2.
3 Mon Sep 10
  1. Angel powerpoint lecture slide set 3 Models and Architectures
  2. Angel powerpoint lecture slide set 4 Programming with OpenGL, Part 1: Background. First program: simple.c
4 Wed Sep 12
  1. Reading up to now: Angel chapter 1.
  2. OpenGLSummary
  3. Angel powerpoint lecture slide set 5 Programming with OpenGL Part 2: Complete Programs
  4. Demo, discuss, and modify shape_test.c
5 Thu Sep 13
  1. Angel powerpoint lecture slide set 6 Programming with OpenGL Part 3: Three Dimensions
  2. Demo, discuss, and modify gasket2.c
  3. Demo, discuss, and modify gasket3.c
  4. Angel powerpoint lecture slide set 7 Input and Interaction
    1. logical input devices
    2. X window input, client-server model. (In X, the client is the machine where the processing is done; the server displays the graphics.)
    3. callbacks, incl idle callback
    4. request vs event mode
    5. post redisplay - use this when you've changed something and so the system has to update the display.
    6. double buffering
6 Mon Sep 17
  1. single_double.c. Shows:
    1. The difference between single and double buffering.
    2. Creating two graphics windows in one program. Note the order:
      1. Set the display mode.
      2. Create the window.
      3. Register the callbacks.
      4. Repeat for each window.
      5. Call MainLoop.
    3. Mouse input.
    4. Changing the idle callback. The new one replaces the previous one. (This answers a question in class a few days ago.)
  2. getinfo.c. Shows how to read information about the OpenGL version and how to get internal state variables. This shows just a sample; there are more.
  3. showinput.c. Shows how to get input. This also shows the coordinate system used to report mouse events. Units are pixels.
       (0,0) ...... (xmax,0)
  4. Angel powerpoint lecture slide set 8
    1. more on callbacks
7 Wed Sep 19
  1. Here are refs answering a question asked after Monday's class on how to avoid tearing caused by swapping the foreground and background buffers in the middle of refreshing the image and the two buffers have different images.
    1. One solution is to wait until the vertical retrace to swap the buffers. However, if each buffer takes about 1/60 second to recompute, sometimes more and other times less, then the refresh rate will fluctuate between 1/60 and 2/60 second.
    2. Another solution is to use 3 buffers. You display from the 1st, have the 2nd ready to swap with the 1st in the next vertical retrace, and meanwhile compute into the 3rd. This uses 50% more memory.
    3. How to fight tearing
    4. OpenGL Extension WGL_I3D_swap_frame_lock
    5. Smooth Gaming with Triple Buffering
  2. square2.c. Demonstrates glutMotionFunc callback. Change glutMotionFunc to glutPassiveMotionFunc to see what happens.
  3. manywindows.c. Shows that many top level windows (a new one with each left mouse click) can be dynamically created.
  4. paint.c, a simple paint program showing hierarchical menus. Note that is is still using immediate mode graphics; redrawing erases everything.
8 Thu Sep 20
  1. paintxor.c modified by paint.c to write triangles into the color buffer in XOR mode. Everything else is still written in COPY mode. XOR mode is useful for cursors and rubberbanding because XORing the same object twice restores the original buffer.
  2. Angel powerpoint lecture slide set 9 Better interactive programs
  3. Angel powerpoint lecture slide set 10 Geometry
9 Mon Sep 25

I will present transformations 3 different ways to help you understand this important topic.

  1. Angel powerpoint lecture slide set 11 Representation
  2. Angel powerpoint lecture slide set 12 Transformations
  3. My note on homogeneous coordinates and projections demoed by Albrecht Durer
    (The following display better in Firefox than Internet Explorer.)
  4. Homogeneous matrix examples, p' = M p for
    1. Translate by (1,2,3):
      {$M = \left(\begin{array}{cccc} 1 & 0 & 0 & 1\\ 0 & 1 & 0 & 2\\ 0 & 0 & 1 & 3\\ 0 & 0 & 0 & 1\end{array} \right)$} . This also works: {$M = \left(\begin{array}{cccc} 2 & 0 & 0 & 2 \\ 0 & 2 & 0 & 4 \\ 0 & 0 & 2 & 6 \\ 0 & 0 & 0 & 2 \end{array} \right)$}
    2. Rotate around Z axis by an angle whose cosine is 0.6:
      {$$ M = \left(\begin{array}{cccc} .6 & -.8 & 0 & 0 \\ .8 & .6 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array} \right)$$}
10 Wed Sep 27
  1. My note on 3D rotation
    1. all rigid transformations in 3D that don't move the origin have a line of fixed points, i.e., an axis, that they rotate around.
    2. deriving the vector formula for a rotation given the axis and angle
    3. computing the matrix from a rotation axis and angle
    4. testing whether a matrix is a rotation
    5. if it is, then finding the axis and angle
  2. Bill Jacobs' OpenGL video tutorial - excellent
11 Thu Sep 28
  1. Rotations continued
  2. Angel powerpoint lecture slide set 13 OpenGL Transformations

(:showhide div=lec1 lshow='Show Aug and Sept Lectures and Labs' lhide='Hide Aug and Sept Lectures and Labs' :)

No Date Summary
Mon Oct 1 no class; prof presenting research results at NGA and DARPA
12 Wed Oct 3

Jon Muckell presents OpenDX, an open source visualization software package based on IBM's Visualization Data Explorer.

IBMs Data Explorer - OpenDX tutorial

OpenDX vs OpenGL

OpenGL - fast, portable, close to hardware, event-driven

OpenDX - specifically for data visualization, data should be computed before using openDX. Many default parameters and abstraction allows the user to quickly visualize the data.

Installing OpenDX

The simplest way to install OpenDX is to use YaST or some automated installation tool that will install from an RPM. Installing from source can be unusually tricky.

If you are running Windows you need to have Cygwin installed

Installing on SUSE 10 Linux

  1. Open YaST and then Installation Source
  2. Add the following URLs



  1. Then open Software Management and search for dx and install all appropriate items
  2. The install is successful if you can type dx in the terminal and openDX runs

How To Make a Simple Picture in OpenDX

I'm going to walk you through an example I made of visualizing two protein chains. First you'll need to download my example Protein.tar.gz containing the following files.

  • Protein.net - This is the actual OpenDX file
  • protein_e.general - This is the header information for file 1acb_e.out
  • 1acb_e.out - This is the actual data being fed in

protein_i.general and lacb_i.out is the data relating to the other protein chain, we don't have to worry about that for now.

Describing your Data

The Header File - protein_e.general

First open up the following two files protein_e.general and lacb_e.out

protein_e.general is the header file for lacb_e.out and contains the following information.

file = lacb_e.out #Where Data Explorer finds the actual data (consisting of points)
points = 649 #How many points are contained in each series (For this example - How many lines of our data do we want to read in)
series = 1 #We have only one set of points
field = locations #What do we want to call the variable we read in (our variable contains an x,y & z because its a 3-vector, see structure
structure = 3-vector #Each position is made up of 3 variables, so its type is a 3-vector
layout = 1,6 #At each line, for each x,y and z we skip 1 character/byte and read in 6
header = 0 #Do not skip any lines before we start reading points
interleaving = field

The Data - lacb_e.out

18.252 4.407 16.785
18.524 4.005 18.191
19.961 4.353 18.422
. . . . .
Total of 649 points

Note OpenDX skips one character and then reads in 6, as described in layout in the header file. Therefore there is two spaces between 18.252 and 4.407, and there is only one space between 4.407 and 16.785

Running The Program

  1. To run the program you'll need to first change the import path. Double click on one of the Import palettes. Change the path /home/muckellj/Documents/DX/DATA/protein_i.general to your appropriate path. Repeat for the second Import palette.
  2. Under the Execute Tab click Execute Once
  3. If you have done this correctly you should see an image of one red and one blue protein chain.

Palette Description

A palette only has an effect on the program if there is a path from the palette to the image(or display) palette.

  • IMPORT: This palette reads in from the header file (typically a .general file), and imports the data into the program. We require two imports for this program because we are reading in from two different data files, one for each chain. To display only one protein chain, simply disconnect one of the wires leading to COLLECT.
  • GLYPH: This palette has the effect of creating each of the different spheres. If you double click on one of the glyphs, you'll notice that the type is "sphere" this can be changed to numerous other geometric types. If you click Expand and look at the other values you can set, you'll notice that both min and max are set to the same value. This is because we want all the sizes of the spheres to be the same size.
  • COLOR: Colors each sphere
  • COLLECT: Puts the two chains together to be used as a single image
  • IMAGE: Displays the image

How To Make a Animation in OpenDX

The file animates two protein chains with the camera moving around the objects. ProteinAnimate.tar.gz

The program is the same as the one above except we added a few more palettes. We needs to use the DISPLAY palette so we can specify where we want the camera to be positioned. We then use the ReadImageWindow palette to read the display window and then output that result to the image palette. The final result needs to reach the image palette because that allows us to save the final frames.

SEQUENCER: This is a crucial palette for creating animations because it allows us to increment numbers. For example, in this program the sequencer increments from 0 to 360 which relates to the current rotation of the protein chains for each of the 361 frames.

  1. Under the Execute tab click Execute on Change
  2. In the Image window click on the Execute tab and the click on Sequencer.
  3. Click the forward Arrows to change between frames
  4. To save the frames, under the Image window goto Save Image. We want to have the Format as type MIFF and we want Continuous Saving.
  5. Incriminate the Sequencer with the Continuous Saving applied. SaveAnimation.tiff
  6. We will use image magick to convert the miff file into an mpeg using the command convert ProteinRotate.miff ProteinRotate.mpeg. NOTE you probably will need to add this file to your bin - mpeg2encode
  7. Run your mpeg - I use MPlayer mplayer ProteinRotate.mpeg

Here is the animation: ProteinRotate.mpeg

Some Example MPEGS made using OpenDX



13 Thu Oct 4
  1. Review rotations, including the example just added to My note on 3D rotation.
  2. Read relevant parts of Angel, chapter 4.
  3. My note on 4D rotation. In 4D, there is no fixed axis, but there is either a fixed plane or no fixed point except the origin.
  4. Quaternions. Refs:
    1. my paper paper
    2. Angel, page 224ff.
    3. Quaternion Examples
    4. Sample exam question:
      What rotation does this quaternion represent: {$q = 0.707 + 0.707 j$}
      Answer: a {$90^\circ$} rotation about the axis {$(0,1,0)$}
  5. Angel powerpoint lecture slide set 14 Building Models
    This section tells how to draw polyhedra more easily than with many glVertex calls. You can load the vertices into an array and then do a lot with one hi-level call. This may be more efficient and also reduces programming errors.
Mon Oct 8 no class; Columbus Day
14 Tues Oct 9
  1. Demonstrate 3D rotations in Maple using Gfiles:rot_maple.code
  2. Review slide set 14.

Zero or more of the following:

  1. Angel powerpoint lecture slide set 15 Classical Viewing
    The fine distinctions in classical viewing are not relevant to this course.
  2. Angel powerpoint lecture slide set 16 Computer Viewing - 1st pass
15 Wed Oct 10

Review for midterm

Here is some material to help you study for the midterm. This year's topics may be slightly different, but will be mostly the same. Since there are a finite number of electrons in the universe and they say that recycling is good, I'll recycle many of these questions.

I'll discuss answers in the review, or you may figure out answers on your own.

  1. Sample questions
  2. Fall 2006 midterm
  3. Spring 2005 midterm
  4. Fall 2005 midterm


  1. normalizing a vector: divide all components by the vector's length, to make its length 1.
  2. questions from F2006 not on tomorrow's exam: 4, 9, 11, 13, 15, 19
  3. questions from S2005 not on tomorrow's exam: 4, 12, 22
  4. homogeneous matrix to scale by 5:
    {$ \left(\begin{array}{cccc}5&0&0&0\\0&5&0&0\\0&0&5&0\\0&0&0&1\end{array}\right)$}
16 Thu Oct 11

Midterm F2007. You may bring any printed, copied, or written material, but no computers or calculators.


17 Mon Oct 15

To unwind from the midterm, Jon Muckell will let you play with test the Bluetooth Laser Virtual Keyboard while I'm in St Louis.

17 Wed Oct 17

Today's big idea is the view normalization transformation. Routines like gluLookAt and gluPerspective really create a viewing transformation matrix so that the original scene when viewed with your desired parameters gives the same image and the transformed image seen with a standard projection and clip volume.

See the OpenGL Reference Manual on viewing.

  1. Angel powerpoint lecture slide set 16 Computer Viewing - 2nd pass
  2. Angel powerpoint lecture slide set 17 Projection Matrices
18 Thu Oct 18

Today we switch to a completely different topic.

  1. Angel powerpoint lecture slide set 18 Shading I
  2. Angel powerpoint lecture slide set 19 Shading II
19 Mon Oct 22
  1. I attempted to email to each student our view of your grades. If you didn't receive this, or there was an error, please tell Jon and me, and sorry about the error.
  2. Note this excellent talk The Art and Science of Computer Graphics by Don House today at 4 in JEC3117:
  3. Angel powerpoint lecture slide set 20 Shading in OpenGL
20 Wed Oct 24
  1. Computer graphics in the real world
    1. Forma Urbis Romae - reconstruction of a street map of 211AD Rome from 1186 pieces like this one:
  2. Another OpenGL tutorial The Practical Physicist's OpenGL tutorial Edward S. Boyden
  4. Look at demo programs used for Homework 6.
  5. Term project details
  6. Angel powerpoint:
    We now change from learning the API to studying how things are implemented under the API.
    1. Angel powerpoint lecture slide set 21 Implementation I - Rasterization, Clipping
21 Thu Oct 25
  1. Angel powerpoint:
    1. Angel powerpoint lecture slide set 22 Implementation II - Clipping, Visibility
    2. Angel powerpoint lecture slide set 23 Implementation III
22 Mon Oct 29

Advantage of using Cohen-Sutherland:

  1. You always have to use the detailed clipping since sometimes the CS algorithm reports that it doesn't know.
  2. However often it can classify the line segment (or the box with everything inside) as either completely in or else completely out.
  3. In that case, the rest of the pipeline is faster.
  4. However you have to write more lines of code.
  5. You don't have to know how this works, only what its purpose is.

Bresenham presents the fast line and circle drawing algorithms better than the text.

23 Wed Oct 31

Chance to ask Jon questions about, and demo, the homework.

(:showhide div=lec2 lshow='Show Oct Lectures and Labs' lhide='Hide Oct Lectures and Labs' :)

No Date Summary
24 Thu Nov 1


  1. For more info on testing whether a point is in a polygon, see my note. Also see the comp.graphics.algorithms FAQ, question 2.03.
  2. The flood fill will fail if the interior is not connected. That happens when two close edges cause adjacent pixels to be set. It will also fail if there is a gap in the perimeter - the color will leak out.
  3. The scan line fill must handle special cases like a vertex being on a scan line. My solution is to pretend that any vertex on a scan line is really slightly above. This is a simple case of a serious technique called ''Simulation of Simplicity'' invented by Herbert Edelsbrunner.
  4. Angel powerpoint
    1. Angel powerpoint lecture slide set 24 - Buffers
25 Mon Nov 5

Special guest lecturer! Tobi Saulnier, PhD (EE) RPI, Founder and CEO, 1st Playable Productions talk: realtime-graphics-in-games 11-05-07.ppt

26 Thu Nov 8

Special guest lecturer! Prof Barb Cutler,

27 Mon Nov 12
  1. Angel powerpoint
    1. Angel powerpoint lecture slide set 25 - Texture mapping
    2. Angel powerpoint lecture slide set 26 - OpenGL texture mapping. As always in engineering, there are more details than you might expect.
28 Wed Nov 14
  1. Angel powerpoint
    1. Angel powerpoint lecture slide set 27 - Compositing and blending. The executive summary would be what this is and a list of applications.
    2. Angel powerpoint lecture slide set 28 - Programmable pipelines
    3. Angel powerpoint lecture slide set 29 - GLSL I.
    4. Angel powerpoint lecture slide set 30 - GLSL II.
29 Thu Nov 15
  1. Smooth Shading 'Gotcha's in OpenGL by Steve Baker.
  2. Alpha-blending and the Z-buffer by Steve Baker.
  3. [[http://sjbaker.org/steve/omniv/eulers_are_evil.html|\ Euler Angles are Evil]] by Steve Baker.
  4. Lesson 4: Lighting by Bill Jacobs.
  5. Lesson 5: Textures by Bill Jacobs.
  6. Lesson 6: Putting It All Together by Bill Jacobs.
  7. Angel powerpoint
    1. Angel powerpoint lecture slide set 31 - Hierarchical modeling II.
    2. Angel powerpoint lecture slide set 32 - Hierarchical modeling II.
    3. Angel powerpoint lecture slide set 33 - Graphical objects and scene graphs.
30 Mon Nov 19
  1. Angel powerpoint
    1. Angel powerpoint lecture slide set 34 - Particle systems.
    2. Angel powerpoint lecture slide set 35 - Curves and surfaces.
    3. Angel powerpoint lecture slide set 36 - Designing parametric cubic curves.
    4. Angel powerpoint lecture slide set 37 - Bezier and spline curves and surfaces.
31 Mon Nov 26
  1. Angel powerpoint
    1. Angel powerpoint lecture slide set 38 - Rendering curves and surfaces.
    2. Angel powerpoint lecture slide set 39 - Curves and surfaces in OpenGL.
    3. Angel powerpoint lecture slide set 40 - Ray tracing.
32 Wed Nov 28
  1. Angel powerpoint
    1. Angel powerpoint lecture slide set 41 - Radiosity.
    2. Angel powerpoint lecture slide set 42 - Parallel rendering.
  2. Paper tips:
    1. Make the abstract clear:
      "We describe how to transmute lead into gold. That builds on our earlier successes transmuting lead into copper, tin, and silver. More gold prevents renewed price inflation. Our technique starts by irradiating polywater with N-rays...."
    2. Start with a title, your name, coordinates, date.
    3. Say what you did, how you did it, why it's useful, what earlier work you built on.
    4. Include examples showing what works. If you describe a feature but don't include a screendump or video, then I'll guess that you weren't able fully to debug and get it working.
    5. Have a few references.
    6. Proofread for mispellings and words out.
    7. Don't play games with the formatting --- odd fonts, colors, etc.
    8. Binders are not necessary.
  3. Video possibilities:
    1. Create a series of jpeg images, then convert them to a video.
    2. Use a screen capture program.
  4. Talk tips:
    1. The hardest part will be keeping to the schedule.
    2. E.g., put your talk online, then use the podium computer.
33 Thu Nov 29
  1. Angel powerpoint
    1. Angel powerpoint lecture slide set E1 - Marching squares: tracing along the zero-surface of an implicit function.
    2. Angel powerpoint lecture slide set E2 - Virtual trackball (very brief)
    3. Angel powerpoint lecture slide set E3 - Display issues: There is a lot of material here. Important vocab includes tristimulus, color gamut, CIE chromaticity diagram, NTSC, YIQ, and CMYK.
  2. My note on NTSC And Other TV Formats.
34 Mon Dec 3 term project presentations in class
  1. 2:00 Melih Ozlem
  2. 2:30 Danlester Delarosa & Timothy Herrmann
  3. 2:40 Tamara Sobers & Julio Lajara
  4. 2:50 Brian Farrell
  5. 3:00 Steve Meza
  6. 3:30 Samuel Hughes & Thomas Smith
  7. 3:40 Peter Littlefield

(In case of no-shows, we will advance the remaining speakers.)

35 Wed Dec 5 term project presentations in class
  1. 2:00 Zachary Barth & Daniel Hathaway
  2. 2:10 John Bungert
  3. 2:20 (Taylor) Gregg Lehman
  4. 2:30 Daniel Wojcik
  5. 2:50 Steven Warner
  6. 3:00 Patrick Marion
  7. 3:10 Benjamin Consolati
  8. 3:20 Jason Anyalebechi
  9. 3:30 Venkata Sreekanth Arikatla & Yuan Gao
  10. 3:40 Daniel Book
36 Thu Dec 6

term project presentations in class

  1. 2:10 Paul Luong
  2. 2:20 Christopher Stuetzle
  3. 2:30 William Durr

review for final exam

(:showhide div=lec3 lshow='Show Nov-Dec Lectures and Labs' lhide='Hide Nov-Dec Lectures and Labs' :)

Angel powerpoint slide directory