From dd7176ee23e4b0da9a3084302f02744368a5e508 Mon Sep 17 00:00:00 2001
From: Curtis Rueden Provides a JavaSound-based implementation of a Java 3D audio device. Provides abstract classes for creating Java 3D audio devices. EXPERIMENTAL: Provides a lightweight JCanvas3D class.
-Note that the API in this package is highly experimental and
-subject to change at any time. Provides a Java 3D loader for Lightwave 3D scene files. Provides a Java 3D loader for Wavefront .obj files. Provides interfaces and abstract classes for writing Java 3D loaders. Provides utility classes for running applets as stand-alone
-applications. Provides audio utility classes. Provides spline-based interpolation behaviors. Provides keyboard navigation utility classes. Provides mouse navigation utility classes. Deprecated: Use Provides 6DOF sensor behavior classes. Provides ViewPlatform navigation utility classes. Deprecated: Use Provides compressed geometry utility classes.
- This package supersedes the org.jogamp.java3d.CompressedGeometry class and
- the org.jogamp.java3d.utils.compression package. Provides geometry construction, triangulation, and optimization
-utility classes. Provides texture image utility classes. Provides picking behaviors for the new core picking methods. Provides picking utility classes for the new core picking methods. OBSOLETE: provides picking behaviors for the old picking
-methods. OBSOLETE: provides picking utility classes for the old
-picking methods. The scenegraph.io APIs will handle the IO for all the core Java3D
-SceneGraphObjects. However, if you create a subclass of one of these
-objects and add it to your Scene Graph, the IO system, by default,
-will not store any state information specific to your class. The default behavior when an unrecognized SceneGraphObject class
-is encountered is to traverse up the superclasses of the object until
-a recognized Java3D class is located. The data structures for this
-class are then used for IO. The system does store the class name of
-the original object.
- For example:
- When the Scene Graph is written to a file and this node is
-encountered, the superclass org.jogamp.java3d.BranchGroup will be used
-to store all the state for the object so any children of
-MyBranchGroup, the capabilities, etc. will be stored, but myData will
-be lost. When the scene graph is loaded, MyBranchGroup will be
-instantiated and will be populated with all the state from
-BranchGroup but myData will have been lost. To overcome this, the scenegraph.io API provides an interface for
-you to implement in your own classes that provides the opportunity
-for you to save the state of your classes during the IO processes.
-This is the SceneGraphIO interface. When the scenegraph is saved, the methods of SceneGraphIO are
-called in this order
- createSceneGraphObjectReferences saveChildren writeSceneGraphObject During the load cycle the method call order is Instantiate Object using default constructor Populate object with state from superclasses readSceneGraphObject restoreSceneGraphObjectReferences Within each method you need to perform the following actions:
- createSceneGraphObjectReferences If your object has
- references to other SceneGraphObjects then you need to obtain an
- object reference (int) for each reference using the
- SceneGraphReferenceControl object passed as a parameter to this
- method. If you don't have references to other SceneGraphObjects then
- no action is required. saveChildren If your object is a subclass of Group and you
- want the scenegraph.io package to save the children then this must
- return true. If it returns false, the object will be saved but not
- its children. writeSceneGraphObject In this method you must write all the
- state information for your class, including the object references
- obtained in createSceneGraphObjectReferences, to the DataOutput
- stream passed into this method. readSceneGraphObject By the time this method is called your
- class has been instantiated and the state information in the Java3D
- superclass will have been loaded. You should load all the state
- information you saved for your class. restoreSceneGraphObjectReferences is called once all the
- SceneGraph objects have been loaded and allows you to restore the
- references to the other SceneGraph objects. Here are some examples. Only the parts of the source pertaining to
-IO are show.... This package provides a Java3D SceneGraph IO capability.
-The API supports IO of a scenegraph to and from a Java Stream and/or
-RandomAccessFile. The features offered for these two io systems are
-somewhat different. The SceneGraphFileReader and SceneGraphFileWriter classes provide
-IO to and from a RandomAccessFile. They allow a universe and/or
-multiple BranchGraphs to be written to the file with Node's and
-NodeComponent's shared between the separate graphs. The graphs can be
-read in any order. SceneGraphStreamReader and SceneGraphStreamWriter classes provide
-IO to and from a Stream. These classes allow a universe and/or
-multiple BranchGraphs to be passed over stream. In contrast to the
-FileReader/Writer sharing of Node's is NOT supported between graphs
-by the API. Sharing of node components is supported. If your
-application requires references to Nodes in other graphs (such as
-SharedGroups) the application must handle the references using the
-namedObjects constructs. Note : If you use SceneGraphStreamWriter class to write to a
-FileOutputStream the resulting file cannot be read using the
-SceneGraphFileReader, the converse is also true, you can not use a
-FileInputStream to load a file written by SceneGraphFileWriter.
-
-The package supports the IO of all the Java3D 1.3 core classes
-and many of the utilities. It also includes interfaces which can be
-implemented to allow user defined subclasses of SceneGraphObjects to
-be stored. Information on the extensibility can be found
-here
-
-The package has a number of properties which can be used to control the IO
-behavior
-
-
-
-j3d.io.ImageCompression this can be set to None, GZIP, JPEG and tells the
-IO system to compress images in the .j3f file using the prescribed technique. In
-the future this will be extended to support all the formats available in
-javax.imageio in JDK 1.4.
-org.jogamp.java3d.utils.pickfast.behaviors
-instead.org.jogamp.java3d.utils.geometry.compression
-instead.
-Using your own Classes with scenegraph.io
-
-
-public class MyBranchGroup extends org.jogamp.java3d.BranchGroup {
- private int myData;
- ....
-}
-
-
-
-
-
-
-
-Behavior Example
-
-
-public class BehaviorIO extends org.jogamp.java3d.Behavior implements SceneGraphIO
- private TransformGroup target; // The TG on which this behavior acts
- private int targetRef; // Object Reference for target
-
- public void createSceneGraphObjectReferences( SceneGraphObjectReferenceControl ref ) {
- targetRef = ref.addReference( target );
- }
-
- public void restoreSceneGraphObjectReferences( SceneGraphObjectReferenceControl ref ) {
- target = (TransformGroup)ref.resolveReference( targetRef );
- }
-
- public void writeSceneGraphObject( java.io.DataOutput out ) throws IOException {
- out.writeInt( targetRef );
- }
-
- public void readSceneGraphObject( java.io.DataInput in ) throws IOException {
- targetRef = in.readInt();
- }
-
- // This has no effect as this is not a subclass of Group
- public boolean saveChildren() {
- return true;
- }
-
-`BlackBox' Group Example
-
-This example is a Group node that creates its subgraph during
-its instantiation. An example where you might use this is to
-represent some geometry that is loaded from an external file format
-such a OpenFLT.
-
-
-
diff --git a/src/main/java/org/jogamp/java3d/utils/scenegraph/io/package.html b/src/main/java/org/jogamp/java3d/utils/scenegraph/io/package.html
deleted file mode 100644
index 73e795c..0000000
--- a/src/main/java/org/jogamp/java3d/utils/scenegraph/io/package.html
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
-
-
-
-
-
-public class House extends Group implements SceneGraphIO {
- public House() {
- super();
- this.addChild( OpenFlightLoader.load( "/dir/house.flt" );
- }
-
- public void createSceneGraphObjectReferences( SceneGraphObjectReferenceControl ref ) {
- // No references
- }
-
- public void restoreSceneGraphObjectReferences( SceneGraphObjectReferenceControl ref ) {
- // No references
- }
-
- public void writeSceneGraphObject( java.io.DataOutput out ) throws IOException {
- // No local state
- }
-
- public void readSceneGraphObject( java.io.DataInput in ) throws IOException {
- // No local state
- }
-
- public boolean saveChildren() {
- // Don't save the children as they will be restored by the openflightloader
- return false;
- }
-
-j3d.io.UseSuperClassIfNoChildClass when this property is present the load
-operation will attempt to avoid failure if Scene Graph nodes are not present
-in the classpath. For example if a developer has subclassed BranchGroup with a
-class called MyBG but has not
-implemented the SceneGraphIO interface when the API saves the graph the
-superclass (ie BranchGroup) data will be stored. When the scene is loaded
-normally MyBG must be in the classpath otherwise the load will fail. If this
-property is set then the superclass node (ie BranchGroup) will be instantiated
-when MyBG is missing. Obviously, if MyBG contained any state information
-then this will be lost.
-
Provides transparency sorting utility classes.
- - diff --git a/src/main/java/org/jogamp/java3d/utils/shader/package.html b/src/main/java/org/jogamp/java3d/utils/shader/package.html deleted file mode 100644 index fe01b81..0000000 --- a/src/main/java/org/jogamp/java3d/utils/shader/package.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - -Provides shader utility classes.
- - diff --git a/src/main/java/org/jogamp/java3d/utils/timer/package.html b/src/main/java/org/jogamp/java3d/utils/timer/package.html deleted file mode 100644 index a3af6aa..0000000 --- a/src/main/java/org/jogamp/java3d/utils/timer/package.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - -Deprecated: Use java.lang.System.nanoTime() instead.
- - diff --git a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/config-examples.html b/src/main/java/org/jogamp/java3d/utils/universe/doc-files/config-examples.html deleted file mode 100644 index bab913b..0000000 --- a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/config-examples.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - -
j3d1x1 A single fullscreen
-desktop configuration.
-
j3d1x1-behavior A single -fullscreen desktop configuration with a configurable view platform behavior. -
j3d1x1-stereo A single -fullscreen desktop configuration with stereo viewing. -
j3d1x1-vr A single fullscreen -desktop configuration with head tracker, stereo viewing, and 6 degree of -freedom mouse. -
j3d1x1-window A single screen -desktop configuration with a conventional window. -
j3d1x2-flat A dual-screen planar -desktop configuration. -
j3d1x2-rot30 A dual-screen -desktop configuration with each screen rotated toward the other by 30 degrees. -
j3d1x3-cave A three-projector cave -configuration. -
j3d1x3-cave-vr A -three-projector cave configuration with head tracking and stereo viewing. -
j3d1x3-rot45 A three-screen -desktop configuration with left and right screens rotated 45 degrees from the -center screen. -
j3d2x2-flat A four-projector
-configuration arranged in a 2x2 array.
-
-
-
diff --git a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/config-syntax.html b/src/main/java/org/jogamp/java3d/utils/universe/doc-files/config-syntax.html
deleted file mode 100644
index e725146..0000000
--- a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/config-syntax.html
+++ /dev/null
@@ -1,1973 +0,0 @@
-
-
-
-
-
-
-The Java 3D Configuration File | -
-This document is an informal description of the syntax of the Java 3D -configuration file and a tutorial of the semantics of its various commands. -Such a file is written by a user or site administrator to describe the physical -configuration of a local interactive viewing environment. Configuration -properties that can be described in the file include the sizes, positions, and -orientations of displays in either fixed screen environments or head mounted -displays (HMD devices), as well as the input devices and sensors -available for user interaction apart from the keyboard and mouse abstractions -provided by the AWT.
--A configuration file is used by passing its URL to either a ConfigContainer or -a ConfiguredUniverse constructor. The method by which a user specifies the -file is up to the application, but the universe utilities do provide a few -means to easily enable an application to perform this task. These depend upon -a Java 3D property, j3d.configURL, that the user can set on the java -command line with the -D option. Its value should be a URL string -indicating the location of the desired file. The application can then either -call the static ConfigContainer methods -getConfigURL -to retrieve the value of the property, or - -getConfigURL(String) to specify a default file to be used in case the -property is not set. Applications are encouraged to devise their own -user-friendly mechanisms to retrieve the configuration file, although the -setting of the j3d.configURL property should be honored if at all -possible.
--If the attempt to open the resource indicated by the URL is successful, then a -parser will be invoked to read and evaluate the commands it contains and -deposit the results in the ConfigContainer. The parser will detect syntax -errors, invalid commands, and bad references, printing descriptive messages to -System.out, including the line number and text of the offending command. In -general the parser attempts to continue processing as much of the file as it -can when encountering an error. Some errors can only be detected after the -entire file has been evaluated; in those cases an exception will be thrown.
--An application may choose to override the settings of the configuration file by -accessing view-side scenegraph components directly from the ConfigContainer -once the file is evaluated. Applications should avoid this in general, as most -settings are physical calibration constants specific to the local interactive -viewing environment. Nonetheless, application overrides are still sometimes -appropriate; for example, the application may have knowledge of the contents of -the scenegraph that enables it to make a better judgement of where the view's -clipping planes should be.
--Syntax Description | -
-The configuration file syntax is very simple; scanning any of the -sample configuration files should provide -the general idea. At the broadest level there are two main types of -constructs: comments and commands.
--Comments can be either C or C++ style. In a C-style -comment all text between successive occurances of /* and */ is ignored. -A C++ comment begins with // and continues to the end of the line.
--A command begins with an opening parenthesis and ends with a closing -parenthesis. The elements between the parentheses can be of four types: -alphanumeric strings, numbers, quoted strings, or other commands. During the -evaluation of a command, any nested command encountered is itself evaluated, -and the result of that evaluation replaces the nested command within the -original outer command.
--Strings that contain embedded white space, forward slashes, or invalid -tokens must be enclosed in quotes (either single or double). Common cases are -URL strings and Unix path names. Numbers are any non-quoted strings that can -be parsed as double-precision floating point numbers. The strings true, -True, false, and False are converted to their corresponding boolean -values. Strings, quoted strings, and numbers are delimited from each other by -white space.
--Commands in the configuration file have four special forms: point, -matrix, top-level, and built-in commands.
- --- --Points
- -A command that consists entirely of two, three, or four numbers is a 2D point, -a 3D point, or a 4D point respectively. Any other command that starts with a -number is a syntax error. --Don't pass 2D, 3D, or 4D points to commands that expect two, three, or four -numbers instead. This will generate a syntax error indicating an invalid -number of arguments.
- --Matrices
- -A 3D matrix is a command that consists entirely of three 3D points. A 4D -matrix consists entirely of either three or four 4D points; if there are only -three 4D points then the fourth is implicitly considered to be (0.0 0.0 0.0 -1.0). The points define the row elements of each type of matrix. Any other -command that starts with a point is a syntax error. - --Top-level and built-in commands
- -All other commands start with an alphanumeric string, the command name -which identifies it. The remaining elements of the command are its arguments. --Command names can either specify top-level or built-in commands. Top-level -commands generally configure Java 3D core and utility classes and can only -appear at the outermost level of parentheses. Built-in commands are provided -by the parser itself to help construct the arguments to top-level commands. -Points, matrices, and built-in commands can only be nested within other -commands.
--An error will result if points, matrices, or built-in commands are invoked at -the outermost level of nesting. Sometimes this error is caused by prematurely -closing the opening parenthesis of the current top-level command. Such an -error is usually preceded by an error from the command indicating an invalid -number of arguments.
--Similarly, errors will be generated if top-level commands are nested. Errors -to this effect are sometimes caused by failing to close all the open -parentheses of the preceding top-level command.
-
-(Include "file:${user.home}/myBody.cfg")
--would evaluate the contents of the file "myBody.cfg" in the user's home -directory on Unix systems. An error is issued if no Java property exists with -the specified name.
--Java property substitution happens early, after tokenization but before command -evaluation. Substitution can occur any number of times anywhere within any -quoted or non-quoted string, including command names, property names, and -property values, as long as the property substitution syntax is not nested.
--Command Overview | -
-Most top-level commands configure concrete Java 3D core and utility classes. -These include PhysicalBody, PhysicalEnvironment, Screen, Sensor, View, and -ViewPlatform. The Screen, View, and ViewPlatform commands also implicitly -configure the Canvas3D core class and the Viewer and ViewingPlatform utility -classes respectively.
--These commands come in two forms: the New<class name> and -<class name>Property commands. All New commands except -NewSensor create new class instances and bind names to -them, while the Property commands refer to these names and configure -their corresponding class instances with the parameters specified by the -command arguments. All references must be to objects previously instantiated -in the file; forward referencing is not supported. Names must be unique within -each class.
--Implementations of the Java 3D InputDevice interface and concrete subclasses of -the abstract ViewPlatformBehavior utility class can also be instantiated and -configured with the same command forms. The New commands for these -objects accept class names as command arguments and instantiate the objects -through introspection. Since the details of the implementations are not known, -configuration parameters are passed through methods which are invoked through -introspection of the method names specified in the Property command -arguments.
--A method invoked through introspection with a Property command gets its -arguments as a single array of Objects. Boolean strings get wrapped into -Boolean objects, and number strings get wrapped into Double. 2D, 3D, and 4D -points get wrapped into Point2d, Point3d, and Point4d objects respectively, -while 3D and 4D matrices get wrapped into Matrix3d and Matrix4d -respectively.
--Overview of Relevant View Model Parameters | -
-The sample configuration files are annotated to assist users in modifying them -to suit their particular viewing environments, but it can be helpful to know -some of the basics of the Java 3D view model that are relevant to writing a -configuration file. This overview should only be considered an informal -adjunct to the detailed description in the Java 3D Specification. Reading the -source code to the ViewInfo utility (a public -implementation of the Java 3D view model) may also be helpful in understanding -the details of the view model.
- --The Camera View Model | -
-In the traditional camera model the camera or eyepoint is positioned and -oriented with respect to the virtual world via a view transform. Objects -contained within the field of view are projected onto an image plane, which is -then mapped onto a display surface, usually a window on a desktop display -system. While the view direction and camera position can be freely oriented -and placed anywhere in the virtual world, the projection is accomplished using -a static frustum defined by the field of view and a flat image plane centered -about and normal to the view direction.
--This model emulates a typical physical camera quite well, but there are many -viewing configurations that cannot be implemented using image planes that are -fixed with respect to the view direction. In a multiple screen environment the -projection frustum for each screen is skewed with respect to the image plane, -based on the user's nominal viewing position. Realistic stereo views on fixed -displays use skewed projection frustums derived from the offsets of the two -eyes from the center of the image plane, while head tracking with fixed -displays involves dynamically adjusting projection frustums in response to -varying eye positions relative to the image plane.
--In a low-level API such as OpenGL these situations are handled by concatenating -all defined model and viewing transforms into a single modelview matrix, -and for a fixed-screen environment explicitly computing the projection -matrix for each eye, each display surface, and each new head -position. Every application handling such viewing configurations typically -reimplements the framework for computing those matrices itself. In these cases -it would be useful to be able to separate the projection components out of the -view transform in some representation based on display and eye locations.
- --The Java 3D View Model | -
-Based on these requirements, a high-level view model should provide standard -mechanisms to 1) define a screen's position and orientation in relation to -other screens in the viewing environment; 2) specify the position of the user's -eyes or an HMD relative to the physical space in which the screens or nominal -user position are defined, and to have them updated automatically if tracking -hardware exists; and 3) describe where the whole physical space is placed and -oriented in the virtual world. In such a model the appropriate images could -then be rendered without further computation in application code.
--In the Java 3D view model, screen (image plate) positions and -orientations are defined relative to a fixed frame of reference in the physical -world, the tracker base, through the -TrackerBaseToImagePlate property. The -tracker base is somewhat abstract in that it is always used to define that -fixed frame of reference, even if no physical tracking hardware is being -used. If the ViewPolicy is HMD_VIEW, then the left -and right image plates for head mounted displays are defined relative to the -head tracking sensor, which reports head orientation and position relative to -the tracker base.
--Coexistence coordinates are defined with the -CoexistenceToTrackerBase property. It -provides a frame of reference in the physical world which can be set up by the -user or application in whatever way is most convenient for positioning and -orienting screens, physical body attributes, and sensing devices in the virtual -world. If tracking is enabled, then the eye positions in coexistence are -computed from the position and orientation of the head tracking sensor and the -HeadToHeadTracker matrix; otherwise the eye -positions in coexistence are set according to the -CenterEyeInCoexistence property. In HMD -mode the eye positions are fixed with respect to the image plates.
--The mapping of coexistence coordinates into the virtual world is accomplished -through the ViewAttachPolicy, which specifies -the point in coexistence coordinates to which the origin of the view -platform should be mapped. The view platform is positioned in the virtual -world by manipulating its view transform, the composite of all the -transforms from the view platform up to its Locale. The basis vectors (X, Y, -and Z directions) of the view platform are always aligned with coexistence -coordinates, and the scaling between view platform coordinates and physical -coordinates is specified by the -ScreenScalePolicy, so this -establishes the complete mapping of the physical world into the virtual world. -The projection of the virtual world onto the physical display surfaces is then -performed automatically by the Java 3D renderer.
--By default Java 3D tries to emulate the familiar camera model as much as -possible to make it easy to run in a conventional windowed desktop display -environment. It accomplishes this through the following default settings:
-RELATIVE_TO_FIELD_OF_VIEW
.PHYSICAL_WORLD
.PHYSICAL_WORLD
.NOMINAL_HEAD
.RELATIVE_TO_COEXISTENCE
.VIRTUAL_WORLD
.VIRTUAL_WORLD
.NOMINAL_SCREEN
.-Top-Level Command Details | -
-Top-level commands can only appear at the outermost command nesting level.
--This command instantiates the InputDevice implementation specified by the fully -qualified class name and binds it to instance name. The -InputDevice is instantiated through introspection of the class name. The -implementation must provide a parameterless constructor; this can usually be -done by extending or wrapping available InputDevice implementations.
--The last two arguments are optional and define an alias for instance -name. This is useful in providing a longer descriptive name for the -application to recognize, or conversely, to provide a shorter alias for a -longer instance name. Either name may be used to identify the instance.
--At the conclusion of configuration file processing all InputDevice -implementations so defined will be initialized and registered with any -PhysicalEnvironments that reference them.
-
-The details of the InputDevice implementation specified by instance name -are not known to ConfigContainer, so any parameters to be set through the -configuration file are passed to the InputDevice instance by invoking method -name through introspection. The arguments following the method name are -evaluated and the results passed to the method as an array of Objects.
--The required methods can usually be provided by extending or wrapping existing -InputDevice implementations.
--Retrieves the Sensor at index sensor index in the InputDevice device -name and binds it to the name specified by instance name. The -sensor index is a number truncated to its integer value. The InputDevice -implementation is responsible for creating its own Sensor objects, so this -command does not create any new instances.
--Instance name is used by other commands to reference the indicated -Sensor. In addition, the name and its associated Sensor instance is made -available to applications through a Map returned by the ConfigContainer -method -getNamedSensors. -
--The last two arguments are optional and define an alias for instance -name. This is useful in providing a longer descriptive name for the -application to recognize, or conversely, to provide a shorter alias for a -longer instance name. Either name may be used to identify the instance.
--If the Sensor is to be used for head tracking, or tracking the position and -orientation of other objects in the physical world, then it must generate 6 -degree of freedom data relative to the tracker base.
--Sets a Sensor property. The sensor instance is specified by instance -name, the property to be set by property name, and the value to be -set by property value. The following sole property may be -configured:
- ----Hotspot
-A 3D point in the sensor's local coordinate system. The hotspot specifies the -"active" point which should interact with the virtual world, such as a point -used for picking or grabbing an object. Its actual interpretation is up to the -sensor behavior which uses it. Its value is ignored for head tracking sensors. -
-The above two commands are equivalent. Both create new window resources and -associate them with the name specified by instance name. The device -index is a number truncated to its integer value. This integer is the -index at which the desired AWT GraphicsDevice appears in the array returned by -the static getScreenDevices() method of GraphicsEnvironment, and specifies the -physical screen upon which the window should be created. The GraphicsDevice -order in the array is specific to the local viewing site and display -system.
--The last two arguments are optional and define an alias for instance -name. This is useful in providing a longer descriptive name for the -application to recognize, or conversely, to provide a shorter alias for a -longer instance name. Either name may be used to identify the instance.
--The above two commands are equivalent. The screen or window instance is -specified by instance name, the property to be set by property -name, and the value to be set by property value. The following -properties are configurable:
- ----PhysicalScreenWidth
-A number specifying the screen's image area width in meters. When using a -configuration file the default is 0.365. For head mounted displays this should -be the apparent width of the display at the focal plane. - --PhysicalScreenHeight
-A number specifying the screen's image area height in meters. When using a -configuration file the default is 0.292. For head mounted displays this should -be the apparent height of the display at the focal plane. - --WindowSize
-This property's value can be a 2D point to create a window with the specified -X width and Y height in pixels, or it can be either of the strings FullScreen -or NoBorderFullScreen to specify a full screen canvas with visible frame -borders or one with no frame borders. A NoBorderFullScreen canvas uses the -entire physical display surface for its image. The default value is 512 x 512 -pixels. For multiple screen virtual reality installations or head mounted -displays NoBorderFullScreen should be used. - --WindowPosition
-This property's value is a 2D point used to create a window with the specified -X and Y position. These are offsets of the window's upper left corner from the -screen's upper left corner. - --TrackerBaseToImagePlate
-A 4D matrix which transforms points from tracker base coordinates to the image -plate coordinates for the specified screen. This is only used when a -ViewPolicy ofSCREEN_VIEW
is in effect. The matrix value is -identity by default. --Image plate dimensions are expressed in meters. The origin of the image plate -is the lower left corner of the screen's image area, with X increasing to the -right, Y increasing to the top, and Z increasing away from the screen.
--The tracker base is somewhat abstract. It is used as a local fixed frame of -reference for specifying the orientation and position of a screen even when -tracking hardware is not being used. It is also the frame of reference for -defining coexistence coordinates with the -CoexistenceToTrackerBase matrix.
--The built-in commands Translate, -Rotate, RotateTranslate, and TranslateRotate are available to make it easier -to create transforms of this type. - -
-HeadTrackerToLeftImagePlate
-4D matrices which transform points in the head tracking sensor's local -coordinate system to a head mounted display's left and right image plates -respectively. The default value for each is the identity matrix. -
-HeadTrackerToRightImagePlate-These are only used when a ViewPolicy of
-HMD_VIEW
is in effect. -As with physical screen dimensions, these matrices should indicate the -apparent location and orientation of the screen images as viewed through -the head mounted display's optics.-The HMD manufacturer's specifications in terms of angle of view, distance to -the focal plane, aspect ratio, and percentage of image overlap between the left -and right views can be used to derive the apparent screen positions with -respect to the head, and from there the positions with respect to the head -tracker mounted on the head. In most cases there is 100% overlap between the -two stereo images, so the matrices for both the left and right screens should -be identical.
--Some HMD devices support field-sequential stereo and are driven as if they were -a single screen. In that case, only a single screen should be defined, but -both the left and right head tracker to image plate transforms need to -be specified for that same screen.
- --MonoscopicViewPolicy
-This property may have the following string values:CYCLOPEAN_EYE_VIEW, -LEFT_EYE_VIEW
, orRIGHT_EYE_VIEW
. The default value is -CYCLOPEAN_EYE_VIEW
. This default works for non-stereo displays -and field-sequential stereo displays where the two stereo images are generated -on the same canvas. --Some HMD devices can be driven as a single screen if the HMD supports -field-sequential stereo, so the default policy will work for them as well if a -stereo view is enabled. If stereo is not enabled, an IllegalStateException will -be thrown when the ViewPolicy is set to
-HMD_VIEW
with the default -CYCLOPEAN_EYE_VIEW
policy in effect.-The
-LEFT_EYE_VIEW
andRIGHT_EYE_VIEW
monoscopic view -policies are used for generating stereo pairs on separate monoscopic canvases, -including the left and right canvases needed by HMD devices that are driven by -two video channels. When using these policies, stereo should not be -enabled.
-Creates a new PhysicalEnvironment and binds it to the name given by instance -name. This specifies the available input devices, which Sensor to use as -the head tracker, and defines the coexistence coordinate system. Note that -aside from the head tracker, the configuration file does not provide a way to -place Sensors into the array maintained by the PhysicalEnvironment. See the -getNamedSensors -method of ConfigContainer.
--The last two arguments are optional and define an alias for instance -name. This is useful in providing a longer descriptive name for the -application to recognize, or conversely, to provide a shorter alias for a -longer instance name. Either name may be used to identify the instance.
--Sets a PhysicalEnvironment property. The instance is specified by instance -name, the property to be set by property name, and the value to be -set by property value. The following properties are configurable:
- ----InputDevice
-Register an InputDevice implementation instantiated by -NewDevice. The InputDevice instance name is specified -by the property value string. If an InputDevice is not registered then -it will not be scheduled to run. - --HeadTracker
-Register the Sensor which will be used for head tracking. It must provide 6 -degree of freedom position and orientation reads relative to the tracker base. -The Sensor instance name is specified by the property value string. -Its corresponding input device must be registered with the InputDevice -property. --There is no actual method in the core PhysicalEnvironment class to set the head -tracker. This property is a simplified interface for setting the -PhysicalEnvironment head index and assigning the head tracking sensor to that -index. Direct access to the PhysicalEnvironment Sensor array is not supported -by the configuration file.
- --CoexistenceToTrackerBase
-A 4D matrix which transforms points in coexistence coordinates to tracker base -coordinates. This defines the position and orientation of coexistence -coordinates relative to the tracker base. Its default value is the identity -matrix, so if it is not set then coexistence coordinates will be the same as -tracker base coordinates. See -TrackerBaseToImagePlate. --The coexistence origin (center of coexistence) positions the physical -world with respect to the origin of the ViewPlatform in the virtual world. -This is established through the -ViewAttachPolicy, which attaches the view -platform to either the center of coexistence, the nominal head, or the nominal -feet. Coexistence coordinates can essentially be thought of as physical -coordinates, but the real purpose is to define the space in which coordinates -systems in the physical world - such as tracker base, image plate, and physical -body - coexist and interact with the virtual world coordinate systems.
--The basis vectors (X, Y, and Z directions) of coexistence coordinates are -always aligned with the basis vectors of the ViewPlatform in the virtual world, -and the scale factor going from ViewPlatform coordinates to coexistence -coordinates is set by the ScreenScalePolicy. -Together with the ViewPlatform's view attach policy and view transform this -establishes the complete mapping of the physical world into the virtual -world.
--The positioning and orientation of coexistence coordinates with respect to the -physical environment is up to the user or application. In a fixed screen -environment it usually makes most sense to define it in a convenient -relationship to the primary screen or some intersection of the available -screens, such that the coexistence origin is in front of and aligned with the -user's nominal forward gaze direction. This is because the -Z axis of -coexistence coordinates always points along the view direction defined by the -view platform's -Z axis.
--For example, when using a single screen, the most common mapping puts the -center of coexistence in the middle of the screen with its basis vectors -aligned with the screen's image plate coordinate system. With a dual-screen -system it is usually most convenient to place the center of coexistence in the -middle of the edge shared by both screens, with its Z axis extending -perpendicular to the shared edge and maintaining an equal angle to both -screens. For a 2x2 array of four screens putting the center of coexistence at -the center of the array is usually a good choice. In a cave configuration -having the center of coexistence in the middle of the viewing environment can -facilitate the sense of immersion.
--In HMD mode the view attach policy is ignored and is always effectively -
-NOMINAL_SCREEN
. Coexistence coordinates and view platform -coordinates are then equivalent except for scale. For HMD configurations -placing the coexistence coordinate system aligned with some nominal -front-facing user position works well.-Note: the normal Java 3D default is to place the center of coexistence -in the middle of the screen or canvas by setting -CoexistenceCenteringEnable true by -default. This only works for a single screen and if both the -TrackerBaseToImagePlate and CoexistenceToTrackerBase matrices are identity. If -either of these matrices are set from their default identity values in the -configuration file, and CoexistenceCenteringEnable has not been set, then the -centering property will be set false by default.
-
-Creates a new PhysicalBody and binds it to the name given by instance -name. The PhysicalBody is essentiallly the users's head, with the origin -halfway between the eyes in the plane of the face. Positive X extends to the -right eye, positive Y up, and positive Z extends into the skull opposite to the -forward gaze direction. Dimensions are expressed in meters.
--The last two arguments are optional and define an alias for instance -name. This is useful in providing a longer descriptive name for the -application to recognize, or conversely, to provide a shorter alias for a -longer instance name. Either name may be used to identify the instance.
--Sets a PhysicalBody property. The instance is specified by instance -name, the property to be set by property name, and the value to be -set by property value. The following properties are configurable:
- ----StereoEyeSeparation
-A number indicating the interpupilary distance in meters. This will set the -left and right eye positions to offsets of half this distance from the head -origin along its X axis. The default is 0.066 meters. --This property is a simplified interface to setting the PhysicalBody's separate -left and right eye positions; there is no actual method in PhysicalBody to set -stereo eye separation, but the results are exactly equivalent.
- --LeftEarPosition
-A 3D point which sets the left ear position relative to head coordinates. -The default is (-0.08, -0.03, 0.09). - --RightEarPosition
-A 3D point which sets the right ear position relative to head coordinates. -The default is (0.08, -0.03, 0.09). - --HeadToHeadTracker
-A 4D matrix which transforms points from head coordinates to the local -coordinate system of the head tracking sensor. This allows the positions -of the eyes and ears to be determined from the position and orientation -of the head tracker. The default is the identity matrix. - -- -NominalEyeOffsetFromNominalScreen
-A distance in meters used as a calibration parameter for -ViewAttachPolicy. It does not actually set -the position of the eyes. The property is ignored if ViewAttachPolicy is -NOMINAL_SCREEN. The default value is 0.4572 meters. - --NominalEyeHeightFromGround
-A distance in meters used as a calibration parameter for -ViewAttachPolicy. -It does not actually set the position of the eyes. This property is -ignored if ViewAttachPolicy is not NOMINAL_FEET. The default value is 1.68 -meters. -
-Creates a new view and binds it to the name given by instance name. -In the configuration file the term view refers to an instance of the -Viewer utility class, which contains both an -instance of a core Java 3D View class and an array of Canvas3D instances into -which to render.
--The last two arguments are optional and define an alias for instance -name. This is useful in providing a longer descriptive name for the -application to recognize, or conversely, to provide a shorter alias for a -longer instance name. Either name may be used to identify the instance.
--ConfiguredUniverse requires that at least one view be defined. If a view -platform is not provided, then ConfiguredUniverse will create a default one and -attach the view to that. If multiple views are defined, then at least one view -platform must be explicitly provided by the configuration, and the -ViewPlatform property must be used to attach each view to a view platform.
--Sets a View property. The view instance is specified by instance name, -the property to be set by property name, and the value to be set by -property value. The following properties are configurable:
- ----Screen
-These two properties are equivalent. They include a screen created by -NewScreen or a window created by -NewWindow into -this view. The screen or window name is specified by the property value -string. Multiple-screen or multiple-window views are created by calling this -command with each window or screen to be used. If no windows or screens are -defined for this view then an IllegalArgumentException will be thrown after the -configuration file has been processed. - -
-Window-PhysicalEnvironment
-Sets the PhysicalEnvironment to be used for this view. The property -value string specifies the name of a PhysicalEnvironment instance created -by the NewPhysicalEnvironment command. -If no PhysicalEnvironment is specified for this view then one with default -values will be created. - --PhysicalBody
-Sets the PhysicalBody to be used for this view. The property -value string specifies the name of a PhysicalBody instance created -by the NewPhysicalBody command. If -no PhysicalBody is specified for this view then one with default values -will be created. - --ViewPlatform
-The property value string is the name of a view platform defined by a -previous NewViewPlatform command. This -specifies that the view should be attached to the given view platform. -ConfiguredUniverse requires that a view platform be specified for every defined -view unless only a single view without a view platform is provided; in that -case a view platform is created by default and the view is attached to that. -If one or more view platforms are defined then the view attachments must be -made explicitly. - --ViewPolicy
-The property value string may be eitherSCREEN_VIEW
or -HMD_VIEW
to indicate whether fixed room-mounted screens are being -used or a head mounted display. The default value isSCREEN_VIEW
. - --CoexistenceCenteringEnable
-The property value is a boolean string. If true, then the origin of the -coexistence coordinate system is set to either the middle of the canvas or the -middle of the screen depending upon whether the WindowMovementPolicy is -PHYSICAL_WORLD
orVIRTUAL_WORLD
respectively. The X, -Y, and Z directions of coexistence coordinates will point in the same -directions as those of the screen's image plate. --This only works if a single screen is being used and if both the -TrackerBaseToImagePlate and -CoexistenceToTrackerBase matrices are -identity. If CoexistenceCenteringEnable is not explicitly set, and either the -CoexistenceToTrackerBase transform for the view has been set or -TrackerBaseToImagePlate has been set for any screen, then the centering enable -will be set to false by default; otherwise, the normal default is true. This -property is also effectively false whenever the ViewPolicy is set to -
- -HMD_VIEW
.-WindowEyepointPolicy
-The string value for this property may be eitherRELATIVE_TO_SCREEN, -RELATIVE_TO_COEXISTENCE, RELATIVE_TO_WINDOW
, or -RELATIVE_TO_FIELD_OF_VIEW
. The normal Java 3D default is -RELATIVE_TO_FIELD_OF_VIEW
. When using a configuration file the -default isRELATIVE_TO_COEXISTENCE
if -CoexistenceCenteringEnable is false, -otherwise the normal default applies. See the -setWindowEyepointPolicy View method. --For the
-RELATIVE_TO_SCREEN
andRELATIVE_TO_WINDOW
-policies, the eyepoint is set by using the setLeftManualEyeInImagePlate() and -setRightManualEyeInImagePlate() methods of Canvas3D. The configuration file -currently does not provide any mechanism for altering these properties from -their default values. These default values are (0.142, 0.135, 0.4572) for the -left eye and (0.208, 0.135, 0.4572) for the right eye.-These polices are ignored if head tracking is enabled.
- --WindowMovementPolicy
- -The string values for these properties may be either
-WindowResizePolicyVIRTUAL_WORLD
-orPHYSICAL_WORLD
. The normal Java 3D default value for both is -PHYSICAL_WORLD
. When using a configuration file the default -values areVIRTUAL_WORLD
if -CoexistenceCenteringEnable is false, -otherwise the normal defaults apply. See the -setWindowMovementPolicy and -setWindowResizePolicy View methods. - --CenterEyeInCoexistence
-A 3D point which specifies the location of the center eye relative to -coexistence coordinates. See -CoexistenceToTrackerBase. If stereo -viewing is enabled, then the left and right eye positions are set to offsets -from this position using the values specified by the PhysicalBody. This -property is ignored if head tracking is enabled or if WindowEyepointPolicy is -notRELATIVE_TO_COEXISTENCE
. The default value is (0.0, 0.0, -0.4572). --This property is a simplified interface to setting the View's left -and right manual eyes in coexistence; there is no actual method in View -to set a center eye position.
- --ScreenScalePolicy
-The property value string may be eitherSCALE_SCREEN_SIZE
-orSCALE_EXPLICIT
and determines the source of the screen -scale, a factor in the scaling of view platform coordinates to physical -world coordinates. --If the value is
-SCALE_SCREEN_SIZE
, then the screen scale is half -the physical screen width in meters. If WindowResizePolicy is -PHYSICAL_WORLD
, then this scale is further multiplied by the ratio -of the window width to the width of the screen (the window scale) to -produce the scale from view platform coordinates to physical coordinates. This -allows a virtual world which spans a normalized width of [-1.0 .. 1.0] in view -platform coordinates to map directly to the physical width of the window or -screen, depending upon the resize policy.-
-SCALE_EXPLICIT
uses the value of the ScreenScale property as the -screen scale. It is also further multiplied by the window scale when using the -PHYSICAL_WORLD
window resize policy to produce the scale from view -platform coordinates to physical coordinates. Viewing configurations -incorporating multiple screens should generally set the policy to -SCALE_EXPLICIT
and choose a screen scale based on the aggregate -display size, but the default value ofSCALE_SCREEN_SIZE
will -usually work if all the screens are the same size and arranged in a linear -array.-The view platform is positioned in the virtual world through a chain of -transforms to the root of the scene graph; this composite transform is its -localToVWorld transform and must be congruent. If we take the the inverse of -the scale factor in this transform and call it the view platform scale, -then the scale from virtual world units to physical world units can be computed -as the product of this view platform scale, the screen scale, and, when using a -resize policy of
- -PHYSICAL_WORLD
, the window scale. In the usual -case the view platform scale is 1.0.-ScreenScale
-The property value is a number specifying the explicit screen scale -factor. It is only used if ScreenScalePolicy isSCALE_EXPLICIT
; -otherwise, the screen scale is half the physical width of the screen in meters. -The default value for this property is 1.0. - --BackClipPolicy
-The string values of these properties may be either
-FrontClipPolicyPHYSICAL_EYE, -PHYSICAL_SCREEN, VIRTUAL_EYE
, orVIRTUAL_SCREEN
. The -default policies arePHYSICAL_EYE
. See the -setFrontClipPolicy and -setBackClipPolicy View methods. - --FrontClipDistance
-These property values are numbers. The defaults are 0.1 and 10.0 -respectively. See the -setFrontClipDistance and -setBackClipDistance View methods. -
-BackClipDistance-With the default clip policies of
-PHYSICAL_EYE
the clip distances -are measured relative to the eye in physical units, so the clip distances -specified must be scaled to virtual world units in order to determine the -distances in the virtual world where they would effectively be applied. As -described in the discussion of -ScreenScalePolicy above, the scale from -virtual units to physical units is the product of the view platform scale -(usually 1.0), the screen scale, and the window scale (if the window resize -policy isPHYSICAL_WORLD
), so normally the scale from physical -units to virtual units would be the inverse of that product.-There is a quirk, however, with physical clip plane scaling when the -
-PHYSICAL_EYE
orPHYSICAL_SCREEN
clip policies are -used with thePHYSICAL_WORLD
window resize policy. The locations -of the clip planes in physical units are not actually set to the physical -distances as specified, but are in fact scaled by the window scale. -This means that when determining where the specified physical clip distances -are in virtual units the scaling to be used is the inverse of the product of -the screen scale and view platform scale only.-This quirk applies only to scaling physical clip plane distances, and only with -the
- -PHYSICAL_WORLD
resize policy. It was implemented in this -manner to prevent objects in the virtual world from getting clipped -unexpectedly when the virtual world scaling changed as the result of a window -resize. The quirk can be avoided by using theVIRTUAL_EYE
or -VIRTUAL_SCREEN
clip policies or by using the -VIRTUAL_WORLD
resize policy, but in most cases the effect is -benign and doesn't lead to unexpected results.-FieldOfView
-This number is the view's horizontal field of view in radians. The default -value is PI/4. This value is ignored if WindowEyepointPolicy is not -RELATIVE_TO_FIELD_OF_VIEW
or if head tracking is enabled. The -eyepoint for each canvas associated with the view is set such that it is -centered in X and Y, with the Z value at the appropriate distance to match the -specified field of view across the width of the canvas. - --StereoEnable
-Enable or disable stereo viewing for this view according to the boolean value -specified by the property value string. The default value is false. --There is no actual method in the core Java 3D View or utility Viewer class to -enable stereo. A true value for this property causes ConfigContainer to -attempt to create stereo-capable canvases for all the screens associated with -this view. Stereo will then be enabled for each canvas successfully created -with stereo capability.
- --TrackingEnable
-Enable or disable head tracking for this view according to the boolean value -specified by the property value string. The default value is false. --Setting this property true causes WindowEyepointPolicy to be ignored; it will -effectively be
- -RELATIVE_TO_COEXISTENCE
with the eyepoint in -coexistence coordinates computed from reading the head tracking sensor. -Tracking must be made available by registering an input device and a head -tracking sensor in PhysicalEnvironment.-AntialiasingEnable
-Enable or disable scene antialiasing for this view according to the boolean -value specified by the property value string. The default value is -false. --A true value for this property causes ConfigContainer to attempt to create -a canvas capable of scene antialiasing on each screen associated with this -view. The scene will then be antialiased on each canvas successfully created -with that capability.
--Line and point antialiasing are independent of scene antialiasing and are -controlled by the LineAttribute and PointAttribute components of an Appearance. -If line and point antialiasing is enabled, then they will be antialiased prior -to scene antialiasing; if scene antialiasing is turned off, then antialiased -lines and points will still be antialiased.
-
-Creates a new view platform and binds it to the name given by instance -name. In the configuration file the term view platform refers to an -instance of the ViewingPlatform utility -class, which is an extension of BranchGroup containing an instance of a core -Java 3D ViewPlatform class.
--The last two arguments are optional and define an alias for instance -name. This is useful in providing a longer descriptive name for the -application to recognize, or conversely, to provide a shorter alias for a -longer instance name. Either name may be used to identify the instance.
--Sets a ViewPlatform property. The instance is specified by instance -name, the property to be set by property name, and the value to be -set by property value. The following properties are configurable:
- ----NominalViewingTransform
-The property value is a boolean string indicating whether or not -the view platform should be backed up in Z to allow objects at the origin to be -viewed. This only has effect if the ViewAttachPolicy is -NOMINAL_HEAD
. The default value is false. See the -setNominalViewingTransform -method of ViewingPlatform. - --InitialViewingTransform
-Sets the initial transform of the view platform to the 4D matrix -specified by property value. The default value is identity. - --AllowPolicyRead
-The property value is a boolean string indicating whether or not reading -the ViewAttachPolicy is allowed. The default value is false. - --AllowLocalToVworldRead
-The property value is a boolean string indicating whether or not reading -the view platform's localToVworld transform is allowed. The default value is -false. - --ViewPlatformBehavior
-Attaches a ViewPlatformBehavior instantiated by -NewViewPlatformBehavior. -The property value string is the name bound to that instance. - --ViewAttachPolicy
-The property value string can be one ofNOMINAL_SCREEN, -NOMINAL_HEAD,
orNOMINAL_FEET
. This establishes the point -in coexistence coordinates where the origin of view platform coordinates is -attached. The basis vectors of view platform coordinates are always aligned -with those of coexistence coordinates. --For a ViewAttachPolicy of
-NOMINAL_SCREEN
, the ViewPlatform origin -is set directly to the origin of coexistence, so that ViewPlatform coordinates -and coexistence coordinates are identical except for scale.-For a ViewAttachPolicy of
-NOMINAL_HEAD
, the ViewPlatform origin is -set to the origin of the nominal head, the center eye halfway between the left -and right eyes. The nominal head origin is on the Z axis of coexistence -coordinates at some offset from the coexistence origin. If the -WindowEyepointPolicy isRELATIVE_TO_FIELD_OF_VIEW
, then this is -the positive Z offset producing the required field of view relative to the -width of the canvas at the coexistence origin, tracking the Z offset of the -eyepoint defined by that policy; otherwise, the Z offset is the -NominalEyeOffsetFromNominalScreen property of PhysicalBody and is decoupled -from the actual eyepoint offset.-For a ViewAttachPolicy of
-NOMINAL_FEET
, the ViewPlatform origin is -at the ground plane, which is NominalEyeHeightFromGround meters along -Y from -the origin of the nominal head. NominalEyeHeightFromGround is a property of -PhysicalBody.-Note: The normal Java 3D default is
-NOMINAL_HEAD
. When -using a configuration file, the default isNOMINAL_HEAD
only if -every view attached to the view platform has a WindowEyepointPolicy of -RELATIVE_TO_FIELD_OF_VIEW
; otherwise, the default is -NOMINAL_SCREEN
. If the view policy isHMD_VIEW
, then -the ViewAttachPolicy is ignored and is always effectively -NOMINAL_SCREEN
.
-This command instantiates the concrete subclass of ViewPlatformBehavior -specified by the fully qualified class name and binds it to instance -name. The ViewPlatformBehavior is instantiated through introspection of -the class name. The subclass must provide a parameterless constructor. If no -such constructor is available, then the behavior must be extended or wrapped to -provide one and the derived class used instead.
--The last two arguments are optional and define an alias for instance -name. This is useful in providing a longer descriptive name for the -application to recognize, or conversely, to provide a shorter alias for a -longer instance name. Either name may be used to identify the instance.
--View platform behaviors often need sensors or canvases as event sources to -drive the behavior action. A subclass of ViewPlatformBehavior always gets the -current ViewingPlatform through its -setViewingPlatform -method. When the behavior is initialized, 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 retrieved by calling the ViewingPlatform method -getUniverse, checking -to see if the returned SimpleUniverse is a ConfiguredUniverse, and then calling -its -getNamedSensors -method.
--Alternatively, the behavior implementation can define its own properties -and receive canvas and sensor instances directly through the -Canvas3D and Sensor built-in -commands.
--Sets a property of a ViewPlatformBehavior. The instance is specified by -instance name, the property to be set by property name, and the -value to be set by property value. The following properties are -pre-defined by the abstract ViewPlatformBehavior superclass and may be -configured directly:
- -
---SchedulingBounds
-The scheduling bounds for this behavior. Use the -BoundingSphere built-in command to set this -property. The default is whatever the application or the concrete subclass -sets. - --SchedulingInterval
-A number indicating the scheduling interval for this behavior. See the -setSchedulingInterval -method of Behavior. - --HomeTransform
-See the ViewPlatformBehavior method -setHomeTransform. -The property value must be a 4D matrix. -
-The details of a concrete subclass of ViewPlatformBehavior are not known to -ConfigContainer, so any properties specific to the subclass are set by -using introspection to invoke property name as a method accepting an -array of Objects as its single parameter. The arguments following the property -name are evaluated and the results passed to the method through that array of -Objects. Such methods can usually be provided by extending or wrapping -existing ViewPlatformBehavior implementations.
--This command instantiates a generic object specified by class -name and binds it to instance name. The object is instantiated -through introspection of the class name. The object must provide a -parameterless constructor; this can usually be done by extending or -wrapping existing objects.
--The last two arguments are optional and define an alias for instance -name. This is useful in providing a longer descriptive name for the -application to recognize, or conversely, to provide a shorter alias for a -longer instance name. Either name may be used to identify the instance.
--Objects so defined may be accessed from ConfigContainer through the -getNamedGenericObjects method.
--Sets a property of a generic object. The details of the object specified by -instance name are not known to ConfigContainer, so any parameters to be -set through the configuration file are passed to the object instance by -invoking method name through introspection. The arguments following the -method name are evaluated and the results passed to the method as an array of -Objects. The required methods can usually be provided by extending or wrapping -existing objects.
--Sets the Java system property propertyName to the string -propertyValue. If the optional Default keyword is supplied, then the -property is set only if it doesn't currently have a value.
--Java system properties which affect Java 3D are evaluated at the first -reference to a VirtualUniverse. Setting such properties in the configuration -file is therefore ineffective if a ConfiguredUniverse constructor which accepts -a URL directly is used; ConfigContainer must be used instead. Even then, care -must be taken to avoid static references to VirtualUniverse from objects such -as Transform3D.
--The special Java property substitution syntax ${<propertyName>} -may be used to access the value of a Java system property anywhere within a -configuration file.
--Retrieves the configuration file specified by URL string and includes it -into the current configuration file at the current line. The content of the -included file is evaluated exactly as if it were pasted into the current file -at that line. Included files may be arbitrarily nested.
--URL strings must be quoted.
-
-Creates an alias for the object specified by originalName (which itself -may be an alias). baseName may be Device, Object, PhysicalBody, -PhysicalEnvironment, Screen, Window, Sensor, View, ViewPlatform, or -ViewPlatformBehavior; it specifies the type of the object being aliased. -Original names and aliases must be unique within a type. Note that there is no -white space between baseName and Alias.
--Aliases are useful for providing shorter or longer descriptive names for an -original name. This function is also provided by the optional Alias keyword -available for all New top-level commands. This separate command can be -used to substitute new names for objects created by generic include files in -order to conform to the names expected by specific applications.
--Built-In Command Details | -
-Built-in commands are provided by the parser itself to help construct the -arguments to top-level commands. They cannot appear at the top level of -command nesting.
--Translate, Rotate, TranslateRotate, and RotateTranslate are useful for -computing simple affine transforms of the form SourceToTarget -(e.g., TrackerBaseToImagePlate). These transform points from the -Source coordinate system to the Target coordinate system by -concatenating translation and rotation matrices. Here is a general rule for -creating such transforms:
- --Subtract (translate) the target origin first if it can be conveniently measured -or computed relative to the source origin along the source X, Y, and Z basis -vectors. Then rotate with Euler angles that move the target basis vectors to -their corresponding source basis vectors. ---If instead it is easier to measure or compute the source origin relative to the -target origin along the target basis vectors, rotate first with Euler angles -that move the target basis vectors to their corresponding source basis vectors, -and then add (translate) the source origin.
-
-The Canvas3D, Sensor, Device, PhysicalBody, PhysicalEnvironment, View, -ViewPlatform, ViewPlatformBehavior, and Object built-in commands return -references to the objects named by their arguments. These are mostly useful -for InputDevice and ViewPlatformBehavior implementations that define their own -properties. The return values of these built-in commands should not be passed -to commands that expect strings.
--Returns a 4D matrix that translates by the given X, Y, and Z values.
--Returns a 4D matrix that rotates by the given Euler angles around static X, Y, -and Z basis vectors: first about X, then Y, and then Z. See the -setEuler -method of Transform3D.
--Returns a 4D matrix that concatenates 4D matrices m1 and m2 in -that order. If a point is transformed by the resulting matrix, then in effect -the points are first transformed by m1 and then m2.
--An alias for the Concatenate command. This is useful to make the -result of the concatenation explicit.
--An alias for the Concatenate command. This is useful to make the -result of the concatenation explicit.
--Returns a BoundingSphere object using the 3D point center and the given -radius in meters. radius may be either a number or the string -Infinite.
--Returns the Canvas3D instance specified by the given name. A named Canvas3D is -created whenever any of the following configuration commands are used: - -
-(ViewProperty <view> Screen <screenName>)- -view is the name of a view created with the NewView command. The -argument to the Canvas3D built-in must be a screenName or -windowName parameter from one of the above commands. -
-(ViewProperty <view> Window <windowName>) -
-Note: the NewScreen and NewWindow commands do not create Canvas3D -instances themselves; they are created only by the above configuration -commands.
--Returns the Sensor instance specified by the given name.
--Returns the InputDevice instance specified by the given name.
--Returns the PhysicalBody instance specified by the given name.
--Returns the PhysicalEnvironment instance specified by the given name.
--Returns the Viewer instance specified by the given name.
--Returns the ViewingPlatform instance specified by the given name.
--Returns the ViewPlatformBehavior instance specified by the given name.
--Returns the generic object instance specified by the given name. A generic -named object is created by the following configuration command: - -
-(NewObject <instance name> <class name> -[Alias <alias name>]) --
-Returns a reference to the current ConfigContainer.
--Command Index | -
Command | -Type | -
---|---|
Alias | -top-level | -
BoundingSphere | -built-in | -
Canvas3D | -built-in | -
Concatenate | -built-in | -
ConfigContainer | -built-in | -
Device | -built-in | -
DeviceProperty | -top-level | -
Include | -top-level | -
JavaProperty | -top-level | -
NewDevice | -top-level | -
NewObject | -top-level | -
NewPhysicalBody | -top-level | -
NewPhysicalEnvironment | -top-level | -
NewScreen | -top-level | -
NewSensor | -top-level | -
NewView | -top-level | -
NewViewPlatform | -top-level | -
NewViewPlatformBehavior | -top-level | -
NewWindow | -top-level | -
Object | -built-in | -
ObjectProperty | -top-level | -
PhysicalBody | -built-in | -
PhysicalBodyProperty | -top-level | -
PhysicalEnvironment | -built-in | -
PhysicalEnvironmentProperty | -top-level | -
Rotate | -built-in | -
RotateTranslate | -built-in | -
ScreenProperty | -top-level | -
Sensor | -built-in | -
SensorProperty | -top-level | -
Translate | -built-in | -
TranslateRotate | -built-in | -
View | -built-in | -
ViewPlatform | -built-in | -
ViewPlatformBehavior | -built-in | -
ViewProperty | -top-level | -
ViewPlatformProperty | -top-level | -
ViewPlatformBehaviorProperty | -top-level | -
WindowProperty | -top-level | -
-Property Index | -
-/* - ************************************************************************ - * - * Java 3D configuration file for single fullscreen desktop configuration. - * A view platform behavior is created and configured here as well. - * - ************************************************************************ - */ - -(NewScreen center 0) -(ScreenProperty center WindowSize NoBorderFullScreen) - -(NewView view0) -(ViewProperty view0 Screen center) - -// 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. -// -(NewViewPlatformBehavior vpb org.jogamp.java3d.utils.behaviors.vp.OrbitBehavior) - -// Set the scheduling bounds to be a BoundingSphere with its center at -// (0.0 0.0 0.0) and an infinite radius. -// -(ViewPlatformBehaviorProperty vpb SchedulingBounds - (BoundingSphere (0.0 0.0 0.0) infinite)) - -// 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) -(ViewPlatformProperty vp ViewPlatformBehavior vpb) - -// Attach the view to the view platform. -(ViewProperty view0 ViewPlatform vp) -- - diff --git a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-stereo.html b/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-stereo.html deleted file mode 100644 index 0a91eed..0000000 --- a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-stereo.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - -
-/* - ************************************************************************ - * - * Java 3D configuration file for single fullscreen stereo desktop - * configuration with no head tracking. - * - ************************************************************************ - */ - -(NewScreen center 0) -(ScreenProperty center WindowSize NoBorderFullScreen) - -// Define the physical body. -// -// The head origin is halfway between the eyes, with X extending to the right, -// Y up, and positive Z extending into the skull. -// -(NewPhysicalBody SiteUser) - -// Set the interpupilary distance. This sets the LeftEyePosition and -// RightEyePosition to offsets of half this distance along both directions of -// the X axis. -// -(PhysicalBodyProperty SiteUser StereoEyeSeparation 0.066) - -// Create a view using the defined screen and physical body. -// -(NewView view0) -(ViewProperty view0 Screen center) -(ViewProperty view0 PhysicalBody SiteUser) - -// Enable stereo viewing. -// -(ViewProperty view0 StereoEnable true) -- - diff --git a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-vr.html b/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-vr.html deleted file mode 100644 index a2e07ac..0000000 --- a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-vr.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - -
-/* - ************************************************************************ - * - * Java 3D configuration file for a single screen stereo desktop display - * using a head tracker and 6DOF mouse. - * - ************************************************************************ - */ - -// Create a screen object and give it a logical name. -(NewScreen center 0) - -// Set the actual available image area. -(ScreenProperty center PhysicalScreenWidth 0.398) -(ScreenProperty center PhysicalScreenHeight 0.282) -(ScreenProperty center WindowSize NoBorderFullScreen) - -// Set the TrackerBaseToImagePlate transform for this screen. -(ScreenProperty center TrackerBaseToImagePlate - (RotateTranslate (Rotate 50.000 0.000 0.000) - (Translate 0.199 0.376 0.000))) - -// Configure the head tracker. -(NewDevice tracker1 org.jogamp.java3d.input.LogitechTracker) -(DeviceProperty tracker1 SerialPort "/dev/ttya") -(DeviceProperty tracker1 ReceiverBaseline 0.1450) -(DeviceProperty tracker1 ReceiverLeftLeg 0.0875) -(DeviceProperty tracker1 ReceiverHeight 0.0470) -(DeviceProperty tracker1 ReceiverTopOffset 0.0000) -(DeviceProperty tracker1 RealtimeSerialBuffer true) - -// Configure the 6DOF wand. -(NewDevice tracker2 org.jogamp.java3d.input.LogitechTracker) -(DeviceProperty tracker2 SerialPort "/dev/ttyb") -(DeviceProperty tracker2 ReceiverBaseline 0.0700) -(DeviceProperty tracker2 ReceiverLeftLeg 0.0625) -(DeviceProperty tracker2 ReceiverHeight 0.0510) -(DeviceProperty tracker2 ReceiverTopOffset 0.0000) -(DeviceProperty tracker2 RealtimeSerialBuffer true) - -// Make the tracker2 device a slave of the tracker1 device. -(DeviceProperty tracker1 Slave (Device tracker2)) - -// Create a 2D mouse valuator. -(NewDevice mouse org.jogamp.java3d.input.Mouse2DValuator) -(DeviceProperty mouse Components (Canvas3D center)) - -// Create logical names for the available sensors. -(NewSensor head tracker1 0) -(NewSensor mouse6d tracker2 0) -(NewSensor mouse2d mouse 0) - -// Set the 6DOF mouse sensor hotspot in the local sensor coordinate system. -(SensorProperty mouse6d Hotspot (0.00 0.00 -0.10)) - -// Create a physical environment. -(NewPhysicalEnvironment SampleSite) - -// Register the input devices and head tracker sensor. -(PhysicalEnvironmentProperty SampleSite InputDevice tracker1) -(PhysicalEnvironmentProperty SampleSite InputDevice tracker2) -(PhysicalEnvironmentProperty SampleSite InputDevice mouse) -(PhysicalEnvironmentProperty SampleSite HeadTracker head) - -// Define coexistence coordinates. -(PhysicalEnvironmentProperty SampleSite CoexistenceToTrackerBase - (TranslateRotate (Translate 0.0 -0.235 0.0) - (Rotate -50.0 0.0 0.0))) - -// Define the physical body. -(NewPhysicalBody SiteUser) - -// Set the interpupilary distance. -(PhysicalBodyProperty SiteUser StereoEyeSeparation 0.066) - -// Define the head location relative to the tracker mounted on the head. -(PhysicalBodyProperty SiteUser HeadToHeadTracker ((1.0 0.0 0.0 0.000) - (0.0 1.0 0.0 0.020) - (0.0 0.0 1.0 0.018))) - -// Create a view platform behavior. -// -(NewViewPlatformBehavior vpb org.jogamp.java3d.utils.behaviors.vp.WandViewBehavior) - -(ViewPlatformBehaviorProperty vpb Sensor6D (Sensor mouse6d)) -(ViewPlatformBehaviorProperty vpb Sensor2D (Sensor mouse2d)) - -(ViewPlatformBehaviorProperty vpb ButtonAction6D 1 GrabView) -(ViewPlatformBehaviorProperty vpb ButtonAction6D 2 TranslateForward) -(ViewPlatformBehaviorProperty vpb ButtonAction6D 0 TranslateBackward) - -(ViewPlatformBehaviorProperty vpb RotationCoords ViewPlatform) -(ViewPlatformBehaviorProperty vpb ButtonAction2D 1 Translation) -(ViewPlatformBehaviorProperty vpb ButtonAction2D 2 Scale) - -(ViewPlatformBehaviorProperty vpb EchoType Beam) -(ViewPlatformBehaviorProperty vpb EchoSize 0.004) - -(ViewPlatformBehaviorProperty vpb EchoColor 1.0 0.7 0.0) -(ViewPlatformBehaviorProperty vpb EchoTransparency 0.4) - -// Create a new view platform and set the view platform behavior. -// -(NewViewPlatform vp) -(ViewPlatformProperty vp ViewPlatformBehavior vpb) - -// Create a view. -// -(NewView view0) -(ViewProperty view0 Screen center) -(ViewProperty view0 PhysicalEnvironment SampleSite) -(ViewProperty view0 PhysicalBody SiteUser) -(ViewProperty view0 ViewPlatform vp) - -// Enable stereo viewing and head tracking. -(ViewProperty view0 StereoEnable true) -(ViewProperty view0 TrackingEnable True) -- - diff --git a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-window.html b/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-window.html deleted file mode 100644 index 3ff401f..0000000 --- a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-window.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - -
-/* - ************************************************************************ - * - * Java 3D configuration file for a conventional single screen, windowed - * desktop configuration. - * - ************************************************************************ - */ - -(NewWindow window1 0) -(WindowProperty window1 WindowSize (700.0 700.0)) - -(NewView view1) -(ViewProperty view1 Window window1) -- - diff --git a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x1.html b/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x1.html deleted file mode 100644 index 1f7f17b..0000000 --- a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x1.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - -
-/* - ************************************************************************ - * - * Java 3D configuration file for a single fullscreen desktop configuration. - * - ************************************************************************ - */ - -(NewWindow big 0) -(WindowProperty big WindowSize NoBorderFullScreen) - -(NewView view0) -(ViewProperty view0 Window big) -- - diff --git a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x2-flat.html b/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x2-flat.html deleted file mode 100644 index 9391af2..0000000 --- a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x2-flat.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - -
-/* - ************************************************************************ - * - * 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. -// -(ScreenProperty left PhysicalScreenWidth 0.360) -(ScreenProperty left PhysicalScreenHeight 0.288) - -(ScreenProperty right PhysicalScreenWidth 0.360) -(ScreenProperty right PhysicalScreenHeight 0.288) - -// Specify full screen windows. -// -(ScreenProperty left WindowSize NoBorderFullScreen) -(ScreenProperty 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. -// -(ScreenProperty left TrackerBaseToImagePlate - (Translate 0.360 0.144 0.0)) -(ScreenProperty 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: -// -// (ScreenProperty left TrackerBaseToImagePlate -// (Translate 0.405 0.144 0.0)) -// (ScreenProperty 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) -(ViewProperty view0 Screen left) -(ViewProperty 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. -// -(ViewProperty view0 CenterEyeInCoexistence (0.0 0.0 0.45)) - -(NewViewPlatform vp) -(ViewPlatformProperty vp AllowPolicyRead true) -(ViewPlatformProperty vp AllowLocalToVworldRead true) - -(ViewProperty view0 ViewPlatform vp) -- - diff --git a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x2-rot30.html b/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x2-rot30.html deleted file mode 100644 index ca5fdd6..0000000 --- a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x2-rot30.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - -
-/* - ************************************************************************ - * - * Java 3D configuration file for a dual-screen desktop configuration - * with each screen rotated toward the other by 30 degrees about Y from - * planar. The inside angle between them is 120 degrees. - * - ************************************************************************ - */ - -// 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 available image areas for full screens. -// -(ScreenProperty left PhysicalScreenWidth 0.360) -(ScreenProperty left PhysicalScreenHeight 0.288) - -(ScreenProperty right PhysicalScreenWidth 0.360) -(ScreenProperty right PhysicalScreenHeight 0.288) - -// Specify full screen windows. -// -(ScreenProperty left WindowSize NoBorderFullScreen) -(ScreenProperty right WindowSize NoBorderFullScreen) - -// Set the TrackerBaseToImagePlate transforms for these screens. -// -// The tracker base is set here to the middle of the edge shared by the two -// screens. Each screen is rotated 30 degrees toward the other about the -// tracker base +Y axis, so that the tracker base +Z is centered between the -// two screens. -// -(ScreenProperty left TrackerBaseToImagePlate - (RotateTranslate (Rotate 0.000 -30.000 0.0) - (Translate 0.360 0.144 0.0))) - -(ScreenProperty right TrackerBaseToImagePlate - (RotateTranslate (Rotate 0.000 30.000 0.0) - (Translate 0.000 0.144 0.0))) - - -// Create a view using the defined screens. -// -(NewView view0) -(ViewProperty view0 Screen left) -(ViewProperty view0 Screen right) -(ViewProperty view0 CenterEyeInCoexistence (0.0 0.0 0.45)) -- - diff --git a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-cave-vr.html b/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-cave-vr.html deleted file mode 100644 index 7ad30c4..0000000 --- a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-cave-vr.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - -
-/* - ************************************************************************ - * - * Java 3D configuration file for a cave environment with head tracking and - * stereo viewing. This cave consists of 3 projectors with 3 screens to the - * left, front, and right of the user, all at 90 degrees to each other. - * - * The projectors in Sun's VirtualPortal sample site are actually turned - * on their sides to get more height. Screen 0 is rotated 90 degrees - * counter-clockwise, while screens 1 and 2 are rotated 90 degrees - * clockwise. - * - ************************************************************************ - */ - -// Configure the head tracker. -// -(NewDevice tracker1 org.jogamp.java3d.input.LogitechTracker) -(DeviceProperty tracker1 SerialPort "/dev/ttya") // Unix paths need quoting. -(DeviceProperty tracker1 TransmitterBaseline 0.4600) -(DeviceProperty tracker1 TransmitterLeftLeg 0.4400) -(DeviceProperty tracker1 TransmitterCalibrationDistance 0.4120) - -// Configure an InputDevice to use for a 6 degree of freedom wand. -// -(NewDevice tracker2 org.jogamp.java3d.input.LogitechTracker) -(DeviceProperty tracker2 SerialPort "/dev/ttyb") -(DeviceProperty tracker2 ReceiverBaseline 0.0700) -(DeviceProperty tracker2 ReceiverLeftLeg 0.0625) -(DeviceProperty tracker2 ReceiverHeight 0.0510) -(DeviceProperty tracker2 ReceiverTopOffset 0.0000) - -// Make the tracker2 device a slave of the tracker1 device. -(DeviceProperty tracker1 Slave (Device tracker2)) - -// Create logical names for the head tracker and wand sensors. The last -// argument is the sensor's index in the input device. -// -(NewSensor head tracker1 0) -(NewSensor sensor6d tracker2 0) - -// 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 center 1) -(NewScreen right 2) - - -// Set the available image areas as well as their positition and orientation -// relative to the tracker base. From the orientation of a user standing -// within this VirtualPortal site and facing the center screen, the tracker -// base is along the vertical midline of the screen, 0.248 meters down from -// the top edge, and 1.340 meters in front of it. The tracker base is -// oriented so that its +X axis points to the left, its +Y axis points toward -// the screen, and its +Z axis points toward the floor. -// -(ScreenProperty left PhysicalScreenWidth 2.480) -(ScreenProperty left PhysicalScreenHeight 1.705) -(ScreenProperty left WindowSize NoBorderFullScreen) -(ScreenProperty left TrackerBaseToImagePlate - (( 0.0 0.0 -1.0 2.230) - ( 0.0 -1.0 0.0 1.340) - (-1.0 0.0 0.0 0.885))) - -(ScreenProperty center PhysicalScreenWidth 2.485) -(ScreenProperty center PhysicalScreenHeight 1.745) -(ScreenProperty center WindowSize NoBorderFullScreen) -(ScreenProperty center TrackerBaseToImagePlate - (( 0.0 0.0 1.0 0.248) - (-1.0 0.0 0.0 0.885) - ( 0.0 -1.0 0.0 1.340))) - -(ScreenProperty right PhysicalScreenWidth 2.480) -(ScreenProperty right PhysicalScreenHeight 1.775) -(ScreenProperty right WindowSize NoBorderFullScreen) -(ScreenProperty right TrackerBaseToImagePlate - (( 0.0 0.0 1.0 0.2488) - ( 0.0 -1.0 0.0 1.340) - ( 1.0 0.0 0.0 0.860))) - -// Create a physical environment. This contains the available input devices, -// audio devices, and sensors, and defines the coexistence coordinate system -// for mapping between the virtual and physical worlds. -// -(NewPhysicalEnvironment VirtualPortal) - -// Register the input device defined in this file and the sensor which will -// drive head tracking. -// -(PhysicalEnvironmentProperty VirtualPortal InputDevice tracker1) -(PhysicalEnvironmentProperty VirtualPortal InputDevice tracker2) -(PhysicalEnvironmentProperty VirtualPortal HeadTracker head) - -// Set the location of the center of coexistence relative to the tracker base. -// Here it set to the center of the center screen. The default view attach -// policy of NOMINAL_SCREEN used by ConfiguredUniverse will place the origin of -// the view platform in coexistence coordinates at the center of coexistence. -// -(PhysicalEnvironmentProperty VirtualPortal - CoexistenceToTrackerBase - ((-1.0 0.0 0.0 0.000) - ( 0.0 0.0 -1.0 1.340) - ( 0.0 -1.0 0.0 0.994))) - -// Define the physical body. The head origin is halfway between the eyes, with -// X extending to the right, Y up, and positive Z extending into the skull. -// -(NewPhysicalBody LabRat) -(PhysicalBodyProperty LabRat StereoEyeSeparation .07) - -// Define the position and orientation of the head relative to the tracker -// mounted on the head. -// -(PhysicalBodyProperty LabRat HeadToHeadTracker - ((-1.0 0.0 0.0 0.00) - ( 0.0 0.0 -1.0 0.05) - ( 0.0 -1.0 0.0 0.11))) - -// Create a view platform behavior for the 6DOF sensor. -// -(NewViewPlatformBehavior vpb org.jogamp.java3d.utils.behaviors.vp.WandViewBehavior) - -(ViewPlatformBehaviorProperty vpb Sensor6D sensor6d) -(ViewPlatformBehaviorProperty vpb ButtonAction6D 2 GrabView) -(ViewPlatformBehaviorProperty vpb ButtonAction6D 1 TranslateForward) -(ViewPlatformBehaviorProperty vpb ButtonAction6D 0 TranslateBackward) - -// Default normal translation speed is 0.1 physical meters per second. -(ViewPlatformBehaviorProperty vpb TranslationSpeed - 1.0 PhysicalMeters PerSecond) - -// Default rotation coordinates are Sensor. -(ViewPlatformBehaviorProperty vpb RotationCoords Head) - -// Nominal sensor transform for modified joystick RedBarron -(SensorProperty sensor6d Hotspot (0.00 0.6 0.00)) -(ViewPlatformBehaviorProperty vpb NominalSensorRotation - ((-1.0 0.0 0.0) - ( 0.0 0.0 -1.0) - ( 0.0 -1.0 0.0))) - -// Default 6DOF sensor echo is Gnomon -(ViewPlatformBehaviorProperty vpb EchoSize 0.015) -(ViewPlatformBehaviorProperty vpb EchoType Beam) - -// Default 6DOF sensor echo color is white -(ViewPlatformBehaviorProperty vpb EchoColor 1.0 0.7 0.0) - -// Default 6DOF sensor transparency is 0.0 (opaque) -(ViewPlatformBehaviorProperty vpb EchoTransparency 0.4) - -// Create a new view platform and set the view platform behavior. -// -(NewViewPlatform vp) -(ViewPlatformProperty vp ViewPlatformBehavior vpb) - -// Now define the view. -// -(NewView view0) -(ViewProperty view0 Screen left) -(ViewProperty view0 Screen center) -(ViewProperty view0 Screen right) -(ViewProperty view0 PhysicalBody LabRat) -(ViewProperty view0 PhysicalEnvironment VirtualPortal) -(ViewProperty view0 ViewPlatform vp) - -// Set the screen scale. This is scale factor from virtual to physical -// coordinates. -// -(ViewProperty view0 ScreenScalePolicy SCALE_SCREEN_SIZE) - -// Alternative for explict scaling. -// -//(ViewProperty view0 ScreenScalePolicy SCALE_EXPLICIT) -//(ViewProperty view0 ScreenScale 5.00) - -// Enable stereo viewing. Enable head tracking to get the position of the eyes -// with respect to coexistence. Boolean values may be specified as either -// true, True, false, or False. -// -(ViewProperty view0 StereoEnable true) -(ViewProperty view0 TrackingEnable True) -- - diff --git a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-cave.html b/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-cave.html deleted file mode 100644 index 9b0298b..0000000 --- a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-cave.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - -
-/* - ************************************************************************ - * - * Java 3D configuration file for a cave environment. This cave - * consists of 3 projectors with 3 screens to the left, front, and right - * of the user, all at 90 degrees to each other. - * - * The projectors in the VirtualPortal sample site are actually turned - * on their sides to get more height. Screen 0 is rotated 90 degrees - * counter-clockwise, while screens 1 and 2 are rotated 90 degrees - * clockwise. - * - ************************************************************************ - */ - -// 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 center 1) -(NewScreen right 2) - - -// Set the available image areas as well as their positition and orientation -// relative to the tracker base. Although this config file doesn't enable -// head tracking, the tracker base is still needed as a point of reference to -// describe the position and orientation of the screens relative to the -// environment. -// -// From the orientation of a user standing within this VirtualPortal site and -// facing the center screen, the tracker base is along the vertical midline of -// the screen, 0.248 meters down from the top edge, and 1.340 meters in front -// of it. The tracker base is oriented so that its +X axis points to the left, -// its +Y axis points toward the screen, and its +Z axis points toward the -// floor. -// -(ScreenProperty left PhysicalScreenWidth 2.480) -(ScreenProperty left PhysicalScreenHeight 1.705) -(ScreenProperty left WindowSize NoBorderFullScreen) -(ScreenProperty left TrackerBaseToImagePlate - (( 0.0 0.0 -1.0 2.230) - ( 0.0 -1.0 0.0 1.340) - (-1.0 0.0 0.0 0.885))) - -(ScreenProperty center PhysicalScreenWidth 2.485) -(ScreenProperty center PhysicalScreenHeight 1.745) -(ScreenProperty center WindowSize NoBorderFullScreen) -(ScreenProperty center TrackerBaseToImagePlate - (( 0.0 0.0 1.0 0.248) - (-1.0 0.0 0.0 0.885) - ( 0.0 -1.0 0.0 1.340))) - -(ScreenProperty right PhysicalScreenWidth 2.480) -(ScreenProperty right PhysicalScreenHeight 1.775) -(ScreenProperty right WindowSize NoBorderFullScreen) -(ScreenProperty right TrackerBaseToImagePlate - (( 0.0 0.0 1.0 0.2488) - ( 0.0 -1.0 0.0 1.340) - ( 1.0 0.0 0.0 0.860))) - -// Set the location of the center of coexistence relative to the tracker base. -// Here it set to the center of the center screen. This config file will set -// the location of the user's eyes relative to this point. The default view -// attach policy of NOMINAL_SCREEN used by ConfiguredUniverse will place the -// origin of the view platform in coexistence coordinates at the center of -// coexistence. -// -(NewPhysicalEnvironment VirtualPortal) -(PhysicalEnvironmentProperty VirtualPortal - CoexistenceToTrackerBase - ((-1.0 0.0 0.0 0.000) - ( 0.0 0.0 -1.0 1.340) - ( 0.0 -1.0 0.0 0.994))) - -// Now define the view. -// -(NewView view0) -(ViewProperty view0 Screen left) -(ViewProperty view0 Screen center) -(ViewProperty view0 Screen right) -(ViewProperty view0 PhysicalEnvironment VirtualPortal) - -// Set the user eye position in the display environment. It is set here to -// 1.340 meters back from the center screen (directly under the tracker), and -// 1.737 meters from the floor (about 5 ft 8.4 inches). -// -(ViewProperty view0 CenterEyeInCoexistence (0.0 0.494 1.340)) - -// Explict scaling. -// -(ViewProperty view0 ScreenScalePolicy SCALE_EXPLICIT) -(ViewProperty view0 ScreenScale 0.30) - -// No stereo viewing for this configuration. -// -(ViewProperty view0 StereoEnable False) -- - diff --git a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-rot45.html b/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-rot45.html deleted file mode 100644 index 927dbd8..0000000 --- a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-rot45.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - -
-/* - ************************************************************************ - * - * Java 3D configuration file for 3 screens. Left and right screens are - * rotated 45 degrees from the center screen. - * - ************************************************************************ - */ - -// 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 center 1) -(NewScreen right 2) - -// Set the available image areas for full screens. -// -(ScreenProperty left PhysicalScreenWidth 0.360) -(ScreenProperty left PhysicalScreenHeight 0.288) - -(ScreenProperty center PhysicalScreenWidth 0.360) -(ScreenProperty center PhysicalScreenHeight 0.288) - -(ScreenProperty right PhysicalScreenWidth 0.360) -(ScreenProperty right PhysicalScreenHeight 0.288) - -// Specify full screen windows. -// -(ScreenProperty left WindowSize NoBorderFullScreen) -(ScreenProperty center WindowSize NoBorderFullScreen) -(ScreenProperty right WindowSize NoBorderFullScreen) - -// Set the TrackerBaseToImagePlate transforms for these screens. -// -// The tracker base and center of coexistence are set here to the middle of the -// center screen. The basis vectors are aligned with the center screen image -// plate. The left and right screens are rotated 45 degrees toward each other -// about their shared edges with the center screen. -// -(ScreenProperty center TrackerBaseToImagePlate - (Translate 0.180000 0.144000 0.000000)) - -// cos(45) * 0.360 * 0.5 = 0.127279; 0.360 + 0.127279 = 0.487279 -(ScreenProperty left TrackerBaseToImagePlate - (RotateTranslate - (Rotate 0.000000 -45.000000 0.000000) - (Translate 0.487279 0.144000 0.127279))) - -// cos(45) * 0.360 * 0.5 = 0.127279 -(ScreenProperty right TrackerBaseToImagePlate - (RotateTranslate - (Rotate 0.000000 45.000000 0.000000) - (Translate -0.127279 0.144000 0.127279))) - -// Create a view using the defined screens. -// -(NewView view0) -(ViewProperty view0 Screen left) -(ViewProperty view0 Screen center) -(ViewProperty view0 Screen right) -(ViewProperty view0 CenterEyeInCoexistence (0.0 0.0 0.5)) -- - diff --git a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d2x2-flat.html b/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d2x2-flat.html deleted file mode 100644 index af6f62f..0000000 --- a/src/main/java/org/jogamp/java3d/utils/universe/doc-files/j3d2x2-flat.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - -
-/* - ************************************************************************ - * - * Java 3D configuration file for 4 screen projection configuration - * arranged in a 2x2 power wall. - * - ************************************************************************ - */ - -// 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 topleft 0) -(NewScreen topright 1) -(NewScreen bottomleft 3) -(NewScreen bottomright 2) - -// Set the available image areas for full screens. This is important when -// precise scaling between objects in the virtual world and their projections -// into the physical world is desired through use of explicit ScreenScale view -// attributes. The defaults are 0.365 meters for width and 0.292 meters for -// height. -// -(ScreenProperty topleft PhysicalScreenWidth 0.912) -(ScreenProperty topleft PhysicalScreenHeight 0.680) - -(ScreenProperty topright PhysicalScreenWidth 0.912) -(ScreenProperty topright PhysicalScreenHeight 0.680) - -(ScreenProperty bottomleft PhysicalScreenWidth 0.912) -(ScreenProperty bottomleft PhysicalScreenHeight 0.685) - -(ScreenProperty bottomright PhysicalScreenWidth 0.912) -(ScreenProperty bottomright PhysicalScreenHeight 0.685) - - -// Specify full screen windows. -// -(ScreenProperty topleft WindowSize NoBorderFullScreen) -(ScreenProperty topright WindowSize NoBorderFullScreen) -(ScreenProperty bottomleft WindowSize NoBorderFullScreen) -(ScreenProperty bottomright 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 point -// 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 are set here to the center of the -// 2x2 array with its basis vectors aligned to image plate coordinates. -// -(ScreenProperty topleft TrackerBaseToImagePlate - (Translate 0.912 0.000 0.0)) -(ScreenProperty topright TrackerBaseToImagePlate - (Translate 0.000 0.000 0.0)) -(ScreenProperty bottomleft TrackerBaseToImagePlate - (Translate 0.912 0.685 0.0)) -(ScreenProperty bottomright TrackerBaseToImagePlate - (Translate 0.000 0.685 0.0)) - -// Create a view using the defined screens. -// -(NewView view0) -(ViewProperty view0 Screen topleft) -(ViewProperty view0 Screen topright) -(ViewProperty view0 Screen bottomleft) -(ViewProperty view0 Screen bottomright) - -// Set the screen scale. This is scale factor from virtual to physical -// coordinates. The default policy of SCALE_SCREEN_SIZE doesn't work well here -// since in the 2x2 arrangement the individual screens are too small. The -// explicit scale factor below assumes a normalized range of object coordinates -// of [-1.0 .. +1.0]. -// -(ViewProperty view0 ScreenScalePolicy SCALE_EXPLICIT) -(ViewProperty view0 ScreenScale 0.912) - -// Set the user eye position in the display environment. -// -(ViewProperty view0 CenterEyeInCoexistence (0.0 0.0 1.0)) -- - diff --git a/src/main/java/org/jogamp/java3d/utils/universe/package.html b/src/main/java/org/jogamp/java3d/utils/universe/package.html deleted file mode 100644 index 06c31db..0000000 --- a/src/main/java/org/jogamp/java3d/utils/universe/package.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - -
Provides utility classes for setting up the Java 3D universe, -including the viewing configuration.
- - diff --git a/src/main/javadoc/org/jogamp/java3d/audioengines/javasound/package.html b/src/main/javadoc/org/jogamp/java3d/audioengines/javasound/package.html new file mode 100644 index 0000000..05122f4 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/audioengines/javasound/package.html @@ -0,0 +1,11 @@ + + + + +Provides a JavaSound-based implementation of a Java 3D audio device.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/audioengines/package.html b/src/main/javadoc/org/jogamp/java3d/audioengines/package.html new file mode 100644 index 0000000..4ad0001 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/audioengines/package.html @@ -0,0 +1,11 @@ + + + + +Provides abstract classes for creating Java 3D audio devices.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/exp/swing/package.html b/src/main/javadoc/org/jogamp/java3d/exp/swing/package.html new file mode 100644 index 0000000..8b1db83 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/exp/swing/package.html @@ -0,0 +1,13 @@ + + + + +EXPERIMENTAL: Provides a lightweight JCanvas3D class. +Note that the API in this package is highly experimental and +subject to change at any time.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/loaders/lw3d/package.html b/src/main/javadoc/org/jogamp/java3d/loaders/lw3d/package.html new file mode 100644 index 0000000..241bf5b --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/loaders/lw3d/package.html @@ -0,0 +1,11 @@ + + + + +Provides a Java 3D loader for Lightwave 3D scene files.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/loaders/objectfile/package.html b/src/main/javadoc/org/jogamp/java3d/loaders/objectfile/package.html new file mode 100644 index 0000000..9930bb7 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/loaders/objectfile/package.html @@ -0,0 +1,11 @@ + + + + +Provides a Java 3D loader for Wavefront .obj files.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/loaders/package.html b/src/main/javadoc/org/jogamp/java3d/loaders/package.html new file mode 100644 index 0000000..c7a9f12 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/loaders/package.html @@ -0,0 +1,11 @@ + + + + +Provides interfaces and abstract classes for writing Java 3D loaders.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/applet/package.html b/src/main/javadoc/org/jogamp/java3d/utils/applet/package.html new file mode 100644 index 0000000..17fd1b1 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/applet/package.html @@ -0,0 +1,12 @@ + + + + +Provides utility classes for running applets as stand-alone +applications.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/audio/package.html b/src/main/javadoc/org/jogamp/java3d/utils/audio/package.html new file mode 100644 index 0000000..ecb71e8 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/audio/package.html @@ -0,0 +1,11 @@ + + + + +Provides audio utility classes.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/behaviors/interpolators/package.html b/src/main/javadoc/org/jogamp/java3d/utils/behaviors/interpolators/package.html new file mode 100644 index 0000000..19ef214 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/behaviors/interpolators/package.html @@ -0,0 +1,11 @@ + + + + +Provides spline-based interpolation behaviors.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/behaviors/keyboard/package.html b/src/main/javadoc/org/jogamp/java3d/utils/behaviors/keyboard/package.html new file mode 100644 index 0000000..efe76d5 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/behaviors/keyboard/package.html @@ -0,0 +1,11 @@ + + + + +Provides keyboard navigation utility classes.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/behaviors/mouse/package.html b/src/main/javadoc/org/jogamp/java3d/utils/behaviors/mouse/package.html new file mode 100644 index 0000000..6eb2142 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/behaviors/mouse/package.html @@ -0,0 +1,11 @@ + + + + +Provides mouse navigation utility classes.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/behaviors/picking/package.html b/src/main/javadoc/org/jogamp/java3d/utils/behaviors/picking/package.html new file mode 100644 index 0000000..66a7fd0 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/behaviors/picking/package.html @@ -0,0 +1,13 @@ + + + + +Deprecated: Use org.jogamp.java3d.utils.pickfast.behaviors
+instead.
Provides 6DOF sensor behavior classes.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/behaviors/vp/package.html b/src/main/javadoc/org/jogamp/java3d/utils/behaviors/vp/package.html new file mode 100644 index 0000000..81534d3 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/behaviors/vp/package.html @@ -0,0 +1,11 @@ + + + + +Provides ViewPlatform navigation utility classes.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/compression/package.html b/src/main/javadoc/org/jogamp/java3d/utils/compression/package.html new file mode 100644 index 0000000..639ad1a --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/compression/package.html @@ -0,0 +1,13 @@ + + + + +Deprecated: Use org.jogamp.java3d.utils.geometry.compression
+instead.
Provides compressed geometry utility classes. + This package supersedes the org.jogamp.java3d.CompressedGeometry class and + the org.jogamp.java3d.utils.compression package.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/geometry/package.html b/src/main/javadoc/org/jogamp/java3d/utils/geometry/package.html new file mode 100644 index 0000000..271424e --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/geometry/package.html @@ -0,0 +1,12 @@ + + + + +Provides geometry construction, triangulation, and optimization +utility classes.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/image/package.html b/src/main/javadoc/org/jogamp/java3d/utils/image/package.html new file mode 100644 index 0000000..27b3560 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/image/package.html @@ -0,0 +1,11 @@ + + + + +Provides texture image utility classes.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/pickfast/behaviors/package.html b/src/main/javadoc/org/jogamp/java3d/utils/pickfast/behaviors/package.html new file mode 100644 index 0000000..e814f82 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/pickfast/behaviors/package.html @@ -0,0 +1,11 @@ + + + + +Provides picking behaviors for the new core picking methods.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/pickfast/package.html b/src/main/javadoc/org/jogamp/java3d/utils/pickfast/package.html new file mode 100644 index 0000000..044927f --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/pickfast/package.html @@ -0,0 +1,11 @@ + + + + +Provides picking utility classes for the new core picking methods.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/picking/behaviors/package.html b/src/main/javadoc/org/jogamp/java3d/utils/picking/behaviors/package.html new file mode 100644 index 0000000..32ba40f --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/picking/behaviors/package.html @@ -0,0 +1,12 @@ + + + + +OBSOLETE: provides picking behaviors for the old picking +methods.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/picking/package.html b/src/main/javadoc/org/jogamp/java3d/utils/picking/package.html new file mode 100644 index 0000000..1571e03 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/picking/package.html @@ -0,0 +1,12 @@ + + + + +OBSOLETE: provides picking utility classes for the old +picking methods.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/scenegraph/io/doc-files/extensibility.html b/src/main/javadoc/org/jogamp/java3d/utils/scenegraph/io/doc-files/extensibility.html new file mode 100644 index 0000000..d77e9bd --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/scenegraph/io/doc-files/extensibility.html @@ -0,0 +1,189 @@ + + + + + + + +The scenegraph.io APIs will handle the IO for all the core Java3D +SceneGraphObjects. However, if you create a subclass of one of these +objects and add it to your Scene Graph, the IO system, by default, +will not store any state information specific to your class.
+The default behavior when an unrecognized SceneGraphObject class +is encountered is to traverse up the superclasses of the object until +a recognized Java3D class is located. The data structures for this +class are then used for IO. The system does store the class name of +the original object. +
For example: +
+public class MyBranchGroup extends org.jogamp.java3d.BranchGroup { + private int myData; + .... +} ++
When the Scene Graph is written to a file and this node is +encountered, the superclass org.jogamp.java3d.BranchGroup will be used +to store all the state for the object so any children of +MyBranchGroup, the capabilities, etc. will be stored, but myData will +be lost. When the scene graph is loaded, MyBranchGroup will be +instantiated and will be populated with all the state from +BranchGroup but myData will have been lost.
+To overcome this, the scenegraph.io API provides an interface for +you to implement in your own classes that provides the opportunity +for you to save the state of your classes during the IO processes. +This is the SceneGraphIO interface.
+When the scenegraph is saved, the methods of SceneGraphIO are +called in this order +
+createSceneGraphObjectReferences
+saveChildren
+writeSceneGraphObject
+During the load cycle the method call order is
+Instantiate Object using default constructor
+Populate object with state from superclasses
+readSceneGraphObject
+restoreSceneGraphObjectReferences
+Within each method you need to perform the following actions: +
createSceneGraphObjectReferences If your object has + references to other SceneGraphObjects then you need to obtain an + object reference (int) for each reference using the + SceneGraphReferenceControl object passed as a parameter to this + method. If you don't have references to other SceneGraphObjects then + no action is required.
+saveChildren If your object is a subclass of Group and you + want the scenegraph.io package to save the children then this must + return true. If it returns false, the object will be saved but not + its children.
+writeSceneGraphObject In this method you must write all the + state information for your class, including the object references + obtained in createSceneGraphObjectReferences, to the DataOutput + stream passed into this method.
+readSceneGraphObject By the time this method is called your + class has been instantiated and the state information in the Java3D + superclass will have been loaded. You should load all the state + information you saved for your class.
+restoreSceneGraphObjectReferences is called once all the + SceneGraph objects have been loaded and allows you to restore the + references to the other SceneGraph objects.
+Here are some examples. Only the parts of the source pertaining to +IO are show....
+++public class BehaviorIO extends org.jogamp.java3d.Behavior implements SceneGraphIO + private TransformGroup target; // The TG on which this behavior acts + private int targetRef; // Object Reference for target + + public void createSceneGraphObjectReferences( SceneGraphObjectReferenceControl ref ) { + targetRef = ref.addReference( target ); + } + + public void restoreSceneGraphObjectReferences( SceneGraphObjectReferenceControl ref ) { + target = (TransformGroup)ref.resolveReference( targetRef ); + } + + public void writeSceneGraphObject( java.io.DataOutput out ) throws IOException { + out.writeInt( targetRef ); + } + + public void readSceneGraphObject( java.io.DataInput in ) throws IOException { + targetRef = in.readInt(); + } + + // This has no effect as this is not a subclass of Group + public boolean saveChildren() { + return true; + } +
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/scenegraph/io/package.html b/src/main/javadoc/org/jogamp/java3d/utils/scenegraph/io/package.html new file mode 100644 index 0000000..73e795c --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/scenegraph/io/package.html @@ -0,0 +1,105 @@ + + + + + + + ++public class House extends Group implements SceneGraphIO { + public House() { + super(); + this.addChild( OpenFlightLoader.load( "/dir/house.flt" ); + } + + public void createSceneGraphObjectReferences( SceneGraphObjectReferenceControl ref ) { + // No references + } + + public void restoreSceneGraphObjectReferences( SceneGraphObjectReferenceControl ref ) { + // No references + } + + public void writeSceneGraphObject( java.io.DataOutput out ) throws IOException { + // No local state + } + + public void readSceneGraphObject( java.io.DataInput in ) throws IOException { + // No local state + } + + public boolean saveChildren() { + // Don't save the children as they will be restored by the openflightloader + return false; + } +
This package provides a Java3D SceneGraph IO capability. +The API supports IO of a scenegraph to and from a Java Stream and/or +RandomAccessFile. The features offered for these two io systems are +somewhat different.
+The SceneGraphFileReader and SceneGraphFileWriter classes provide +IO to and from a RandomAccessFile. They allow a universe and/or +multiple BranchGraphs to be written to the file with Node's and +NodeComponent's shared between the separate graphs. The graphs can be +read in any order.
+SceneGraphStreamReader and SceneGraphStreamWriter classes provide +IO to and from a Stream. These classes allow a universe and/or +multiple BranchGraphs to be passed over stream. In contrast to the +FileReader/Writer sharing of Node's is NOT supported between graphs +by the API. Sharing of node components is supported. If your +application requires references to Nodes in other graphs (such as +SharedGroups) the application must handle the references using the +namedObjects constructs.
+Note : If you use SceneGraphStreamWriter class to write to a +FileOutputStream the resulting file cannot be read using the +SceneGraphFileReader, the converse is also true, you can not use a +FileInputStream to load a file written by SceneGraphFileWriter. +
+The package supports the IO of all the Java3D 1.3 core classes +and many of the utilities. It also includes interfaces which can be +implemented to allow user defined subclasses of SceneGraphObjects to +be stored. Information on the extensibility can be found +here +
+The package has a number of properties which can be used to control the IO +behavior
+ +
+j3d.io.UseSuperClassIfNoChildClass when this property is present the load +operation will attempt to avoid failure if Scene Graph nodes are not present +in the classpath. For example if a developer has subclassed BranchGroup with a +class called MyBG but has not +implemented the SceneGraphIO interface when the API saves the graph the +superclass (ie BranchGroup) data will be stored. When the scene is loaded +normally MyBG must be in the classpath otherwise the load will fail. If this +property is set then the superclass node (ie BranchGroup) will be instantiated +when MyBG is missing. Obviously, if MyBG contained any state information +then this will be lost.+ + + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/scenegraph/transparency/package.html b/src/main/javadoc/org/jogamp/java3d/utils/scenegraph/transparency/package.html new file mode 100644 index 0000000..c7669ec --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/scenegraph/transparency/package.html @@ -0,0 +1,11 @@ + + + + ++ +j3d.io.ImageCompression this can be set to None, GZIP, JPEG and tells the +IO system to compress images in the .j3f file using the prescribed technique. In +the future this will be extended to support all the formats available in +javax.imageio in JDK 1.4. +
Provides transparency sorting utility classes.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/shader/package.html b/src/main/javadoc/org/jogamp/java3d/utils/shader/package.html new file mode 100644 index 0000000..fe01b81 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/shader/package.html @@ -0,0 +1,11 @@ + + + + +Provides shader utility classes.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/timer/package.html b/src/main/javadoc/org/jogamp/java3d/utils/timer/package.html new file mode 100644 index 0000000..a3af6aa --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/timer/package.html @@ -0,0 +1,11 @@ + + + + +Deprecated: Use java.lang.System.nanoTime() instead.
+ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/config-examples.html b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/config-examples.html new file mode 100644 index 0000000..bab913b --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/config-examples.html @@ -0,0 +1,85 @@ + + + + + + + + + + + +
j3d1x1 A single fullscreen
+desktop configuration.
+
j3d1x1-behavior A single +fullscreen desktop configuration with a configurable view platform behavior. +
j3d1x1-stereo A single +fullscreen desktop configuration with stereo viewing. +
j3d1x1-vr A single fullscreen +desktop configuration with head tracker, stereo viewing, and 6 degree of +freedom mouse. +
j3d1x1-window A single screen +desktop configuration with a conventional window. +
j3d1x2-flat A dual-screen planar +desktop configuration. +
j3d1x2-rot30 A dual-screen +desktop configuration with each screen rotated toward the other by 30 degrees. +
j3d1x3-cave A three-projector cave +configuration. +
j3d1x3-cave-vr A +three-projector cave configuration with head tracking and stereo viewing. +
j3d1x3-rot45 A three-screen +desktop configuration with left and right screens rotated 45 degrees from the +center screen. +
j3d2x2-flat A four-projector
+configuration arranged in a 2x2 array.
+
+
+
diff --git a/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/config-syntax.html b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/config-syntax.html
new file mode 100644
index 0000000..e725146
--- /dev/null
+++ b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/config-syntax.html
@@ -0,0 +1,1973 @@
+
+
+
+
+
+
+The Java 3D Configuration File | +
+This document is an informal description of the syntax of the Java 3D +configuration file and a tutorial of the semantics of its various commands. +Such a file is written by a user or site administrator to describe the physical +configuration of a local interactive viewing environment. Configuration +properties that can be described in the file include the sizes, positions, and +orientations of displays in either fixed screen environments or head mounted +displays (HMD devices), as well as the input devices and sensors +available for user interaction apart from the keyboard and mouse abstractions +provided by the AWT.
++A configuration file is used by passing its URL to either a ConfigContainer or +a ConfiguredUniverse constructor. The method by which a user specifies the +file is up to the application, but the universe utilities do provide a few +means to easily enable an application to perform this task. These depend upon +a Java 3D property, j3d.configURL, that the user can set on the java +command line with the -D option. Its value should be a URL string +indicating the location of the desired file. The application can then either +call the static ConfigContainer methods +getConfigURL +to retrieve the value of the property, or + +getConfigURL(String) to specify a default file to be used in case the +property is not set. Applications are encouraged to devise their own +user-friendly mechanisms to retrieve the configuration file, although the +setting of the j3d.configURL property should be honored if at all +possible.
++If the attempt to open the resource indicated by the URL is successful, then a +parser will be invoked to read and evaluate the commands it contains and +deposit the results in the ConfigContainer. The parser will detect syntax +errors, invalid commands, and bad references, printing descriptive messages to +System.out, including the line number and text of the offending command. In +general the parser attempts to continue processing as much of the file as it +can when encountering an error. Some errors can only be detected after the +entire file has been evaluated; in those cases an exception will be thrown.
++An application may choose to override the settings of the configuration file by +accessing view-side scenegraph components directly from the ConfigContainer +once the file is evaluated. Applications should avoid this in general, as most +settings are physical calibration constants specific to the local interactive +viewing environment. Nonetheless, application overrides are still sometimes +appropriate; for example, the application may have knowledge of the contents of +the scenegraph that enables it to make a better judgement of where the view's +clipping planes should be.
++Syntax Description | +
+The configuration file syntax is very simple; scanning any of the +sample configuration files should provide +the general idea. At the broadest level there are two main types of +constructs: comments and commands.
++Comments can be either C or C++ style. In a C-style +comment all text between successive occurances of /* and */ is ignored. +A C++ comment begins with // and continues to the end of the line.
++A command begins with an opening parenthesis and ends with a closing +parenthesis. The elements between the parentheses can be of four types: +alphanumeric strings, numbers, quoted strings, or other commands. During the +evaluation of a command, any nested command encountered is itself evaluated, +and the result of that evaluation replaces the nested command within the +original outer command.
++Strings that contain embedded white space, forward slashes, or invalid +tokens must be enclosed in quotes (either single or double). Common cases are +URL strings and Unix path names. Numbers are any non-quoted strings that can +be parsed as double-precision floating point numbers. The strings true, +True, false, and False are converted to their corresponding boolean +values. Strings, quoted strings, and numbers are delimited from each other by +white space.
++Commands in the configuration file have four special forms: point, +matrix, top-level, and built-in commands.
+ +++ ++Points
+ +A command that consists entirely of two, three, or four numbers is a 2D point, +a 3D point, or a 4D point respectively. Any other command that starts with a +number is a syntax error. ++Don't pass 2D, 3D, or 4D points to commands that expect two, three, or four +numbers instead. This will generate a syntax error indicating an invalid +number of arguments.
+ ++Matrices
+ +A 3D matrix is a command that consists entirely of three 3D points. A 4D +matrix consists entirely of either three or four 4D points; if there are only +three 4D points then the fourth is implicitly considered to be (0.0 0.0 0.0 +1.0). The points define the row elements of each type of matrix. Any other +command that starts with a point is a syntax error. + ++Top-level and built-in commands
+ +All other commands start with an alphanumeric string, the command name +which identifies it. The remaining elements of the command are its arguments. ++Command names can either specify top-level or built-in commands. Top-level +commands generally configure Java 3D core and utility classes and can only +appear at the outermost level of parentheses. Built-in commands are provided +by the parser itself to help construct the arguments to top-level commands. +Points, matrices, and built-in commands can only be nested within other +commands.
++An error will result if points, matrices, or built-in commands are invoked at +the outermost level of nesting. Sometimes this error is caused by prematurely +closing the opening parenthesis of the current top-level command. Such an +error is usually preceded by an error from the command indicating an invalid +number of arguments.
++Similarly, errors will be generated if top-level commands are nested. Errors +to this effect are sometimes caused by failing to close all the open +parentheses of the preceding top-level command.
+
+(Include "file:${user.home}/myBody.cfg")
++would evaluate the contents of the file "myBody.cfg" in the user's home +directory on Unix systems. An error is issued if no Java property exists with +the specified name.
++Java property substitution happens early, after tokenization but before command +evaluation. Substitution can occur any number of times anywhere within any +quoted or non-quoted string, including command names, property names, and +property values, as long as the property substitution syntax is not nested.
++Command Overview | +
+Most top-level commands configure concrete Java 3D core and utility classes. +These include PhysicalBody, PhysicalEnvironment, Screen, Sensor, View, and +ViewPlatform. The Screen, View, and ViewPlatform commands also implicitly +configure the Canvas3D core class and the Viewer and ViewingPlatform utility +classes respectively.
++These commands come in two forms: the New<class name> and +<class name>Property commands. All New commands except +NewSensor create new class instances and bind names to +them, while the Property commands refer to these names and configure +their corresponding class instances with the parameters specified by the +command arguments. All references must be to objects previously instantiated +in the file; forward referencing is not supported. Names must be unique within +each class.
++Implementations of the Java 3D InputDevice interface and concrete subclasses of +the abstract ViewPlatformBehavior utility class can also be instantiated and +configured with the same command forms. The New commands for these +objects accept class names as command arguments and instantiate the objects +through introspection. Since the details of the implementations are not known, +configuration parameters are passed through methods which are invoked through +introspection of the method names specified in the Property command +arguments.
++A method invoked through introspection with a Property command gets its +arguments as a single array of Objects. Boolean strings get wrapped into +Boolean objects, and number strings get wrapped into Double. 2D, 3D, and 4D +points get wrapped into Point2d, Point3d, and Point4d objects respectively, +while 3D and 4D matrices get wrapped into Matrix3d and Matrix4d +respectively.
++Overview of Relevant View Model Parameters | +
+The sample configuration files are annotated to assist users in modifying them +to suit their particular viewing environments, but it can be helpful to know +some of the basics of the Java 3D view model that are relevant to writing a +configuration file. This overview should only be considered an informal +adjunct to the detailed description in the Java 3D Specification. Reading the +source code to the ViewInfo utility (a public +implementation of the Java 3D view model) may also be helpful in understanding +the details of the view model.
+ ++The Camera View Model | +
+In the traditional camera model the camera or eyepoint is positioned and +oriented with respect to the virtual world via a view transform. Objects +contained within the field of view are projected onto an image plane, which is +then mapped onto a display surface, usually a window on a desktop display +system. While the view direction and camera position can be freely oriented +and placed anywhere in the virtual world, the projection is accomplished using +a static frustum defined by the field of view and a flat image plane centered +about and normal to the view direction.
++This model emulates a typical physical camera quite well, but there are many +viewing configurations that cannot be implemented using image planes that are +fixed with respect to the view direction. In a multiple screen environment the +projection frustum for each screen is skewed with respect to the image plane, +based on the user's nominal viewing position. Realistic stereo views on fixed +displays use skewed projection frustums derived from the offsets of the two +eyes from the center of the image plane, while head tracking with fixed +displays involves dynamically adjusting projection frustums in response to +varying eye positions relative to the image plane.
++In a low-level API such as OpenGL these situations are handled by concatenating +all defined model and viewing transforms into a single modelview matrix, +and for a fixed-screen environment explicitly computing the projection +matrix for each eye, each display surface, and each new head +position. Every application handling such viewing configurations typically +reimplements the framework for computing those matrices itself. In these cases +it would be useful to be able to separate the projection components out of the +view transform in some representation based on display and eye locations.
+ ++The Java 3D View Model | +
+Based on these requirements, a high-level view model should provide standard +mechanisms to 1) define a screen's position and orientation in relation to +other screens in the viewing environment; 2) specify the position of the user's +eyes or an HMD relative to the physical space in which the screens or nominal +user position are defined, and to have them updated automatically if tracking +hardware exists; and 3) describe where the whole physical space is placed and +oriented in the virtual world. In such a model the appropriate images could +then be rendered without further computation in application code.
++In the Java 3D view model, screen (image plate) positions and +orientations are defined relative to a fixed frame of reference in the physical +world, the tracker base, through the +TrackerBaseToImagePlate property. The +tracker base is somewhat abstract in that it is always used to define that +fixed frame of reference, even if no physical tracking hardware is being +used. If the ViewPolicy is HMD_VIEW, then the left +and right image plates for head mounted displays are defined relative to the +head tracking sensor, which reports head orientation and position relative to +the tracker base.
++Coexistence coordinates are defined with the +CoexistenceToTrackerBase property. It +provides a frame of reference in the physical world which can be set up by the +user or application in whatever way is most convenient for positioning and +orienting screens, physical body attributes, and sensing devices in the virtual +world. If tracking is enabled, then the eye positions in coexistence are +computed from the position and orientation of the head tracking sensor and the +HeadToHeadTracker matrix; otherwise the eye +positions in coexistence are set according to the +CenterEyeInCoexistence property. In HMD +mode the eye positions are fixed with respect to the image plates.
++The mapping of coexistence coordinates into the virtual world is accomplished +through the ViewAttachPolicy, which specifies +the point in coexistence coordinates to which the origin of the view +platform should be mapped. The view platform is positioned in the virtual +world by manipulating its view transform, the composite of all the +transforms from the view platform up to its Locale. The basis vectors (X, Y, +and Z directions) of the view platform are always aligned with coexistence +coordinates, and the scaling between view platform coordinates and physical +coordinates is specified by the +ScreenScalePolicy, so this +establishes the complete mapping of the physical world into the virtual world. +The projection of the virtual world onto the physical display surfaces is then +performed automatically by the Java 3D renderer.
++By default Java 3D tries to emulate the familiar camera model as much as +possible to make it easy to run in a conventional windowed desktop display +environment. It accomplishes this through the following default settings:
+RELATIVE_TO_FIELD_OF_VIEW
.PHYSICAL_WORLD
.PHYSICAL_WORLD
.NOMINAL_HEAD
.RELATIVE_TO_COEXISTENCE
.VIRTUAL_WORLD
.VIRTUAL_WORLD
.NOMINAL_SCREEN
.+Top-Level Command Details | +
+Top-level commands can only appear at the outermost command nesting level.
++This command instantiates the InputDevice implementation specified by the fully +qualified class name and binds it to instance name. The +InputDevice is instantiated through introspection of the class name. The +implementation must provide a parameterless constructor; this can usually be +done by extending or wrapping available InputDevice implementations.
++The last two arguments are optional and define an alias for instance +name. This is useful in providing a longer descriptive name for the +application to recognize, or conversely, to provide a shorter alias for a +longer instance name. Either name may be used to identify the instance.
++At the conclusion of configuration file processing all InputDevice +implementations so defined will be initialized and registered with any +PhysicalEnvironments that reference them.
+
+The details of the InputDevice implementation specified by instance name +are not known to ConfigContainer, so any parameters to be set through the +configuration file are passed to the InputDevice instance by invoking method +name through introspection. The arguments following the method name are +evaluated and the results passed to the method as an array of Objects.
++The required methods can usually be provided by extending or wrapping existing +InputDevice implementations.
++Retrieves the Sensor at index sensor index in the InputDevice device +name and binds it to the name specified by instance name. The +sensor index is a number truncated to its integer value. The InputDevice +implementation is responsible for creating its own Sensor objects, so this +command does not create any new instances.
++Instance name is used by other commands to reference the indicated +Sensor. In addition, the name and its associated Sensor instance is made +available to applications through a Map returned by the ConfigContainer +method +getNamedSensors. +
++The last two arguments are optional and define an alias for instance +name. This is useful in providing a longer descriptive name for the +application to recognize, or conversely, to provide a shorter alias for a +longer instance name. Either name may be used to identify the instance.
++If the Sensor is to be used for head tracking, or tracking the position and +orientation of other objects in the physical world, then it must generate 6 +degree of freedom data relative to the tracker base.
++Sets a Sensor property. The sensor instance is specified by instance +name, the property to be set by property name, and the value to be +set by property value. The following sole property may be +configured:
+ ++++Hotspot
+A 3D point in the sensor's local coordinate system. The hotspot specifies the +"active" point which should interact with the virtual world, such as a point +used for picking or grabbing an object. Its actual interpretation is up to the +sensor behavior which uses it. Its value is ignored for head tracking sensors. +
+The above two commands are equivalent. Both create new window resources and +associate them with the name specified by instance name. The device +index is a number truncated to its integer value. This integer is the +index at which the desired AWT GraphicsDevice appears in the array returned by +the static getScreenDevices() method of GraphicsEnvironment, and specifies the +physical screen upon which the window should be created. The GraphicsDevice +order in the array is specific to the local viewing site and display +system.
++The last two arguments are optional and define an alias for instance +name. This is useful in providing a longer descriptive name for the +application to recognize, or conversely, to provide a shorter alias for a +longer instance name. Either name may be used to identify the instance.
++The above two commands are equivalent. The screen or window instance is +specified by instance name, the property to be set by property +name, and the value to be set by property value. The following +properties are configurable:
+ ++++PhysicalScreenWidth
+A number specifying the screen's image area width in meters. When using a +configuration file the default is 0.365. For head mounted displays this should +be the apparent width of the display at the focal plane. + ++PhysicalScreenHeight
+A number specifying the screen's image area height in meters. When using a +configuration file the default is 0.292. For head mounted displays this should +be the apparent height of the display at the focal plane. + ++WindowSize
+This property's value can be a 2D point to create a window with the specified +X width and Y height in pixels, or it can be either of the strings FullScreen +or NoBorderFullScreen to specify a full screen canvas with visible frame +borders or one with no frame borders. A NoBorderFullScreen canvas uses the +entire physical display surface for its image. The default value is 512 x 512 +pixels. For multiple screen virtual reality installations or head mounted +displays NoBorderFullScreen should be used. + ++WindowPosition
+This property's value is a 2D point used to create a window with the specified +X and Y position. These are offsets of the window's upper left corner from the +screen's upper left corner. + ++TrackerBaseToImagePlate
+A 4D matrix which transforms points from tracker base coordinates to the image +plate coordinates for the specified screen. This is only used when a +ViewPolicy ofSCREEN_VIEW
is in effect. The matrix value is +identity by default. ++Image plate dimensions are expressed in meters. The origin of the image plate +is the lower left corner of the screen's image area, with X increasing to the +right, Y increasing to the top, and Z increasing away from the screen.
++The tracker base is somewhat abstract. It is used as a local fixed frame of +reference for specifying the orientation and position of a screen even when +tracking hardware is not being used. It is also the frame of reference for +defining coexistence coordinates with the +CoexistenceToTrackerBase matrix.
++The built-in commands Translate, +Rotate, RotateTranslate, and TranslateRotate are available to make it easier +to create transforms of this type. + +
+HeadTrackerToLeftImagePlate
+4D matrices which transform points in the head tracking sensor's local +coordinate system to a head mounted display's left and right image plates +respectively. The default value for each is the identity matrix. +
+HeadTrackerToRightImagePlate+These are only used when a ViewPolicy of
+HMD_VIEW
is in effect. +As with physical screen dimensions, these matrices should indicate the +apparent location and orientation of the screen images as viewed through +the head mounted display's optics.+The HMD manufacturer's specifications in terms of angle of view, distance to +the focal plane, aspect ratio, and percentage of image overlap between the left +and right views can be used to derive the apparent screen positions with +respect to the head, and from there the positions with respect to the head +tracker mounted on the head. In most cases there is 100% overlap between the +two stereo images, so the matrices for both the left and right screens should +be identical.
++Some HMD devices support field-sequential stereo and are driven as if they were +a single screen. In that case, only a single screen should be defined, but +both the left and right head tracker to image plate transforms need to +be specified for that same screen.
+ ++MonoscopicViewPolicy
+This property may have the following string values:CYCLOPEAN_EYE_VIEW, +LEFT_EYE_VIEW
, orRIGHT_EYE_VIEW
. The default value is +CYCLOPEAN_EYE_VIEW
. This default works for non-stereo displays +and field-sequential stereo displays where the two stereo images are generated +on the same canvas. ++Some HMD devices can be driven as a single screen if the HMD supports +field-sequential stereo, so the default policy will work for them as well if a +stereo view is enabled. If stereo is not enabled, an IllegalStateException will +be thrown when the ViewPolicy is set to
+HMD_VIEW
with the default +CYCLOPEAN_EYE_VIEW
policy in effect.+The
+LEFT_EYE_VIEW
andRIGHT_EYE_VIEW
monoscopic view +policies are used for generating stereo pairs on separate monoscopic canvases, +including the left and right canvases needed by HMD devices that are driven by +two video channels. When using these policies, stereo should not be +enabled.
+Creates a new PhysicalEnvironment and binds it to the name given by instance +name. This specifies the available input devices, which Sensor to use as +the head tracker, and defines the coexistence coordinate system. Note that +aside from the head tracker, the configuration file does not provide a way to +place Sensors into the array maintained by the PhysicalEnvironment. See the +getNamedSensors +method of ConfigContainer.
++The last two arguments are optional and define an alias for instance +name. This is useful in providing a longer descriptive name for the +application to recognize, or conversely, to provide a shorter alias for a +longer instance name. Either name may be used to identify the instance.
++Sets a PhysicalEnvironment property. The instance is specified by instance +name, the property to be set by property name, and the value to be +set by property value. The following properties are configurable:
+ ++++InputDevice
+Register an InputDevice implementation instantiated by +NewDevice. The InputDevice instance name is specified +by the property value string. If an InputDevice is not registered then +it will not be scheduled to run. + ++HeadTracker
+Register the Sensor which will be used for head tracking. It must provide 6 +degree of freedom position and orientation reads relative to the tracker base. +The Sensor instance name is specified by the property value string. +Its corresponding input device must be registered with the InputDevice +property. ++There is no actual method in the core PhysicalEnvironment class to set the head +tracker. This property is a simplified interface for setting the +PhysicalEnvironment head index and assigning the head tracking sensor to that +index. Direct access to the PhysicalEnvironment Sensor array is not supported +by the configuration file.
+ ++CoexistenceToTrackerBase
+A 4D matrix which transforms points in coexistence coordinates to tracker base +coordinates. This defines the position and orientation of coexistence +coordinates relative to the tracker base. Its default value is the identity +matrix, so if it is not set then coexistence coordinates will be the same as +tracker base coordinates. See +TrackerBaseToImagePlate. ++The coexistence origin (center of coexistence) positions the physical +world with respect to the origin of the ViewPlatform in the virtual world. +This is established through the +ViewAttachPolicy, which attaches the view +platform to either the center of coexistence, the nominal head, or the nominal +feet. Coexistence coordinates can essentially be thought of as physical +coordinates, but the real purpose is to define the space in which coordinates +systems in the physical world - such as tracker base, image plate, and physical +body - coexist and interact with the virtual world coordinate systems.
++The basis vectors (X, Y, and Z directions) of coexistence coordinates are +always aligned with the basis vectors of the ViewPlatform in the virtual world, +and the scale factor going from ViewPlatform coordinates to coexistence +coordinates is set by the ScreenScalePolicy. +Together with the ViewPlatform's view attach policy and view transform this +establishes the complete mapping of the physical world into the virtual +world.
++The positioning and orientation of coexistence coordinates with respect to the +physical environment is up to the user or application. In a fixed screen +environment it usually makes most sense to define it in a convenient +relationship to the primary screen or some intersection of the available +screens, such that the coexistence origin is in front of and aligned with the +user's nominal forward gaze direction. This is because the -Z axis of +coexistence coordinates always points along the view direction defined by the +view platform's -Z axis.
++For example, when using a single screen, the most common mapping puts the +center of coexistence in the middle of the screen with its basis vectors +aligned with the screen's image plate coordinate system. With a dual-screen +system it is usually most convenient to place the center of coexistence in the +middle of the edge shared by both screens, with its Z axis extending +perpendicular to the shared edge and maintaining an equal angle to both +screens. For a 2x2 array of four screens putting the center of coexistence at +the center of the array is usually a good choice. In a cave configuration +having the center of coexistence in the middle of the viewing environment can +facilitate the sense of immersion.
++In HMD mode the view attach policy is ignored and is always effectively +
+NOMINAL_SCREEN
. Coexistence coordinates and view platform +coordinates are then equivalent except for scale. For HMD configurations +placing the coexistence coordinate system aligned with some nominal +front-facing user position works well.+Note: the normal Java 3D default is to place the center of coexistence +in the middle of the screen or canvas by setting +CoexistenceCenteringEnable true by +default. This only works for a single screen and if both the +TrackerBaseToImagePlate and CoexistenceToTrackerBase matrices are identity. If +either of these matrices are set from their default identity values in the +configuration file, and CoexistenceCenteringEnable has not been set, then the +centering property will be set false by default.
+
+Creates a new PhysicalBody and binds it to the name given by instance +name. The PhysicalBody is essentiallly the users's head, with the origin +halfway between the eyes in the plane of the face. Positive X extends to the +right eye, positive Y up, and positive Z extends into the skull opposite to the +forward gaze direction. Dimensions are expressed in meters.
++The last two arguments are optional and define an alias for instance +name. This is useful in providing a longer descriptive name for the +application to recognize, or conversely, to provide a shorter alias for a +longer instance name. Either name may be used to identify the instance.
++Sets a PhysicalBody property. The instance is specified by instance +name, the property to be set by property name, and the value to be +set by property value. The following properties are configurable:
+ ++++StereoEyeSeparation
+A number indicating the interpupilary distance in meters. This will set the +left and right eye positions to offsets of half this distance from the head +origin along its X axis. The default is 0.066 meters. ++This property is a simplified interface to setting the PhysicalBody's separate +left and right eye positions; there is no actual method in PhysicalBody to set +stereo eye separation, but the results are exactly equivalent.
+ ++LeftEarPosition
+A 3D point which sets the left ear position relative to head coordinates. +The default is (-0.08, -0.03, 0.09). + ++RightEarPosition
+A 3D point which sets the right ear position relative to head coordinates. +The default is (0.08, -0.03, 0.09). + ++HeadToHeadTracker
+A 4D matrix which transforms points from head coordinates to the local +coordinate system of the head tracking sensor. This allows the positions +of the eyes and ears to be determined from the position and orientation +of the head tracker. The default is the identity matrix. + ++ +NominalEyeOffsetFromNominalScreen
+A distance in meters used as a calibration parameter for +ViewAttachPolicy. It does not actually set +the position of the eyes. The property is ignored if ViewAttachPolicy is +NOMINAL_SCREEN. The default value is 0.4572 meters. + ++NominalEyeHeightFromGround
+A distance in meters used as a calibration parameter for +ViewAttachPolicy. +It does not actually set the position of the eyes. This property is +ignored if ViewAttachPolicy is not NOMINAL_FEET. The default value is 1.68 +meters. +
+Creates a new view and binds it to the name given by instance name. +In the configuration file the term view refers to an instance of the +Viewer utility class, which contains both an +instance of a core Java 3D View class and an array of Canvas3D instances into +which to render.
++The last two arguments are optional and define an alias for instance +name. This is useful in providing a longer descriptive name for the +application to recognize, or conversely, to provide a shorter alias for a +longer instance name. Either name may be used to identify the instance.
++ConfiguredUniverse requires that at least one view be defined. If a view +platform is not provided, then ConfiguredUniverse will create a default one and +attach the view to that. If multiple views are defined, then at least one view +platform must be explicitly provided by the configuration, and the +ViewPlatform property must be used to attach each view to a view platform.
++Sets a View property. The view instance is specified by instance name, +the property to be set by property name, and the value to be set by +property value. The following properties are configurable:
+ ++++Screen
+These two properties are equivalent. They include a screen created by +NewScreen or a window created by +NewWindow into +this view. The screen or window name is specified by the property value +string. Multiple-screen or multiple-window views are created by calling this +command with each window or screen to be used. If no windows or screens are +defined for this view then an IllegalArgumentException will be thrown after the +configuration file has been processed. + +
+Window+PhysicalEnvironment
+Sets the PhysicalEnvironment to be used for this view. The property +value string specifies the name of a PhysicalEnvironment instance created +by the NewPhysicalEnvironment command. +If no PhysicalEnvironment is specified for this view then one with default +values will be created. + ++PhysicalBody
+Sets the PhysicalBody to be used for this view. The property +value string specifies the name of a PhysicalBody instance created +by the NewPhysicalBody command. If +no PhysicalBody is specified for this view then one with default values +will be created. + ++ViewPlatform
+The property value string is the name of a view platform defined by a +previous NewViewPlatform command. This +specifies that the view should be attached to the given view platform. +ConfiguredUniverse requires that a view platform be specified for every defined +view unless only a single view without a view platform is provided; in that +case a view platform is created by default and the view is attached to that. +If one or more view platforms are defined then the view attachments must be +made explicitly. + ++ViewPolicy
+The property value string may be eitherSCREEN_VIEW
or +HMD_VIEW
to indicate whether fixed room-mounted screens are being +used or a head mounted display. The default value isSCREEN_VIEW
. + ++CoexistenceCenteringEnable
+The property value is a boolean string. If true, then the origin of the +coexistence coordinate system is set to either the middle of the canvas or the +middle of the screen depending upon whether the WindowMovementPolicy is +PHYSICAL_WORLD
orVIRTUAL_WORLD
respectively. The X, +Y, and Z directions of coexistence coordinates will point in the same +directions as those of the screen's image plate. ++This only works if a single screen is being used and if both the +TrackerBaseToImagePlate and +CoexistenceToTrackerBase matrices are +identity. If CoexistenceCenteringEnable is not explicitly set, and either the +CoexistenceToTrackerBase transform for the view has been set or +TrackerBaseToImagePlate has been set for any screen, then the centering enable +will be set to false by default; otherwise, the normal default is true. This +property is also effectively false whenever the ViewPolicy is set to +
+ +HMD_VIEW
.+WindowEyepointPolicy
+The string value for this property may be eitherRELATIVE_TO_SCREEN, +RELATIVE_TO_COEXISTENCE, RELATIVE_TO_WINDOW
, or +RELATIVE_TO_FIELD_OF_VIEW
. The normal Java 3D default is +RELATIVE_TO_FIELD_OF_VIEW
. When using a configuration file the +default isRELATIVE_TO_COEXISTENCE
if +CoexistenceCenteringEnable is false, +otherwise the normal default applies. See the +setWindowEyepointPolicy View method. ++For the
+RELATIVE_TO_SCREEN
andRELATIVE_TO_WINDOW
+policies, the eyepoint is set by using the setLeftManualEyeInImagePlate() and +setRightManualEyeInImagePlate() methods of Canvas3D. The configuration file +currently does not provide any mechanism for altering these properties from +their default values. These default values are (0.142, 0.135, 0.4572) for the +left eye and (0.208, 0.135, 0.4572) for the right eye.+These polices are ignored if head tracking is enabled.
+ ++WindowMovementPolicy
+ +The string values for these properties may be either
+WindowResizePolicyVIRTUAL_WORLD
+orPHYSICAL_WORLD
. The normal Java 3D default value for both is +PHYSICAL_WORLD
. When using a configuration file the default +values areVIRTUAL_WORLD
if +CoexistenceCenteringEnable is false, +otherwise the normal defaults apply. See the +setWindowMovementPolicy and +setWindowResizePolicy View methods. + ++CenterEyeInCoexistence
+A 3D point which specifies the location of the center eye relative to +coexistence coordinates. See +CoexistenceToTrackerBase. If stereo +viewing is enabled, then the left and right eye positions are set to offsets +from this position using the values specified by the PhysicalBody. This +property is ignored if head tracking is enabled or if WindowEyepointPolicy is +notRELATIVE_TO_COEXISTENCE
. The default value is (0.0, 0.0, +0.4572). ++This property is a simplified interface to setting the View's left +and right manual eyes in coexistence; there is no actual method in View +to set a center eye position.
+ ++ScreenScalePolicy
+The property value string may be eitherSCALE_SCREEN_SIZE
+orSCALE_EXPLICIT
and determines the source of the screen +scale, a factor in the scaling of view platform coordinates to physical +world coordinates. ++If the value is
+SCALE_SCREEN_SIZE
, then the screen scale is half +the physical screen width in meters. If WindowResizePolicy is +PHYSICAL_WORLD
, then this scale is further multiplied by the ratio +of the window width to the width of the screen (the window scale) to +produce the scale from view platform coordinates to physical coordinates. This +allows a virtual world which spans a normalized width of [-1.0 .. 1.0] in view +platform coordinates to map directly to the physical width of the window or +screen, depending upon the resize policy.+
+SCALE_EXPLICIT
uses the value of the ScreenScale property as the +screen scale. It is also further multiplied by the window scale when using the +PHYSICAL_WORLD
window resize policy to produce the scale from view +platform coordinates to physical coordinates. Viewing configurations +incorporating multiple screens should generally set the policy to +SCALE_EXPLICIT
and choose a screen scale based on the aggregate +display size, but the default value ofSCALE_SCREEN_SIZE
will +usually work if all the screens are the same size and arranged in a linear +array.+The view platform is positioned in the virtual world through a chain of +transforms to the root of the scene graph; this composite transform is its +localToVWorld transform and must be congruent. If we take the the inverse of +the scale factor in this transform and call it the view platform scale, +then the scale from virtual world units to physical world units can be computed +as the product of this view platform scale, the screen scale, and, when using a +resize policy of
+ +PHYSICAL_WORLD
, the window scale. In the usual +case the view platform scale is 1.0.+ScreenScale
+The property value is a number specifying the explicit screen scale +factor. It is only used if ScreenScalePolicy isSCALE_EXPLICIT
; +otherwise, the screen scale is half the physical width of the screen in meters. +The default value for this property is 1.0. + ++BackClipPolicy
+The string values of these properties may be either
+FrontClipPolicyPHYSICAL_EYE, +PHYSICAL_SCREEN, VIRTUAL_EYE
, orVIRTUAL_SCREEN
. The +default policies arePHYSICAL_EYE
. See the +setFrontClipPolicy and +setBackClipPolicy View methods. + ++FrontClipDistance
+These property values are numbers. The defaults are 0.1 and 10.0 +respectively. See the +setFrontClipDistance and +setBackClipDistance View methods. +
+BackClipDistance+With the default clip policies of
+PHYSICAL_EYE
the clip distances +are measured relative to the eye in physical units, so the clip distances +specified must be scaled to virtual world units in order to determine the +distances in the virtual world where they would effectively be applied. As +described in the discussion of +ScreenScalePolicy above, the scale from +virtual units to physical units is the product of the view platform scale +(usually 1.0), the screen scale, and the window scale (if the window resize +policy isPHYSICAL_WORLD
), so normally the scale from physical +units to virtual units would be the inverse of that product.+There is a quirk, however, with physical clip plane scaling when the +
+PHYSICAL_EYE
orPHYSICAL_SCREEN
clip policies are +used with thePHYSICAL_WORLD
window resize policy. The locations +of the clip planes in physical units are not actually set to the physical +distances as specified, but are in fact scaled by the window scale. +This means that when determining where the specified physical clip distances +are in virtual units the scaling to be used is the inverse of the product of +the screen scale and view platform scale only.+This quirk applies only to scaling physical clip plane distances, and only with +the
+ +PHYSICAL_WORLD
resize policy. It was implemented in this +manner to prevent objects in the virtual world from getting clipped +unexpectedly when the virtual world scaling changed as the result of a window +resize. The quirk can be avoided by using theVIRTUAL_EYE
or +VIRTUAL_SCREEN
clip policies or by using the +VIRTUAL_WORLD
resize policy, but in most cases the effect is +benign and doesn't lead to unexpected results.+FieldOfView
+This number is the view's horizontal field of view in radians. The default +value is PI/4. This value is ignored if WindowEyepointPolicy is not +RELATIVE_TO_FIELD_OF_VIEW
or if head tracking is enabled. The +eyepoint for each canvas associated with the view is set such that it is +centered in X and Y, with the Z value at the appropriate distance to match the +specified field of view across the width of the canvas. + ++StereoEnable
+Enable or disable stereo viewing for this view according to the boolean value +specified by the property value string. The default value is false. ++There is no actual method in the core Java 3D View or utility Viewer class to +enable stereo. A true value for this property causes ConfigContainer to +attempt to create stereo-capable canvases for all the screens associated with +this view. Stereo will then be enabled for each canvas successfully created +with stereo capability.
+ ++TrackingEnable
+Enable or disable head tracking for this view according to the boolean value +specified by the property value string. The default value is false. ++Setting this property true causes WindowEyepointPolicy to be ignored; it will +effectively be
+ +RELATIVE_TO_COEXISTENCE
with the eyepoint in +coexistence coordinates computed from reading the head tracking sensor. +Tracking must be made available by registering an input device and a head +tracking sensor in PhysicalEnvironment.+AntialiasingEnable
+Enable or disable scene antialiasing for this view according to the boolean +value specified by the property value string. The default value is +false. ++A true value for this property causes ConfigContainer to attempt to create +a canvas capable of scene antialiasing on each screen associated with this +view. The scene will then be antialiased on each canvas successfully created +with that capability.
++Line and point antialiasing are independent of scene antialiasing and are +controlled by the LineAttribute and PointAttribute components of an Appearance. +If line and point antialiasing is enabled, then they will be antialiased prior +to scene antialiasing; if scene antialiasing is turned off, then antialiased +lines and points will still be antialiased.
+
+Creates a new view platform and binds it to the name given by instance +name. In the configuration file the term view platform refers to an +instance of the ViewingPlatform utility +class, which is an extension of BranchGroup containing an instance of a core +Java 3D ViewPlatform class.
++The last two arguments are optional and define an alias for instance +name. This is useful in providing a longer descriptive name for the +application to recognize, or conversely, to provide a shorter alias for a +longer instance name. Either name may be used to identify the instance.
++Sets a ViewPlatform property. The instance is specified by instance +name, the property to be set by property name, and the value to be +set by property value. The following properties are configurable:
+ ++++NominalViewingTransform
+The property value is a boolean string indicating whether or not +the view platform should be backed up in Z to allow objects at the origin to be +viewed. This only has effect if the ViewAttachPolicy is +NOMINAL_HEAD
. The default value is false. See the +setNominalViewingTransform +method of ViewingPlatform. + ++InitialViewingTransform
+Sets the initial transform of the view platform to the 4D matrix +specified by property value. The default value is identity. + ++AllowPolicyRead
+The property value is a boolean string indicating whether or not reading +the ViewAttachPolicy is allowed. The default value is false. + ++AllowLocalToVworldRead
+The property value is a boolean string indicating whether or not reading +the view platform's localToVworld transform is allowed. The default value is +false. + ++ViewPlatformBehavior
+Attaches a ViewPlatformBehavior instantiated by +NewViewPlatformBehavior. +The property value string is the name bound to that instance. + ++ViewAttachPolicy
+The property value string can be one ofNOMINAL_SCREEN, +NOMINAL_HEAD,
orNOMINAL_FEET
. This establishes the point +in coexistence coordinates where the origin of view platform coordinates is +attached. The basis vectors of view platform coordinates are always aligned +with those of coexistence coordinates. ++For a ViewAttachPolicy of
+NOMINAL_SCREEN
, the ViewPlatform origin +is set directly to the origin of coexistence, so that ViewPlatform coordinates +and coexistence coordinates are identical except for scale.+For a ViewAttachPolicy of
+NOMINAL_HEAD
, the ViewPlatform origin is +set to the origin of the nominal head, the center eye halfway between the left +and right eyes. The nominal head origin is on the Z axis of coexistence +coordinates at some offset from the coexistence origin. If the +WindowEyepointPolicy isRELATIVE_TO_FIELD_OF_VIEW
, then this is +the positive Z offset producing the required field of view relative to the +width of the canvas at the coexistence origin, tracking the Z offset of the +eyepoint defined by that policy; otherwise, the Z offset is the +NominalEyeOffsetFromNominalScreen property of PhysicalBody and is decoupled +from the actual eyepoint offset.+For a ViewAttachPolicy of
+NOMINAL_FEET
, the ViewPlatform origin is +at the ground plane, which is NominalEyeHeightFromGround meters along -Y from +the origin of the nominal head. NominalEyeHeightFromGround is a property of +PhysicalBody.+Note: The normal Java 3D default is
+NOMINAL_HEAD
. When +using a configuration file, the default isNOMINAL_HEAD
only if +every view attached to the view platform has a WindowEyepointPolicy of +RELATIVE_TO_FIELD_OF_VIEW
; otherwise, the default is +NOMINAL_SCREEN
. If the view policy isHMD_VIEW
, then +the ViewAttachPolicy is ignored and is always effectively +NOMINAL_SCREEN
.
+This command instantiates the concrete subclass of ViewPlatformBehavior +specified by the fully qualified class name and binds it to instance +name. The ViewPlatformBehavior is instantiated through introspection of +the class name. The subclass must provide a parameterless constructor. If no +such constructor is available, then the behavior must be extended or wrapped to +provide one and the derived class used instead.
++The last two arguments are optional and define an alias for instance +name. This is useful in providing a longer descriptive name for the +application to recognize, or conversely, to provide a shorter alias for a +longer instance name. Either name may be used to identify the instance.
++View platform behaviors often need sensors or canvases as event sources to +drive the behavior action. A subclass of ViewPlatformBehavior always gets the +current ViewingPlatform through its +setViewingPlatform +method. When the behavior is initialized, 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 retrieved by calling the ViewingPlatform method +getUniverse, checking +to see if the returned SimpleUniverse is a ConfiguredUniverse, and then calling +its +getNamedSensors +method.
++Alternatively, the behavior implementation can define its own properties +and receive canvas and sensor instances directly through the +Canvas3D and Sensor built-in +commands.
++Sets a property of a ViewPlatformBehavior. The instance is specified by +instance name, the property to be set by property name, and the +value to be set by property value. The following properties are +pre-defined by the abstract ViewPlatformBehavior superclass and may be +configured directly:
+ +
+++SchedulingBounds
+The scheduling bounds for this behavior. Use the +BoundingSphere built-in command to set this +property. The default is whatever the application or the concrete subclass +sets. + ++SchedulingInterval
+A number indicating the scheduling interval for this behavior. See the +setSchedulingInterval +method of Behavior. + ++HomeTransform
+See the ViewPlatformBehavior method +setHomeTransform. +The property value must be a 4D matrix. +
+The details of a concrete subclass of ViewPlatformBehavior are not known to +ConfigContainer, so any properties specific to the subclass are set by +using introspection to invoke property name as a method accepting an +array of Objects as its single parameter. The arguments following the property +name are evaluated and the results passed to the method through that array of +Objects. Such methods can usually be provided by extending or wrapping +existing ViewPlatformBehavior implementations.
++This command instantiates a generic object specified by class +name and binds it to instance name. The object is instantiated +through introspection of the class name. The object must provide a +parameterless constructor; this can usually be done by extending or +wrapping existing objects.
++The last two arguments are optional and define an alias for instance +name. This is useful in providing a longer descriptive name for the +application to recognize, or conversely, to provide a shorter alias for a +longer instance name. Either name may be used to identify the instance.
++Objects so defined may be accessed from ConfigContainer through the +getNamedGenericObjects method.
++Sets a property of a generic object. The details of the object specified by +instance name are not known to ConfigContainer, so any parameters to be +set through the configuration file are passed to the object instance by +invoking method name through introspection. The arguments following the +method name are evaluated and the results passed to the method as an array of +Objects. The required methods can usually be provided by extending or wrapping +existing objects.
++Sets the Java system property propertyName to the string +propertyValue. If the optional Default keyword is supplied, then the +property is set only if it doesn't currently have a value.
++Java system properties which affect Java 3D are evaluated at the first +reference to a VirtualUniverse. Setting such properties in the configuration +file is therefore ineffective if a ConfiguredUniverse constructor which accepts +a URL directly is used; ConfigContainer must be used instead. Even then, care +must be taken to avoid static references to VirtualUniverse from objects such +as Transform3D.
++The special Java property substitution syntax ${<propertyName>} +may be used to access the value of a Java system property anywhere within a +configuration file.
++Retrieves the configuration file specified by URL string and includes it +into the current configuration file at the current line. The content of the +included file is evaluated exactly as if it were pasted into the current file +at that line. Included files may be arbitrarily nested.
++URL strings must be quoted.
+
+Creates an alias for the object specified by originalName (which itself +may be an alias). baseName may be Device, Object, PhysicalBody, +PhysicalEnvironment, Screen, Window, Sensor, View, ViewPlatform, or +ViewPlatformBehavior; it specifies the type of the object being aliased. +Original names and aliases must be unique within a type. Note that there is no +white space between baseName and Alias.
++Aliases are useful for providing shorter or longer descriptive names for an +original name. This function is also provided by the optional Alias keyword +available for all New top-level commands. This separate command can be +used to substitute new names for objects created by generic include files in +order to conform to the names expected by specific applications.
++Built-In Command Details | +
+Built-in commands are provided by the parser itself to help construct the +arguments to top-level commands. They cannot appear at the top level of +command nesting.
++Translate, Rotate, TranslateRotate, and RotateTranslate are useful for +computing simple affine transforms of the form SourceToTarget +(e.g., TrackerBaseToImagePlate). These transform points from the +Source coordinate system to the Target coordinate system by +concatenating translation and rotation matrices. Here is a general rule for +creating such transforms:
+ ++Subtract (translate) the target origin first if it can be conveniently measured +or computed relative to the source origin along the source X, Y, and Z basis +vectors. Then rotate with Euler angles that move the target basis vectors to +their corresponding source basis vectors. +++If instead it is easier to measure or compute the source origin relative to the +target origin along the target basis vectors, rotate first with Euler angles +that move the target basis vectors to their corresponding source basis vectors, +and then add (translate) the source origin.
+
+The Canvas3D, Sensor, Device, PhysicalBody, PhysicalEnvironment, View, +ViewPlatform, ViewPlatformBehavior, and Object built-in commands return +references to the objects named by their arguments. These are mostly useful +for InputDevice and ViewPlatformBehavior implementations that define their own +properties. The return values of these built-in commands should not be passed +to commands that expect strings.
++Returns a 4D matrix that translates by the given X, Y, and Z values.
++Returns a 4D matrix that rotates by the given Euler angles around static X, Y, +and Z basis vectors: first about X, then Y, and then Z. See the +setEuler +method of Transform3D.
++Returns a 4D matrix that concatenates 4D matrices m1 and m2 in +that order. If a point is transformed by the resulting matrix, then in effect +the points are first transformed by m1 and then m2.
++An alias for the Concatenate command. This is useful to make the +result of the concatenation explicit.
++An alias for the Concatenate command. This is useful to make the +result of the concatenation explicit.
++Returns a BoundingSphere object using the 3D point center and the given +radius in meters. radius may be either a number or the string +Infinite.
++Returns the Canvas3D instance specified by the given name. A named Canvas3D is +created whenever any of the following configuration commands are used: + +
+(ViewProperty <view> Screen <screenName>)+ +view is the name of a view created with the NewView command. The +argument to the Canvas3D built-in must be a screenName or +windowName parameter from one of the above commands. +
+(ViewProperty <view> Window <windowName>) +
+Note: the NewScreen and NewWindow commands do not create Canvas3D +instances themselves; they are created only by the above configuration +commands.
++Returns the Sensor instance specified by the given name.
++Returns the InputDevice instance specified by the given name.
++Returns the PhysicalBody instance specified by the given name.
++Returns the PhysicalEnvironment instance specified by the given name.
++Returns the Viewer instance specified by the given name.
++Returns the ViewingPlatform instance specified by the given name.
++Returns the ViewPlatformBehavior instance specified by the given name.
++Returns the generic object instance specified by the given name. A generic +named object is created by the following configuration command: + +
+(NewObject <instance name> <class name> +[Alias <alias name>]) ++
+Returns a reference to the current ConfigContainer.
++Command Index | +
Command | +Type | +
---|---|
Alias | +top-level | +
BoundingSphere | +built-in | +
Canvas3D | +built-in | +
Concatenate | +built-in | +
ConfigContainer | +built-in | +
Device | +built-in | +
DeviceProperty | +top-level | +
Include | +top-level | +
JavaProperty | +top-level | +
NewDevice | +top-level | +
NewObject | +top-level | +
NewPhysicalBody | +top-level | +
NewPhysicalEnvironment | +top-level | +
NewScreen | +top-level | +
NewSensor | +top-level | +
NewView | +top-level | +
NewViewPlatform | +top-level | +
NewViewPlatformBehavior | +top-level | +
NewWindow | +top-level | +
Object | +built-in | +
ObjectProperty | +top-level | +
PhysicalBody | +built-in | +
PhysicalBodyProperty | +top-level | +
PhysicalEnvironment | +built-in | +
PhysicalEnvironmentProperty | +top-level | +
Rotate | +built-in | +
RotateTranslate | +built-in | +
ScreenProperty | +top-level | +
Sensor | +built-in | +
SensorProperty | +top-level | +
Translate | +built-in | +
TranslateRotate | +built-in | +
View | +built-in | +
ViewPlatform | +built-in | +
ViewPlatformBehavior | +built-in | +
ViewProperty | +top-level | +
ViewPlatformProperty | +top-level | +
ViewPlatformBehaviorProperty | +top-level | +
WindowProperty | +top-level | +
+Property Index | +
+/* + ************************************************************************ + * + * Java 3D configuration file for single fullscreen desktop configuration. + * A view platform behavior is created and configured here as well. + * + ************************************************************************ + */ + +(NewScreen center 0) +(ScreenProperty center WindowSize NoBorderFullScreen) + +(NewView view0) +(ViewProperty view0 Screen center) + +// 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. +// +(NewViewPlatformBehavior vpb org.jogamp.java3d.utils.behaviors.vp.OrbitBehavior) + +// Set the scheduling bounds to be a BoundingSphere with its center at +// (0.0 0.0 0.0) and an infinite radius. +// +(ViewPlatformBehaviorProperty vpb SchedulingBounds + (BoundingSphere (0.0 0.0 0.0) infinite)) + +// 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) +(ViewPlatformProperty vp ViewPlatformBehavior vpb) + +// Attach the view to the view platform. +(ViewProperty view0 ViewPlatform vp) ++ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-stereo.html b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-stereo.html new file mode 100644 index 0000000..0a91eed --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-stereo.html @@ -0,0 +1,90 @@ + + + + +
+/* + ************************************************************************ + * + * Java 3D configuration file for single fullscreen stereo desktop + * configuration with no head tracking. + * + ************************************************************************ + */ + +(NewScreen center 0) +(ScreenProperty center WindowSize NoBorderFullScreen) + +// Define the physical body. +// +// The head origin is halfway between the eyes, with X extending to the right, +// Y up, and positive Z extending into the skull. +// +(NewPhysicalBody SiteUser) + +// Set the interpupilary distance. This sets the LeftEyePosition and +// RightEyePosition to offsets of half this distance along both directions of +// the X axis. +// +(PhysicalBodyProperty SiteUser StereoEyeSeparation 0.066) + +// Create a view using the defined screen and physical body. +// +(NewView view0) +(ViewProperty view0 Screen center) +(ViewProperty view0 PhysicalBody SiteUser) + +// Enable stereo viewing. +// +(ViewProperty view0 StereoEnable true) ++ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-vr.html b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-vr.html new file mode 100644 index 0000000..a2e07ac --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-vr.html @@ -0,0 +1,173 @@ + + + + +
+/* + ************************************************************************ + * + * Java 3D configuration file for a single screen stereo desktop display + * using a head tracker and 6DOF mouse. + * + ************************************************************************ + */ + +// Create a screen object and give it a logical name. +(NewScreen center 0) + +// Set the actual available image area. +(ScreenProperty center PhysicalScreenWidth 0.398) +(ScreenProperty center PhysicalScreenHeight 0.282) +(ScreenProperty center WindowSize NoBorderFullScreen) + +// Set the TrackerBaseToImagePlate transform for this screen. +(ScreenProperty center TrackerBaseToImagePlate + (RotateTranslate (Rotate 50.000 0.000 0.000) + (Translate 0.199 0.376 0.000))) + +// Configure the head tracker. +(NewDevice tracker1 org.jogamp.java3d.input.LogitechTracker) +(DeviceProperty tracker1 SerialPort "/dev/ttya") +(DeviceProperty tracker1 ReceiverBaseline 0.1450) +(DeviceProperty tracker1 ReceiverLeftLeg 0.0875) +(DeviceProperty tracker1 ReceiverHeight 0.0470) +(DeviceProperty tracker1 ReceiverTopOffset 0.0000) +(DeviceProperty tracker1 RealtimeSerialBuffer true) + +// Configure the 6DOF wand. +(NewDevice tracker2 org.jogamp.java3d.input.LogitechTracker) +(DeviceProperty tracker2 SerialPort "/dev/ttyb") +(DeviceProperty tracker2 ReceiverBaseline 0.0700) +(DeviceProperty tracker2 ReceiverLeftLeg 0.0625) +(DeviceProperty tracker2 ReceiverHeight 0.0510) +(DeviceProperty tracker2 ReceiverTopOffset 0.0000) +(DeviceProperty tracker2 RealtimeSerialBuffer true) + +// Make the tracker2 device a slave of the tracker1 device. +(DeviceProperty tracker1 Slave (Device tracker2)) + +// Create a 2D mouse valuator. +(NewDevice mouse org.jogamp.java3d.input.Mouse2DValuator) +(DeviceProperty mouse Components (Canvas3D center)) + +// Create logical names for the available sensors. +(NewSensor head tracker1 0) +(NewSensor mouse6d tracker2 0) +(NewSensor mouse2d mouse 0) + +// Set the 6DOF mouse sensor hotspot in the local sensor coordinate system. +(SensorProperty mouse6d Hotspot (0.00 0.00 -0.10)) + +// Create a physical environment. +(NewPhysicalEnvironment SampleSite) + +// Register the input devices and head tracker sensor. +(PhysicalEnvironmentProperty SampleSite InputDevice tracker1) +(PhysicalEnvironmentProperty SampleSite InputDevice tracker2) +(PhysicalEnvironmentProperty SampleSite InputDevice mouse) +(PhysicalEnvironmentProperty SampleSite HeadTracker head) + +// Define coexistence coordinates. +(PhysicalEnvironmentProperty SampleSite CoexistenceToTrackerBase + (TranslateRotate (Translate 0.0 -0.235 0.0) + (Rotate -50.0 0.0 0.0))) + +// Define the physical body. +(NewPhysicalBody SiteUser) + +// Set the interpupilary distance. +(PhysicalBodyProperty SiteUser StereoEyeSeparation 0.066) + +// Define the head location relative to the tracker mounted on the head. +(PhysicalBodyProperty SiteUser HeadToHeadTracker ((1.0 0.0 0.0 0.000) + (0.0 1.0 0.0 0.020) + (0.0 0.0 1.0 0.018))) + +// Create a view platform behavior. +// +(NewViewPlatformBehavior vpb org.jogamp.java3d.utils.behaviors.vp.WandViewBehavior) + +(ViewPlatformBehaviorProperty vpb Sensor6D (Sensor mouse6d)) +(ViewPlatformBehaviorProperty vpb Sensor2D (Sensor mouse2d)) + +(ViewPlatformBehaviorProperty vpb ButtonAction6D 1 GrabView) +(ViewPlatformBehaviorProperty vpb ButtonAction6D 2 TranslateForward) +(ViewPlatformBehaviorProperty vpb ButtonAction6D 0 TranslateBackward) + +(ViewPlatformBehaviorProperty vpb RotationCoords ViewPlatform) +(ViewPlatformBehaviorProperty vpb ButtonAction2D 1 Translation) +(ViewPlatformBehaviorProperty vpb ButtonAction2D 2 Scale) + +(ViewPlatformBehaviorProperty vpb EchoType Beam) +(ViewPlatformBehaviorProperty vpb EchoSize 0.004) + +(ViewPlatformBehaviorProperty vpb EchoColor 1.0 0.7 0.0) +(ViewPlatformBehaviorProperty vpb EchoTransparency 0.4) + +// Create a new view platform and set the view platform behavior. +// +(NewViewPlatform vp) +(ViewPlatformProperty vp ViewPlatformBehavior vpb) + +// Create a view. +// +(NewView view0) +(ViewProperty view0 Screen center) +(ViewProperty view0 PhysicalEnvironment SampleSite) +(ViewProperty view0 PhysicalBody SiteUser) +(ViewProperty view0 ViewPlatform vp) + +// Enable stereo viewing and head tracking. +(ViewProperty view0 StereoEnable true) +(ViewProperty view0 TrackingEnable True) ++ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-window.html b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-window.html new file mode 100644 index 0000000..3ff401f --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x1-window.html @@ -0,0 +1,70 @@ + + + + +
+/* + ************************************************************************ + * + * Java 3D configuration file for a conventional single screen, windowed + * desktop configuration. + * + ************************************************************************ + */ + +(NewWindow window1 0) +(WindowProperty window1 WindowSize (700.0 700.0)) + +(NewView view1) +(ViewProperty view1 Window window1) ++ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x1.html b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x1.html new file mode 100644 index 0000000..1f7f17b --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x1.html @@ -0,0 +1,69 @@ + + + + +
+/* + ************************************************************************ + * + * Java 3D configuration file for a single fullscreen desktop configuration. + * + ************************************************************************ + */ + +(NewWindow big 0) +(WindowProperty big WindowSize NoBorderFullScreen) + +(NewView view0) +(ViewProperty view0 Window big) ++ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x2-flat.html b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x2-flat.html new file mode 100644 index 0000000..9391af2 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x2-flat.html @@ -0,0 +1,152 @@ + + + + +
+/* + ************************************************************************ + * + * 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. +// +(ScreenProperty left PhysicalScreenWidth 0.360) +(ScreenProperty left PhysicalScreenHeight 0.288) + +(ScreenProperty right PhysicalScreenWidth 0.360) +(ScreenProperty right PhysicalScreenHeight 0.288) + +// Specify full screen windows. +// +(ScreenProperty left WindowSize NoBorderFullScreen) +(ScreenProperty 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. +// +(ScreenProperty left TrackerBaseToImagePlate + (Translate 0.360 0.144 0.0)) +(ScreenProperty 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: +// +// (ScreenProperty left TrackerBaseToImagePlate +// (Translate 0.405 0.144 0.0)) +// (ScreenProperty 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) +(ViewProperty view0 Screen left) +(ViewProperty 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. +// +(ViewProperty view0 CenterEyeInCoexistence (0.0 0.0 0.45)) + +(NewViewPlatform vp) +(ViewPlatformProperty vp AllowPolicyRead true) +(ViewPlatformProperty vp AllowLocalToVworldRead true) + +(ViewProperty view0 ViewPlatform vp) ++ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x2-rot30.html b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x2-rot30.html new file mode 100644 index 0000000..ca5fdd6 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x2-rot30.html @@ -0,0 +1,111 @@ + + + + +
+/* + ************************************************************************ + * + * Java 3D configuration file for a dual-screen desktop configuration + * with each screen rotated toward the other by 30 degrees about Y from + * planar. The inside angle between them is 120 degrees. + * + ************************************************************************ + */ + +// 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 available image areas for full screens. +// +(ScreenProperty left PhysicalScreenWidth 0.360) +(ScreenProperty left PhysicalScreenHeight 0.288) + +(ScreenProperty right PhysicalScreenWidth 0.360) +(ScreenProperty right PhysicalScreenHeight 0.288) + +// Specify full screen windows. +// +(ScreenProperty left WindowSize NoBorderFullScreen) +(ScreenProperty right WindowSize NoBorderFullScreen) + +// Set the TrackerBaseToImagePlate transforms for these screens. +// +// The tracker base is set here to the middle of the edge shared by the two +// screens. Each screen is rotated 30 degrees toward the other about the +// tracker base +Y axis, so that the tracker base +Z is centered between the +// two screens. +// +(ScreenProperty left TrackerBaseToImagePlate + (RotateTranslate (Rotate 0.000 -30.000 0.0) + (Translate 0.360 0.144 0.0))) + +(ScreenProperty right TrackerBaseToImagePlate + (RotateTranslate (Rotate 0.000 30.000 0.0) + (Translate 0.000 0.144 0.0))) + + +// Create a view using the defined screens. +// +(NewView view0) +(ViewProperty view0 Screen left) +(ViewProperty view0 Screen right) +(ViewProperty view0 CenterEyeInCoexistence (0.0 0.0 0.45)) ++ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-cave-vr.html b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-cave-vr.html new file mode 100644 index 0000000..7ad30c4 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-cave-vr.html @@ -0,0 +1,243 @@ + + + + +
+/* + ************************************************************************ + * + * Java 3D configuration file for a cave environment with head tracking and + * stereo viewing. This cave consists of 3 projectors with 3 screens to the + * left, front, and right of the user, all at 90 degrees to each other. + * + * The projectors in Sun's VirtualPortal sample site are actually turned + * on their sides to get more height. Screen 0 is rotated 90 degrees + * counter-clockwise, while screens 1 and 2 are rotated 90 degrees + * clockwise. + * + ************************************************************************ + */ + +// Configure the head tracker. +// +(NewDevice tracker1 org.jogamp.java3d.input.LogitechTracker) +(DeviceProperty tracker1 SerialPort "/dev/ttya") // Unix paths need quoting. +(DeviceProperty tracker1 TransmitterBaseline 0.4600) +(DeviceProperty tracker1 TransmitterLeftLeg 0.4400) +(DeviceProperty tracker1 TransmitterCalibrationDistance 0.4120) + +// Configure an InputDevice to use for a 6 degree of freedom wand. +// +(NewDevice tracker2 org.jogamp.java3d.input.LogitechTracker) +(DeviceProperty tracker2 SerialPort "/dev/ttyb") +(DeviceProperty tracker2 ReceiverBaseline 0.0700) +(DeviceProperty tracker2 ReceiverLeftLeg 0.0625) +(DeviceProperty tracker2 ReceiverHeight 0.0510) +(DeviceProperty tracker2 ReceiverTopOffset 0.0000) + +// Make the tracker2 device a slave of the tracker1 device. +(DeviceProperty tracker1 Slave (Device tracker2)) + +// Create logical names for the head tracker and wand sensors. The last +// argument is the sensor's index in the input device. +// +(NewSensor head tracker1 0) +(NewSensor sensor6d tracker2 0) + +// 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 center 1) +(NewScreen right 2) + + +// Set the available image areas as well as their positition and orientation +// relative to the tracker base. From the orientation of a user standing +// within this VirtualPortal site and facing the center screen, the tracker +// base is along the vertical midline of the screen, 0.248 meters down from +// the top edge, and 1.340 meters in front of it. The tracker base is +// oriented so that its +X axis points to the left, its +Y axis points toward +// the screen, and its +Z axis points toward the floor. +// +(ScreenProperty left PhysicalScreenWidth 2.480) +(ScreenProperty left PhysicalScreenHeight 1.705) +(ScreenProperty left WindowSize NoBorderFullScreen) +(ScreenProperty left TrackerBaseToImagePlate + (( 0.0 0.0 -1.0 2.230) + ( 0.0 -1.0 0.0 1.340) + (-1.0 0.0 0.0 0.885))) + +(ScreenProperty center PhysicalScreenWidth 2.485) +(ScreenProperty center PhysicalScreenHeight 1.745) +(ScreenProperty center WindowSize NoBorderFullScreen) +(ScreenProperty center TrackerBaseToImagePlate + (( 0.0 0.0 1.0 0.248) + (-1.0 0.0 0.0 0.885) + ( 0.0 -1.0 0.0 1.340))) + +(ScreenProperty right PhysicalScreenWidth 2.480) +(ScreenProperty right PhysicalScreenHeight 1.775) +(ScreenProperty right WindowSize NoBorderFullScreen) +(ScreenProperty right TrackerBaseToImagePlate + (( 0.0 0.0 1.0 0.2488) + ( 0.0 -1.0 0.0 1.340) + ( 1.0 0.0 0.0 0.860))) + +// Create a physical environment. This contains the available input devices, +// audio devices, and sensors, and defines the coexistence coordinate system +// for mapping between the virtual and physical worlds. +// +(NewPhysicalEnvironment VirtualPortal) + +// Register the input device defined in this file and the sensor which will +// drive head tracking. +// +(PhysicalEnvironmentProperty VirtualPortal InputDevice tracker1) +(PhysicalEnvironmentProperty VirtualPortal InputDevice tracker2) +(PhysicalEnvironmentProperty VirtualPortal HeadTracker head) + +// Set the location of the center of coexistence relative to the tracker base. +// Here it set to the center of the center screen. The default view attach +// policy of NOMINAL_SCREEN used by ConfiguredUniverse will place the origin of +// the view platform in coexistence coordinates at the center of coexistence. +// +(PhysicalEnvironmentProperty VirtualPortal + CoexistenceToTrackerBase + ((-1.0 0.0 0.0 0.000) + ( 0.0 0.0 -1.0 1.340) + ( 0.0 -1.0 0.0 0.994))) + +// Define the physical body. The head origin is halfway between the eyes, with +// X extending to the right, Y up, and positive Z extending into the skull. +// +(NewPhysicalBody LabRat) +(PhysicalBodyProperty LabRat StereoEyeSeparation .07) + +// Define the position and orientation of the head relative to the tracker +// mounted on the head. +// +(PhysicalBodyProperty LabRat HeadToHeadTracker + ((-1.0 0.0 0.0 0.00) + ( 0.0 0.0 -1.0 0.05) + ( 0.0 -1.0 0.0 0.11))) + +// Create a view platform behavior for the 6DOF sensor. +// +(NewViewPlatformBehavior vpb org.jogamp.java3d.utils.behaviors.vp.WandViewBehavior) + +(ViewPlatformBehaviorProperty vpb Sensor6D sensor6d) +(ViewPlatformBehaviorProperty vpb ButtonAction6D 2 GrabView) +(ViewPlatformBehaviorProperty vpb ButtonAction6D 1 TranslateForward) +(ViewPlatformBehaviorProperty vpb ButtonAction6D 0 TranslateBackward) + +// Default normal translation speed is 0.1 physical meters per second. +(ViewPlatformBehaviorProperty vpb TranslationSpeed + 1.0 PhysicalMeters PerSecond) + +// Default rotation coordinates are Sensor. +(ViewPlatformBehaviorProperty vpb RotationCoords Head) + +// Nominal sensor transform for modified joystick RedBarron +(SensorProperty sensor6d Hotspot (0.00 0.6 0.00)) +(ViewPlatformBehaviorProperty vpb NominalSensorRotation + ((-1.0 0.0 0.0) + ( 0.0 0.0 -1.0) + ( 0.0 -1.0 0.0))) + +// Default 6DOF sensor echo is Gnomon +(ViewPlatformBehaviorProperty vpb EchoSize 0.015) +(ViewPlatformBehaviorProperty vpb EchoType Beam) + +// Default 6DOF sensor echo color is white +(ViewPlatformBehaviorProperty vpb EchoColor 1.0 0.7 0.0) + +// Default 6DOF sensor transparency is 0.0 (opaque) +(ViewPlatformBehaviorProperty vpb EchoTransparency 0.4) + +// Create a new view platform and set the view platform behavior. +// +(NewViewPlatform vp) +(ViewPlatformProperty vp ViewPlatformBehavior vpb) + +// Now define the view. +// +(NewView view0) +(ViewProperty view0 Screen left) +(ViewProperty view0 Screen center) +(ViewProperty view0 Screen right) +(ViewProperty view0 PhysicalBody LabRat) +(ViewProperty view0 PhysicalEnvironment VirtualPortal) +(ViewProperty view0 ViewPlatform vp) + +// Set the screen scale. This is scale factor from virtual to physical +// coordinates. +// +(ViewProperty view0 ScreenScalePolicy SCALE_SCREEN_SIZE) + +// Alternative for explict scaling. +// +//(ViewProperty view0 ScreenScalePolicy SCALE_EXPLICIT) +//(ViewProperty view0 ScreenScale 5.00) + +// Enable stereo viewing. Enable head tracking to get the position of the eyes +// with respect to coexistence. Boolean values may be specified as either +// true, True, false, or False. +// +(ViewProperty view0 StereoEnable true) +(ViewProperty view0 TrackingEnable True) ++ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-cave.html b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-cave.html new file mode 100644 index 0000000..9b0298b --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-cave.html @@ -0,0 +1,156 @@ + + + + +
+/* + ************************************************************************ + * + * Java 3D configuration file for a cave environment. This cave + * consists of 3 projectors with 3 screens to the left, front, and right + * of the user, all at 90 degrees to each other. + * + * The projectors in the VirtualPortal sample site are actually turned + * on their sides to get more height. Screen 0 is rotated 90 degrees + * counter-clockwise, while screens 1 and 2 are rotated 90 degrees + * clockwise. + * + ************************************************************************ + */ + +// 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 center 1) +(NewScreen right 2) + + +// Set the available image areas as well as their positition and orientation +// relative to the tracker base. Although this config file doesn't enable +// head tracking, the tracker base is still needed as a point of reference to +// describe the position and orientation of the screens relative to the +// environment. +// +// From the orientation of a user standing within this VirtualPortal site and +// facing the center screen, the tracker base is along the vertical midline of +// the screen, 0.248 meters down from the top edge, and 1.340 meters in front +// of it. The tracker base is oriented so that its +X axis points to the left, +// its +Y axis points toward the screen, and its +Z axis points toward the +// floor. +// +(ScreenProperty left PhysicalScreenWidth 2.480) +(ScreenProperty left PhysicalScreenHeight 1.705) +(ScreenProperty left WindowSize NoBorderFullScreen) +(ScreenProperty left TrackerBaseToImagePlate + (( 0.0 0.0 -1.0 2.230) + ( 0.0 -1.0 0.0 1.340) + (-1.0 0.0 0.0 0.885))) + +(ScreenProperty center PhysicalScreenWidth 2.485) +(ScreenProperty center PhysicalScreenHeight 1.745) +(ScreenProperty center WindowSize NoBorderFullScreen) +(ScreenProperty center TrackerBaseToImagePlate + (( 0.0 0.0 1.0 0.248) + (-1.0 0.0 0.0 0.885) + ( 0.0 -1.0 0.0 1.340))) + +(ScreenProperty right PhysicalScreenWidth 2.480) +(ScreenProperty right PhysicalScreenHeight 1.775) +(ScreenProperty right WindowSize NoBorderFullScreen) +(ScreenProperty right TrackerBaseToImagePlate + (( 0.0 0.0 1.0 0.2488) + ( 0.0 -1.0 0.0 1.340) + ( 1.0 0.0 0.0 0.860))) + +// Set the location of the center of coexistence relative to the tracker base. +// Here it set to the center of the center screen. This config file will set +// the location of the user's eyes relative to this point. The default view +// attach policy of NOMINAL_SCREEN used by ConfiguredUniverse will place the +// origin of the view platform in coexistence coordinates at the center of +// coexistence. +// +(NewPhysicalEnvironment VirtualPortal) +(PhysicalEnvironmentProperty VirtualPortal + CoexistenceToTrackerBase + ((-1.0 0.0 0.0 0.000) + ( 0.0 0.0 -1.0 1.340) + ( 0.0 -1.0 0.0 0.994))) + +// Now define the view. +// +(NewView view0) +(ViewProperty view0 Screen left) +(ViewProperty view0 Screen center) +(ViewProperty view0 Screen right) +(ViewProperty view0 PhysicalEnvironment VirtualPortal) + +// Set the user eye position in the display environment. It is set here to +// 1.340 meters back from the center screen (directly under the tracker), and +// 1.737 meters from the floor (about 5 ft 8.4 inches). +// +(ViewProperty view0 CenterEyeInCoexistence (0.0 0.494 1.340)) + +// Explict scaling. +// +(ViewProperty view0 ScreenScalePolicy SCALE_EXPLICIT) +(ViewProperty view0 ScreenScale 0.30) + +// No stereo viewing for this configuration. +// +(ViewProperty view0 StereoEnable False) ++ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-rot45.html b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-rot45.html new file mode 100644 index 0000000..927dbd8 --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d1x3-rot45.html @@ -0,0 +1,122 @@ + + + + +
+/* + ************************************************************************ + * + * Java 3D configuration file for 3 screens. Left and right screens are + * rotated 45 degrees from the center screen. + * + ************************************************************************ + */ + +// 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 center 1) +(NewScreen right 2) + +// Set the available image areas for full screens. +// +(ScreenProperty left PhysicalScreenWidth 0.360) +(ScreenProperty left PhysicalScreenHeight 0.288) + +(ScreenProperty center PhysicalScreenWidth 0.360) +(ScreenProperty center PhysicalScreenHeight 0.288) + +(ScreenProperty right PhysicalScreenWidth 0.360) +(ScreenProperty right PhysicalScreenHeight 0.288) + +// Specify full screen windows. +// +(ScreenProperty left WindowSize NoBorderFullScreen) +(ScreenProperty center WindowSize NoBorderFullScreen) +(ScreenProperty right WindowSize NoBorderFullScreen) + +// Set the TrackerBaseToImagePlate transforms for these screens. +// +// The tracker base and center of coexistence are set here to the middle of the +// center screen. The basis vectors are aligned with the center screen image +// plate. The left and right screens are rotated 45 degrees toward each other +// about their shared edges with the center screen. +// +(ScreenProperty center TrackerBaseToImagePlate + (Translate 0.180000 0.144000 0.000000)) + +// cos(45) * 0.360 * 0.5 = 0.127279; 0.360 + 0.127279 = 0.487279 +(ScreenProperty left TrackerBaseToImagePlate + (RotateTranslate + (Rotate 0.000000 -45.000000 0.000000) + (Translate 0.487279 0.144000 0.127279))) + +// cos(45) * 0.360 * 0.5 = 0.127279 +(ScreenProperty right TrackerBaseToImagePlate + (RotateTranslate + (Rotate 0.000000 45.000000 0.000000) + (Translate -0.127279 0.144000 0.127279))) + +// Create a view using the defined screens. +// +(NewView view0) +(ViewProperty view0 Screen left) +(ViewProperty view0 Screen center) +(ViewProperty view0 Screen right) +(ViewProperty view0 CenterEyeInCoexistence (0.0 0.0 0.5)) ++ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d2x2-flat.html b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d2x2-flat.html new file mode 100644 index 0000000..af6f62f --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/universe/doc-files/j3d2x2-flat.html @@ -0,0 +1,147 @@ + + + + +
+/* + ************************************************************************ + * + * Java 3D configuration file for 4 screen projection configuration + * arranged in a 2x2 power wall. + * + ************************************************************************ + */ + +// 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 topleft 0) +(NewScreen topright 1) +(NewScreen bottomleft 3) +(NewScreen bottomright 2) + +// Set the available image areas for full screens. This is important when +// precise scaling between objects in the virtual world and their projections +// into the physical world is desired through use of explicit ScreenScale view +// attributes. The defaults are 0.365 meters for width and 0.292 meters for +// height. +// +(ScreenProperty topleft PhysicalScreenWidth 0.912) +(ScreenProperty topleft PhysicalScreenHeight 0.680) + +(ScreenProperty topright PhysicalScreenWidth 0.912) +(ScreenProperty topright PhysicalScreenHeight 0.680) + +(ScreenProperty bottomleft PhysicalScreenWidth 0.912) +(ScreenProperty bottomleft PhysicalScreenHeight 0.685) + +(ScreenProperty bottomright PhysicalScreenWidth 0.912) +(ScreenProperty bottomright PhysicalScreenHeight 0.685) + + +// Specify full screen windows. +// +(ScreenProperty topleft WindowSize NoBorderFullScreen) +(ScreenProperty topright WindowSize NoBorderFullScreen) +(ScreenProperty bottomleft WindowSize NoBorderFullScreen) +(ScreenProperty bottomright 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 point +// 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 are set here to the center of the +// 2x2 array with its basis vectors aligned to image plate coordinates. +// +(ScreenProperty topleft TrackerBaseToImagePlate + (Translate 0.912 0.000 0.0)) +(ScreenProperty topright TrackerBaseToImagePlate + (Translate 0.000 0.000 0.0)) +(ScreenProperty bottomleft TrackerBaseToImagePlate + (Translate 0.912 0.685 0.0)) +(ScreenProperty bottomright TrackerBaseToImagePlate + (Translate 0.000 0.685 0.0)) + +// Create a view using the defined screens. +// +(NewView view0) +(ViewProperty view0 Screen topleft) +(ViewProperty view0 Screen topright) +(ViewProperty view0 Screen bottomleft) +(ViewProperty view0 Screen bottomright) + +// Set the screen scale. This is scale factor from virtual to physical +// coordinates. The default policy of SCALE_SCREEN_SIZE doesn't work well here +// since in the 2x2 arrangement the individual screens are too small. The +// explicit scale factor below assumes a normalized range of object coordinates +// of [-1.0 .. +1.0]. +// +(ViewProperty view0 ScreenScalePolicy SCALE_EXPLICIT) +(ViewProperty view0 ScreenScale 0.912) + +// Set the user eye position in the display environment. +// +(ViewProperty view0 CenterEyeInCoexistence (0.0 0.0 1.0)) ++ + diff --git a/src/main/javadoc/org/jogamp/java3d/utils/universe/package.html b/src/main/javadoc/org/jogamp/java3d/utils/universe/package.html new file mode 100644 index 0000000..06c31db --- /dev/null +++ b/src/main/javadoc/org/jogamp/java3d/utils/universe/package.html @@ -0,0 +1,12 @@ + + + + +
Provides utility classes for setting up the Java 3D universe, +including the viewing configuration.
+ + -- cgit v1.2.3