Forum: Poser Technical


Subject: Relationship of prop translations when parented to body part and universe...

kuroyume0161 opened this issue on Oct 01, 2004 ยท 10 posts


kuroyume0161 posted Fri, 01 October 2004 at 12:16 AM

I can't seem to find a direct relation here. Rotations are easy it seems - if the rotations wrt the universe are (0,0,0), then the rotations wrt the parent body part are related to the parent's rotations wrt the universe (uncertain whether body part JP 'orientation' comes into play as well). Translations of the parented prop, on the other hand, make no sense whatsoever. I don't see a relationship to the parent body part, the figure origin, or the universe. Wrt the universe, the prop is at (0,0,0), but it is also (0,0,0) wrt the parent when parented. But then the values change if you unparent it back to the universe - mind numbingly ridiculous. Seems that Poser is doing a lot more than just making adjustments relative to the figure or parent body part. Any information on this? Thanks, Kuroyume

C makes it easy to shoot yourself in the foot. C++ makes it harder, but when you do, you blow your whole leg off.

 -- Bjarne Stroustrup

Contact Me | Kuroyume's DevelopmentZone


ynsaen posted Fri, 01 October 2004 at 12:38 AM

I'm sorta curious if anyone's done anything ont his myself, so I'm gonna put my bookmark in here, lol

thou and I, my friend, can, in the most flunkey world, make, each of us, one non-flunkey, one hero, if we like: that will be two heroes to begin with. (Carlyle)


Viper1 posted Fri, 01 October 2004 at 7:27 AM

Please pardon my ignorance, what's a "wrt" ?


kuroyume0161 posted Fri, 01 October 2004 at 9:08 AM

wrt: with respect to

C makes it easy to shoot yourself in the foot. C++ makes it harder, but when you do, you blow your whole leg off.

 -- Bjarne Stroustrup

Contact Me | Kuroyume's DevelopmentZone


lesbentley posted Sat, 02 October 2004 at 7:10 AM

As far as I know this is how it works. The direction of translation for a parented prop is determined by the orientation of the origin of the parent body part. When the prop is unparented Poser will change the values for the translations to reflect the props current position with respect to UNIVERSE origin.


kuroyume0161 posted Sat, 02 October 2004 at 9:02 AM

That confirms my suspicion after some experimentation that it was related to the 'orientation' of the body part coordinate system. It is odd since almost every other value (for JPs, origins, etc.) is specified in the UNIVERSE's (world) coordinate system. But the values when parented appear to be specified in the world coordinate system but oriented with the parent body part (i.e.: its rotations). Then, when unparented, these values still reflect that? Time for confirmation... :)

C makes it easy to shoot yourself in the foot. C++ makes it harder, but when you do, you blow your whole leg off.

 -- Bjarne Stroustrup

Contact Me | Kuroyume's DevelopmentZone


lesbentley posted Sat, 02 October 2004 at 2:17 PM

"It is odd since almost every other value (for JPs, origins, etc.) is specified in the UNIVERSE's (world) coordinate system." Not really. An object will load in whatever position it was saved in, this is determined relitive to the universe. However added to this default position will be any translations of the parenting hierachy it is attached to. So a chest will have its default position (which is defined in the object mesh), plus any translation of the chest, plus any translation of the abdomen, plus any translation of the hip, plus any translation of the BODY. We should distinguish between the default position of an object which is a function of the obj file, and any translations which which are a function of the cr2. It seems to me that the Center Point of an of an actor or prop is NOT specified in the UNIVERSE's (world) coordinate system. Move a figure's BODY and the values for it's JPs don't change, therefore they are not relitive to the universe.


kuroyume0161 posted Sat, 02 October 2004 at 4:36 PM

No, I think that you are partially incorrect here.

Example: A figure and prop are loaded. The figure is in its default pose. The prop is moved to the lForeArm and parented to it.

The prop's translation values change. But, here's the kicker, there are no translations on the entire chain of body parts up to lForeArm. This was checked on the saved CR2 file. ALL translations from BODY -> lForeArm are (0,0,0). Yet there are slight, but significant, differences between the parented and unparented prop:

Parented: 0.074336, 0.150754, -0.0281046
Unparented: 0.0683277, 0.122171, -0.0129852

Since there are no scales on any body part and only two 'memorized' rotations that could influence it (lShldr and lForeArm), this discrepancy MUST be due to rotations.

That means that the chain of body parts' entire transformation matrices are being applied to the parented part WRT TO THE WORLD SYSTEM. Notice that these values do not change enough to show a translation from the World Origin to the lForeArm (esp. the Y value). They only show a delta from the World Origin as compared to the transformation deltas of the body part chain.

Do you see what I'm getting at here? This is an odd approach. Make parented objects values still relative to the World system or local to the parent system, but not some hybrid.

Forgot to mention: And, yes indeed, if I remove those two 'memorized' rotations, the values do not change at all.

Message edited on: 10/02/2004 16:41

C makes it easy to shoot yourself in the foot. C++ makes it harder, but when you do, you blow your whole leg off.

 -- Bjarne Stroustrup

Contact Me | Kuroyume's DevelopmentZone


lesbentley posted Sat, 02 October 2004 at 8:14 PM

I think what is happening is this. When you parent a prop the actial cumulative (from hierarchy chain) translations (shifts in position) of the parent actor are added to to the current translation channel/dial values of the prop. But it's the actual (Poser space) translations not just the values on the Tran dials, a rotation of the BODY or hip will make an ACTUAL translation (shift in Poser space) of a hand, even if in the hierarchy chain all the translation channels are zero. A demonstration may help to clarify things. Try this experiment: Convert a Poser box prop to a figure in the Hierachy Editor. Open the cr2 in a text editor, edit the "origin" lines in both the BODY and box_1 actors, setting them to "0 0 0". Do a global Search and Replace of the string "box_1" with "box-A_1", and resave the file. Load the figure in Poser, xTran the BODY to "0.100", also xTran box-A_1 to "0.100". Load a box prop (don't move it), parent it to the "box-A_1". The xTran of the box will be "0.200", the cumulative translation of the BODY and box-A_1. Verify this by selecting the box prop, using Edit > Copy, and pasting the results into a text editor. Now unparent the box (it's translations will return to zero). Y rotate the BODY of the figure 180, the box-A_1 actor now lines up with box prop, because of the rotation of the BODY it has an actual Poser space translation of zero. Parent the box prop to box-A_1 again, verify its translation by cuting and pasting into a text editor, it's translations will be zero, the same as the actual poser space translation of box-A_1. Note that whilst all translations in Poser are ultimatly calculated against the UNIVERSE origin, the values that are ADDED to its translation channels when the prop is parented are relitive to the position of the parent actor. Note that, somewhat confusingly the word "translation" is being used in two diffrent sences above, to refer to values in translation channels, and to refer to actual movements through Poser space. I see I did not make this distinction clear in post #7, in which I am refering to translations in Poser space, not translation channel values. I hope it is clear in this post which is which.


lesbentley posted Sat, 02 October 2004 at 8:35 PM

Attached above is the text of the figure I used in the experiment discribed in post #9. The origins of both its actors are set to zero so that it is easier to see the effects of parenting a prop to it.