0
\$\begingroup\$

Going off this link about the MD5Mesh file format, I see a bone is represented as:

"[boneName]"   [parentIndex] ( [xPos] [yPos] [zPos] ) ( [xOrient] [yOrient] [zOrient] )

Since xOrient,yOrient,zOrient make up an orientation quaternion and not a vector, I don't know how to illustrate them. I'm still trying to get a grasp of bones and mesh manipulation.

How is the following represented in file?:

  • Two bones of a simple stick figure (origin as "a" & left(or right) leg as "b")
  • groin of model is at origin with the head in the positive y-axis direction
  • arm wing span goes across x-axis
  • leg is facing down and 2 unit out on the x-axis from the origin
\$\endgroup\$
2
\$\begingroup\$

The three imaginary components of the quaternion form the axis of rotation, and the real component

wOrient = sqrt(1f - xOrient*xOrient - yOrient*yOrient - zOrient*zOrient)

is the cosine of half the angle of rotation about that axis. So you can translate this into an angle-axis form if you find that easier to reason about:

axis = normalize(xOrient, yOrient, zOrient)
angle = acos(wOrient) * 2.0

Here are some particular Quaternion values you might see:

 x     y     z     w     Interpretation

 0     0     0     1     no rotation

0.26   0     0    0.97    30 degree rotation on x+ axis
0.50   0     0    0.87    60 degree rotation on x+ axis    
0.71   0     0    0.71    90 degree rotation on x+ axis
0.87   0     0    0.50   120 degree rotation on x+ axis
0.97   0     0    0.26   150 degree rotation on x+ axis     

 1     0     0     0     180 degree rotation on x+ axis
 0     1     0     0     180 degree rotation on y+ axis
 0     0     1     0     180 degree rotation on z+ axis

-1     0     0     0     180 degree rotation on x- axis (or -180 on x+ axis)

0.71  0.71   0     0     180 degree rotation about the line y = x
\$\endgroup\$
  • \$\begingroup\$ So the thing that confuses me is it represents a rotation and looking at a character model I see: "origin" -1 ( -0.000000 0.001643 -0.000604 ) ( -0.707107 -0.000242 -0.707107 ) // . Being the starting bone, how do I get it vector? Is there an assumed starting vector that the initial quaternion changes? \$\endgroup\$ – Mr.UNOwen Mar 6 '18 at 14:04
  • \$\begingroup\$ Although we often draw bones with arrows, a bone's orientation is more than just a vector: it's a basis, consisting of a "longitudinal/forward/along" direction and a perpendicular "ventral/dorsal" direction, and a right-left direction perpendicular to the other two. The quaternion is transforming this basis from the initial identity orientation (local x+ pointing along world x+, local y+ pointing along world y+, local z+ pointing along world z+). The details for what that means for your character depends on the coordinate system conventions you're using. \$\endgroup\$ – DMGregory Mar 6 '18 at 18:00
  • \$\begingroup\$ I'm getting a better idea, but I think this is just leading to a bigger question I'll need ask in another thread. The challenge I'm having is understanding how to illustrate a skeleton in it's initial state. \$\endgroup\$ – Mr.UNOwen Mar 7 '18 at 4:15
  • \$\begingroup\$ hopefully my question: [Are there “default” vectors when dealing with bones represented by quaternion orientation] is a more refined question to help me understand the MD5 mesh format. Hopefully you can help me there. \$\endgroup\$ – Mr.UNOwen Mar 7 '18 at 5:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.