Course Syllabus

CSci 4611: Programming Interactive Computer Graphics and Games

Fall Semester 2021, 3 Credits


Email, which will forward to Prof. Keefe and all TAs.

Office Hours

Prof. Keefe (he/him/his):  Hours and a link to a weekly zoom meeting where you can join me are posted in my Google Office Hours Calendar.  This is also posted at the bottom of my webpage at for easy access.  You don't need to signup to come, you can just join the zoom meeting, which will be at:   You can also join me for in-person "walking office hours" immediately after class.  Join me for Q&A and informal discussion as we stroll back to Keller Hall!

Bridger Herman (he/him/his):  Tues 10:00am - 10:45am and Thurs 8:00am - 8:45am, via Zoom. You can join the queue by replying to my message in the #office-hours channel of the class Slack. You can then enter the waiting room, and I will let you in to the Zoom meeting when it's your turn in the queue. I will react with ✅ when a particular queue entry is finished.

Anang Hermes (she/her/hers): Monday 4:00pm-4:45pm and Wed 4:00pm-4:45pm, via Zoom. It's my first semester doing office hours on Zoom, but I'm going to try to follow Bridger's lead. I'll make a post in the #office-hours slack channel during my office hours, you can reply to the post with what you're struggling with, and then I'll open the waiting room to you. If it looks like multiple people in the queue have the same question, we can try to get you all in the same room.

Kiet Tran (he/him/his): Tues 3:00pm - 3:45pm and Thurs 3:00pm - 3:45pm, via Zoom ( I'll follow what Anang does for her office hours.


Class Forum on Slack

If you haven't already, join our Slack Forum (a.k.a. Slack Workspace)

Important Dates

Class meets Tuesdays and Thursdays from 11:15am to 12:30pm in Tate Hall, Room 101.  You are also welcome to join the class remotely via live streaming over Zoom; just click the Zoom link in the Canvas menu to the left to access the live stream.

Midterm Exam: Tuesday, Oct 19 (online, take it any time during the day)

Final Exam:  Friday, Dec 17 (online, take it any time during the day)


Acknowledging this Moment

We all enter this semester with a lot of uncertainty.  The pandemic continues.  We are returning to in-person, on-campus interactions that we cannot be completely sure are safe and that will probably feel a bit weird at first.  We are low on reserves after the past few years, which have included multiple events that might be described as once-in-a-generation.  We are on the heels of a divisive election in this country.  Twin Cities communities of color continue to lead a critical, now worldwide, movement for anti-racism education and activism.  It would be inhumane to expect that all these events will not enter our classroom.  Instead, let us acknowledge from the beginning that this is a seriously hard time for all of us.  Let us be flexible, generous, and do what we can to support each other. 

As you navigate your semester, please do not hesitate to take advantage of the many resources the UMN provides to support you.  As a department, we have collected many of these on our new website.  And, you can find additional info on several topics below.  Often you will see these resources listed at the bottom of a course syllabus.  This is a time to place them up front!   Please take care of yourself this semester, and feel free to contact us if you need help.  We will do our best to support you.


Mental Health Information

As a student you may experience a range of issues that can cause barriers to learning, such as strained relationships, increased anxiety, alcohol/drug problems, feeling down, difficulty concentrating and/or lack of motivation. These mental health concerns or stressful events may lead to diminished academic performance or reduce your ability to participate in daily activities. University of Minnesota services are available to assist you with addressing these and other concerns you may be experiencing. You can learn more about the broad range of confidential mental health services available on campus via


Disability Information

If you have already been working with the Disabilities Resource Center and have a letter from them to help direct your instructors on to set you up for success, then please send that to me at the beginning of the semester, and I will make every effort to make sure this class is a good experience for you.

University policy is to provide, on a flexible and individualized basis, reasonable accommodations to students who have documented disability conditions (e.g., physical, learning, psychiatric, vision, hearing, or systemic) that may affect their ability to participate in course activities or to meet course requirements. Students with disabilities are encouraged to contact Disability Services and their instructors to discuss individual needs for accommodations. Disability Services, McNamara Alumni Center, Suite 180, 200 Oak Street, East Bank. Staff can be reached at or by calling (612) 626-1333 (voice or TTY).


Course Description

Computer graphics is an exciting field within computer science that has seen dramatic recent growth. The impact of graphics on our culture and on our daily lives is far-reaching, as we can see through applications in art, design, education, games, movies, science, and medicine. This course covers the tools and techniques used today for programming games and other interactive computer graphics applications. Some of the core concepts covered include: event loops, rendering and animation, polygonal models, texturing, and physical simulation. This is a heavy programming course, and there is an emphasis on graphics toolkits and C/C++ programming. Other topics briefly covered include the history and future of computer game technologies and the social impact of interactive computer graphics.


Learning Outcomes

In this course, you will learn to:

  • Understand basic concepts and algorithms relevant to computer graphics programming.
  • Identify, define, and solve 2D and 3D graphics programming problems.
  • Critically evaluate and select the right graphics toolkit to solve new problems.
  • Communicate information through visual means using computers.



The prerequisites for the course are CSci-2021. Please contact me if you have any questions about whether the course is a good fit for your interests and background.


Course Structure


"Programming with the Prof" on Thursdays

On Thursdays we will continue a relatively new tradition that past students have told me is one of their favorite aspects of the class.  We call it "Programming with the Prof".  On these days, feel free to bring your laptops to class and follow along or just take notes and watch and listen.  These will be "live coding" sessions with me, where I hope to show you have expert computer graphics programmer goes about programming and problem solving.  This is a great way to learn not only about graphics but also about debugging, C++ syntax, and how to go about breaking a programming project into small steps.  


Lectures, Lessons, and Readings

We will complement this engaging Thursday programming time with Tuesday lessons on graphics concepts, math, and techniques.  These will be in a more traditional lecture format but with plenty of class discussion and interaction included. 

Readings from our textbook focus on contemporary topics in game design. An estimate of 20-30 pages of reading per week is expected. The required text for the course is:

3D Graphics for Game Programming, by JungHyun Han, CRC Press, 2011.

The text is available at the university bookstore. We will post additional links to references on the course webpage.



There will be one midterm and one final exam for the course that will cover material presented in class as well as fundamental algorithms and techniques utilized in the assignments. Both will be online exams administered through the Canvas Quiz system.  You can take them at any point during the day they are assigned.  More info on exams is posted on the Logistical Info for 4611 Online Exams page.  If additional frequently asked questions about exam logistics arise, we will post answers to them there.



The assignments for this class are challenging, and they are also the most exciting and rewarding aspect of the course (and your chance to impress your friends with some sweet 3D graphics). We will introduce this semester's specific assignment topics on the first day of class. Briefly, the assignments will cover a broad range of applications of computer graphics programming, including: simple physics simulation, modeling shapes and data in 3D, character animation for movies and games, realistic real-time 3D rendering, art-inspired rendering, and more. You will use both 2D and 3D graphics programming toolkits to implement the assignments. Your goal in these assignments should be to come away with a great practical understanding of how to tackle new computer graphics programming challenges using the latest and greatest programming toolkits.

Each assignment lasts for 2 weeks and is broken into two separate handins.  At the end of the first week, you'll submit an assignment "Worksheet".  This covers the key mathematical or algorithmic concepts in the assignment.  Then, at the end of the second week, you'll submit the "Program".   Always start with the worksheet, seek help from TAs as needed, and make sure that you understand the key concepts first.  At a minimum, your goal should be to have a full understanding of the concepts and how you will solve the programming portion by the end of the first week.  This way, you will be sure to have at least one full week to implement and debug the ideas, which will be in C++ for most assignments.

"Worksheet" and "Program" submissions for each assignment will be made using Github. At the beginning of the course, each student will be provided with a Github repository that is part of a class-specific Github organization on (not, which will not work for this class). While we are on the topic of github, please remember that each time you submit an assignment you need to be careful to submit all of the files necessary for the TAs to rebuild and test your programs!  It's a common mistake to forget to add a file to git before committing and pushing your work to github, and it really slows down grading when this happens.


Handing in Work, Flexible Extensions Policy

Instructions on how to handin all of your assignments using github are in the "Tech Help" section of the webpage. 

To provide some relief during this unusual time, we have engineered an assignment handin and grading system that provides you with a lot of flexibility.   Each assignment will have a due date, but you each get two weeks (14 days) worth of extensions that you can apply however you want to extend the due dates for your programming assignments.  In other words, if you are sick or have a family emergency or even just a big project due during assignment 2, you could apply all 14 days to assignment 2 and hand it in two weeks later for full credit.  Or, you could decide to spread these days around and hand every programming assignment in 2 days late.  These are free, automatic, no-questions-asked, extensions.  When you handin your code using github, the date is logged, and if you have extension days available, we will apply an extension automatically in the grading system so that it works out best for you. 

Frequently asked questions about extensions:

Do I have to tell you when I want to use my extension days?  No, we'll apply credit automatically.  We know everybody is having a hard time and probably needs a day or two here and there -- just take them automatically if you need them.  It's fine as long as you don't take so many up front that you fall terribly behind.

Is it 14 days per assignment or 14 days in total?  14 days in total for the semester, split them up between the programming assignments however you like.

Do these apply to the worksheet handins as well as the programming handins?  These only apply to the programming handins.  The worksheets are very lightly graded (participation only) -- plan to just complete those on time no matter what.  They are quick and will at least get you thinking about the assignment early.

What if I get really sick or something and need an extension beyond this?  That is possible in rare circumstances, but you need to talk with me in office hours about this situation.  You can expect that the first things I will ask are:  How have you used the 2 weeks of extension that I have already given you?  That's quite a lot that I've given you already, is more really justified in this case?

Is there a late penalty if I run out of extension days?   If you use all 14 days and still need to handin some work late, we will accept it and grade it, but we will apply a late penalty of 5 points off for each day it is late.  As mentioned in the previous question.  Our policy already gives you 2 weeks of extensions, so it would need to be an extreme case that you need to discuss with me in office hours for us to waive this 5% off daily late penalty.  


Penalty of assignments we cannot grade

If we are unable to grade an assignment that you committed to the grading queue because the code does not compile or because the files were committed incorrectly, we will allow you to fix the code, but we will treat the new submission as 1-day late, using up one of your extension days if available or taking 5% off if you do not have any extension days left.


Regrade requests / Questions

If you think there was an error in the grading, you can email to ask for clarification or request a regrade.

If we announce that all submissions for an assignment have been graded, but you do not have a grade in your repo, please contact us at


Grading Timeline

The course staff will make every effort to get the work you hand in graded and returned to you within one week on average.  This goes for Worksheets, Programs, and exams.  If there are situations where this becomes impossible because of the unusual time we are in right now, we ask you to extend generosity similar to our generous handin policy.



Final course grades will be calculated based upon the following percentages.


4% -- Worksheet Portions of the 6 Assignments (simply a "participation" grade, with each assignment weighted equally)

48% -- Program Portions of  the 6 Assignments (with each assignment weighted equally)

48% -- Exams (Midterm and Final, weighted equally)


Actual letter grades will be assigned using the following scale:

A  100% to 93%
A-  < 93% to 90%
B+  < 90% to 87%
B  < 87% to 83%
B-  < 83% to 80%
C+  < 80% to 77%
C  < 77% to 73%
C-  < 73% to 70%
D+  < 70% to 67%
D  < 67% to 60%
F  < 60%


Calendar & Course Webpages

The course webpage is hosted on Canvas. All students registered for the course should already have access to it. We will make extensive use of this website, so it is a requirement of the course to check it regularly to stay on top of course announcements and assignments. A detailed calendar of lecture topics and assignment milestones/due dates is provided on the course webpage. As assignment dates and lecture topics may change slightly, I expect you to check the webpage regularly for updates.

We will often use the Slack channel and possibly discussion boards within the class webpage. The purpose of these forums is to provide a place for the TAs and I to respond quickly to general questions that arise during the semester, particularly as you work on the programming assignments. When posting a question to the forum, it is essential that you keep in mind the public nature of the communication. In particular, the forum is not a place to discuss a grading decision or a personal concern, contact me directly with these questions. Rather, use the forum to ask general questions that apply to the entire class (e.g. a clarification about an assignment, a technical question on C++ programming, a question about a topic discussed in class). The assignments are all individual assignments, so it is also important to not distribute part of your solution to the class when posting or responding to a post of the forum.



Course Topics in Detail

(Click on the Home link in Canvas to see the entire plan for the semester)


Planned Major Topics


First hands-on graphics programming

  • Use of a lightweight graphics scripting toolkit, such as
  • Graphics primitives: points, lines, polygons
  • Representing color in computer graphics
  • Responding to user input


The History and Future of Computer Graphics and Games

  • Ivan Sutherland and the history of computer graphics
  • Early games
  • Current trends in graphics hardware
  • The future of real-time graphics and futuristic human-computer interfaces


Intro to a modern C++ based graphics toolkit

  • Practical introduction to programming with a graphics toolkit used in games or related industries
  • Hands on experience


Visual Debugging with Graphics Toolkits

  • Software engineering concepts and tools for computer graphics
  • Emphasis on using visual outputs to understand the function of programs


Graphics Math in More Detail / Linear Algebra Refresher

  • Refresher on linear algebra and intro to transformation matrices
  • Advanced graphics math at the toolkit level (e.g., ray-triangle intersection routines, object vs. world space)


Polygonal Modeling and Scene Graphs (Using C++ Toolkit)

  • Mesh and spatial data structures
  • Scene graphs and hierarchical transformations


Realism in Interactive Computer Graphics

  • Tradeoffs between speed and realism
  • Current trends in industry and real-world applications


Texture and Bump Mapping for Realism

  • Texture coordinates and different forms of texture mapping
  • Impact of speed and realism
  • Artistic use of texturing / contemporary texturing in the games


Characters and Animation

  • Simulation and animation loops/threads
  • Motion capture vs. physically-based simulation vs. key-frame animation
  • Developing effective characters


Lighting Design and Implementation

  • Local vs. global illumination
  • OpenGL shaders


Designing for the User Experience in Games and Interactive Graphics

  • Interdisciplinary design practices in game development
  • Interface genres and input available during game play
  • Examples from outside of games: virtual reality, CAD tools, 3D modeling tools


Event Loops and Graphical User Interaction

  • Implementing effective user interfaces with 3D graphics toolkits


Physics Engines and Real-Time Simulation

  • Integrating 2D and 3D physics with graphics toolkits
  • How to manage your loops: rendering, physics, events, networking, etc.


The Social Impact of Interactive Computer Graphics

  • Games and graphics in our culture
  • Games for healthcare
  • Online and multi-player games
  • The cognitive psychology of avatars
  • Anthropological Examples, e.g., Coming of Age in Second Life



Planned Assignments (2 weeks each)


Assignment 1 – Text Rain: Use the toolkit to create an interactive art installation similar to Text Rain by Camille Utterback & Romy Achituv,1999.


Assignment 2 – Car Soccer: Learn about animation, simulation, and collision detection in the context of a fun game.


Assignment 3 – Earthquake: Create an interactive data visualization using NASA datasets, learning about polygonal modeling of terrain, texture mapping, and morphing.


Assignment 4 – So You Think Ants Can Dance: Animating characters using live-action motion capture data, hierarchical transformations, looping and splicing mocap data, and realism.


Assignment 5 – Art Render: Intro to GLSL shaders for calculating per-pixel lighting for use in both photorealistic and artistic, non-photorealistic graphics.


Assignment 6 – Harold: Inspired by the children’s book Harold and the Purple Crayon, create a 3D world you can walk through just by sketching the sky, hills and valleys, trees, and other 3D objects onto the screen. Learn about mouse-based 3D user interfaces and 3D modeling.




Inclusive Conduct within Our Classroom and the Field of Computing

At this point in your careers, I trust you are already aware that computing as a field has a huge problem with a lack of diversity.  At all levels, there is an underrepresentation of populations, including women, African Americans, Hispanics, American Indians, Alaska Natives, Native Hawaiians, Native Pacific Islanders, and persons with disabilities.  On the first day of class, I will share some actual data from our degree programs with you so you can see specifically, by the numbers, how this plays out within our department today.  

I want to be explicit and make sure you know this because it is a problem, and it is something that you have a responsibility to help change as you continue in this field.  One way we will do that in this course is to be sure to use inclusive language and be respectful in all of our interactions, including written and face-to-face communication.  If you are in the majority in our field (I am a white, cisgender, male, so this is true for me) I want to make a special appeal to you to join me in this line of thinking.  Studies show, our interactions with women and other students who belong to groups with longstanding underrepresentation in our field often turn them away.  I'm talking about experiences, often in the classroom, that turn students off to the point that they leave computing.  This could take the form of an offensive joke by a professor, mansplaining, or a student who already has a lot of computing experience from outside of school providing a "know it all" explanation to the class that others can't even understand making them feel like they don't belong, or speaking over someone, or limiting who we "allow" to participate when working on a group activity.  To those who may already feel as though they do not belong here, an experience like this within the classroom can be the thing that makes them switch majors.  So, my appeal is to please keep this in the forefront of your minds in this classroom and others, but be especially careful in your computer science courses and eventual workplaces.  Bias, rudeness--these show up in many settings, but these things are seriously damaging in computer science, so my feeling is, we need to resolve to do better than any other discipline on campus.  Please join me in that.  And, if you find yourself passionate about this, please consider working with the CS-IDEA committee, which you can find out more about on

I include some info on related, official university policies below as well.


Equal Access and Opportunity

The University of Minnesota shall provide equal access to and opportunity in its programs, facilities, and employment without regard to race, color, creed, religion, national origin, gender, age, marital status, disability, public assistance status, veteran status, sexual orientation, gender identity, or gender expression.


Sexual Harassment

University policy prohibits sexual harassment as defined in the University Policy Statement adopted on December 11, 1998. Complaints about sexual harassment should be reported to the University Office of Equal Opportunity, 419 Morrill Hall, East Bank.



Academic Integrity


Collaboration Policy

All work submitted for this course is required to be your original work. You are expected to do your own thinking, your own design, and your own coding. You are encouraged to discuss the content of the lectures and the texts with your peers. With respect to programming assignments, you are also permitted to discuss (and post to the forum regarding) programming in C++ in general (e.g., a syntax error you are stuck on, missing include file). However, your discussions with others must stop before discussing a solution to the homework or assignment. If you have any question about whether discussing something with peers might go beyond what is permitted, then stop and ask us first for clarification on the policy.


Use of Web & External Resources

The web will be one of your best learning tools and sources of documentation for working with the and OpenGL graphics toolkits used in the class, but you are not allowed to use web or other external resources to find solutions to the core computer graphics problems in your assignments.


What you can do: You are expected/encouraged to use the web to lookup questions about the APIs used and even to look at example programs written with and OpenGL.


What you cannot do: You are not allowed to search for solutions to assignments. For example, if you assignment is to develop your own texture mapping routine for a sphere, you can lookup the OpenGL or API documentation to learn the right function to call and the right syntax to use to set the texture coordinate for each vertex in a mesh. What you cannot do is google for “texture map a sphere” and find out how to setup a for loop and use cos() and sin() equations to determine the correct texture coordinates for each vertex of the sphere. This is the difference between using the web as a programming toolkit reference vs. using the web as a reference for the computer graphics algorithms/solutions that are being taught in the course. With the exception of the small snippets of code that are found in the official processing and OpenGL documentation, you should never copy code like a routine, class, object, etc. from a website and include it in your project. Never post questions about your assignment or portions of the code that you have written or that we have given you for the class to an online forum other than the class forum on Piazza or our class webpage.


Scholastic Conduct

Scholastic dishonesty includes violating the course policies outlined here; plagiarizing; cheating on assignments or examinations; engaging in unauthorized collaboration on academic work; taking, acquiring, or using test materials without faculty permission; submitting false or incomplete records of academic achievement; acting alone or in cooperation with another to falsify records or to obtain dishonestly grades, honors, awards, or professional endorsement; altering, forging, or misusing a University academic record; or fabricating or falsifying data, research procedures, or data analysis. Within the course, a student responsible for scholastic dishonesty can be given a penalty, including an "F" or "N" for the course, and further disciplinary action may occur. See the University of Minnesota conduct code:


Course Summary:

Date Details Due