grantimus

04-05-2005, 09:44 PM

I'm writting a script where I'm trying to align an object to a face normal. I have the face normal, but I don't know how to translate the face normal into regular eular x y z rotations. Anyone have any ideas?

View Full Version : vector to euler rotation

grantimus 04-05-2005, 09:44 PM I'm writting a script where I'm trying to align an object to a face normal. I have the face normal, but I don't know how to translate the face normal into regular eular x y z rotations. Anyone have any ideas? |

twidup

04-06-2005, 02:59 AM

simple way :

create 2 locators

leave one at 0 0 0, move the other to the vector ....if the vec is <<3,5,5>> you move it there

aimconstraint the one at origin to the other, thats you rotations. copy those into the objects

create 2 locators

leave one at 0 0 0, move the other to the vector ....if the vec is <<3,5,5>> you move it there

aimconstraint the one at origin to the other, thats you rotations. copy those into the objects

GennadiyKorol

04-06-2005, 03:30 AM

The aim constraint way is sufficient, but in case if you want more "clean" way:

Project your vector on each plane ( on XY : Z = 0, on YZ : X = 0 etc ) then for every plane calculate the angle from start angle axis and it's projected vector. You can do that using angle command or some linear algebra equations.

Project your vector on each plane ( on XY : Z = 0, on YZ : X = 0 etc ) then for every plane calculate the angle from start angle axis and it's projected vector. You can do that using angle command or some linear algebra equations.

dmaas

06-05-2005, 07:46 PM

Be aware your problem is underconstrained - there is more than one rotation that will align an object along a normal (since it could spin around the normal at any angle).

I would build a 3x3 matrix that corresponds to the rotation you want, then convert to Euler angles. Each row of the matrix will be the direction you want the object's X, Y, and Z axis to point after the rotation.

Assuming you want the object's Z axis along your face normal, just use the face normal's coordinates as the third row of the matrix. To get the other two rows you need the X and Y axes. I'd construct these by first arbitrarily picking the Y axis as (0,1,0), then cross Y and Z to get your X axis, and finally cross X and Z to "fix up" the Y axis so that it's orthogonal to the others. Normalize all these vectors, and you've got your matrix. Then use the standard matrix-to-euler conversion which goes like this:

heading = atan2(m[2][0], m[2][2]);

pitch = asin(-m[2][1]);

bank = atan2(m[0][1], m[1][1]);

(where m[x][y] is the 3-by-3 rotation matrix with rows as the orthonormal axes you want to object to end up with)

I would build a 3x3 matrix that corresponds to the rotation you want, then convert to Euler angles. Each row of the matrix will be the direction you want the object's X, Y, and Z axis to point after the rotation.

Assuming you want the object's Z axis along your face normal, just use the face normal's coordinates as the third row of the matrix. To get the other two rows you need the X and Y axes. I'd construct these by first arbitrarily picking the Y axis as (0,1,0), then cross Y and Z to get your X axis, and finally cross X and Z to "fix up" the Y axis so that it's orthogonal to the others. Normalize all these vectors, and you've got your matrix. Then use the standard matrix-to-euler conversion which goes like this:

heading = atan2(m[2][0], m[2][2]);

pitch = asin(-m[2][1]);

bank = atan2(m[0][1], m[1][1]);

(where m[x][y] is the 3-by-3 rotation matrix with rows as the orthonormal axes you want to object to end up with)

chalbers

06-06-2005, 06:23 AM

And with all of that ... never forget about your rotation order !

Hey ! Is that you Dan ?? :-)

Frank

Hey ! Is that you Dan ?? :-)

Frank

dmaas

06-19-2005, 10:11 PM

Yep it's me! How is life at Pixar? I'm currently very busy on this Mars IMAX film... should be out early next year.

chalbers

06-27-2005, 07:07 AM

Yep it's me! How is life at Pixar? I'm currently very busy on this Mars IMAX film... should be out early next year.

Cool ! I see you found your "niche" ! :-)

Everything is great at Pixar. Lovin the work ! :)

Great hearing from you !

Frank

Cool ! I see you found your "niche" ! :-)

Everything is great at Pixar. Lovin the work ! :)

Great hearing from you !

Frank

CGTalk Moderation

06-27-2005, 07:07 AM

This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.

vBulletin v3.0.5, Copyright ©2000-2014, Jelsoft Enterprises Ltd.