>> 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".

Reply via email to