Swapping your Y and Z is not sufficient to change your coordinate
system. And if you need to change handedness you have to do other
things. Assuming your handedness is the same, you need to perform a
clockwise 90 degree rotation about x. (or swap y and z and negate one of
example, if your engine is the same handedness as MAX swap the y and the z and
negate the Y. This works for me as the engine that I'm working on right
now has the same handedness as MAX.
side note, are you doing the swizzle at run-time? If so why? Why not
take care of this at export time, then you never have to worry about using MAX's
coordinate system to calculate the parent matrices using your coordinate
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?