Stereoscopic Vision
Each eye gets a slightly different view of the world
The brain fuses the two views to get depth information
Artificial Stereoscopy
Create two distinct images - one for each eye
Used since early 1800s
Stereo Viewing
Present each image separately to each eye
e.g. stereoscope, HMD
Stereo Viewing
With a projection screen, images must overlap
Glasses filter images - each eye sees only one
Crosstalk becomes a concern
Active Stereo
- Shutter glasses with liquid crystal lenses
- One lens clear, one lens dark at any time
- Left- / right-eye images displayed alternately
(by single projector)
- Glasses synchronize with video
Active Stereo
Problems:
- Glasses are expensive
- Glasses are relatively fragile
- Requires high video frequency to prevent flicker
- LCD projectors not capable of high frequencies
- Affordable DLP projectors don't support high frequencies
Passive Stereo
Uses polarization to separate images
Two projectors - one for each eye
Each eye's image is polarized differently
Linear Polarization
Linear Polarization
Problems:
- Tilting one's head diminishes stereo
- Screen must preserve polarization
- LCD projectors polarize light
- Mirrors can affect polarization
Circular Polarization
Linear polarizer + quarter-wave retarder = circular polarization
Polarization is left-handed or right-handed
(clockwise or counter-clockwise)
Immune to head-tilt problem
Circular Polarization
VR Screen
Circular Polarization
Problems:
- Filters & glasses harder to find
- Moderately more expensive
- Glasses cannot be flipped
- Same screen, projector, & mirror problems as linear
Anaglyphic Stereo
Uses colored filters
One image is red, other is blue/green/cyan
Only requires one projector (any type)
Autostereo
Glasses-free
Different eye-views are interleaved vertical strips
Barrier screen blocks all but one image from any viewpoint
or lenticular lenses direct a different image to each eye
Stereo in OpenGL
Display
- Active stereo
- Quad-buffering: glDrawBuffer() etc + special hardware
- Polarized stereo
- One display: Quad-buffering + polarizing modulator
- Two projectors: glViewport()
- Anaglyph
- glColorMask()
Perspective
- gluPerspective() + glTranslate()
- glFrustum() + glTranslate()
This document is by Dave Pape, and is released under a Creative Commons License.