|
Hi Syrus,
Thanks for the advice. Unfortuntely
I can't keep track of the angles locally in my application because I allow the
users to save and restore views from a file, independantly of the mouse
navigation behaviour, and therefor must recover the current rotation angles from
the view's transform.
When it becomes apparent that i MUST move away from the beta 1 release I
will revisit this if the bug is not fixed.
Thanks again,
josh
>>> [EMAIL PROTECTED] 04/02/01 06:24PM >>> Hello Josh, I saw Kelvin's post regarding the "bug", but I'm not sure if you have found a work-around yet. If you haven't, you can try the following. I've dealt with this problem many times and it all comes down to how much error accumulates in the transform above the view. You may have noticed that the problem doesn't occur if you are using that transform to rotate an object (as apposed to the view). That's because the invert of the view matrix is applied to the whole scene and the Invert () method is probably introducing plenty of floating point miscalculation in the resulting matrix. I have tried many different ways and have gotten reasonable results but the following works pretty well: 1) Get the translation of the matrix/transform 2) Call say .rotX on the actual Matrix/transform that you will plug into the scene. As you may know, .rotX will wipe out any translation or previous rotation and give you a "clean" rotation. The only problem is that you have to keep track of current rotation in another local variable (see below) 3) Set the rotation back in the matrix. ///////////////////////////////////////////////// entityMat.get(translation); entityRotY += entityRotYRate * "some analog value if using mouse or ...."; entityMat.rotY(entityRotY); entityMat.setTranslation(translation); As apposed to: delta.rotY(entityRotYRate * "some analog value if using mouse or ...."); entityMat.mul(delta); Keep in mind that if you are using an analog multiplier (say a number between -1 and 1), you should try to keep it as "clean" as possible. Instead of say 1.003432045, use 1.0, and -0.3 instead of -0.304090737. Try to use as few decimal places as possible. Multiplying two matrices can introduce floating-point miscalculations (as you may know it has plenty of multiplies in there; the Invert function is even worse). If your using some one else's behavior and you don't have the source and you don't ... :), you can catch the exception when plugging the transform in to the scene and try to "fix" the matrix. That is to be sure all rotation vectors are still normalized and are perpendicular to each other. If you can predict which vector is the most accurate, you can do a double-cross to "fix" it (similar to computing a lookAt matrix). If you had to do this, and needed help (especially if I'm not making much sense :) ), you can contact me. Take Care, SyrusM _______________________________________________ Syrus Mesdaghi Full Sail Real World Education Gaming Instructor Winter Park, FL [EMAIL PROTECTED] http://www.fullsail.com _______________________________________________ ----- Original Message ----- From: "Josh Richmond" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Monday, March 26, 2001 9:13 PM Subject: Re: [JAVA3D] BadTransform bug in j3d1.2? I've attached two files. Run the app named BugViewer and rotate the view a little bit (hold the left mouse button down). The code affected is in ViewNavigator::orbit(). Thanks for any help you can provide. If this is a bug sorry I wasn't able to report it until after Beta 2 was finished. josh ---------------------------------------------------- Joshua L. Richmond, BASc, MSc. Systems Engineering (R&D) MD Robotics 9445 Airport Rd, Brampton, ON, Canada (905) 790-2800 x4332 ----------------------------------------------------- >>> Kelvin Chung <[EMAIL PROTECTED]> 03/26/01 05:07PM >>> Hi Josh, Please give us a test program for investigation. It is most likely cause by numerical imprecision which accumulate over time big enough to make the transformation matrix not congruent. Try to use double instead of float to see if things get improves. It happen since v1.2.1 beta2 because Transform3D is enchanced to optimize for several matrix inversion cases and also in other case when the matrix is congruent. Thanks. - Kelvin ---------------- Java 3D Team Sun Microsystems Inc. >Mime-Version: 1.0 >Date: Mon, 26 Mar 2001 16:46:33 -0500 >From: Josh Richmond <[EMAIL PROTECTED]> >Subject: [JAVA3D] BadTransform bug in j3d1.2? >To: [EMAIL PROTECTED] > >This is a poor excuse for a bug report because I'm not at a computer where I can run my code, nor do I have sample code (yet), but I thought I'd see if anyone else has witnessed this. > >I'm using a slight variation of Eric's orbit behaviours. In version 1.2beta1, it works like a charm. In the release version of 1.2 I get a BadTransformException during rotations. This is very consistent and reproducible. > >I plan on using the j3dutil Orbit behaviour, but thought I'd bring this up as it might point to a bigger problem. > >Sample code can be made available. > >josh > >---------------------------------------------------- >Joshua L. Richmond, BASc, MSc. >Systems Engineering (R&D) > >MD Robotics >9445 Airport Rd, Brampton, ON, Canada >(905) 790-2800 x4332 >----------------------------------------------------- > =========================================================================== 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". =========================================================================== 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". |
- Re: [JAVA3D] BadTransform bug in j3d1.2? (Work-around) Yazel, David J.
- [JAVA3D] Documentation - #1 Priority John Wright
- Josh Richmond
