While I’m on the topic, does anyone know a *good* introductory text on joint chains and kinematics?


Depends what level of introductory but somewhere on the reading list there could be:


- Robot Dynamic Algorithms, Featherstone, KAP. [Robotics]


- Dynamics of Multibody Systems, 2nd ed, Cambridge. [Robotics]


As book texts.


Then there are a host of papers, usually talking about some specific innovation but with often a fair amount of basics alongside. One example being,


- Linear Time Dynamics using Lagrange Multipliers, David Barraff 1996, (Siggraph - I think).


Which has a great discussion of solution methods and in particular - for the numerical coder about town - a very hands on treatment of what these problems look like once rolled into matrix form.


Hope none of these are the text you had to get your phd proff on!








-----Original Message-----
From: Tyson Jensen [mailto:twjensen@sammystudios.com]
Sent: 05 April 2004 23:09
To: gdalgorithms-list@lists.sourceforge.net
Subject: RE: [Algorithms] RE: Using animation keys from 3DSMax

What?  This just doesn’t make any sense.  Quaternions don’t intrinsically care what way “z” points.  Animated models do not have an “up” built in.  “Up” is whatever you decide it is in your engine.  “z” points in whatever way makes sense locally for each bone.  I’d suggest starting with the basics.  Read an introductory tutorial on joint chains, I’d recommend looking at Robotics texts (because the robotics folks are very rigorous in their coordinate system definitions and explanations).  I’d tell you the ISBN of my book, but my book isn’t very good (i.e., it required a PhD professor to explain it to me).  Each joint has its own coordinate system.  You shouldn’t need to care which way “z” points in each because your debug drawing utilities should show you what each coordinate system on each joint is doing.  If you don’t have the aforementioned debug drawing utils, start there.


Are you using an off the shelf or otherwise already proven in-game animation technology?  Or are you trying to write some?


While I’m on the topic, does anyone know a *good* introductory text on joint chains and kinematics?


-----Original Message-----
From: gdalgorithms-list-admin@lists.sourceforge.net [mailto:gdalgorithms-list-admin@lists.sourceforge.net] On Behalf Of Ryan Greene
Sent: Monday, April 05, 2004 2:11 PM
To: gdalgorithms-list@lists.sourceforge.net
Subject: [Algorithms] RE: Using animation keys from 3DSMax


I'm trying to do everything in world-space. I think I have the correct approach, however my issue is that all my quats in my animations are built by max and are stored as if we were still in max -- that is to say z is up. As a result, any quat that I come up with for my IK will be in the incorrect space (y is up). I'm obviously missing something very basic, or not communicating something very basic. The responses that I've gotten from here so far largely have been something to the effect of how to transform points or the whole character, however that isn't my issue. I need to figure out how to transform the per-bone rotation. Since all bones have their rotations stored in respect to their parent bone, it is insufficent to simply rotate the root bone to get the character pointed the right way -- data wise all the rotations are still done considering that z is up. Therefore, any rotation that I come up with in my IK solvers will incorrect if I try to apply it to a bone in the skeleton. What it seems like I need is a way to convert a quat from max into a quat that I am able to work with in my engine. Does this make sense? I'm obviously missing something simple...






Swapping columns or any other such procedure is likely to lead into
difficult to find bugs.  What you really want to do is define a
coordinate transform (ie, a matrix) that transforms the Max coordinate
system into your own.  This transform should be applied to the root
joint of the character.  At that point, all child joints should come out
in the correct system.  Switching handedness can also be accomplished
with a matrix, if required.


Transforming any joint into world space (essential if you don't want to
go insane trying to debug CCD) is accomplished by simply applying the
joint chain as you would to pose the character.  Transforming back into
joint space requires building that world space transform as its own
matrix and inverting it.  Transforming a chain back into local space is
a bit tricky.  I'm not going to try to provide a solution off the top of
my head.  Suffice it to say, it is worth looking up to make sure you
have it right.  To do IK, transform the interesting bones to world
space, figure out the solution and then carefully get those transforms
back into joint space.  The main reason for working in world space is
then you can use your debug draw utilities to draw everything you are
doing.  (If you have sufficiently clever debug drawing code, you can
work in local space and let the debug drawing code transform to world


-----Original Message-----
From: gdalgorithms-list-admin@li...
[mailto:gdalgorithms-list-admin@li...] On Behalf Of Ryan
Sent: Monday, March 29, 2004 9:53 PM
To: gdalgorithms-list@li...
Subject: [Algorithms] Using animation keys from 3DSMax


Apologies if this isn't the right place for this, I've tried a few
online forums, including Discreet's Sparks website without much
response. Here's my issue.


For the rotations on my animation keys I'm using the quats defined by
Max. The only issue that I had to overcome with that was that my engine
understands y to be up, whereas Max understands z to be up. This was
easily solved by swapping columns 2 & 3 when I converted animation keys
into matrices before sending to the skinning routine (thereby swapping
the y/z axes -- effectively the animation engine works in "Max's


Now that I'm trying to do some simple IK stuff, I'm having problems.
Since all of the rotation keys that I use are considered to be in your
parent's bone space, I need to calculate the rotation for a bone in
Max's z-up quat space. I'm trying to do a simple CCD system, and I
thought it would be sufficient to simply swizzle y/z of the axis of
rotation when I build my quats, but that doesn't seem to be working --
I'm getting results that look just plain wrong.


Obviously I'm missing something obvious, can somebody help me out here?



Ryan Greene


The information contained in this email and its attachments is
confidential.  It is intended only for the named addressees
and may not be disclosed to anyone else without consent from
Blue 52 Games Limited. Blue 52 give no warranty that this email
message (including any attachments to it) is free of any virus
or other harmful matter and accepts no responsibility for any
loss or damage resulting from the recipient receiving, opening
 or using it.