Course Promises / Learning Objectives
By the end of the course, you will have developed the
following knowledge and skills:
- You will learn how to write programmable shaders to manipulate vector geometry and render 3D scenes into a 2D image buffer.
- You will learn alternative pixel based rendering methods such as ray tracing that bypass the vector geometry processing pipeline.
- You will learn how graphics hardware leverages the Single Instruction Multiple Data (SIMD) architecture to accelerate the processing of millions of vectors in parallel. Additionally, you will better understand cases in which the SIMD architecture is/is not beneficial.
- Through CUDA, you will learn how GPU hardware can be used to solve problems related to and distinct from computer graphics.
- You will improve your software engineering skills by learning more advanced C++ features, using multiple third party packages, and practicing visual debugging techniques.
- You will learn to apply multiple course concepts to a final project of your own design.
Student Responsibilities
CS40 requires you to understand several linear algebra and geometric concepts and apply them to an advanced C++ codebase in a highly specialized parallel computing environment. Qt, OpenGL, and CUDA are large software APIs and we will not be exploring them in great depth in a thirteen week course. To succeed in this course, you should consistently do the following:
- Attend class and lab sessions.
The primary
introduction to course material is through class
instruction. Attending class is essential for understanding the
subject. Lab sessions provide additional time to get hands on practice with the course material. Lab attendance is mandatory.
- Participate actively in the learning process.
The
best way to learn this material is through constant effort. Run the demos and make small changes in a sandboxed environment before make larger changes or implementing new features in lab.
- Start the lab assignments early.
CS40 is
coding course that relies on a number of specialty third party libraries. It is extremely difficult to understand, write, and test solutions at the last minute. It may be impossible to work on some labs remotely over ssh
. I understand that
it is not always possible to put serious time into an assignment
early. However, even 30-60 minutes will be helpful, to
ensure that you understand what the problems ask of you and
to help you start thinking about where sticking points will be early.
- Consult the documentation.
In class examples or starting points for lab assignments will often have sample uses, but Qt and OpenGL functions often have numerous options or flags that may be helpful. Consulting the documentation for these libraries should be part of your course learning. Be a bit careful with Qt though. It is a huge library, and we will primarily be using a handful of classes regularly. If you get lost in the Qt weeds and are unsure if you should be using a particular class/method, feel free to ask in Piazza, in class, or in office hours.
-
Seek help early and often.
Because course material builds
on previous material, it is essential to your success in this class
that you keep up with the course material. If you feel you are falling behind or having trouble grasping a concept, please come to office hours. Ask questions, and review other questions on Piazza. You should also feel free to email me to set up an appointment if you cannot attend normal office hours.