【发布时间】:2013-08-28 05:39:23
【问题描述】:
编辑:我认为需要进一步澄清我正在尝试做的事情:
我在 Maya 中有一个前臂装备设置,使用线变形器来控制扭曲。线变形器位于 skinCluster 的顶部。腕关节有一个额外的角度属性,称为“扭曲”,它链接到与腕关节位于同一位置但保持肘关节方向的父关节。 twist 属性也连接到导线的 dropoffLocatorTwist[1] 属性。下降到 100 度时,金属丝将前臂扭曲到无穷大,关节仍然代表手腕和手的“姿势”。为了补偿 skinCluster 的过度旋转,我添加了一个重复的手腕层次结构并将扭曲连接到它的旋转 x。将复制层次结构的 worldInverseMatrix 连接到 skinClusters 的 bindPreMatrix 属性可以有效地否定腕/手关节围绕肘骨轴的任何旋转。
现在我想进一步推动它。为了减少动画师的麻烦,我想删除额外的扭曲属性,并在关节本身的所有三个欧拉旋转值之间进行插值以生成扭曲值。假设动画师直接在通道框中设置值或简单地相对旋转手腕,这些值很容易超过 1000pi(以度为单位)。如果多边形网格足够密集,线变形器可以轻松地沿曲线执行扭曲到该量级,而不会产生任何伪影。问题是如何对欧拉旋转进行插值以获得准确表示姿势和扭曲的单个角度值。我已经尝试通过将每个欧拉值乘以矩阵中伴随行向量的欧拉旋转的切线的点积来用曲线切线和腕矩阵进行插值,但这并不完全有效:
twist=rx*(矩阵第1行切点)+ry*(矩阵第2行切点)+rz*(矩阵第3行切点)
特别是,它不喜欢绕 Y 轴旋转。谁能告诉我为什么会这样以及如何正确地将欧拉旋转分解为扭曲角而不将扭曲限制为 -pi pi?
以前问过:
我正在使用 Maya 线(曲线)变形器,并希望根据关节的欧拉旋转找到沿线切线的扭曲值。 Maya 中的关节实际上是变换矩阵,但其组合方式是用户可以输入可能的最大浮点值作为任何欧拉旋转分量的度数。我想取那些欧拉值(xyz),并以这样的方式组合它们,结果是轴角旋转,其中轴是父矩阵的第一行(或线的切线),角度是围绕该轴的未绑定扭曲值,允许对网格进行无限制的无翻转扭曲。问题是我找不到插值 x、y 和 z 值的方法,因此得到的角度仅代表扭曲而没有别的。更简单地说,我想找到欧拉旋转的“x”旋转值,其中 x 轴已旋转,因此现在由“y”、“z”或所有三个组件之间的某个值表示.有什么方法可以做到这一点,而不会将 x 的值丢失到一个较小但等效的值(例如 270 == 90,但我们想要 270)?
【问题讨论】:
-
问题不是关节引起的,而是集群引起的。簇只是在矢量移动时变换点。旋转 360 度后的向量是相同的。如果您之间有足够的关节,它看起来仍然正确。但是如果你想每个关节旋转超过 180 度,那么集群就无法处理这个问题。这可以用其他方法解决
标签: rotation axis maya euler-angles twist