I was reading a document about Additive Animation , which add some animation to another;

The code below demonstrate the algorithm:

```
glm::quat rotDiff = rotQuat2 * glm::inverse(sourceRot);
glm::vec3 posDiff = posVec2 - sourceVec;
auto rotQuat = rotQuat1* rotDiff;
auto posVec = posVec1 + posDiff;
```

rotDiff is the rotation which should be added to origin animation;

The rotDiff is calculated with `rotQuat2 * glm::inverse(sourceRot)`

, this is One line I don’t fully understand,

The third line `rotQuat = rotQuat1 * rotDiff`

is the another I don’t fully understand.

If I were write this algorithm, I would like to ` rotDiff = rotQuat2 - sourceRot`

`rotQuat = rotQuat1 + rotDiff`

, ie, use subtraction instead of multiply the inverse of sourceRot, use addition instead of multiplication, because this is intuitive.

Could you please explain the difference ?

The quaternion class is like this https://cs.stanford.edu/~acoates/quaternion.h

Source: Windows Questions C++