一半君的总结纸

听话只听一半君

#18 如何得到在指定时间 motion curve 的值?

如果你想查找在某一时刻 ‘.uValue’ 的值:

// 创建一条 curve:

string $curve = `curve -d 3 -p -7.425213 12.202613 1.439619
  -p -7.750539 10.676282 8.273118 -p -8.401192 7.62362 21.940116
  -p 25.720537 -16.234996 -7.200271 -p -12.58179 -3.496693 -16.762239
  -p -5.70914 0.8393886 -24.073161 -p -2.272816 3.007429 -27.728622
  -k 0 -k 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 4 -k 4`;

// 和一个 sphere:

string $sphereA[] = `polySphere -r 1 -sx 16 -sy 8 -ax 0 1 0 -tx 1 -ch 1`;
string $sphere = $sphereA[0];

// 把 sphere 和 curve 建一个 motionPath :

string $motionPath = `pathAnimation -fractionMode true -follow false
  -startTimeU 1 -endTimeU 30 -c $curve $sphere`;

// 得到 frame 12 的motionPath的.uValue :

getAttr -time 12 ( $motionPath + ".uValue" );
// Result: 0.3793103 //

** 警告! ‘.uValue’ attribute 不会根据场景的 Working Units Preference自动匹配! 如果你的 Unit Preference 设置不是 “centimeter” ,那你这样求得的值可能会差 10^n. 比如, 如果你的 Working Units 设置是 “meter” ,那你就得自己把这个值乘以100才能得到何时的结果. A|w 已经把这个bug记录为Case ID #35184.
(lz在2012里试了一下,依然是这样的,也许这不是bug而是特意设计成如此的?)

如果你知道 curve 的名字,但是却不知道和他相关的 motionPath的名字,你可以用我的 ‘getMotionPath()’ function, 他在 Highend3D的MEL Scripts分类里的”Animation”.(这网站早已变成creativecrash了,lz没有去找他说的这个script还有没有. ps: gogole了一下似乎还有的,在这里

如果你想得到motion path上被key过的值 …

// 在frame 6 给motionPath加一个keyframe:

currentTime 6;
// 假设 Working Unit == "centimeter"
setKeyframe -v 0.4 -at uValue $motionPath;

// 现在从motionPath得到motion key信息 :

keyframe -q -timeChange -valueChange $motionPath;
// Result: 1 0 6 0.4 30 1.0 //

这会返回一个浮点类型的数组,其中的元素是这样的数字对,{ timeChange, valueChange }. 如下所示:

  At frame 1, uValue == 0.0 (start of curve).
  At frame 6, uValue == 0.4.
  At frame 30, uValue == 1.0 (end of curve).
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 博主赞过: