[Breaking Change] DO3D has new props localRotationX / Y /Z , pitch, yaw, roll are methods again

View: New views
20 Messages — Rating Filter:   Alert me  

[Breaking Change] DO3D has new props localRotationX / Y /Z , pitch, yaw, roll are methods again

by Tim Knip-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi List,

Sorry for this confusion, but we decided to revert back to pitch(
angle ), yaw( angle ) and roll( angle ) methods.

There are three new getter / setters now though:

do3d.localRotationX
do3d.localRotationY
do3d.localRotationZ

So:

pitch( 30 ) would be the same as doing localRotationX = 30;

Note that  localRotationX / Y /Z are rotations relative to the
rotation as set by rotationX / Y / Z.
Also note that after do3d.lookAt() localRotationX/Y/Z will be resetted to 0

Tim

_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new props localRotationX / Y /Z , pitch, yaw, roll are methods again

by speedok :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Tim,

Thanks for the update.

Are there still issues with near and lookAt  ?

Tim Knip-2 wrote:
Hi List,

Sorry for this confusion, but we decided to revert back to pitch(
angle ), yaw( angle ) and roll( angle ) methods.

There are three new getter / setters now though:

do3d.localRotationX
do3d.localRotationY
do3d.localRotationZ

So:

pitch( 30 ) would be the same as doing localRotationX = 30;

Note that  localRotationX / Y /Z are rotations relative to the
rotation as set by rotationX / Y / Z.
Also note that after do3d.lookAt() localRotationX/Y/Z will be resetted to 0

Tim

_______________________________________________
Papervision3D mailing list
Papervision3D@osflash.org
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new props localRotationX/ Y /Z , pitch, yaw, roll are methods again

by Paul Tondeur :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Tim,

I'm experiencing some problems after this update which you might not be
aware of.

When I execute onenterframe for example the following code:

object.yaw(1)
trace(object.rotationY);

When I expect to receive a value of +/- 90, it will return NaN. I've
located this problem to changes in the Matrix3D class.
The following code execution is happening and will trace NaN as well:

var number:Number = -1.0000000000000029;
trace(Math.asin(-number/1)); //Traces NaN

Unfurtuantly I'm not that skilled right now to solve this problem. Maybe
you have an idea?

When I do for example a object.pitch(1) and trace(object.rotationX), it
will return the right values.

Beside it seems that rotationY is always between -90 and +90, instead of
between -180 and +180. Is this a bug, or is it a feature, which use I'm
not aware of?  :-)

Paul

-----Original Message-----
From: papervision3d-bounces@...
[mailto:papervision3d-bounces@...] On Behalf Of Tim Knip
Sent: zondag 20 juli 2008 18:32
To: papervision3d@...
Subject: [Papervision3D] [Breaking Change] DO3D has new props
localRotationX/ Y /Z , pitch, yaw, roll are methods again

Hi List,

Sorry for this confusion, but we decided to revert back to pitch(
angle ), yaw( angle ) and roll( angle ) methods.

There are three new getter / setters now though:

do3d.localRotationX
do3d.localRotationY
do3d.localRotationZ

So:

pitch( 30 ) would be the same as doing localRotationX = 30;

Note that  localRotationX / Y /Z are rotations relative to the
rotation as set by rotationX / Y / Z.
Also note that after do3d.lookAt() localRotationX/Y/Z will be resetted
to 0

Tim

_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new props localRotationX/ Y /Z , pitch, yaw, roll are methods again

by Jon Bradley-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


On Jul 23, 2008, at 12:12 PM, Paul Tondeur wrote:

When I expect to receive a value of +/- 90, it will return NaN. I've

located this problem to changes in the Matrix3D class.

The following code execution is happening and will trace NaN as well:


var number:Number = -1.0000000000000029;

trace(Math.asin(-number/1)); //Traces NaN


Might be a bug in the Flash Player.

var number:Number = -1.0000000000000029;
var n:Number = -number/1;
trace( Math.asin(n) ); // 57.295779513082486

cheers,

jon

_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new props localRotationX/ Y /Z , pitch, yaw, roll are methods again

by Jon Bradley-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


On Jul 23, 2008, at 12:12 PM, Paul Tondeur wrote:

When I expect to receive a value of +/- 90, it will return NaN. I've

located this problem to changes in the Matrix3D class.

The following code execution is happening and will trace NaN as well:


If the issue is with matrix2euler, change this

euler.y = Math.asin(-m.n31/sz);

to this

var n:Number = -m.n31/sz;
euler.y = Math.asin(n);

Hope that fixes it.

best,

jon

_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new props localRotationX/ Y /Z , pitch, yaw, roll are methods again

by Jon Bradley-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


On Jul 23, 2008, at 12:36 PM, Jon Bradley wrote:

> If the issue is with matrix2euler

If you're really bold, you can try this method instead:

        public static function matrix2euler( m :Matrix3D,  
euler:Number3D=null, scale:Number3D=null ) : Number3D
        {
                euler = euler || new Number3D();

         var x:Number = 0;
         var y:Number = 0;
         var c:Number = 0;

         euler.y = -Math.asin( m.13);
         c = Math.cos(ay);

         if ( Math.abs(c) > 0.005 )
         {
             x =  m.33/c;
             y = -m.23/c;

             euler.x = Math.atan2(y,x);

             x = m.11/c;
             y = m.12/c;

             euler.z = atan2(y,x);
         }
         else
         {
             euler.x = 0;
             x = m.22;
             y = m.21;
             euler.z = atan2(y,x);
         }

         //  Clamp values
         euler.x = (euler.x > 360) ? 360:((euler.x < 0) ? 0:euler.x);
         euler.y = (euler.y > 360) ? 360:((euler.y < 0) ? 0:euler.y);
         euler.z = (euler.z > 360) ? 360:((euler.z < 0) ? 0:euler.z);

                if(Papervision3D.useDEGREES)
                {
                        euler.x *= toDEGREES;
                        euler.y *= toDEGREES;
                        euler.z *= toDEGREES;
                }
               
                return euler;
     }



_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new props localRotationX/ Y /Z , pitch, yaw, roll are methods again

by Jon Bradley-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Ah, I'm a doofus. Didn't put in the matrix props correctly. This  
method is completely untested.

        public static function matrix2euler( m :Matrix3D,  
euler:Number3D=null, scale:Number3D=null ) : Number3D
        {
                euler = euler || new Number3D();

         var x:Number = 0;
         var y:Number = 0;
         var c:Number = 0;

         euler.y = -Math.asin( m.n13);
         c = Math.cos(ay);

         if ( Math.abs(c) > 0.005 )
         {
             x =  m.n33/c;
             y = -m.n23/c;

             euler.x = Math.atan2(y,x);

             x = m.n11/c;
             y = m.n12/c;

             euler.z = atan2(y,x);
         }
         else
         {
             euler.x = 0;
             x = m.n22;
             y = m.n21;
             euler.z = atan2(y,x);
         }

         //  Clamp values
         euler.x = (euler.x > 360) ? 360:((euler.x < 0) ? 0:euler.x);
         euler.y = (euler.y > 360) ? 360:((euler.y < 0) ? 0:euler.y);
         euler.z = (euler.z > 360) ? 360:((euler.z < 0) ? 0:euler.z);

                if(Papervision3D.useDEGREES)
                {
                        euler.x *= toDEGREES;
                        euler.y *= toDEGREES;
                        euler.z *= toDEGREES;
                }
               
                return euler;
     }




_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new propslocalRotationX/ Y /Z , pitch, yaw, roll are methods again

by Paul Tondeur :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Jon,

Thanks for the suggestions to solve this problem! Unfortunately, none of
these seems to work out correctly.
I tried using the code for this method from revision 647. This seems to
work without any problems right now. However I expect that this might
introduce some new problems as well.

It might be an idea that someone from the pv3d team looks into this and
put this in the next update?
As soon as I've found a way to update the current implemented code I'll
post a new message.

Paul


-----Original Message-----
From: papervision3d-bounces@...
[mailto:papervision3d-bounces@...] On Behalf Of Jon Bradley
Sent: woensdag 23 juli 2008 19:04
To: papervision3d@...
Subject: Re: [Papervision3D] [Breaking Change] DO3D has new
propslocalRotationX/ Y /Z , pitch, yaw, roll are methods again

Ah, I'm a doofus. Didn't put in the matrix props correctly. This  
method is completely untested.

        public static function matrix2euler( m :Matrix3D,  
euler:Number3D=null, scale:Number3D=null ) : Number3D
        {
                euler = euler || new Number3D();

         var x:Number = 0;
         var y:Number = 0;
         var c:Number = 0;

         euler.y = -Math.asin( m.n13);
         c = Math.cos(ay);

         if ( Math.abs(c) > 0.005 )
         {
             x =  m.n33/c;
             y = -m.n23/c;

             euler.x = Math.atan2(y,x);

             x = m.n11/c;
             y = m.n12/c;

             euler.z = atan2(y,x);
         }
         else
         {
             euler.x = 0;
             x = m.n22;
             y = m.n21;
             euler.z = atan2(y,x);
         }

         //  Clamp values
         euler.x = (euler.x > 360) ? 360:((euler.x < 0) ? 0:euler.x);
         euler.y = (euler.y > 360) ? 360:((euler.y < 0) ? 0:euler.y);
         euler.z = (euler.z > 360) ? 360:((euler.z < 0) ? 0:euler.z);

                if(Papervision3D.useDEGREES)
                {
                        euler.x *= toDEGREES;
                        euler.y *= toDEGREES;
                        euler.z *= toDEGREES;
                }
               
                return euler;
     }




_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new propslocalRotationX/ Y /Z , pitch, yaw, roll are methods again

by John Grden-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

yeah I'm sure tim will likely get back to you - he's been working on this pretty vigorously as of late

Thanks for the posts guys, this does help!

On Wed, Jul 23, 2008 at 3:21 PM, Paul Tondeur <paul@...> wrote:
Hi Jon,

Thanks for the suggestions to solve this problem! Unfortunately, none of
these seems to work out correctly.
I tried using the code for this method from revision 647. This seems to
work without any problems right now. However I expect that this might
introduce some new problems as well.

It might be an idea that someone from the pv3d team looks into this and
put this in the next update?
As soon as I've found a way to update the current implemented code I'll
post a new message.

Paul


-----Original Message-----
From: papervision3d-bounces@...
[mailto:papervision3d-bounces@...] On Behalf Of Jon Bradley
Sent: woensdag 23 juli 2008 19:04
To: papervision3d@...
Subject: Re: [Papervision3D] [Breaking Change] DO3D has new
propslocalRotationX/ Y /Z , pitch, yaw, roll are methods again

Ah, I'm a doofus. Didn't put in the matrix props correctly. This
method is completely untested.

       public static function matrix2euler( m :Matrix3D,
euler:Number3D=null, scale:Number3D=null ) : Number3D
       {
               euler = euler || new Number3D();

        var x:Number = 0;
        var y:Number = 0;
        var c:Number = 0;

        euler.y = -Math.asin( m.n13);
        c = Math.cos(ay);

        if ( Math.abs(c) > 0.005 )
        {
            x =  m.n33/c;
            y = -m.n23/c;

            euler.x = Math.atan2(y,x);

            x = m.n11/c;
            y = m.n12/c;

            euler.z = atan2(y,x);
        }
        else
        {
            euler.x = 0;
            x = m.n22;
            y = m.n21;
            euler.z = atan2(y,x);
        }

        //  Clamp values
        euler.x = (euler.x > 360) ? 360:((euler.x < 0) ? 0:euler.x);
        euler.y = (euler.y > 360) ? 360:((euler.y < 0) ? 0:euler.y);
        euler.z = (euler.z > 360) ? 360:((euler.z < 0) ? 0:euler.z);

               if(Papervision3D.useDEGREES)
               {
                       euler.x *= toDEGREES;
                       euler.y *= toDEGREES;
                       euler.z *= toDEGREES;
               }

               return euler;
    }




_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org



--
[ JPG ]

_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new propslocalRotationX/ Y /Z , pitch, yaw, roll are methods again

by Tim Knip-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi all,

The NaN issue is fixed I beleive, update is in repo.

Now... the issue of #rotationY only going from -90 / +90...

This has to do with the fact that #rotationX / Y / Z are Euler-angles.
A problem is that when one does pitch(), yaw() or roll() the above
props are getting updated thru Matrix3D#matrix2euler.

Now: the process to convert a matrix into Euler-angles is called
'factoring'. This process has one BIG disadvantage: the
'factorization' can yield TWO possible solutions (Different sets of
eulers can descibe the same rotation).

Bottomline is that yaw()-ing past rotationY = +/- 90 will make
#rotationX / Z 180...
Note that this behaviour only occurs with yaw(), pitch() and roll() =>
only these will trigger matrix2euler()

Don't see a solution for this (think its just the nature of
euler-angles)... anyone?

Tim

2008/7/23 John Grden <neoriley@...>:

> yeah I'm sure tim will likely get back to you - he's been working on this
> pretty vigorously as of late
>
> Thanks for the posts guys, this does help!
>
> On Wed, Jul 23, 2008 at 3:21 PM, Paul Tondeur <paul@...> wrote:
>>
>> Hi Jon,
>>
>> Thanks for the suggestions to solve this problem! Unfortunately, none of
>> these seems to work out correctly.
>> I tried using the code for this method from revision 647. This seems to
>> work without any problems right now. However I expect that this might
>> introduce some new problems as well.
>>
>> It might be an idea that someone from the pv3d team looks into this and
>> put this in the next update?
>> As soon as I've found a way to update the current implemented code I'll
>> post a new message.
>>
>> Paul
>>
>>
>> -----Original Message-----
>> From: papervision3d-bounces@...
>> [mailto:papervision3d-bounces@...] On Behalf Of Jon Bradley
>> Sent: woensdag 23 juli 2008 19:04
>> To: papervision3d@...
>> Subject: Re: [Papervision3D] [Breaking Change] DO3D has new
>> propslocalRotationX/ Y /Z , pitch, yaw, roll are methods again
>>
>> Ah, I'm a doofus. Didn't put in the matrix props correctly. This
>> method is completely untested.
>>
>>        public static function matrix2euler( m :Matrix3D,
>> euler:Number3D=null, scale:Number3D=null ) : Number3D
>>        {
>>                euler = euler || new Number3D();
>>
>>         var x:Number = 0;
>>         var y:Number = 0;
>>         var c:Number = 0;
>>
>>         euler.y = -Math.asin( m.n13);
>>         c = Math.cos(ay);
>>
>>         if ( Math.abs(c) > 0.005 )
>>         {
>>             x =  m.n33/c;
>>             y = -m.n23/c;
>>
>>             euler.x = Math.atan2(y,x);
>>
>>             x = m.n11/c;
>>             y = m.n12/c;
>>
>>             euler.z = atan2(y,x);
>>         }
>>         else
>>         {
>>             euler.x = 0;
>>             x = m.n22;
>>             y = m.n21;
>>             euler.z = atan2(y,x);
>>         }
>>
>>         //  Clamp values
>>         euler.x = (euler.x > 360) ? 360:((euler.x < 0) ? 0:euler.x);
>>         euler.y = (euler.y > 360) ? 360:((euler.y < 0) ? 0:euler.y);
>>         euler.z = (euler.z > 360) ? 360:((euler.z < 0) ? 0:euler.z);
>>
>>                if(Papervision3D.useDEGREES)
>>                {
>>                        euler.x *= toDEGREES;
>>                        euler.y *= toDEGREES;
>>                        euler.z *= toDEGREES;
>>                }
>>
>>                return euler;
>>     }
>>
>>
>>
>>
>> _______________________________________________
>> Papervision3D mailing list
>> Papervision3D@...
>> http://osflash.org/mailman/listinfo/papervision3d_osflash.org
>>
>> _______________________________________________
>> Papervision3D mailing list
>> Papervision3D@...
>> http://osflash.org/mailman/listinfo/papervision3d_osflash.org
>
>
>
> --
> [ JPG ]
> _______________________________________________
> Papervision3D mailing list
> Papervision3D@...
> http://osflash.org/mailman/listinfo/papervision3d_osflash.org
>
>

_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new propslocalRotationX/ Y /Z , pitch, yaw, roll are methods again

by Jon Bradley-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


On Jul 23, 2008, at 5:13 PM, Tim Knip wrote:

Don't see a solution for this (think its just the nature of

euler-angles)... anyone?


Tricky, definitely.

The only way to really do it is to record the previous euler result and using it to choose the proper solution. 

It's pretty easy to do for a situation where you have that previous result, but when that result does not exist you're always going to get 2 valid solutions (at a minimum) and infinite solutions (cosine 0) at a maximum.

BTW, I think the code I posted is a more generic solution than what is there right now. I'd just have to go through it and test it out. It doesn't handle scale though.

cheers,

jon

_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new propslocalRotationX/ Y /Z , pitch, yaw, roll are methods again

by Jon Bradley-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

And in response to my previous post about using the previous result from a matrix to euler conversion, the following code dump might be of assistance.


_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new propslocalRotationX/ Y /Z , pitch, yaw, roll are methods again

by Tim Knip-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Here's a good reference: www.geometrictools.com/Documentation/EulerAngles.pdf

Apparenlty PV3D need 'ZYX' factoring.

Tim

2008/7/23 Jon Bradley <jbradley@...>:

>
> On Jul 23, 2008, at 5:13 PM, Tim Knip wrote:
>
> Don't see a solution for this (think its just the nature of
>
> euler-angles)... anyone?
>
> Tricky, definitely.
> The only way to really do it is to record the previous euler result and
> using it to choose the proper solution.
> It's pretty easy to do for a situation where you have that previous result,
> but when that result does not exist you're always going to get 2 valid
> solutions (at a minimum) and infinite solutions (cosine 0) at a maximum.
> BTW, I think the code I posted is a more generic solution than what is there
> right now. I'd just have to go through it and test it out. It doesn't handle
> scale though.
> cheers,
> jon
> _______________________________________________
> Papervision3D mailing list
> Papervision3D@...
> http://osflash.org/mailman/listinfo/papervision3d_osflash.org
>
>

_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new propslocalRotationX/ Y /Z , pitch, yaw, roll are methods again

by Jon Bradley-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


On Jul 23, 2008, at 5:42 PM, Tim Knip wrote:

> Here's a good reference: www.geometrictools.com/Documentation/EulerAngles.pdf
>
> Apparenlty PV3D need 'ZYX' factoring.

FYI, I love that resource. I've been using that for all sorts of good  
stuff.

cheers,

jon

_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new propslocalRotationX/ Y /Z , pitch, yaw, roll are methods again

by Tim Knip-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Still...

Lets view this conceptually:

We can conclude that factoring eulers from a matrix is tricky to say the least.

Confusion arises because pitch(), yaw() and roll() update the
rotationX / Y / Z (eulers!) values to reflect the current
rotation-matrix. Now: p/y/r work on the 'existing' rotation-matrix
(ie: what we've set before thru rotationX/Y/Z).

Now: is this conceptually sound?
I'm not sure. Mixing eulers and p/y/r seems somewhat weird.

Wouldn't it be better to simply choose a single system? As p/y/r work
in the objects 'local' frame of reference, whilst rotationX / Y / Z
work in the 'global' frame of reference.

I'm sure this is something basic in 3D, but I'm lost at the moment.

If anyone can shed any light on how other 3D-apps handle the diverse
'rotation types' (local, global, parent, etc)  i'll be *very* happy.

Tim

2008/7/24 Jon Bradley <jbradley@...>:

>
> On Jul 23, 2008, at 5:42 PM, Tim Knip wrote:
>
>> Here's a good reference: www.geometrictools.com/Documentation/EulerAngles.pdf
>>
>> Apparenlty PV3D need 'ZYX' factoring.
>
> FYI, I love that resource. I've been using that for all sorts of good
> stuff.
>
> cheers,
>
> jon
>
> _______________________________________________
> Papervision3D mailing list
> Papervision3D@...
> http://osflash.org/mailman/listinfo/papervision3d_osflash.org
>

_______________________________________________
Papervision3D mailing list
Papervision3D@...
http://osflash.org/mailman/listinfo/papervision3d_osflash.org

Re: [Breaking Change] DO3D has new propslocalRotationX/ Y /Z , pitch, yaw, roll are methods again

by barbara :: Rate this Message:

Reply to Author |