パーティクル
particleコマンド
シーンにパーティクルを作成するにはparticleコマンドを使用する。
-pointオプションによって必要な個数だけの座標値をつけてこのコマンドを実行することによって、それらのパーティクルにひとつの名前がつけられる。
例えば、
particle -p 0 0 1 -p 1 0 0;
というコマンドによって、(0, 0, 1)と(1, 0, 0)の2点にパーティクルが作られる。
particleコマンドのオプション
- -point x y z
- 1個のパーティクルの座標値をfloatの値(x, y, z)で指定する。
- -count
- パーティクルの個数を調べる。(-queryといっしょに使用)
- -particleId id
- パーティクルのアトリビュートを調べる時のid番号(int)を指定する。(-queryといっしょに使用)
- -order int
- int番目のパーティクルのアトリビュートを調べる時に指定する。(-queryといっしょに使用)
順番は0から始まる。
- -attribute string
- stringで表されるパーティクルのアトリビュートを調べる時に指定する。(-queryといっしょに使用)
- -query
- パーティクルの様々な値を得るために使用。
-query使用上の注意
particleコマンドで-queryコマンドを使う時には
-particlId、 -order、 -attribute
などの後につけて使用する。
- id番号5のパーティクルのvelocityの値を調べる。
particle -attribute velocity -particleId 5 -query
particleコマンドの使用例1
以下のプロシージャーをmakeParticle1.melと言うファイルに書き込んで実行してみよう。
このプロシージャーでは10個のパーティクルを乱数によって座標値を決めながら発生させている。
各パーティクルの座標値は0から10の範囲になる。
global proc makeParticle1()
{
string $points = "";
for($i = 0; $i < 10; $i++)
{
$x = `rand 0 10`;
$y = `rand 0 10`;
$z = `rand 0 10`;
$points = $points + "-p " + $x + " " + $y + " " + $z + " ";
}
eval ("particle " + $points);
}
スクリプトの説明
- 3行目
最初にパーティクルの座標値を入れてゆくためのstring変数$pointsを ""によって空の状態で宣言している。
(stringは文字列を表す型である)
- 5行目
この$pointsに10個の座標値をfor文の中で一つづつ入れてゆく。
- 7 ~ 10行目
そのfor文の中で乱数値を発生させる関数randによって$x、$y、$zに 0 から 10 までの座標値を代入した後で、それらの値を$pointsに付け足す。
例えば、最初の
rand 0 10
によって5.0、2番目と3番目のrandによって8.2、3.7という値が返ってきたとする。
以上、randによって
$x = 5.0;
$y = 8.2;
$z = 3.7;
となったとすると
"-point " + $x + " " + $y + " " + $z + " "
は、まずこうなる。
"-point " + 5.0 + " " + 8.2 + " " + 3.7 + " "
これらの文字列・数値が+によって一つの文字列になり、その結果が
-point 5.0 8.2 3.7
となる。
(-pointの後ろ、変数の間と最後のスペース " " に注意)
これを$pointsの後ろに付け足してゆく。
for文が終った時には$pointsの中に
-p 5.0 8.2 3.7 -p 1.7 2.3 7.1 ......
という具合に-pとX、Y、Zの座標値が並んだものが入っているはずである。
(念のために言っておくと、上の座標値はあくまでも一例である)
- 12行目
最期にこの座標値$pointsを使ってparticleコマンドを実行する。
この時、ただ単に以下のようにしても実行できない。
particle $points
なぜなら$pointsの中身が一つの値としてparticleに渡されてしまうからである。
こういう場合は、まず
("particle " + $points)
としてparticleコマンドと$pointsをくっつけた文字列を作り、
これをevalコマンドによって実行する。
(ここでもparticleの後にスペースがあることに注意)
eval ("particle " + $points);
は以下のように実行しても同じである。
$str = "particle " + $points;
eval $str;
練習
- 上のmakeParticle1.melを参考にしてmakeParticle2.melを作り、発生させるパーティクルの個数を引数で変えることができるようにしてみよう。
(例)
makeParticle2(20)と実行すると20個のパーティクルができる。
- もう一つmakeParticle1.melを参考にしてmakeParticle3.melを作り、以下のようなウインドウを表示させて、ボタンを押すと10個のパーティクルが発生するようにせよ。
参考
Prev | Next
Home | Contents
abe@injapan.net