CS 450 / 550 -- Introduction to Computer Graphics

4 credits

Fall Quarter 2023


Syllabus and Resources Page

"Computer Graphics is the world's #1 enabling technology. It doesn't matter who you are or how you got here. Computer Graphics is for everyone" -- Mike Bailey

"Imagination will often carry us to worlds that never were. But without it, we go nowhere." -- Carl Sagan

Handouts Classes Projects

This page was last updated: December 2, 2023

Welcome to CS 450/550! I am so glad to have you here. I really enjoy getting to work wth this class. This will be an excellent chance for you to exercise your creativity. You will surprised by what you will be able to do!

Oregon State University Covid-19 Information

For the latest on OSU's Covid policies, click here. Masks are welcome, but not required.

Attention Ecampusers!

A special welcome to all you Ecampusers! It is good to have a cohort here that comes from all over the world. That makes you very special!

You will experience the same course that the on-campus students experience. Same material, same notes, same projects, same quizzes, same tests, and same Zoom Office Hours. There are recorded videos that go along with the notes (they are called "LV" for "Lecture Videos" and you will see them in the same table that has links to the notes).

This course is asynchronous and somewhat flexible, but not self-paced. Our schedule for course content and the due dates provide guardrails for how you need to interact with the material.

Like I do whenever I have Ecampus students, I have setup a time every week to do a Live Lecture so that you can hear a discussion of the topics with the chance to ask live questions. On-campus Graphicsers are welcome to come as well. Based on the surveys, the Live Lectures for Fall 2023 will be Wednesdays at 2:00 Pacific Time. They will last until ~3:30. From then until 3:55 will be Office Hours.

The Zoom-room is: https://oregonstate.zoom.us/j/8340727662?pwd=b01tZ0hJUzdHNUtrdTRqSkdwbG4zdz09

These Live Lectures will be recorded so that if you miss them, you can catch them later.

During the LL, you can also ask questions in the Zoom Chat, and I will answer them during the LL and in a document that I will post in the same place on this Class Resources Page that I post the recorded LL videos.

Thanks, Ecampusers, for being here!

Graphics Thinking Comes First

The goal of this class, at least the first part of it, is to develop your "graphics thinking", that is, how to go from an idea in your head to actually getting the pixels on the screen. To get you to that state as smoothly as possible, we will start by using a part of OpenGL that has been deprecated, but is easier to learn and apply. (In OpenGL, "deprecated" doesn't mean "gone away", it means "not recommended for efficiency reasons".) Later on, you will learn the recommended (i.e., efficient) ways of using OpenGL.

Looking Glass Quilts

I moved the cool Looking Glass Quilts to here so they wouldn't slow down the loading of the Class Resources Page.

To see an academic year calendar, click here.

All students are subject to the registration and refund deadlines as stated in the Academic Calendar.

Stuff You Should Be Interested In:

Class Notes Handouts and Recorded Videos in Place of a Textbook

Course material will consist of my notes and web pages.
All required course materials for this class will cost you $0.00 (i.e., free).

LV = Lecture Video

NOTE: I am still recording new versions of some of the videos. Any topic without an LV is one being recorded still. Stay tuned.
Week #Noteset
0 Class Resources Page         LV
0 Introduction to CS 450/550 1pp 2pp 4pp 6pp LV
0 A Brief History of Computer Graphics 1pp 2pp 4pp 6pp LV
0 Project Notes 1pp 2pp 4pp 6pp LV
0 The Computer Graphics Process 1pp 2pp 4pp 6pp LV
0 The Science of Pixar 1pp 2pp 4pp 6pp LV
0 Getting Started with OpenGL Programming 1pp 2pp 4pp 6pp LV-A LV-B LV-C
1 Khronos Group's OpenGL 4.6 Reference Card PDF
1 The C/C++ Sample Program sample.cpp LV
1 Display Lists 1pp 2pp 4pp 6pp LV
1 GL Utility Toolkit (GLUT) 1pp 2pp 4pp 6pp LV
1 Color in Computer Graphics 1pp 2pp 4pp 6pp LV-A LV-B
1 Sines and Cosines for Animation 1pp 2pp 4pp 6pp LV
1 OBJ Files 1pp 2pp 4pp 6pp LV
2 Lighting 1pp 2pp 4pp 6pp LV-A LV-B LV-C
2 Lighting Steps PDF        
2 Framebuffer 1pp 2pp 4pp 6pp LV
3 Keytime Animation 1pp 2pp 4pp 6pp LV
3 OpenGL Transparency 1pp 2pp 4pp 6pp LV
4 Texture Mapping 1pp 2pp 4pp 6pp LV-A LV-B
4 Test #1 review. HTML
5 Geometric Modeling 1pp 2pp 4pp 6pp LV
5 Vertex Buffer Objects 1pp 2pp 4pp 6pp LV
5 GLM 1pp 2pp 4pp 6pp LV
5 A short GLM Primer HTML
6 Freezing Your Animation 1pp 2pp 4pp 6pp      
6 Shaders 1pp 2pp 4pp 6pp LV-A LV-B
6 Casting Shadows with OpenGL 1pp 2pp 4pp 6pp LV
6 Forward Kinematics 1pp 2pp 4pp 6pp LV
7 Instancing 1pp 2pp 4pp 6pp LV
7 Rendering 1pp 2pp 4pp 6pp LV-A LV-B
8 Stencil Buffer 1pp 2pp 4pp 6pp LV
8 Animation 1pp 2pp 4pp 6pp LV-A LV-B
8 3D Printing 1pp 2pp 4pp 6pp LV
9 Setting the Eye Position on an Orbiting Body 1pp 2pp 4pp 6pp LV
9 Stereographics 1pp 2pp 4pp 6pp LV
9 Looking Glass Stereo Quilts 1pp 2pp 4pp 6pp LV
10 Virtual and Augmented Reality 1pp 2pp 4pp 6pp LV
10 Vulkan 1pp 2pp 4pp 6pp LV
10 More Information PDF      
10 Test #2 Review HTML

Guest Speaker Links

Andrew Glassner, Weta Digital: "Exploring the World with Computer Graphics"
Talk Video
Andrew's short Chicken Crossing

Rob Russ, Pixar: "Behind the Scenes at Toy Story 4

Natasha Anisimova, Blizzard: "Research and Development for Cinematics at Blizzard"

Vinh Le, Pixar (and formerly ILM): "Intro to Visual FX"

Class Schedule

To see an academic year calendar, click here.

For on-campus students, face-to-face class time is: Monday and Wednesday, 12:00 - 1:40. Unless otherwise specified, all classes will be held in the Learning Innovation Center (LiNC) -- Room 228.

Cancelled dates: Nov 22

Note: this schedule is my best guess on where we'll be -- it is only approximate.

Week #Start DateTopics
0 Sept 27 Introductions
Discussion of class objectives and how we will go about it
A brief history of computer graphics
Project Notes
The Computer Graphics Process
The Computer Graphics Vertex-to-Pixel Pipeline
Getting started with OpenGL
1 Oct 2 Getting started with OpenGL
Project #1
Sample program
Color in CG
GL Utility Toolkit
Display Lists
OBJ files
2 Oct 9 Project #2
Lighting: Ambient, Diffuse, Specular, per-vertex versus per-fragment
Framebuffers: the rasterizer, Double-buffering, Z-buffer, Z-fighting
3 Oct 16 Project #3
Keytime Animation
Transparency (blending)
4 Oct 23 Project #4
Test #1 review.
Texture mapping
Natasha Anisimova, Blizzard Games, speaking on "Research and Development for Cinematics at Blizzard", on Wednesday October 25, 12:00 noon. This will be shown on Zoom and in LiNC 228 for on-campusers. Here is the Zoom-room. Confirmed.
5 Oct 30 Geometric modeling: meshes, curves, surfaces, constructive solid geometry (CSG), L-systems
Vertex Buffer Objects (VBOs): their role in non-deprecated OpenGL, how to create them, VBO efficiency versus glBegin-glEnd
Test #1 will be taken on Canvas in a 60-minute interval of your own choosing during November 1-5. It will open at 12:00 noon on Wednesday, November 1 and will close at 23:59 on Sunday, November 5. The test will be unproctored and open notes.
Andrew Glassner, Weta Digital, who spoke (via video) on: "Exploring the World with Computer Graphics" will appear November 1, 12:00 noon, for a live Q&A session. Here is the Zoom-room. Confirmed.
6 Nov 6 Shaders: the GLSL shader programming language, vertex shaders, fragment shaders, uniform variables, out/in variables, the role of the rasterizer
Casting shadows: rendering the depth into a texture, two-pass algorithms
GLM: its role in non-deprecated OpenGL, its role in vertex shaders
7 Nov 13 Rob Russ, Pixar, speaking on: "Behind the Scenes with the Making of Toy Story 4". This will be a live presentation. Monday, November 13, starting at 12:00 noon. Here is the Zoom-room. Confirmed.
Project #6
Forward kinematics: general hierarchical transformations
Rendering: rasterization, ray-tracing, path-tracing, radiosity
8 Nov 20 Animation: keyframe, forward kinematics (FK), inverse kinematics (IK), physics, chains, cloth, functional animation, motion capture (mocap)
3D printing
No class on Wednesday, November 22! Enjoy an extra day of Thanksgiving.
9 Nov 27 Vinh Le, Pixar (and formerly ILM), who spoke (via video) on: "Intro to Visual FX" will appear Nov 29, 12:00 noon, for a live Q&A session. Here is the Zoom-room. Confirmed.
Stereographics: non-symmetric viewing volume
Producing "quilts"
10 Dec 4 Virtual and augmented reality: viewing headsets, distortion shaders, foveated rendering, spherical stereo rendering
Vulkan: differences from OpenGL
More Information document
T2 Dec 13-17 Test #2 will be taken on Canvas in a 60-minute interval of your own choosing during December 13-17. It will open at 12:01 PM on Wednesday, December 13 and will close at 11:59 PM on Sunday, December 17. The test will be unproctored and open notes.

Live Lectures

I will do a Zoom-based Live Lecture every week on Wednesdays starting at 2:00 Pacific Time. We will go over some current materials, some upcoming materials, and maybe some extra materials (such as CG videos). It will be a time for you to also ask live questions or chat questions. Attendance at the live session is optional. These sessions will be recorded in case you missed them. Here is my Zoom-room.

Week #ChatVideo
0PDF Video
1PDF Video
2PDF Video
3PDF Video
4PDF Video
NatashaPDF No recording was allowed.
Blender, IPDF Video
5PDF Video
6PDF Video
7PDF Video
Blender, IIPDF Video
8PDF Video
9PDF Video


The class is being taught by Professor Mike Bailey.

Office: Kelley 2117 (2nd floor, south side, overlooking the Milam dumpsters)
E-mail: mjb@cs.oregonstate.edu
Phone: 541-737-2542 (probably will need to leave a message)
Zoom-room: Zoom

Above all, know that I am here to help you.

Prof. Bailey's Help Hours

See below
or, anytime my office door is open
or, by appointment -- send email

All Office Hours

Unless otherwise indicated, all OHs are on Zoom. All times are Pacific time. LL signifies "Live Lecture".

  Su Jung Hwang (SJH) Naren Digambar Khake (NDK) Nirmit Patel (NP) Hojun Shin (HS) Uddyan Sinha (US) Jian Tang (JT) Grace Todd (GT) Prof. Bailey (PB)
Email hwangsuj khaken patenirm shinhoj sinhau tangjian toddgr mjb
Zoom-room Zoom Zoom Zoom Zoom Zoom Zoom Zoom Zoom
Mondays 8:00-9:00 9:30-11:30 2:00-6:00     8:30-9:30 , 4:00-5:00   10:00-11:00
Tuesdays 8:00-11:00 , 1:00-2:00 9:30-11:30 2:00-4:00   5:00-6:00 8:30-9:30 , 4:00-5:00 12:00-4:00 11:00-1:00
Wednesdays   9:30-11:30 2:00-6:00   10:00-2:00 , 5:00-6:00 8:30-9:30 , 4:00-5:00   LL: 2:00-4:00
Thursdays 8:00-12:00 9:30-11:30   1:00-6:00 11:30-12:30 , 5:00-6:00 8:30-9:30 , 4:00-5:00 12:00-4:00  
Fridays 8:00-9:00 9:30-11:30   9:00-2:00 5:00-6:00 8:00-9:00 , 4:00-5:00 12:00-1:00 , 3:00-4:00 4:00-6:00

Day 7:00 8:00 9:00 10:00 11:00 12:00 1:00 2:00 3:00 4:00 5:00
Wednesday NDK , US US US US LL , NP LL , NP NP , JT NP , US
The links point to the Zoom-Rooms
"LL" = Prof. Bailey's Live Lecture

Demonstration Videos


LV = Lecture Video

Project # Points Title Due Date LV
1 50 Draw Something Cool in 3D! Oct 9 -- Bonus Days now Allowed! LV
2 100 Transformations Oct 17 LV
3 100 Lighting Oct 25 LV
4 100 Keytime Animation Nov 6 LV
Final Project Proposal 10 Final Project Proposal Nov 15 -- No Bonus Days LV
5 100 Texture Mapping Nov 16 LV
6 100 Shaders Nov 29 LV
FP 90 Final Project Tuesday, Dec 12, 23:59:59 -- No Bonus Days LV
550-only paper 100 Paper analysis Tuesday, Dec 12, 23:59:59 -- No Bonus Days LV

Project Turn-In Procedures

Your electronic turnin will be done at http://teach.engr.oregonstate.edu and will consist of:

  1. Your source files (.cpp, .vert, .frag)
  2. Your PDF report.

Do not zip, tar, rar, etc. any of the files. Just upload them all to teach.

Electronic submissions are due at 23:59:59 on the listed due date.

You can create the videos any way you want. Kaltura is quick, easy, and OSU has a site license for it. Here is how to use Kaltura. Zoom recording also works well.

Files You Already Have

The following files are already in your Sample .zip and .tar files. They are #include'ed near the top of sample.cpp -- all you have to do to use them is un-comment their #include:
bmptotexture.cppunsigned char * BmpToTexture( char *filename, int *width, int *height )
glslprogram.cppGLSLProgram class (see the Shaders notes)
keytime.cppKeytimes class (see the Project #4 notes)
loadobjfile.cppint LoadObjFile( char *name )
osucone.cppvoid OsuCone( float radtop, float radbot, float height, int slice, int stacks )
osusphere.cppvoid OsuSphere( float radius, int slice, int stacks )
osutorus.cppvoid OsuTorus( float innerRadius, float outerRadius, int nsides, int nrings )
setlight.cppvoid SetPointLight( int ilight, float x, float y, float z, float r, float g, float b )
setlight.cppvoid SetSpotLight( int ilight, float x, float y, float z, float xdir, float ydir, float zdir, float r, float g, float b )
setmaterial.cppvoid SetMaterial( float r, float g, float b, float shininess )

Other Downloadable Files

Opening up one of the SampleWindows.zip, SampleLinux.tar, or SampleMac.tar files will produce a folder full of all the other files you need. You do not need to go hunt the internet for any other files. Use the ones that have been given to you.

Windows Visual Studio 2022 Sample Program SampleWindows.zip Un-zip and double-click on the .sln file, then select Build→Clean Solution, then select Build→Build Sample, then select Debug→Start Without Debugging
Linux Sample Program SampleLinux.tar Un-tar (tar -xvf SampleLinux.tar), then cd SampleLinux, then make sample, then ./sample
Mac Sample Program * SampleMac.tar * Un-tar (tar -xvf SampleMac.tar), then cd SampleMac, then make sample, then ./sample
A color-picker program ColorPicker.exe  
Vertex Buffer Object C++ class vertexbufferobject.h, vertexbufferobject.cpp Notes on using this C++ class

* Previous Mac users in this class have recommended that, rather than use the trackpad, you go get a Bluetooth 3-button mouse. If you need to use the Mac trackpad, I've been told that a two finger click/tap works as a right click and option+click works as a middle click.

If you want to load a .obj file as part of one of your projects, incorporate the file loadobjfile.cpp into your own code. Use this by placing the .obj object into a display list:

// a global variable:
int DL;

. . .

// do this in InitLists( ):
DL = glGenLists( 1 );
glNewList( DL, GL_COMPILE );
	LoadObjFile( (char *)"spaceship.obj" );
glEndList( );

. . .

// do this in Display( ):
glCallList( DL );


Scores will be posted through Canvas. CS 450/550 will be graded on a fill-the-bucket basis. There will be 7 projects, 10 quizzes (weeks 0-8, 10), and two tests. You get to keep all the points you earn.
The quizzes will be done via Canvas. They will open each Friday at 12:01 PM and close Sunday night at 23:59:00. Canvas is very unforgiving about due times -- don't push it.

But, week #0 and week #8 are different:

Your final grade will be based on your overall class point total. Based on an available point total of 1050, grade cutoffs will be no higher than:

Points Grade
1000 A- 
980 B+
940 B- 
920 C+
880 C-
860 D+
820 D- 

You will notice that these cut-offs are not 90-80-70-... This is because I am going to do a "soft-grade" on your programming projects, i.e., if it works, you get full credit. A "hard-grade" would look at your programming style, etc., which would allow more of a traditional grading scale.

Bonus Days and Late Assignments

"I love deadlines. I like the whooshing sound they make when they fly by."
-- Douglas Adams

All turnins will be done on Teach. Teach has been told about each project's due date.

Each of you has been granted 5 Bonus Days, which are no-questions-asked one-day project due date extensions, subject to the following rules:

  1. Up to 2 Bonus Days may be applied to any one project
  2. Some projects have been labeled No Bonus Days. Bonus Days cannot be used on these projects.
  3. Bonus Days cannot be applied to tests or quizzes

To use one or more Bonus Days on a given project:

Background Resources

Over the last couple of years, various faculty have been putting together mini-tutorials on topics that we (apparently) expect you to magically know, without us ever actually showing you. Here they are. We hope they help.

Good References

Other Useful Online Graphics Information

Other Notes You Might Find Useful!

University Classes
Computer Graphics Shaders
Scientific Visualization
Parallel Programming
CS Skills for Simulation and Game Programming


Grades K-12 Outreach

Student Resources:

Academic Calendar

All students are subject to the registration and refund deadlines as stated in the Academic Calendar: https://registrar.oregonstate.edu/osu-academic-calendar

Counseling and Psychological Services

Oregon State University's Counseling and Psychological Services (CAPS) provides OSU students with individual, relationship, and group counseling. I have met some of these people, and they are really good. If you are in any type of emotional difficulty, don't hesitate to contact them. If it makes it easier for you, I will walk over with you.

TELUS: Mental Health Support for Students

TELUS Health Student Support @ OSU is an app that gives all OSU students, including Ecampus students, 24/7 access by text or phone with a licensed mental health counselor. The app makes it easy to schedule short-term counseling appointments with the same ongoing counselor and provides educational materials covering mental health topics. Students can communicate with a counselor in five different languages (Mandarin, Cantonese, French, Spanish or English); additional language options are available upon request. Download this app by looking up "TELUS Health Student Support" on the Google Play Store (Android) or the Apple App Stoe (iPhone).

Establishing a Positive Community

It is important you feel safe and welcome in this course. If somebody is making discriminatory comments against you, sexually harassing you, or excluding you in other ways, contact the professor, your academic advisor, and/or report what happened at https://studentlife.oregonstate.edu/studentconduct/ reporting so we can connect you with resources.

Academic Dishonesty

You are expected to do your own work. Helping each other, with explanations or clarifications, is OK. Sharing code with each other or copying code from someone else's archive site (e.g., github), however, is considered cheating. Anyone caught cheating will fail this class, and the matter will be turned over to the Dean's Office.

You are expected to read and understand Oregon State University's Statement of Expectations for Student Conduct, found here: https://beav.es/codeofconduct . If there is any parts of this document that you don't understand, ask me!

Students With Disabilities

Accommodations for students with disabilities are determined and approved by Disability Access Services (DAS), https://ds.oregonstate.edu/. If you, as a student, believe you are eligible for accommodations but have not obtained approval please contact DAS immediately at 541-737-4098 or at disability.services@oregonstate.edu . DAS notifies students and faculty members of approved academic accommodations and coordinates implementation of those accommodations. While not required, students and faculty members are encouraged to discuss details of the implementation of individual accommodations.

All materials used in this course are designed to be accessible. If you require accomodations, please contact DAS immediately.

Student Bill of Rights

OSU has twelve established student rights. They include due process in all university disciplinary processes, an equal opportunity to learn, and grading in accordance with the course syllabus. See: https://asosu.oregonstate.edu/advocacy/rights

Religious Holidays

Oregon State University strives to respect all religious practices. If you have religious holidays that are in conflict with any of the requirements of this class, please see me immediately so that we can make alternative arrangements.

Life Events

As {John Lennon? Allen Saunders?} has said: "Life is what happens to you while you're busy making other plans". I care about you as a person. When life happens to you, send me an email and come see me. I might be able to help. But I surely can listen. You are not alone.

Reach Out for Success

University students encounter setbacks from time to time. If you encounter difficulties and need assistance, it's important to reach out. Consider discussing the situation with me or an academic advisor. Learn about resources that assist with wellness and academic success at http://oregonstate.edu/ReachOut. Students are always encouraged to discuss issues that impact your academic success. If you feel comfortable sharing how a hardship might impact your performance in this course, please reach out to me. If you are in immediate crisis, please contact the Crisis Text Line by texting OREGON to 741-741 or call the National Suicide Prevention Lifeline at 1-800-273-TALK (8255)

Basic Needs

Success at OSU means knowing and using your resources. One helpful resource is the community of staff available at the Basic Needs Center (BNC) for support (bnc@oregonstate.edu, 541-737-3747, https://studentlife.oregonstate.edu/bnc). Students can drop in during open hours and talk with a BNC student leader for resources, ideas and strategies connected to basic needs challenges. The BNC is often known for its food pantry, but there are other resources connected to groceries and affording food and staff who can help you work through housing stressors. Undergraduate students, living in Oregon, are especially encouraged to explore SNAP as a resource. Domestic undergraduate students living in Oregon are more likely than not to be eligible for SNAP. BNC staff are skilled with helping students navigate this process.

Additionally, the BNC Textbook Lending Program offers students the opportunity to check out required textbooks for the academic term.

If you are comfortable doing so, please talk with me. I will do everything I can to help you.

Comments? Suggestions? Questions? Contact:
Prof. Mike Bailey
Oregon State University Computer Science
2117 Kelley Engineering Center
Corvallis, OR 97331-5501

Boom link!
Card Trick