OpenGL and WebGL, real-time rendering, 3D display systems, display optics & electronics, IMUs and sensors, tracking, haptics, rendering pipeline, multimodal human perception and depth perception, stereo rendering, presence. Emphasis on VR technology.
Hands-on programming assignments. The 3-unit version requires a final course project with a 1-2 page report. The 4-unit version requires a final course project with a 6-8 page conference paper style report.
(Course Catalog Entry)
EE267W Writing in the Major (WIM) version of EE267. This 5-unit WIM version of EE267 is the same as the 4-unit version of EE267 but additionally requires participation in 2 writing in the major workshops, and weekly writing
assignments. EE267W is only available for undergraduate students who are enrolled in the 4-unit version of EE267. Please contact the course staff to enroll.
- Introduction to computer graphics
- The graphics pipeline
- OpenGL, WebGL, and GLSL shader programming
- Stereoscopic perception and rendering
- Head mounted display optics and electronics
- Inertial measurement units: gyros, accelerators, magnetometers
- Sensor fusion: complementary filter, Kalman filter
- Human perception: visual, audio, vestibular, tactile, ...
- Guest lectures from VR experts (e.g. Oculus Research)
- ... more interesting topics.
aspects in a hands-on manner. Each assignment is a small piece of a bigger project. The goal for each student or small team of students is to build a fully functional head mounted display, including optics, display, IMU, rendering, lens distortion
shader, model loader etc., from off-the-shelf parts. The HMD we will build is inspired by the Oculus DK1. We will NOT learn game development, but study the fundamental building blocks of VR systems and implement all of them.
Class Time and Location
Mondays and Wednesdays from 3:00pm to 4:20pm at Building 200-034
Released as video recording every Friday, with an optional in-person session in Packard 001.
To use the room Packard 001, students have to review and understand this material.
After reviewing it, they need to send an email to Steven Clark (steveclark(at)ee(dot)standord(dot)edu) with their SUNet ID number (the one near their name on the ID card) and a note for indicating that they understood the material. Once approved,
they will have access to the room. If they would like to have lab64 access for their course projects, they may include that in the note and their access will be granted.
Discussion about projects
- Mon. 1:50pm to 2:50pm @Packard 236 (Gordon)
Questions about homework, labs and lectures @Packard 001
- Tue. 9:00am to 10:30am (Hayato)
- Wed. 1:30pm to 3:00pm (Marcus)
- Thu. 4:30pm to 6:00pm (Robert)
- Fri. 10:00am to 11:30am
when your problems cannot be resolved via Piazza.
Your assignment reports will be submitted through Gradescope
. Use the code M6P2J6
to join the class. If you work as a team, make sure to indicate your team member in the submission
Textbooks, Course Notes, and other Reading Materials
Students are required to read additional resources as indicated for each lecture or week. These readings will help get a better intuition and deeper insights into the topics of this course. The readings may also be required to complete tasks for assignments.
Detailed course notes are available for the topics covered in weeks 5 and 6: orientation tracking with inertial measurement units (IMUs) and pose tracking with the VRduino. You can download these notes here:
Other topics of in this class are adequately covered by existing textbooks, even though these are optional for the course. The material covered in the lectures should be self-contained, but it's always a good idea to read up on more details. In particular,
parts of the following two textbooks will be useful for EE 267:
Both of these textbooks are freely available online or through the Stanford library, just click on the titles above. We will only be reading a few chapters of these books, so there's no need to purchase them.
be able to understand object-oriented programs and modify them.
Linear Algebra (e.g. MATH 51)
We will use matrix transpose, inverse, and other operations to do algebra with matrix expressions. We’ll use transformation matrices to rotate/transform points. These topics are important for the homeworks. If you are a quick learner, you should be able to learn them during the class if you haven’t yet.
Basics of Computer Graphics and/or Computer Vision (helpful but NOT required)
There will be weekly assignments
in this class. These assignments will mainly involve implementation of techniques that we will discuss in class. Please refer to assignment writeups for details. After you finish, submit your code and report on Gradescope.
The course requirements include: (1) 6 assignments, (2) an in-class midterm, and (3) a major final project with a 1-2 page report (3 unit version) or a 6-8 page conference paper style report (4 unit version). The 5-unit WIM option additionally requires weekly writing assignments and participation in 2 workshops.
- Assignment: 60%
- Midterm: 10%
- Final Project: 30%
This is an experimental class. Enrollment is limited to 80 students working in teams of 2. All hardware will be provided in the lab but must be returned at the end of the course. Unfortunately, our hardware resources and the lab space are currently
limited. If you did not get a chance to enroll, come to the first few classes anyway and sign up for the waiting list. Last time, everyone on the waiting list got in so don't panic!
Writing in the Major (WIM)
The 5-unit WIM version of this course (EE267W) is an option for EE undergraduates who need to satisfy their WIM requirement. If you would like to sign up for this, you have to also be enrolled in the 4-unit version of EE267 and contact the course instructors during the first week of classes. In addition to all the requirements of the 4-unit version, the WIM option has weekly writing and reading assignments. You can find an outline of these additional assignments here
Each week, there are 2 lectures and 1 lab. The lab is required to be completed before starting to work on the weekly assignment. We will release the lab writeup every Friday but the TAs will also be available for an in-person lab to help if you need it.
If you have a question, to get a response from the teaching staff quickly we strongly encourage you to post it to the class Piazza
. For private matters, please make a
private note visible only to the course instructors. For longer discussions with TAs and to get help in person, we strongly encourage you to come to office hours. You can also reach out to us via email at email@example.com
(a mailing list consisting of the TAs and instructors).
Students are supposed to work on the theoretical part of assignments independently. However, students are allowed to form teams of up to 2 people to work on the programming part of assignments. Even when students work as a team, each student must understand the solution well enough in order to reconstruct it by him/herself.
Since starter code of new assignments typically include answers of previous assignments, there are NO late days for assignments.
be helpful but is not absolutely required.
Courses that may be very helpful, but are not prerequisites:
- CS148: Introduction to Computer Graphics and Imaging
Related courses at Stanford that you may also find interesting:
- CS248: Interactive Computer Graphics
- EE367: Computational Imaging and Display
A few of the course topics overlap with different parts of related courses.
This course is generously supported by AMD and Oculus VR. Thanks for making this happen!
This webpage is designed by Chi Zhang based on the website for CS231N. We thank Andrej Karparthy, who designed the CS231N website and kindly shared the code with us. The course banner is re-designed based on this image used in a Udacity's post.