I just posted
build 1194 that uses trackball controls for rotating bones. There are several issues that have cropped up in the interaction between using a trackball and joint limits.
First some background:Most people think of rotations as independently applied in the X, Y and Z axes, known as
Euler angles. However this is not the case when using a trackball.
Anim8or's first rotates a bone in the X-axis (pitch), then the Z-axis (roll) relative to the bone's local coordinate system
after the X rotation. Finally the Y-axis (yaw) is applied. Since the X rotation is made first, the "X-axis" is not changed by subsequent Z and Y rotations. In fact it is possible to align two axes, resulting in the well-known state of "Gimbal Lock". If you enable "Show Axis" (hot key X) in the sequence editor you can see this happening. For this, and other reasons, Anim8or uses
quaternions, which do not have this problem, to interpolate rotation.
When displaying rotations Anim8or converts the quaternion into separate X, Y and Z rotations. This is ambiguous at best for several reasons. First there are 6 different orders in which the rotations can be applied. Second even for a given order, there can be multiple individual rotations that produce the same orientation.
The problems:1) How should the trackball be oriented? The 3 axes of a trackball are always at right angles while the three axes of the Euler representation are not. I have chosen to use the final orientation, that is
after the rotations have been applied. Thus the Y axis of the trackball will always be aligned with the Euler Y axis (since it is the final rotation applied as view by Euler). But the X and X axes will not always be aligned with the Euler X and Z axes.
So rotating a trackball around the X or Z axis will generally change the values of multiple Euler angles.I don't believe that this will be a problem if you simply work on the screen and ignore the numeric values for X, Y and Z. They aren't that useful anyway. Let me know what you think after you've used the trackball for a while.
2) Joint limits: If you are using joint limits, or have one or more axes locked, you might see some strange behavior. I have been able to limit the weirdness when only one axis is free and will be improving it further in the near future, but I don't know exactly what to do for 2 and 3 free axes.
Maybe joint limits aren't such a good idea...