如何使用四元数围绕翻译对象的局部坐标轴旋转?

How can I rotate around a translated object's local coordinate axis using quaternions?

我有一个对象的世界矩阵 object_world,该对象已被翻译到世界 space 的某个地方。我想使用四元数围绕它的局部 x 坐标轴旋转。我该怎么做?

现在我只能像这样围绕世界 x 轴旋转:

XMVECTOR right = XMVectorSet(1.f, 0.f, 0.f, 0.f);
XMVECTOR right_rot_quat = XMQuaternionRotationAxis(right, XM_PIDIV4);
XMMATRIX rot_mat = XMMatrixRotationQuaternion(right_rot_quat);
object_world = object_world * rot_mat;

尝试颠倒矩阵乘法的顺序:

object_world = rot_mat * object_world;

矩阵变换按组合顺序(即矩阵乘法的顺序)应用于点。你说你原来的订单是围绕世界原点旋转的;这表示您的旋转应用在 object_world 变换的“世界”坐标侧。

由于您想在“对象”坐标中应用它,合乎逻辑的尝试是将它移动到 object_world 变换的“对象”一侧。