Computer Graphics

CSCI 440, Spring Semester, 2008

 

To the Bottom of the Page

 

Instructor:    Dr. Shieu-Hong Lin  

Class time:        MWF   10:30-11:20 at LIB 141

Office Hours:    Tuesday & Thursday    1:30-3:00 pm

Syllabus

 

Weekly progress report:

1.      See the template report here as a word document or a web page.

2.      By Wednesday each week starting from the second week, you should spend around 5 minutes to email me your progress report.

 

For programming assignments:

·        Fill out this self-evaluation report and email it together with all your source code as attachments to me.

·        To set up OpenGL programs on your own Windows platform once for all, download this zip file, unzip it, and read the readme file in the folder to set it up.

 

Online books and tutorials

 

Week 1: Intro to Computer Graphics.  Progress report due Wednesday, Feb 6.

Experiments:

  • Play with (i) projection.exe, lightposition.exe, and shapes.exe from Nate Robin’s tutor repository to learn about the synthetic camera model and the basics of OpenGL primitives for drawing 2D geometric objects, and (ii) a sample program to generate a static 3D scene Static3DScene.zip.
  • Check whether you can successfully compile the following sample programs: simple.cpp and earth.cpp.

Reading #1: Browse through (i) Chapter1 of OpenGL programming guide (the red book), (ii) sections 2, 3, and 7.1 of GLUT 3.0 specification, and (iii) try to understand the sample programs: simple.cpp and earth.cpp.

Lab#1: A Simple Static Scene Viewed from a Static Camera with Orthographic Projection due Wednesday, Feb 6.

 

Week 2: More on event handlers and the related glut functions.  Progress report due Wednesday, Feb 13.

Reading #2:  Read the following parts of GLUT 3.0 specification:  Sections 2~3 on initialization and the event loop, Sections 7.1~7.6 on registration of basic callback functions,  Sections 4.5~4.6 on posting a redisplay event and the swapping of double buffer. Report Due: Wednesday, Feb 13.   

Lab#2: A Dynamic Scene Viewed from a Static Camera with Orthographic Projection (see a sample final executable) Due: Wednesday, Feb 13.

 

Week 3: More on 3D scene modeling.  Progress report due Wednesday, Feb 20.

Reading #3: (i) Chapter 2 of the OpenGL programming guide on state management and geometric objects.  (ii) Play with transformation.exe from Nate Robin’s tutor repository to feel the effects of 3D transformations and its relationship with the GL_MODELVIEW matrix stack. (iii) This Review of 3D Geometry Report Due: Wednesday, Feb 20.

Lab#3A: A Simple Static Scene Viewed from a Moving Camera with Perspective Projection  (See this sample Windows executable solution zip file for Lab #3A.) Due: Wednesday, Feb 20.

 

 

Week 4: Intro to 3D Model Transformations.  Progress report due Wednesday, Feb 27.

Reading #4: (i) Chapter 3 of the OpenGL programming guide on state management and geometric objects. (ii) The 3D transformation tutorial note. (iii) Play with transformation.exe from Nate Robin’s tutor repository to feel the effects of 3D transformations and its relationship with the GL_MODELVIEW matrix stack. (iv) Play with the sample code here to see the use of several of those types of geometric objects available in GLU and GLUT using GLUquadricObj, gluNewQuadric, gluQuadricDrawStyle, gluCylinder, gluSphere, gluDisk, gluPartialDisk.. due Wednesday, Feb 27.

Lab#3B A Dynamic Scene Viewed from a Moving Camera with Perspective Projection  (See this sample Windows executable solution zip file for #3B.) Due: Wednesday, Feb 27.

 

 

Week 5: More on 3D Model Transformations.  Progress report due Wednesday, March 5.

Reading #5: (i) Play with this sample program about Sierpinski gasket fractal (see this link) and watch the console application to see the difference between the windows coordinates you get from the mouse events and the world coordinates of objects in the world.  (ii) Review Chapter 3 of the OpenGL programming guide on state management and geometric objects. (iii) Read the blue book regarding the use of GLUquadricObj, gluNewQuadric, gluQuadricDrawStyle, gluCylinder, gluSphere, gluDisk, gluPartialDisk and review the sample code here to see the use of several of those types of geometric objects available in GLU and GLUT. due Wednesday, March 5.

Lab#4A: Composing Static Scenes Using Basic Geometric Objects and Affine Transformations. Due: Wednesday, March 5.

Lab#4B: Due: Wednesday, March 12.

  • Model the Biola bell tower in 3D, including the three pillars, the bells, the ground supports. 
  • Allow the user to view it either from a fixed camera location or through a camera automatically circling around the bell tower.

 

 

Weeks 6~7:  More on the implementation of advanced GUI features using GLUT; Test #1.  Progress report due Wednesday, March 12.

Reading #6:  (i) Download and play with compact example (sample code and an executable included) demonstrating the implementation of an advanced glut mouse motion function to translate dragging events into actions along X, Y, Z axes. Examine the code to understand the underlying implementation. (ii) Download and play with this example program on the setup of a menu system using GLUT. (iii) Read the following parts of GLUT 3.0 specification:  section 6 on glutCreateMenu, glutAddMenuEntry, glutAttachMenu, section 7.5 on glutMouseFunc, and 9.1 on glutGet. Read the related sections of Online OpenGL 1.1 reference guide on glGetDoublev, glGetIntegerv, and gluProject. Read the usage of acos and fabs  in <cmath> of C++. (iv) Download and play with the code and the executable of the sample 3D scene modeler in this zip file.  Create a simple scene using the modeler and save the scene as a SNAPS?_Scene?.cpp file. Examine and compile this resulting .cpp file to see how it can render the snapshot.

 

Lab#4C: Due: Wednesday, March 19.

Enhance your Biola bell tower graphics program in Lab4B to

  • show the X, Y, Z axes in addition to the bell tower,
  • add a menu and implement the related menu event handlers such that the user can choose one of two operation modes to either (i) move the location of the eyes (i.e. the camera) or (ii) change the center at which the eyes (i.e. the camera) look at by dragging the mouse along X, Y, Z axes, and
  • add a mouse motion event handler and other related functions to realize both operational modes.

 

Test #1 (in-class open-book): 10:30~12:30 Friday, March 14.

·                    See this zipped Windows executable and a screenshot (Jennifer Russell) for problem #5 on a bus moving around a circle.

 

Weeks 8~9:  Introduction to Lighting and material; Spring break.  Progress report due Wednesday, April 9.

Reading #9:  (i) Chapter 4 on color and Chapter 5 on lighting from the Online OpenGL 1.1 programming guide. (ii) Play with lightposition.exe and lightmaterial.exe from Nate Robin’s tutor repository to get a sense of the issue of light and materials and do experiments with the sample code by trying different values for the related light and material parameter to create similar effects you see in  Plates #13, 16, 17 in the appendix of OpenGL Programming guides. (iii) Examine this sample code as an example of the use of light and material, and do experiments with the sample code by trying different values for the related light and material parameter to create similar effects you see in  Plates #13, 16, 17 in the appendix of OpenGL Programming guides.

 

Lab#5: Based on the graphics program you have for Lab#4C or 4B, enhance the program with the following additional features: (i) Properly specify the material properties of your objects, (ii) specify at least one light source and enable lighting in OpenGL, (ii) enable depth buffer testing and properly use the related OpenGL commands to have  hidden surface removal. Due: Wednesday, April 9.

 

Weeks 10-11: Intro to texture mapping; Mission Conference

Reading #10: Report Due: Wednesday, April 16.

·                    Chapter 9 on texture mapping from the Online OpenGL 1.1 programming guide and understand these key OpenGL texture mapping commands.

·                    Play with texture.exe from Nate Robin’s tutor repository to get a sense of the issue of texture mapping.

·                    Download this zipCube.zip and crefully examine how texture mapping of a family picture onto a cube is done through the CreateTexture function in tga.h and tag.cpp to load a tga picture and map it onto surfaces.

·                    Also see texture mapping for  (i): mapping multiple images to surfaces in a static scene, (ii): mapping a checkerboard image onto a glutTeapot object, and (iii): mapping two checkerboard images onto two rectangles.

 

Lab#6: Due: Wednesday, Wednesday, April 16.

  • Enhance the graphics program you have for Lab#4C or 4B with at least texture mapping on the ground (adding a rectangle into the scene to serve as the ground) and possibly other surfaces.

 

 

Week 12:  Review and test

 

Test #2 (in-class open-book): 10:30~12:30 Friday, April 25.

 

 

Weeks 13~14: Intro to interpolation and surface modeling  

Reading #13: Report Due: Wednesday, May 7.

 

 

In-class demo of your 3D virtual-reality prototype: Wednesday, May 14.

 

 

Final 3D virtual-reality project:

 

Demo programs:

 

Useful online references to C++ and C libraries

 

 

To the Top of the Page