シーンにパーティクルを作成するにはparticleコマンドを使用する。
-pオプションによって必要な個数だけの座標値をつけてこのコマンドを実行することによって、それらのパーティクルにひとつの名前がつけられる。
例えば、
particle -p 0 0 1 -p 1 0 0;
というコマンドによって、(0, 0, 1)と(1, 0, 0)の2点にパーティクルが作られる。
以下のプロシージャーをmakeParticle1.melと言うファイルに書き込んで実行してみよう。
このプロシージャーでは10個のパーティクルを発生させている。
各パーティクルの座標値は乱数によって決めているが、
その座標値を代入しておく変数を個数分用意しないで、
particle コマンドをプログラムによって生成して最期に実行している。
この方法をとることによって、作られるパーティクルの個数を変えたい時にもプログラムの書き換えを最小限で済ませることができる。
もし、座標の個数分の変数(配列)を用意してプログラムを作るとどうなるか?
global proc makeParticle1()
{
int $i;
float $x, $y, $z;
string $points = "";
for($i = 0; $i < 10; $i++)
{
$x = rand(-5.0, 5.0);
$y = rand(-5.0, 5.0);
$z = rand(-5.0, 5.0);
$points = $points + "-p " + $x + " " + $y + " " + $z + " ";
}
eval("particle " + $points);
}
int $i;
float $x, $y, $z;
string $points = "";
for($i = 0; $i < 10; $i++)
$x = rand(-5.0, 5.0);
$y = rand(-5.0, 5.0);
$z = rand(-5.0, 5.0);
$points = $points + "-p " + $x +" " + $y + " " + $z + " ";
$x = rand(-5.0, 5.0);
$y = rand(-5.0, 5.0);
$z = rand(-5.0, 5.0);
によって
$x = 4.0;
$y = 3.2;
$z = -2.7;
となったとする。
"-p " + $x + " " + $y + " " + $z + " "
の部分は、まずこうなる。
"-p " + 4.0 + " " + 3.2 + " " + -2.7 + " "
"-p 4.0 3.2 -2.7 "
となる。
(-pの後ろ、変数の間と最後のスペース " " に注意)
$points = $points + "-p 4.0 3.2 -2.7 "
最初($iが0のとき)$pointsには何も入っていないので
($points = "")
$points = "-p 4.0 3.2 -2.7 "
となる。
eval ("particle " + $points);
particle $points
なぜなら$pointsの中身が一つの値としてparticleに渡されてしまうからである。
("particle " + $points)
としてparticleコマンドと$pointsを連結した文字列を作り、
これをevalコマンドによって実行する。
(ここでもparticleの後にスペースがあることに注意)
eval "particle -p 4.0 3.2 -2.7 -p 1.7 -2.3 3.1 -p 2.2 3.9 1.2 -p 3.7 2.5 2.0 -p 3.2 -1.2 0.8 -p -4.8 4.3 -3.7 -p 4.0 0.2 -4.1"
(もちろん上のX, Y, Z座標の値は一例にすぎない)
eval ("particle " + $points);
は以下のように実行しても同じである。
$str = "particle " + $points;
eval $str;
particleRenderType | shape |
---|---|
0 | MultiPoint |
1 | MultiStreak |
2 | Numeric |
3 | Points |
4 | Spheres |
5 | Sprites |
6 | Streak |
7 | Blobby Surface |
8 | Cloud |
9 | Tube |