シーンにパーティクルを作成するにはparticleコマンドを使用する。
-pオプションによって必要な個数だけの座標値をつけてこのコマンドを実行することによって、それらのパーティクルにひとつの名前がつけられる。
例えば、
particle -p 0 0 1 -p 1 0 0;
というコマンドによって、(0, 0, 1)と(1, 0, 0)の2点にパーティクルが作られる。
以下のプロシージャーをmakeParticle1.melと言うファイルに書き込んで実行してみよう。
このプロシージャーでは10個のパーティクルを乱数によって座標値を決めながら発生させている。
各パーティクルのX, Y, Zの座標値は-5から5の範囲になる。
global proc makeParticle1()
{
string $points = "";
for($i = 0; $i < 10; $i++)
{
$x = `rand -5 5`;
$y = `rand -5 5`;
$z = `rand -5 5`;
$points = $points + "-p " + $x + " " + $y + " " + $z + " ";
}
eval ("particle " + $points);
}
string $points = "";
最初にパーティクルの座標値を入れてゆくためのstring変数$pointsを ""によって空の状態で宣言している。
for($i = 0; $i < 10; $i++)
$iを0から10までインクリメントしてfor文のブロックを10回実行する。
$x = `rand -5 5`;
$y = `rand -5 5`;
$z = `rand -5 5`;
$x, $y, $zに-5から5までの乱数(でたらめな数)を代入する。
$points = $points + "-p " + $x +" " + $y + " " + $z + " ";
パーティクルの座標を文字列の連結によって作ってゆく。
rand -5 5
によって
$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 = -p 4.0 3.2 -2.7
となる。
eval ("particle " + $points);
最後にこの座標値$pointsを使ってparticleコマンドを実行する。
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 |