【问题标题】:How can I rotate around a translated object's local coordinate axis using quaternions?如何使用四元数围绕平移对象的局部坐标轴旋转?
【发布时间】:2020-07-01 19:03:44
【问题描述】:

我有一个对象的世界矩阵object_world,该对象已在世界空间的某个地方进行了翻译。我想使用四元数围绕它的局部 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;

【问题讨论】:

    标签: graphics directx linear-algebra


    【解决方案1】:

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

    object_world = rot_mat * object_world;
    

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

    由于您想将其应用于“对象”坐标,因此尝试将其移至object_world 变换的“对象”侧。

    【讨论】:

    • 成功了,但我很困惑。在 directx 的其他任何地方,我都会做 object_matrix * modifier_matrix。知道为什么会这样吗?在我展示的代码 sn-p 之前我没有做任何转置。
    • 我在答案中添加了解释。很难更具体,因为您没有提供任何上下文 - 但我会说您需要矩阵的顺序取决于您想对它们做什么。也许您正在尝试做一些与其他代码不同的事情?
    猜你喜欢
    • 2018-05-20
    • 2014-04-18
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2014-11-29
    • 2019-03-21
    • 1970-01-01
    • 2018-03-26
    相关资源
    最近更新 更多