シーンにパーティクルを作成するにはparticleコマンドを使用する。
-pointオプションによって必要な個数だけの座標値をつけてこのコマンドを実行することによって、それらのパーティクルにひとつの名前がつけられる。
例えば、
particle -p 0 0 1 -p 1 0 0;
というコマンドによって、(0, 0, 1)と(1, 0, 0)の2点にパーティクルが作られる。
particleコマンドで-queryコマンドを使う時には -particlId、 -order、 -attribute などの後につけて使用する。
以下のプロシージャーでは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);
}
最初にパーティクルの座標値を入れてゆくためのstring変数$pointsを
""によって空の状態で宣言している。
この$pointsに10個の座標値をfor文の中で一つづつ入れてゆく。
その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の後ろ、変数の間と最後のスペース " " に注意)
これを$pointsの後ろに付け足してゆく。
for文が終った時には$pointsの中に
-p 5.0 8.2 3.7 -p 1.7 2.3 7.1 ......
という具合に-pとX、Y、Zの座標値が並んだものが入っているはずである。
(念のために言っておくと、上の座標値はあくまでも一例である)
最期にこの座標値$pointsを使ってparticleコマンドを実行する。
この時、ただ単に以下のようにしても実行できない。
particle $points
なぜなら$pointsの中身が一つの値としてparticleに渡されてしまうからである。
こういう場合は、まず
("particle " + $points)
としてparticleコマンドと$pointsをくっつけた文字列を作り、
これをevalコマンドによって実行する。
(ここでもparticleの後にスペースがあることに注意)
eval ("particle " + $points);
は以下のように実行しても同じである。
$str = "particle " + $points;
eval $str;