一半君的总结纸

听话只听一半君

#17 为什么我的 “临时” 约束对目标物体没有效果?

假设你的场景里有两个物体. 你想把其中一个物体吸附到另一个物体上, 简单的说就像想让他们重合,完全对齐, 然后再对目标物体进行其他处理. 这里显然建立几个临时的约束就可以做到这一点了.

// 创建两个物体用于演示
string $locatorA[] = `spaceLocator -name "theSource"`;
string $locator = $locatorA[0];

string $cubeA[] = `polyCube -w 1 -h 2 -d 3 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -tx 1 -name "theTarget"`;
string $cube = $cubeA[0];

// 把这个 locator 随便移动旋转一下
move 1.23 2.5 3.14 $locator;
rotate 45 15 3.33 $locator;

// 现在我们把cube吸附到locator上
string $myPointConstraintA[] = `pointConstraint $locator $cube`;
string $myOrientConstraintA[] = `orientConstraint $locator $cube`;

// 我只是希望他们完全重合.. 所以现在我们可以把constraint nodes删掉了
delete $myPointConstraintA $myOrientConstraintA

你在运行完上面这几段之后,你会发现… 什么都没有发生. cube还是呆在原点. 为什么?(lz在2014里试了一下,貌似现在没有这个问题了)

原因是Maya”觉得”场景中的物体没有变化(在创建和删除约束的操作之间),所以没有刷新显示,所以cube看起来没有移动. 如果想强制Maya进行约束的计算,只需要在约束被删除之前运行 ‘refresh’ command :

// 现在我们把 cube 吸附到 locator 上
string $myPointConstraintA[] = `pointConstraint $locator $cube`;
string $myOrientConstraintA[] = `orientConstraint $locator $cube`;

// 强制 Maya 刷新显示
refresh;

// 我只是希望他们完全重合.. 所以现在我们可以把constraint nodes删掉了
delete $myPointConstraint $myOrientConstraint

这次有效果了,但说实话,这种方式不是推荐的比较好的对齐物体的方式.

除了上面这种间接利用约束来对齐的方法,我们还可以用 ‘xform’ command 来把一个物体的 transformation直接复制给另一个物体:

// 创建两个物体用于演示
string $locatorA[] = `spaceLocator -name "theSource"`;
string $locator = $locatorA[0];

string $cubeA[] = `polyCube -w 1 -h 2 -d 3 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -tx 1 -name "theTarget"`;
string $cube = $cubeA[0];

// 把这个 locator 随便移动旋转一下
move 1.23 2.5 3.14 $locator;
rotate 45 15 3.33 $locator;

// 得到locator在world space下的translation 和 rotation
float $trans[] = `xform -worldSpace -q -translation $locator`;
float $rot[] = `xform -worldSpace -q -rotation $locator`;

// 把得到的transformation信息赋予cube
xform -worldSpace -translation $trans[0] $trans[1] $trans[2] $cube;
xform -worldSpace -rotation $rot[0] $rot[1] $rot[2] $cube;
Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: