>> Date: Fri, 12 Jul 2002 09:43:43 +0100 >> From: =?iso-8859-1?q?Karl=20Parry?= <[EMAIL PROTECTED]> >> >> At the moment I hae an application I wish view in >> stereo, using the comand line instruction: >> >> Java -Dj3d.stereo=PREFERRED MyProgram >> >> I am running in stereoscopic mode, but once I add >> movement of the view platform through the keyboard >> (KeyNavigationBehavior), the stereo still works but as >> you navigate the scene the two images seperate far too >> much and stop working in stereo correctly... > > Date: Fri, 12 Jul 2002 08:52:11 -0400 > From: Jack Gundrum <[EMAIL PROTECTED]> > > You need to set the eye separation smaller;
That will probably have some effect, but the eye separation is actually intended to be a physical calibration constant for a particular user. Java 3D provides a nominal default value that should work for most people, with the option of fine-tuning it to the user's actual measured interocular distance. There are a couple of things that might be going on. One is that the eyepoint is simply getting too close to objects in the virtual world; it's very difficult to converge on objects that are only a couple of cm in front of the eyes. The near parts of the image that don't converge are very distracting and can prevent a user from converging on the objects that are at a more reasonable distance. In that case, setting the near clip plane further away will help. Another is that many people find it impossible to fuse stereo images representing objects that are too far away from the position of the screen in the virtual world. Stereoscopic pair viewing with conventional technology asks the human visual system to do a very strange thing: you focus your eyes on a screen that is some 30cm away yet have to converge/diverge your eyes as if objects were closer or further away. Most people can accept this disparity and an illusion of depth is achieved, but many people find they cannot do this, especially for objects that are supposed to be far away. Another problem may be with scaling. Because the eye separation is a physical measurement, stereo viewing is one of those instances where it's important to consider the scaling between virtual and physical units. For example, the size of an object's projected image might be 20cm on the screen, but in physical units it might actually be something like 1cm across and only a couple of cm from the eyes, which means you have to be very cross-eyed to fuse the images. The recommended way to alter the virtual to physical scale is through the View's screen scale policy. This sets the scaling between view platform coordinates and physical coordinates. Normally the scale factor in the view platform transform (its localToVworld) is 1.0, so view platform units are the same as virtual world units. By default the screen scale policy is SCALE_SCREEN_SIZE, which sets the screen scale to half the physical width of the screen or window. This means that an object that is 2 virtual units wide (the normalized range of [-1.0 .. +1.0]) scales to the physical width of the screen or window. When viewed at the nominal view distance, set by ViewingPlatform.setNominalViewingTransform(), the projected image of that object will span the entire width of the screen or window. You can set the screen scale to any arbitrary value by using a screen scale policy of SCALE_EXPLICIT, and then setting the scale with View.setScreenScale(). A screen scale of 1.0 (the default) means that 1 virtual unit equals 1 physical meter. To pick the most appropriate screen scale, decide how large 1 virtual unit should appear to be in physical meters and set the screen scale to that. If your eye separation (as set in the PhysicalBody), your physical screen size (as set in Screen3D), and your physical eye positions (as set by the View's window eyepoint policy) are accurate, then that's how large 1 virtual unit will appear to be when viewed in stereo. You may have to move the view platform closer or further to the object to encompass the proper range of the field of view. [Note: The screen scale is about the view platform origin, and by default the eyepoint is also at the view platform origin, so, for monoscopic perspective views, altering the screen scale doesn't produce any apparent scaling in the rendered image (as the virtual world grows larger, it also moves away from the eyepoint). However, the movement away from the eyepoint *does* have an effect on the convergence of the user's eyes: as the virtual world grows larger and moves away from the view platform origin, the eyes don't have to converge as much, which the human visual system interprets as meaning the objects in the virtual world are larger and further away, even though the rendered image size is the same.] You can also alter the virtual to physical scale by introduce a non-unity scale in the view platform transform. However, this will also introduce an apparent translation of the view platform with respect to the virtual world depending upon how the chain of transforms from the view platform to the locale is set up, so using the screen scale is usually easier. -- Mark Hood =========================================================================== To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff JAVA3D-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help".
