Computer Science 22C:251, Spring 2008
Class Time: Tuesdays & Thursdays 9:30-10:45am, 218 MacLean Hall
[ Download a Syllabus ]
| |
Professor: Chris Wyman
E-mail: cwyman@cs.uiowa.edu (Preferred contact method)
Office: 101J MacLean Hall
Phone: (319) 353-2549 (Please use e-mail when possible)
Office Hours: TTh 10:45 am - 12:15 pm
|
Course Synopsis
Open to any student with basic OpenGL experience. We'll cover in greater depth the OpenGL pipeline:
- Performance considerations and rendering bottlenecks.
- Programmable hardware (vertex, geometry, and fragment shaders) and fixed-function pipeline limitations.
- Ways of accelerating "non-traditional" graphics problems (e.g., visualization, image processing)
- Ways to accelerate more realistic rendering techniques.
|
Textbooks:
Announcements:
- (5/15/08) -- Scores for Homework #5: 30, 30, 37, 42, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, 50.
- (5/15/08) -- By request, I have posted slides for the graphics hardware overview from last week.
- (5/07/08) -- Scores for Homework #4: 22, 30, 30, 34, 36, 40, 45, 45, 50, 50
- Individual e-mails will go out shortly to all students submitting an
assignment via ICON.
- (4/16/08) -- A tentative version of Homework #5 has been posted, to help you plan out
the rest of the semester. Please note it is due during the scheduled final exam period
for this class: Thursday, May 15th at 9:45am. We will use this time for you to
present your projects to the class. The assignment will be finalized next Wednesday
after I take a look at your Homework 4 submissions.
- (4/16/08) -- Scores for Homework #3: 25, 45, 46, 47, 48, 48, 48, 50, 50, 50, 50, 50, 50.
- Individual e-mails will go out soon to students not getting 50.
- If you still have not submitted your assignment, please talk to me.
- (4/07/08) -- If you downloaded the Linux version of the OpenGL framework before today, there was a typo in
the README in the instructions for setting up your LD_LIBRARY_PATH to find GLEW in the 301
lab machines. If you're having problems when running the framework due to problems locating
GLEW, take a look at the updated README.
- (3/30/08) -- I've posted the OpenGL framework I briefly showed in class on Thursday. We'll discuss this
more on Tuesday. It's available in
Windows/Visual Studio and
Linux/g++ flavors.
- (3/26/08) -- Homework #4 has been posted. Please beware this is not one
you want to procrastinate on.
- (3/24/08) -- Scores for Homework #2: 45, 45, 47, 47, 47, 48, 48, 48, 48, 48, 50, 50, 50, 50, 50, 50.
- Individual e-mails will go out (tomorrow) to students not getting 50
- (3/24/08) -- If you have been getting frequent, annoying, hard-to-find seg-faults in your code, perhaps dealing with
GL functions, I have two possibilities that might be the cause of your problems:
- The lifeStart.ppm file was a RAW (not ASCII) PPM file, which
your code might not handle. I have re-saved this file as an ASCII PPM.
- You may not be initializing GLEW correctly (i.e., call glewInit() after glutCreateWindow() and
before glutMainLoop()), which means the extension functions (such as glBindFramebufferEXT())
are simply NULL pointers and calling them dereferences a NULL pointer.
- (3/24/08) -- If you are using Windows for your assignments, you may have problems reading shaders into a text file due
to difference in line termination between Windows and Unix ("\r\n" versus "\n"). In particular, Microsoft's
Standard I/O routines silently add and remove these carriage returns, which can over-fill or under-fill
character arrays sized based upon your shader file size. If you are having corruption problems when loading
your shaders, you can use this code to read your
shader file into a character array, which actually addresses the problem in two ways:
- It uses calloc() instead of malloc() to initialize the allocated memory.
- It null-terminates the shader string not based upon the file size (which works on Unix systems)
but rather based upon the number of bytes read by fread().
- (2/27/08) -- Homework #3 has been posted. It is due Thursday, March 27th.
- (2/27/08) -- Scores for Homework 1: 42, 42, 45, 48, 48, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50.
- I will send out details today to those students who did not receive a 50.
- (2/25/08) -- Here are the two sample GLSL box filters I wrote in
class last Thursday: (1) (2)
- (2/21/08) -- Useful OpenGL extension links:
- Specification for geometry shaders
- Specification for framebuffer objects
- (2/20/08) -- I sent out this to most of you who qualify already, but AMD has an
interesting internship
opening in their graphics research group this summer. The application deadline is soon.
- (2/13/08) -- I have posted Homework #2, which will be due February 28th. This
is the fastest turnaround for an assignment this semester (I'll usually give you more than 2 weeks),
but will allow me more time to divide among the last three, more interesting assignments.
- (2/4/08) -- If you have problems loading models, textures, shaders, etc. this semester, double check that the
file you are loading has the same name as the file on disk. While I try to have my code fail
gracefully when it cannot find the specified file, I cannot guarantee it will always happen.
In particular, it appears that glm does not fail gracefully when passed a non-existant file.
Please note that the large Buddha has a ".obj" suffix, not a ".smf" suffix.
- (2/3/08) -- Using vertex arrays with glm isn't as simple as one would expect, because glmVertexNormals() does a little
bit of squishing duplicated normals so there is fewer than one-per-vertex. This means with vertex arrays
and VBOs, your dragon will be lit correctly on one side and look like noise on the other. The best way to
fix this is to modify glmVertexNormals() so it generates one vertex per normal. However, this may require
changes to the rest of glm to make sure nothing breaks. For my demo, I used
this modification to glm to eliminate this problem. You may use
it as well.
- (1/30/08) -- Things to think about if you like graphics:
- (1/29/08) -- Here are the demos I wanted to show in class today but had trouble due to Vista->XP issues.
- Hit the numbers '1' '2' '3' and '4' to switch between the various rendering modes.
- Rendering mode comparisons for
Dragon w/250k Triangles and
YeahRight w/755k Triangles (Windows executable).
- Linux executables are available here.
- Note: These work in the 301 lab on any machine, but you must physically be there -- you cannot run them over SSH.
- There is a significant difference between most machines and the ones with a GeForce 8600!
- Read the README if you have trouble with GLEW when you try to execute these programs under Linux.
- (1/29/08) -- The first homework has been posted below. It is due
on February 14th. You should not need DirectX 10-class hardware for this
assignment. Any machine with OpenGL 2.0+ should work. Please note that
over the next few days, I will upload a number of code snippets you can
use to make housekeeping details much easier in your code.
- (12/18/07) -- Windows users who wish to check the capabilities of their graphics card may
download this utility, which checks
for the presence/absence of important OpenGL extensions that will be used during the
semester and gives a brief synopsis of how likely you are to run into problems.
Assignments:
(Submit your assignments using ICON. Follow these instructions. In particular, only submit one single .zip or .tgz file.)
| |
|
Homework #5 (Due: Thursday, May 15th @ 9:45am)
|
|
Homework #4 (Due: Tuesday, April 22nd)
Windows OpenGL Framework for Visual Studio: [.zip] [README]
Linux OpenGL Framework (w/Makefile for g++): [.tgz] [README]
Windows (only) demos:
Complex mirror scene demo (Should run on any Windows machine)
Interactive refraction demo (Needs nVidia card with EXT_framebuffer_object extension)
Simple render-to-texture reflections demo (Needs any card with EXT_framebuffer_object extension)
Simple stenciled reflections demo (Should run on any Windows machine)
High-level code snippets:
Stencil-based planar reflections (for demo above) (Briefly examined in class a while ago)
Render-to-texture planar reflections (for demo above) (Briefly examined in class a while ago)
Relevant papers:
Interactive Reflections on Curved Objects
A GPU-driven Algorithm for Accurate Interactive Reflections on Curved Objects
An Approximate Image-Space Approach for Interactive Refraction
Real-Time Relief Mapping on Arbitrary Polygonal Surfaces
|
Homework #3 (Due: Thursday, Mar 27th)
For Problem 1:
More details about the Game of Life.
Sample start state.
Sample input for image processing:
rose,
jittered rose,
noisy rose,
hat lady,
New Zealand
More information about various filters:
[Box Filter]
[Canny Edge Detector]
[Gaussian Filter]
[LaPlace Filter]
[Median Filter]
[Sobel Filter]
For Problem 2:
Sample input models:
Buddha (50k)
Cow
Molecule
Triceratops
Code to load ".hem" models:
[.tar.gz]
[.zip]
Sample usage of .hem code (to convert OBJ->HEM):
[Linux (.tar.gz)]
[Windows (.zip)]
Example images:
Cow,
Buddha 1,
Buddha 2,
Buddha 3 (All drawn silhouettes + phong shaded object)
Code Snippets:
Framebuffer Object Class:
[.h]
[.cpp]
[README]
Frame Capture / Screenshot Class: [.zip]
Video Capture Class (Windows Only): [.zip]
|
Homework #2 (Due: Thursday, Feb 28th)
Simple models can be found here.
|
|
Homework #1 (Due: Thursday, Feb 14th)
Required Models:
Low-Res Dragon,
Mid-Res Dragon,
High-Res Dragon,
Low-Res Buddha,
Mid-Res Buddha,
High-Res Buddha.
Optional Models:
Yeah Right,
Cube,
Bunny
Images:
Transparent Earth Texture (.rgb),
Checker Pattern,
Non-Transparent Earth Texture
Code Snippets:
Code for reading images in PPM, BMP, and RGB formats.
Text drawing utility code: [.cpp] [.h]
Framerate computations: [.cpp] [.h]
High resolution timer (used by framerate class): [.h]
Trackball class: [.cpp] [.h]
GLM code (reads .obj & .smf files)
Sample framework, including Makefile, for 301 MLH lab
that includes all the files, and a basic OpenGL program that demonstrates how to use them.
Sample framework, including Visual Studio Project, for Windows machines
that includes all the files, and a basic OpenGL program that demonstrates how to use them.
Sample display list code for a sphere.
Vertex array code for the same sphere.
Vertex array idea for a more complex object.
| | |
Student Web Pages:
Note: If you do not want your page listed here, please let me know!
- Noah Abrahamson
- Chris Bush
- Jonathan Hall
- Thomas Hansen
- Chelsey Keller
- Ju Li Khaw
- JT Kimbell
- Alberto Lopez Rubio
- Vani Murarka
- Ritesh Nadhani
- Rajeev Penmatsa
- Shashank Polasa Venkata
- David Quackenbush
- Dan Slaubaugh
- Scott Small
- Uday Verma
- Brian Washburn
Notes About Graphics Hardware Requirements:
We will talk about and use very advanced OpenGL features in this course. I plan to teach the course
using hardware based on the "DirectX 10" pipeline. Five machines in the MLH 301 lab are now equipped
with GeForce 8600 GTS donated by nVidia:
- l-lnx126.divms.uiowa.edu
- l-lnx127.divms.uiowa.edu
- l-lnx128.divms.uiowa.edu
- l-lnx129.divms.uiowa.edu
- l-lnx130.divms.uiowa.edu
Please note that these are the only lab machines that are guaranteed to work for all the assignments this
semester. Other machines may work for some assingments or parts of others. Also note that you must
physically be at the terminal to utilize this hardware -- you cannot use it via SSH. These machines
should all be in the back row.
If 5 machines are not enough (when combined with the few people with suitable home machines), I may allow
students access to a few of my lab machines in MLH 317. However, these may not be accessible all the
time, and have Windows (instead of Linux) installed, which may make switching back and forth between 301
and 317 challenging. Please plan to do assignments far enough in advance to handle machine-scheduling
conflicts.
If you do not have a GeForce 8x00 or a Radeon HD 2x00 or 3x00 card (all new in the last year), you
will not be able to do all assignments from home. If, for some reason, you plan to buy a new video card
explicitly for this class, you may wish to chat with me for suggestions.
Helpful Links:
OpenGL Links:
University Policy Links:
Last Modified: Wednesday, October 25, 2007
Chris Wyman (cwyman@cs.uiowa.edu)