Our discussions in previous chapters have centered on the creation and interaction of visual objects in a virtual 3D world. The objects and scenes constructed, however, will ultimately have to be shown on appropriate display devices such as a single PC monitor, a stereoscopic head mount display (HMD), or a multi screen project system (Salisbury, Farr, & Moore, 1999). Also, it is quite often that we may need to show different views of the created universe at the same time for certain applications. Even for the case of a single PC monitor, showing different views of the same objects in different windows will be instructive and informative, and may be essential in some cases. While we have been using a single simple view in earlier chapters, Java 3D has inherent capabilities to give multiple views of the created 3D world for supporting, say, the use of head tracking HMD systems for user to carry out 3D navigation (Yabuki, Machinaka, & Li, 2006). In this chapter, we will discuss how multiple views can be readily generated after outlining the view model and the various components that make up the simple universe view used previously.
Figure 1 shows the view model used in Java 3D. As can be seen, the ViewPlatform is essential a magic carpet on which the eye of the user is located. By default, it is positioned at the origin and looks into the negative z-axis. Technically, the eye forms part of a View object, which also consists of a PhysicalBody and PhysicalEnvironment objects. The latter two give the actual physical characteristics of the user such as the eye and ear positions.
As shown, the eye sees a single view of the 3D world with bounds defined by the view frustum. Visual objects within this volume will be rendered onto a canvas or a Canvas3D object. Basically a 2D window to the 3D virtual world, it is the Canvas3D object that will be rendered for display on the appropriate 2D system display device.Top
The single eye view of the 3D world as depicted in Figure 1 corresponds to what has been used in previous chapters through the SimpleUniverse utility class. The availability of this utility allows one to develop a 3D application that uses a single view rapidly and easily without the need to understand the mechanism of viewing fully.
However, to develop multiple view applications, be it based on multiple view platforms, canvas, or other means, an appreciation of how the view model is implemented is needed. In this section, we will outline the structure of the SimpleUniverse class and show how it can be implemented using core API functions. This will form the foundation for making changes to result in multiple views.
Figure 2 shows the scene graph structure of a typical Java 3D program. The SimpleUniverse object, created from using the relevant utility class to provide a minimal Virtual Universe, corresponds to the group of objects within the dashed line. To implement the SimpleUniverse object using core API functions, we need to create all the necessary components in the same manner as shown. Specifically, the following steps should be carried out:
Simple Universe scene graph
• Create a VirtualUniverse object.
• Create a relevant Locale object and attach this to the VirtualUniverse.
• Construct content branches.
• Compile branch graphs and attach to Locale.
• Construct view branch and attach to Locale.
• Create a Canvas3D object.
• Create a TransformGroup TG.
• Create a ViewPlatform object VP and attach to the TransformGroup TG.
• Create a View object and attach to the ViewPlatform.
• Create a Canvas3D object and attach to the View.
• Create a PhysicalBody object and attach to the View.
• Create a PhysicalEnvironment object and attach to the View.
• Attach the TransformGroup to view branch.