オブジェクトを二つ作り、片方だけtranslateのアニメーションをつける。
そして、距離が近づいたら赤くなるエクスプレッションを作成する。
まず、エクスプレッションでは、任意に選択されたものではなく、決められたオブジェクトに固定される。
今回、以下の二つのオブジェクトを使用するので
nurbsSphere1 ;
nurbsCone1 ;
これを前回の$name[]配列に代入するようにすると以下のようになる。
{
string $name[] = { "nurbsSphere1","nurbsCone1"};
vector $obj1Vec = `xform -q -t -ws $name[0]`;
vector $obj2Vec = `xform -q -t -ws $name[1]`;
vector $distVec = $obj1Vec - $obj2Vec;
float $dist = `mag $distVec`;
print ($dist + "\n");
}
--------------------
次に色を変える手順だが、距離が離れていくと赤になるようにするほうが簡単なので、まずそれを作ってみることにした。
シェーダー名は
lambert2
で変更したいアトリビュート名は
.colorR
$distの値をシェーダーのカラーR値のドライバとして使用する。
その際に$distの値をそのまま使うと1ユニット動くとすぐ赤になってしまうので、10ユニットの移動でやっとRが1となるように$distに.1を掛けた。
$color = $dist*0.1;
lambert2.colorR=$color;
この二行をエクスプレッションに追加。
結果、ちゃんと動作はしてくれるが、オブジェクトに近づいたときに青緑になる。
近いときはデフォルトのグレイになって欲しいのだが、Rがデフォルト値の0.5以下に下がってしまうので、
別の方法を考える必要がある。
1)デフォルトのグレイ(0.5)以下に値が小さくならないようにする。
2)オブジェクトの距離が大きくなると値がプラスされる・
$dist =(0.5+$dist*0.1);
これで対象オブジェクトと同じ位置にある時はグレイ、離れるに従って赤になる。
0 件のコメント:
コメントを投稿