【问题标题】:Converting 3D rotation to 2D rotation将 3D 旋转转换为 2D 旋转
【发布时间】:2021-05-22 09:31:46
【问题描述】:

我一直试图找出在 Maya 中具有 XYZ 旋转值的 3D 对象的正交“顶”视图中的 2D 旋转值。也许另一种方式可以问这个问题:我想弄清楚 3D obj 方向的 2D 旋转。

这是一个简单的图像来说明我的问题:

我已经尝试过使用四元数(脚本粘贴在下面)获取对象的扭曲值等方法,我发现这篇文章:Component of a quaternion rotation around an axis

如果我将四元数的 X 和 Z 值设置为零,则此方法会工作一半。即使 obj 在 X 轴和 Y 轴上都旋转,我也可以得到正确的 2D 旋转,但是当在所有 3 轴上旋转时,结果是错误的。

我对所有四元数和向量计算都很陌生,所以我一直难以理解它。

;)

def quaternionTwist(q, axisVec):
    axisVec.normalize()

    # Get the plane the axisVec is a normal of
    orthonormal1, orthonormal2 = findOrthonormals(axisVec)

    transformed = rotateByQuaternion(orthonormal1, q)

    # Project transformed vector onto plane
    flattened = transformed - ((transformed * axisVec) * axisVec)
    flattened.normalize()

    # Get angle between original vector and projected transform to get angle around normal
    angle = math.acos(orthonormal1 * flattened)

    return math.degrees(angle)

q = getMQuaternion(obj)
# Zero out X and Y since we are only interested in Y axis.
q.x = 0
q.z = 0
up = om2.MVector.kYaxisVector
angle = quaternionTwist(q, up)

【问题讨论】:

    标签: math 3d rotation maya quaternions


    【解决方案1】:

    你能得到旋转向量的 (x,y,z) 坐标吗?一旦你让它们使用 (x,y) 值来找到与atan2(y,x) 的角度。

    【讨论】:

    • 这帮助我解决了问题。当一个简单的方向向量上的 atan 是解决方案时,我一直在想。我已将最终的工作代码作为单独的答案发布。
    【解决方案2】:

    我不熟悉您正在使用的框架,但如果它看起来确实如此,我想您就快到了。只是在调用quaternionTwist() 之前不要将四元数的 X 和 Z 分量归零。

    四元数 q1 = (x,y,z,w)q2 = (0, y, 0, w) 不代表围绕 y 轴的相同旋转,特别是因为以这种方式编写的 q2 变得未标准化,所以您真正比较的是 (x,y,z,w) 和 @987654326 @其中|q2| = sqrt(y^2 + w^2)

    【讨论】:

    • 感谢您对 X 和 Z 组件的解释。因此,我删除了 q.x = 0 和 q.z = 0,但是,当我旋转 3D obj 的 Z 旋转时,我仍然无法使 2D 旋转匹配。仅旋转 X 和 Y 即可。我假设我正确地检索了关于轴矢量(y 轴)的扭曲旋转,但我觉得我错过了另一个步骤......
    【解决方案3】:

    这是一个使用 John Alexiou's answer 的 Maya 工作代码:

    matrix = dagPath.inclusiveMatrix() #OpenMaya dagPath for an object
    axis = om2.MVector.kZaxisVector
    v = (axis * matrix).normal()
    angle = math.atan2(v.x, v.z) #2D angle on XZ plane
    

    【讨论】:

      猜你喜欢
      • 2019-07-04
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 2013-04-13
      相关资源
      最近更新 更多