如何使用四元数围绕翻译对象的局部坐标轴旋转?
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
变换的“对象”一侧。
我有一个对象的世界矩阵 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
变换的“对象”一侧。