tf.SetRot bug?
#1
I'm beginning to suspect that the quaternion passed to tf.SetRot is an 'unexpected way around'?

Given 3dsmax uses a RHS with Z up, X to the left and Y out of the screen.  Then a rotation that maps the Z axis (0 0 1) to the X axis (1 0 0) I believe should be the quaternion (0 1 0 1).  But if I call tf.SetRot with that rotation it appears to result in the rotation of the Z axis (0 0 1) to the negative X axis (-1 0 0) instead.  Negating the w component to get the rotation (0 1 0 -1) corrects this.

I believe you may be using LHS code rather than RHS in your conversion from a quaternion to matrix.  When I manually convert the quaternions to matrices to set the transform matrix it works fine.  This is the RHS code I use:

static Matrix3 ToMatrix3(Quat q)
{
q = q.normalized;//If needed

Point3 row1 = new Point3(
        1.0f - 2.0f * q.y * q.y - 2.0f * q.z * q.z,
        2.0f * q.x * q.y + 2.0f * q.z * q.w,
        2.0f * q.x * q.z - 2.0f * q.y * q.w
    );

    Point3 row2 = new Point3(
        2.0f * q.x * q.y - 2.0f * q.z * q.w,
        1.0f - 2.0f * q.x * q.x - 2.0f * q.z * q.z,
        2.0f * q.y * q.z + 2.0f * q.x * q.w
    );

    Point3 row3 = new Point3(
        2.0f * q.x * q.z + 2.0f * q.y * q.w,
        2.0f * q.y * q.z - 2.0f * q.x * q.w,
        1.0f - 2.0f * q.x * q.x - 2.0f * q.y * q.y
    );

    Point3 row4 = new Point3(0, 0, 0);

    return new Matrix3(row1, row2, row3, row4);
}
  Reply


Messages In This Thread
tf.SetRot bug? - by wbk - 06-18-2023, 05:47 PM
RE: tf.SetRot bug? - by tyFlow - 06-21-2023, 05:09 PM

Forum Jump: