The process of establishing a coordinate system and writing relevant portions of a CAVE configuration file is automated by programs like deskconf. But, in case you'd like to go through the process manually, or understand what the autocalibration programs do, here's how you could do it.
cavevars -caveconfig identity.conf
where identity.conf contains:
TransmitterRotationMatrix 1 0 0 0 1 0 0 0 1 TransmitterOffset 0 0 0 CaveRotationMatrix 1 0 0 0 1 0 0 0 1 CaveOffset 0 0 0 WandOffset 0 0 0 CaveScale 1
Now use e.g. cavevars' "wand" display to measure some points. We need three 3-D positions to determine the coordinate frame. Since we've set the WandOffset to zero, hold the wand's white sensor knob (rather than its head) to the given spot to take a reading. Measure, say:
Finally,
ScreenZ = ScreenX cross ScreenY.
From these vectors we can build a coordinate system, but it's probably not the one wanted for Cave coordinates. Those normally have Y vertical, and the desk's screen is probably tilted.
So, measure the screen's tilt from the vertical -- 0 degrees if it is vertical, 90 if horizontal facing up -- and construct Cave-coordinate direction vectors:
The (non-normalized) vector B - A gives the tracker's idea of the width of the screen. Let Wvirtual be magnitude of that vector. Measure the real-world distance between those same two points, and let Wreal be the result in feet (or whatever you'd like Cave units to be measured in). Multiply the vectors CaveX, CaveY, and CaveZ by the factor Wreal / Wvirtual.
Re-invoke cavevars, specifying the new test.conf file. Now you can simply hold the wand's sensor at the desired origin point -- conventionally I think it'd lie on the floor, a foot or two directly in front of the center of the screen -- and note the reading. If that point is beyond the tracker's range, just hold the wand in some other convenient spot, say 3 feet above the desired origin, and subtract 3 from the reported Y value.
Edit test.conf, changing the TransmitterOffset values to be the negatives of the values reported by cavevars at the chosen origin.
Measure three points on the screen:
(If the tracker's range doesn't extend that far, you may have to measure other points -- say the screen's lower left, lower right, and center -- and extrapolate to find coordinates of the rest.) Using the results, add two lines to test.conf:
ProjectionCorners screen7 llX llY llZ ulX ulY ulZ lrX lrY lrZ
ProjectionData screen7 both wall llX llY llZ ulX ulY ulZ lrX lrY lrZ
The latter is needed for CAVE library version 2.6, the former for earlier versions. (I'm not sure whether screen7 is always the right choice, though it is for the two desks here at NCSA; it should match whatever is mentioned in the Walls statement in the existing /usr/local/CAVE/etc/cave.config file.)
Assuming you like the result, copy the TransmitterRotationMatrix, TransmitterOffset, ProjectionCorners and ProjectionData statements from test.conf to the systemwide cave configuration file. Be sure there aren't any CaveRotation, CaveRotationMatrix, CaveOffset, or CaveScale statements in it.
That's it. Note that deskconf doesn't work exactly as described above. Rather than letting you place the wand at the adopted origin, it prompts for horizontal and vertical distances from the screen's bottom center. And rather than being restarted three times, it calculates how the Cave libraries will transform the given points, and derives the Cave-coordinate screen corners itself.