前回までとは違う方法で岩・石を自動生成するスクリプトを作ってみる。
今回のスクリプトは水晶のような形の岩・石を作るものである。
まず、1個岩石を作るスクリプトを作ってみる。
global proc makeRock7()
{
string $poly[] = `polyCylinder -radius 1.0 -height 2.0 -subdivisionsX 6 -subdivisionsY 1 -subdivisionsZ 1`;
string $ver[] = `polyListComponentConversion -toVertex $poly[0]`;
string $verE[] = `filterExpand -selectionMask 31 $ver`;
for($i = 0; $i < 6; $i++)
{
select -r $verE[$i];
$x = rand(-0.2, 0.2);
$z = rand(-0.2, 0.2);
move -r $x 0 $z;
}
for($i = 6; $i < 12; $i++)
{
select -r $verE[$i];
$y = rand(-0.3, 0.3);
move -r 0 $y 0;
}
select -r $verE[13];
$y = rand(0.5, 1.0);
move -r 0 $y 0;
}
string $poly[] = `polyCylinder -radius 1.0 -height 2.0 -subdivisionsX 6 -subdivisionsY 1 -subdivisionsZ 1`;
ポリゴンのシリンダーを作る。
string $ver[] = `polyListComponentConversion -toVertex $poly[0]`;
ポリゴンの球から頂点を取り出して$ver[]に代入。
string $verE[] = `filterExpand -selectionMask 31 $ver`;
$verの中から頂点(31で表される)を配列に展開して$verE[]に代入。
for($i = 0; $i < 6; $i++)
以下のループを$iが0から5まで6回実行する。
select -r $verE[$i];
$i番目の頂点(シリンダーの底にある頂点)をセレクトする。
$x = rand(-0.2, 0.2);
乱数の値(-0.2から0.2)を$xに代入。
$z = rand(-0.2, 0.2);
乱数の値(-0.2から0.2)を$zに代入。
move -r $x 0 $z;
セレクトされている頂点を、その位置から$x, 0.0, $zだけ移動する。
for($i = 6; $i < 12; $i++)
以下のループを$iが6から11まで6回実行する。
select -r $verE[$i];
$i番目の頂点(シリンダーの天井にある頂点)をセレクトする。
$y = rand(-0.3, 0.3);
乱数の値(-0.3から0.3)を$yに代入。
move -r 0 $y 0;
セレクトされている頂点を、その位置から0.0, $y, 0.0だけ移動する。
select -r $verE[13];
13番目の頂点(シリンダーの天井の中心にある頂点)をセレクトする。
$y = rand(0.5, 1.0);
乱数の値(0.5から1.0)を$yに代入。
move -r 0 $y 0;
セレクトされている頂点を、その位置から0.0, $y, 0.0だけ移動する。
makeRock8(...)
{
for(...)
{
........
}
}