aboutsummaryrefslogtreecommitdiffstats
path: root/src/ConfiguredUniverse/j3d1x1-behavior
blob: d291913bba4f94a9b0ad89d5b842f4d265790879 (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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*
 * $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 single fullscreen desktop configuration.
 * A view platform behavior is created and configured here as well.
 *  
 ************************************************************************
 */

// Create a new screen object and associate it with a logical name and a
// number.  This number is used as an index 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 center 0)

// Create a fullscreen window
//
(ScreenAttribute center WindowSize NoBorderFullScreen)

// Set the available image area for the full screen.
// 
(ScreenAttribute center	PhysicalScreenWidth  0.360)
(ScreenAttribute center	PhysicalScreenHeight 0.288)

// Set the TrackerBaseToImagePlate transform for this screen.  The coexistence
// to tracker base transform is identity by default, so the tracker base origin
// and orientation will also set the origin and orientation of coexistence
// coordinates in the physical world.  This is the primary purpose of setting
// this transform when neither head tracking nor multiple screens are being
// used. 
//
// The tracker base and center of coexistence are set here to the middle of the
// screen's image plate.  Their basis vectors are aligned with the image plate
// basis vectors.  The physical eyepoint position will be set relative to
// coexistence coordinates below.
//
(ScreenAttribute center TrackerBaseToImagePlate
                        (Translate 0.180 0.144 0.000))

// Create a view using the defined screen.
// 
(NewView view0)
(ViewAttribute view0 Screen center)

// Set the eyepoint relative to coexistence coordinates.  Here it is set 45cm
// toward the user along +Z.  Skewed projections can be set by by offsetting
// the eyepoint along X and Y.
// 
(ViewAttribute view0 CenterEyeInCoexistence (0.0 0.0 0.45))

// Create a view platform behavior.  Here we use OrbitBehavior, although any
// concrete subclass of the abstract ViewPlatformBehavior with a parameterless
// constructor could be used.  The logical name to assign to this behavior is
// specified by the 2nd argument to the NewViewPlatformBehavior command, while
// the 3rd argument is the name of the ViewPlatformBehavior subclass.  It is
// instantiated through introspection.
// 
// Attributes defined by the abstract ViewPlatformBehavior superclass itself
// can be set directly with the ViewPlatformBehaviorAttribute command.  The
// details of the subclass implementation are not known to ConfiguredUniverse,
// so any configuration information needed by such a subclass is set by the
// ViewPlatformBehaviorProperty command.  The property name specified by that
// command is taken to be a method name of the subclass and invoked through
// introspection.
// 
// View platform behaviors often need sensors or canvases as event sources to
// drive the behavior action.  An implementation of ViewPlatformBehavior always
// gets the current ViewingPlatform through the setViewingPlatform() method.
// The canvases used by the ViewingPlatform can be retrieved by calling its
// getViewers() method and then calling each Viewer's getCanvas3Ds()
// method.  Sensors can be retrived by calling the ViewingPlatform method
// getUniverse(), checking to see if the returned SimpleUniverse is a
// ConfiguredUniverse, and then calling its getNamedSensors() method.
// 
(NewViewPlatformBehavior vpb com.sun.j3d.utils.behaviors.vp.OrbitBehavior)

// Set the scheduling bounds to be a BoundingSphere with its center at 
// (0.0 0.0 0.0) and a radius of 100 meters.
// 
(ViewPlatformBehaviorAttribute vpb SchedulingBounds
                                   (BoundingSphere (0.0 0.0 0.0) 100.0))

// Set properties specific to OrbitBehavior.  All arguments following the
// method name are wrapped and passed to the specified method as an array of
// Objects.  Strings "true" and "false" get turned into Boolean, and number
// strings get turned into Double.  Constructs such as (0.0 1.0 2.0) and
// ((0.0 1.0 2.0 0.5) (3.0 4.0 5.0 1.0) (6.0 7.0 8.0 0.0)) get converted to
// Point3d and Matrix4d respectively. Note that last row of a Matrix4d doesn't
// need to be specified; it is implicitly (0.0 0.0 0.0 1.0).
// 
// The REVERSE_ALL flags are usually passed to the OrbitBehavior constructor.
// Since it is being instantiated with its parameterless constructor the
// reverse flags are set here explicitly.
// 
(ViewPlatformBehaviorProperty vpb ReverseTranslate true)
(ViewPlatformBehaviorProperty vpb ReverseRotate    true)
(ViewPlatformBehaviorProperty vpb ReverseZoom      true)

// Create a new view platform and set the view platform behavior.
// 
(NewViewPlatform vp)
(ViewPlatformAttribute vp ViewPlatformBehavior vpb)