From: Dan Johnston (dan.johnston++at++nrc.ca)
Date: 02/27/2003 08:23:31
To all pfDevelopers;
There has been some discussion about stereo in Performer. Comments
in some of the messages indicate (at least to me) a small bit of
confusion
about how stereo works. I thought I would try to make it clear(er) if I
can. I'm sure Allan and the other pfCreators will jump in if I get too
far
off base.
First, why stereo? We are trying to duplicate what happens in real life
to those of us with two working eyes. Each eye will see a slightly
different view of objects in the near field, and the brain will create
the perception of 3 dimensional objects.
So, how do we use OpenGL Performer to provide displays which
give the eyes the different views? There are only 3 basic ways
that I know of.
1. 3D display system
You can 'display' the models in true 3D. This could be some type
of dynamic hologram display or other innovation. There are no
standards here and few well known systems, so knowledge of
Performer is not going to help much. One system I know of, for
example, uses a spinning helix and a deflecting laser. As the
helix spins (fast) the laser above it will turn on at a specific time
and deflection. The result is a spot on the helix where the x and
y position is determined by the laser deflection, and the z value
is determined by the surface of the helix at that instance. Write
a lot of spots and you get a 3D shape within the blur of the
spining helix.
Because the 'display' is a true 3D object, then your normal eyes
and brain can see and understand the shape. No glasses
required.
2. Two display systems - HMD and passive stereo.
You can use Performer to create two pfChannels for display.
Each channel will have a view offset that corresponds to the
eye-to-eye spacing of the viewer. Performer is responsible
for updating the contents of each of these channels as fast
as the application will allow, but the channel updates do
not have to be in sync.
Once you have these two viewing channels you need to feed
each one to the correct eye of the viewer. You can use a
different display screen for each eye, such as in a Head Mounted
Display. You can use a projector per channel, two polarizing
optical filters, and project both views to a single screen. This
'passive stereo' display requires the viewer to wear lightweight
polorized glasses to separate the two images so that each eye
sees what it needs.
3. Active 3D stereo, Quad-Buffered Stereo
You again create two pfChannels per display system. Instead
of allowing the normal Performer (and OpenGL) behaviour
where hardware displays the front buffer while the software
renders to the back buffer (then swap), you modify the
draw callback to write one channel's view into the
back left buffer, and the second channels view into the
back right. When you now swap buffers, the hardware
will render each buffer in sequence. Without glasses, the
resulting display looks like it is blurred. Objects in the
near view appear to have wide, double edges.
You need a fast monitor or projector for this type of
display. A refresh rate of 114s or 120s will only provide
57 or 60 Hz refresh per eye.
You need to wear 'active' glasses to see the display in
3D, i.e for each eye to see only that part of the frame
which is showing the pfChannel view with the offset
for that eye. The glasses can be wired (like on some
3D games PC hardware), or they can be wireless (an
emmitter connected to the display hardware and glasses
with batteries).
The glasses, or the emitter, MUST be synced to the video
display. You should, for example, only see with the right
eye for the first frame of each frame pair. The left eye in
this example would only see the second frame of each pair.
If you get the sequence wrong in hardware, or if you get
the buffer order wrong in Performer, or if you compute
your eye offsets wrong - then you will see what appears
to be 3D but the display is unnatural. Shift the scene and
watch the edges of front objects. Do object in the back
slide behind the front objects immediately or with a
small overlap? Fix the problem by correcting the hardware
or fixing the software.
An additional problem with active displays comes when
you need multiple pipes (think multiple video cards on
PC hardware) and multiple display screens/projectors.
If all the pipes do not do the front/back buffer swap at
the same time, then which video signal should your
glasses sync to? Your video hardware must be
'genlocked' with a cable connection or with a
software solution called 'soft genloc'.
I hope this discussion clears up the basics of 3D display.
Any constructive comments welcome!
--
___|__ |
/ | \ ||\ Daniel (Dan) Johnston
/___|___\ || \ Dan.Johnston++at++nrc.gc.ca
_____|____ || \ National Research Council of Canada, London, ON
| | | || \ Integrated Manufacturing Technologies Institute
\___| | | ||____\ Tel: (519) 430-7081 Fax: (519) 430-7090
\_o_\___|____|_|______\_ Inst: http://www.nrc.ca/imti
\ o / These opinions are my own! Not those of NRC.
\________________/ Virtual Reality:
http://www.nrc.ca/imti/vetc/home.html
More Tall Ships - Fewer Computers!
This archive was generated by hypermail 2b29 : Thu Feb 27 2003 - 08:24:14 PST