Time: MWF 10:30-11:35
Location: LS G12
Professor: David Galles
Office: HR 542
Office Hours: T/TR 10:00 - 12:00, or by appointment
Though these are my stated office hours, I am in my office most of the day.
If my door is open (and it usually is), I am happy to talk with students.
Phone: 422-5951
Email: galles@usfca.edu
Text:
Required: 3D Math Primer
for Graphics and Game Development, F. Dunn, I
Parberry
Recommended: The Art of Game Design: A
book of lenses, Jesse Schell
Prerequisites:
CS 245 - Data Structures and
Algorithms
Math 201/202 Discrete Mathematics
Grading Policy:
Grades will be given according to scores on
programming assignments, a midterm and a final, according to the
following percentages.
Assignment | Percentage | Date |
---|---|---|
Project 1: Pong | 15% | 2/17/2016 and 2/26/2016 |
Project 2: Tank | 20% | 3/25/2016 and 4/1/2016 |
Project 3: Student Choice | 30% | 5/11/2016 |
Code Review / Final Presentation | 5% | Various |
Midterm | 15% | 4/04/2016 |
Final | 15% | 05/16/2016 Monday 10:00 a.m. |
Grades will be on a straight scale, with approximately:
A | 90% and above |
B | 80%-89% |
C | 68%-79% |
D | 62%-67% |
F | 61% and below |
These are percentages are upper limits -- thus a score of 90 is guaranteed to get at least an A-, 80 is guaranteed to get at least a B-, and so on. I reserve the right to move these down, but I will not move them up.
Final and Midterm
The midterm and the final will be closed notes. If
you have a conflict with the midterm date, see me now
to see if we can work something out. Requests to change midterm
dates
after the first week or two of class are unlikely to be met. The final date
is unlikely to be changed, but you are free to ask.
Projects
This is a heavy programming course. The assignments should be a lot
of fun, but you will be spending more time coding than in other CS
classes. Note that while I will be expecting a great deal from you, I
am also willing to give you significant assistance -- don't
spin your wheels and become frustrated, ask for help!
There wil be 3 projects -- a "warm-up" project that each
person will need to do on his or her own
and two group projects.
(Note that the "warm-up" project will still have significant coding,
and will require learning to use the graphic engine and art pipeline
tools, so get started early!)
Each project will have some
required elements, but you will also have a fair amount of latitude to be
creative.
While the majority of the grade for the projects will be the technical
aspects of the programs, there will be some weight towards artistic
expression -- how fun are your games to play, do your games have
a consistent aesthetic, and so on. For projects 2 and 3, part of
your grade also will be the
feedback you give to other students during "focus testing" --
more on that when projects 2 and 3 are assigned.
Code Reviews
Each student will have to do at least one "code review". In a code
review, you walk the class through a section of your code, and explain
how you implemented a particular feature. Your fellow students (and
your instructor) will ask questions about the design decisions that
you made, and how your code is structured.
Learning Outcomes
Students who complete this class will be able to:
-
Create a full-scale game using a modern 3D engine. Specifically:
- Program (and debug!) in C++
- Use and understand a complex graphics engine, and work within a large codebase that the student not write, using documentation and available source code to understand how the engine is to be best utilized
- Manage a large-scale programming project, including complicated directory structures and several outside libraries
- Use intermediate-level 3D math, including transformation matrices and quaternions.
- Create art assets (3D models and textures), and manage an asset pipleine to get the assets into the game proper
- Write simple scripts in Lua (scripting language), and integerate lua into a C++ project to allow for non-programmers to create scripts and more complex assets.
Topics To be Covered (Somewhat tentative list)
- C++ Programming
- Using Modern Graphics Engines
- OGRE, Object-oriented Graphics Rendering Engine
- Content Creation
- Using Blender: Basics
- Creating 3D Models (Blender)
- Creating Textures and UV mapping (Blender)
- Rigging and Animating (Blender)
- Content Pipeline (Blender and OGRE)
- 3D Math
- Introduction and Transformation Between Spaces
- Linear Transformations and Homogenous Matrices
- Orientation and Quaternions
- Computational Geometry and Intersection of 3D objects
- Physics Engines
- Scriping Languages
- Writing lua programs/scripts
- Integrating lua and C/C++