Salut Thierry, I agree with you, I had the same feeling at the beginning when I started to learn the java3d API ... but at this time java3d was not in the main SUN's scope. So basically, I tried to build an application showing all java3d features. You can check it out under sourceforges (source will be soon available)
http://sourceforge.net/projects/cazapool3d/ Franck -----Original Message----- From: Discussion list for Java 3D API <[EMAIL PROTECTED]>@SUNGARD On Behalf Of "Thierry Milard (free)" <[EMAIL PROTECTED]> Sent: Saturday, June 12, 2004 2:02 PM To: [EMAIL PROTECTED] Subject: Re: [JAVA3D] Java View model ... M. Mark Wood, as I started to discover both 3D and java3D 6 month ago I was surprise to be able to understand most of wath I asked for. But concerning the documentation issue,I do agree with you I have had some problem to understand the view model (view frustrum,....). Thanks then. I am glad to see people like you are working hard to improve the "public accessibility" for beginers and people discovering java3D. Maybe sites/docs/communication should be eased for those beginers (those who prohramm in java but not yet in 3D). More visual for sure. The java3D technical sucess is already quite a success (for me at least) whereas the communication is not so good I think. Some might argue that java3D is for tecky people but it is not with those kind of argument you build a sharp success. Most of my java developper colleagues don't even know about the "java3D" name.... Since java3D is a pure "visual" API could it be not possible for sun to build a nice very cool and enjoyable internet site ? with screens shots of cool java3D softwares... and documentation with a lot of drawings and screen shots. Hope java3D will be a nice success. It deserves it Thierry, Paris -------Original Message------- From: [EMAIL PROTECTED] Date: Saturday, June 12, 2004 02:54:54 To: [EMAIL PROTECTED] Subject: Re: [JAVA3D] Java View model ... > I´m writing an application where a user will be standing beside a screen that > is facing upwards. He will be looking down on a virtual world with a > landscape/map and some moving objects. > > This requires a skewed view frustrum. Yep. > The Java view model is not really fully documented ... It's terrible. I think it's really only fully documented by the source code, and even then I would not have come to a full understanding without access to the people who implemented it. I tried to address this problem with the utility class com.sun.j3d.utils.universe.ViewInfo -- there is extensive javadoc there, and the source code is available. The class is essentially a reimplementation of the Java 3D view model designed for public access. The essential things to keep in mind with the Java 3D view model: 1) View frustums are established by specifying the physical position of the viewer's eyes (either through a nominal viewing position or by actually tracking the user's head position with hardware) relative to the physical viewing surfaces (usually a window on a flat display surface). That is, the projection frustum is literally determined by the position of an eye at the apex of the frustum with respect to the corners of the Canvas3D. 2) The positions of all eyes and viewing surfaces are positioned relative to each other through what is known as the coexistence coordinate system. The orientation of coexistence coordinates with respect to image plate coordinates can be completely arbitrary, but in most cases it is aligned with image plate coordinates and centered in the middle of the Canvas3D or screen. Both image plate coordinates and coexistence coordiantes are physical coordinate systems measured in meters, with no scaling between them. 3) Physical cooexistence coordinates are positioned with respect to the virtual universe coordinate system (where your geometric model lives) through the ViewPlatform. The ViewPlatform is always aligned with coexistence coordinates, but may have different scaling and a different origin/offset. The ViewPlatform is an ordinary Node, and so by scaling, positioning, and orienting the ViewPlatform, Java 3D is able to compute the correct projection of the virtual universe onto the physical display surfaces. > The example ManualEyeDemo is good and points out that you have to use > RELATIVE_TO_SCREEN eyepoint policy in order to be able to set the eye's x, y > and z position using setLeftManualEyeInImagePlate() and > setRightManualEyeInImagePlate(). That would work, but if I were to write that demo over again, I'd set the eye positions relative to coexistence -- the coexistence coordinate system is aligned with the screen and follows the window center by default. To get to your specific question... assuming your window takes up the full screen, and you are using only one screen with no head tracking: Keep coexistence centering to the default value of "enabled" -- this aligns the coexistence coordinate system with image plane coordinates. The origin of the coexistence coordinate system in that case is then determined by the window movement policy: with the default of PHYSICAL_WORLD, the origin is set to the center of the Canvas3D, and when set to VIRTUAL_WORLD, the origin is set to the center of the screen. You should set the window movement policy to VIRTUAL_WORLD for the setup you describe. With a single screen and no head tracking, you shouldn't need to set coexistenceToTrackerBase and trackerBaseToImagePlate (in fact, with coexistence centering enabled, those transforms are ignored). Those transforms are used to orient multiple screens with respect to coexistence coordinates. The coexistence and image plate coordinate systems are physical coordinate system measured in meters. Since you will be constructing a skewed view frustum that corresponds to the nominal physical position of the viewer's eyes, you will need to make sure that your screen metrics are correct. Unless you specify the screen dimensions explictly, Java 3D assumes a resolution of 90 pixels per inch. In your case, it is essential that you get out a ruler and measure the exact dimensions of the image area on the screen, and set them using the methods in Screen3D. Now you can specify the positions of the user's eyes in coexistence coordinates to get the exact viewing frustum you require. Call View.setWindowEyePointPolicy(View.RELATIVE_TO_COEXISTENCE) and then call View.set{Left,Right}ManualEyeInCoexistence() with the eye positions. For more details read the source code to com.sun.j3d.utils.ViewInfo. In particular, see ViewInfo.getViewPlatformToCoexistence() to understand how the scale and offset of the ViewPlatform is computed with respect to coexistence coordinates. You may also find the documentation for the Java 3D configuration file useful -- you can get there through the class overview of com.sun.j3d.utils.universe.ConfiguredUniverse. -- 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". . ____________________________________________________[IMAGE] IncrediMail - Email has finally evolved - Click Here Confidentiality Notice: This email and any files transmitted with it are confidential and are intended solely for the use of the individual or entity to whom they are addressed. If you are not the original recipient or the person responsible for delivering the email to the intended recipient, be advised that you have received this email in error, and that any use, dissemination, forwarding, printing, or copying of this email is strictly prohibited. If you received this email in error, please notify the originator immediately. =========================================================================== 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".