I found these two methods in Object3D.js, and they are identical, which is confusing to me. Shouldn’t the rotateOnWorldAxis have a coordinate system conversion to axis? Why are they the same? Thank you all.
They are actually not. Check out the difference between
Okay, thank you very much. I didn’t see this small difference because I was careless. I will check it out.
After thinking about it, I finally figured out the difference between
Quaterion.premultiply(). They rotate the object in a different order.
Suppose the object itself has a quaternion q0, and
Quaterion.multiply() rotates q1 on the object, then the rotation of the object ends up as q0 * q1.
Quaterion.premultiply() acts on the object in rotation order q1 * q0, i.e. the object is rotated in world space first, and then in local space. The result is the same as if the object kept q0 and rotated q1 directly in world space.