Open topic with navigation
vizcave CAVE single machine
Depending on the power of the graphics card(s) and the complexity of
the virtual environment it can be possible to run a multi-wall display
system using a single machine.
Example: Three-sided CAVE (single machine)
Here is a sample script that creates a three-sided cave using the vizcave module. Three windows are used for the
three walls and rendered by a single machine. The script uses the WASD
keys on the keyboard to move the location of the user's viewpoint. You
can also move the location of the origin of the CAVE around the virtual
environment using the arrow keys and the mouse.
Note: Set the appropriate
stereo mode (e.g. viz.QUAD_BUFFER) for your
display in the STEREO_MODE variable.
import viz
import vizcave
import viztracker
# Declare constants defining the CAVE dimensions
W = 3.048 # 10 feet wide
H = 2.286 # 7.5 feet tall
D = 3.048 # 10 feet deep
W2 = W/2.0
C0 = -W2,H,0 # Front Wall: C1,C2,C5,C6
C1 = -W2,H,D # Left
Wall: C0,C1,C4,C5
C2 = W2,H,D
# Right Wall: C2,C3,C6,C7
C3 = W2,H,0
C4 = -W2,0,0
C5 = -W2,0,D
C6 = W2,0,D
C7 = W2,0,0
#Create front wall
FrontWall = vizcave.Wall( upperLeft=C1,
upperRight=C2,
lowerLeft=C5,
lowerRight=C6,
name='Front Wall' )
#Create left wall
LeftWall = vizcave.Wall( upperLeft=C0,
upperRight=C1,
lowerLeft=C4,
lowerRight=C5,
name='Left Wall' )
#Create right wall
RightWall = vizcave.Wall( upperLeft=C2,
upperRight=C3,
lowerLeft=C6,
lowerRight=C7,
name='Right Wall' )
#Stereo mode to use for cave
STEREO_MODE = 0
#Initialize graphics window
viz.go(STEREO_MODE)
#Create cave object
cave = vizcave.Cave(stereo=STEREO_MODE)
#Size of each window
WINDOW_SIZE = [1.0/3.0,1.0]
#Add each wall
frontWindow = viz.MainWindow
frontWindow.setSize(WINDOW_SIZE)
frontWindow.setPosition([1.0/3.0,1])
cave.addWall(FrontWall,window=frontWindow)
leftWindow = viz.addWindow(size=WINDOW_SIZE,pos=[0,1])
cave.addWall(LeftWall,window=leftWindow)
rightWindow = viz.addWindow(size=WINDOW_SIZE,pos=[2.0/3.0,1])
cave.addWall(RightWall,window=rightWindow)
"""
Create tracker object that represents the users head position,
specifically the center of the eyes.
The position provided by the head tracker must be in the
same reference frame as the cave wall coordinates.
This will normally be a tracking sensor, but for this example
we will simulate a head tracker
using the keyboard (WASD keys).
"""
head_tracker = viztracker.Keyboard6DOF()
head_tracker.setPosition (0.0,1.8,0.0)
"""
Pass the head tracker to the cave object so it can automatically
update the
view frustums every frame based on the current head position
relative to each wall.
"""
cave.setTracker(head_tracker)
"""
Create CaveView object for manipulating the virtual viewpoint.
cave_origin is a node that controls the position of the
cave within the virtual world.
For example, if you wanted to simulate the cave user flying
through an environment,
you would apply the transformation to the cave_origin node.
"""
cave_origin = vizcave.CaveView(head_tracker)
"""
The cave_origin node is a standard Vizard node that you
can apply any position/rotation to.
In this example we will create a keyboard/mouse tracker
(using arrow keys) and link it to
the cave_origin node, allowing us to fly the cave user through
the virtual environment.
"""
origin_tracker = viztracker.KeyboardMouse6DOF()
origin_link = viz.link(origin_tracker, cave_origin)
#Add gallery environment model
viz.add('gallery.osgb')