【问题标题】:Apply transformations on matrix instead of rotation and translation在矩阵上应用变换而不是旋转和平移
【发布时间】:2014-10-13 12:43:18
【问题描述】:

我有两个实体 A 和 B,它们都有一个旋转四元数和一个平移向量。我将实体 A 转换为实体 B,如下所示:

A.rotation *= B.rotation
A.translation *= inverse(B.rotation)
A.translation += B.translation

我不想将这些转换应用于实体的平移和旋转组件,而是从这些组件创建矩阵并将转换应用于生成的矩阵:

A.matrix = mat4(A.rotation) * mat4(A.position)
B.matrix = mat4(B.rotation) * mat4(B.position)

A.matrix *= ???

这可能吗?我问是因为我想隐藏平移和旋转组件,并且只允许访问组合的平移-旋转矩阵。

谢谢!

【问题讨论】:

    标签: math matrix vector quaternions


    【解决方案1】:

    如果您的变换是一系列旋转,则可以,因为您可以将它们相乘,然后应用该矩阵。

    您可以将您的转换视为一系列翻译,因为您可以将它们加在一起并添加结果。

    你能做的最好的就是:

    A = R*B + T
    

    代数清楚地表明了这一点:

    A = R(1)*R(2)*...*R(n)*B + (T(1)+T(2)+....+T(m))
    

    【讨论】:

    • R 是 A.rotation,T 是 A.translation?
    • 是的,我认为这很明显。只需要小心并知道代数是如何工作的。如果 A = R(1)*(R(2)*B+T(1)) = R(1)*R(2)*B + R(1)*T(1),我的表达式不正确。小心。
    猜你喜欢
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多