summaryrefslogtreecommitdiffstats
path: root/src/ConfiguredUniverse/j3d1x2-flat
blob: 667ea5248fd60912752e65cf13af2e1bb791101e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
 * $RCSfile$
 *
 * Copyright (c) 2006 Sun Microsystems, Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * - Redistribution of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 *
 * - Redistribution in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in
 *   the documentation and/or other materials provided with the
 *   distribution.
 *
 * Neither the name of Sun Microsystems, Inc. or the names of
 * contributors may be used to endorse or promote products derived
 * from this software without specific prior written permission.
 *
 * This software is provided "AS IS," without a warranty of any
 * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
 * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
 * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL
 * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF
 * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR
 * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
 * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
 * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
 * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 *
 * You acknowledge that this software is not designed, licensed or
 * intended for use in the design, construction, operation or
 * maintenance of any nuclear facility.
 *
 * $Revision$
 * $Date$
 * $State$
 */

/*
 ************************************************************************
 *  
 * Java 3D configuration file for dual-screen (flat) desktop configuration
 * with no head tracking.
 *  
 ************************************************************************
 */

// Create new screen objects and associate them with logical names and numbers.
// These numbers are used as indices to retrieve the AWT GraphicsDevice from
// the array that GraphicsEnvironment.getScreenDevices() returns.
// 
// NOTE: The GraphicsDevice order in the array is specific to the local
// site and display system.
// 
(NewScreen left  0)
(NewScreen right 1)

// Set the screen dimensions.
// 
(ScreenAttribute left  PhysicalScreenWidth  0.360)
(ScreenAttribute left  PhysicalScreenHeight 0.288)

(ScreenAttribute right PhysicalScreenWidth  0.360)
(ScreenAttribute right PhysicalScreenHeight 0.288)

// Specify full screen windows.
// 
(ScreenAttribute left  WindowSize NoBorderFullScreen)
(ScreenAttribute right WindowSize NoBorderFullScreen)

// Set the TrackerBaseToImagePlate transforms for these screens.  This
// transforms points in tracker base coordinates to each screen's image plate
// coordinates, where the origin of the image plate is defined to be the lower
// left corner of the screen with X increasing to the right, Y increasing to
// the top, and Z increasing away from the screen.
//
// Without head or sensor tracking the tracker base is still needed as a fixed
// frame of reference for describing the orientation and position of each
// screen to the others.  The coexistence to tracker base transform is set to
// identity by default, so the tracker base origin and orientation will also
// set the origin and orientation of coexistence coordinates in the physical
// world.
//
// The tracker base and center of coexistence is set here to the middle of the
// edge shared by the two screens.
//
(ScreenAttribute left  TrackerBaseToImagePlate
                       (Translate 0.360 0.144 0.0))
(ScreenAttribute right TrackerBaseToImagePlate
                       (Translate 0.000 0.144 0.0))

// Sometimes it is desirable to include the bevels in between the monitors in
// the TrackerBaseToImagePlate transforms, so that the abutting bevels obscure
// the view of the virtual world instead of stretching it out between the
// monitors.  For a bevel width of 4.5 cm on each monitor, the above commands
// would become the following:
// 
// (ScreenAttribute left  TrackerBaseToImagePlate
//                        (Translate  0.405 0.144 0.0))
// (ScreenAttribute right TrackerBaseToImagePlate
//                        (Translate -0.045 0.144 0.0))
//
// Conversely, a similar technique may be used to include overlap between the
// screens.  This is useful for projection systems which use edge blending
// to provide seamless integration between screens.


// Create a view using the defined screens.
// 
(NewView view0)
(ViewAttribute view0 Screen left)
(ViewAttribute view0 Screen right)

// Set the eyepoint relative to coexistence coordinates.  Here it is set 45cm
// toward the user along Z, extending out from the midpoint of the edge shared
// by the two screens.  This will create the appropriate skewed projection
// frustums for each image plate.
// 
// If a planar display surface is all that is required, the same effect could
// be achieved in a virtual screen enviroment such as Xinerama by simply
// creating a canvas that spans both screens.  In some display environments the
// use of a canvas that spans multiple physical screens may cause significant
// performance degradation, however.
// 
// See j3d1x2-rot30 for an example of a non-planar configuration that cannot be
// achieved through a single canvas spanning both screens.
// 
(ViewAttribute view0 CenterEyeInCoexistence (0.0 0.0 0.45))