Home Game Development unity – Compute the distinction between two quaternions and iterate with the distinction

unity – Compute the distinction between two quaternions and iterate with the distinction

0
unity – Compute the distinction between two quaternions and iterate with the distinction

[ad_1]

Quaternion distinction:

 C = Quaternion.Inverse(B) * A;

Quaternion division by a scalar:

 C_fraction = Quaternion.Slerp(Quaternion.id, C, 1f/steps);

Quaternion increment:

 for (int i = 0; i < steps; i++) {
     B = B * C_fraction;
 }

Though a extra idiomatic technique to write this is able to be…

 for (int i = 0; i < steps; i++) {
     float progress = (i + 1) / (float)steps;
     interpolated = Quaternion.Slerp(begin, finish, progress);
 }

If you do not want each step to be precisely the identical, Lerp additionally works instead of Slerp, however is a bit cheaper. It takes smaller steps firstly and finish of the interpolation and larger steps within the center.

Note that order issues, and expresses sequence of rotations, or which rotations must be carried out relative to the father or mother/world axes (phrases on the left) or utilizing the article’s native axes (phrases on the precise proper).

Writing C as I did above, it is a native area rotation that must be multiplied on the precise to have its meant impact: B * C == B * Inverse(B) * A == A.

Flipping the order of multiplication to C * B is not going to, usually, give me A. To get a distinction for left-multiplication like that (making use of C in father or mother/world area), I’d must outline C with A on the left too: C = A * Inverse(B)

[ad_2]

LEAVE A REPLY

Please enter your comment!
Please enter your name here