トランスフォームについて


オブジェクトスナップは
ターゲットオブジェクトに対して、トランスフォームをビシっと合わせてくれる
Maxユーザーおなじみの位置合わせ機能だ

Mayaにはなかったので
MELを使った、オブジェクトスナップを作ったのサ
イロイロ機能しない部分があったので
調整調整

総括すると

moveに関しては
まず、相手のオブジェクトの位置情報を
そのまま植える訳にはいかないのだ

理由は、アニメーションに使うオブジェクトの位置ピボットは
RotationPivotで、ほかのハンドラじゃない

なので

相手のオブジェクト情報と、今の自分の位置情報を取り出す

次に、その差分をだす

差分だけmoveで相対移動してやる

これで、ピボットがどうなっててもびしっと位置を合わせられる
回収する位置情報は、objectCenterでローカル値を取得
相手 – 自分 = 移動値
になる

回転は、これまたややこしいのだけど
xformで相手の回転情報を、ワールドスペース、つまりワールド回転値で取得
それを貼り付ける

回転は

xform -q -ws -ro “対象”;

の様な感じで取得
貼り付けの際は

rotate -a -ws “回転値” “ターゲット”;

を使う

スケールとシェアは
ロカール参照でしか取得できないので
それぞれxformで取得する
この際にピボットの引数に注意

でこれらを合わせて
ようやく一あわせが完了になる

むろん、一部の軸のみって設定は
アトリビュートをロックしてもよし
貼り付けの際に軸を限定するもよし
手っ取り早いのはアトリビュートをロックするのかな

といった感じ

xformでmatrixをそのまま割り当てないのは
やっぱりピボット問題が大きいし、4x4matrixなので見にくい
Maxの様な3×3だったらいいのになぁ~

matrix変換をMayaで扱うのは
ちょいとやっかいかな

その反面、move、rotate、scaleはMaxにはない反転や軸制限があっていいね

Maxだったら、手っ取り早いのはmatrix
逆に位置とか回転とかをいじり出すと、ちと苦労するかも

んー、また今度まとめてみよう

一番の注意は
MaxとMayaでコントローラー周りの仕様かな