i
i
i
i
i
i
i
i
18.5. A Multi-Projector VR Theater System 519
connects through the socket with a listening program, send(...) sends the
data and
closesocket(..) terminates the process.
The receiving code is a little more complex because it usually runs in a
separate thread, but again it basically consists of creating a socket, binding the
listener to that socket with
bind(..), accepting connections on that socket
with accept(..) and receiving the data with recv(..).
Along with the main programs, you will find an example of a small pair
of message sending and receiving programs. This illustrates in a minimal way
how we u se the Windows sockets for communication over TCP/IP.
So far, we have concentrated on displaying image sequences using two
PCs and four video outputs. To extend this idea to similar applications that
present panoramic movies and 3D content poses some difficulties:
• Movies must present their images at rates of 30 fps. Even the smallest
delay between the presentation of the central and peripheral parts of
the frame would be quite intolerable. Wide-screen images require a
high pixel count, too; for example, a stereoscopic movie is likely to
require a frame size of 3200 × 1200 pixels, at the minimum. The
movie player project we include with the book restricts the display to a
two-output stereoscopic wide-screen resolution of 1600 × 1200, so it
requires only a single host. To go all the way to a four output movie
player, it would be necessary to render two movies, one for the center
and one for the periphery. Each would need to be stored on its own PC,
and the master and slave control signals designed to keep the players in
synchronism.
• In a four-output real-time 3D design, the communications channel
would need to pass the numerical descriptions of the 3D scene and
image maps from master to slave. Under most conditions, this data
distribution would only need to be done in an initialization stage. This
transfer might involve a considerable quantity of data, but during nor-
mal usage (with interaction or scripted action, for example), a much
smaller amount of data would need to be transferred—carr y ing such
details as viewpoint location, orientation, lighting conditions and ob-
ject locations. Our example project code restricts itself to using a single
host and projecting onto a curved screen with two projectors.
In this section, we have highlighted some key features of a suite of core
programs to deliver a multi-projector cave-type immersive virtual environ-