Calculating a child object's Position, Rotation and Scale values?

Posted by Sergio Plascencia on Game Development See other posts from Game Development or by Sergio Plascencia
Published on 2012-10-23T04:34:31Z Indexed on 2012/10/23 17:22 UTC
Read the original article Hit count: 263

Filed under:

I am making my own game editor, but have encountered the following problem:

I have two objects, A and B.

A's initial values:

Position: (3,3,3), Rotation: (45,10,0), Scale(1,2,2.5) 

B's initial values:

Position: (1,1,1), Rotation: (10,34,18), Scale(1.5,2,1)

If I now make B a child of A, I need to re-calculate the B's Position, Rotation and Scale relative to A such that it maintains its current position, rotation and scale in world coordinates. So B's position would now be (-2, -2, -2) since now A is its center and (-2, -2, -2) will keep B in the same position.

I think I got the Position and scale figured out, but not rotation.

So I opened Unity and ran the same example and I noticed that when making a child object, the child object did not move at all. but had its Position, Rotation and Scale values changed relative to the parent.

For example:

Unity (Parent Object "A"):

Position: (0,0,0)
Rotation: (45,10,0)
Scale: (1,1,1)

Unity (Child Object "B"):

Position: (0,0,0)
Rotation: (0,0,0)
Scale: (1,1,1)

When B becomes a child of A, it's rotation values become:

X: -44.13605
Y: -14.00195
Z: 9.851074  

If I plug the same rotation values into the B object in my editor, the object does not move at all.

How did Unity arrive at those rotation values for the child? What are the calculations?

If you can put all the equations for the Position, Rotation or Scale then I can double check I am doing it correctly but the Rotation is what I really need.

© Game Development or respective owner

Related posts about 3d