MAXScript で、mesh コンストラクタに頂点と面のリストを指定し、編集可能なメッシュ オブジェクトを作成することができます。
ここでは、太陽の記号に似た円の 2D メッシュ オブジェクトを作成する単純なメッシュ生成のスクリプトを作成する方法について説明します。
関連トピック:
全体の流れ:
メッシュ オブジェクトの基本パラメータを定義します。
メッシュのすべての頂点を作成し、配列内に格納します。
頂点にインデックスを指定してすべての面を作成し、別の配列内に格納します。
パラメータとして 2 つの配列を指定して、メッシュのコンストラクタを呼び出します。
MAXScript
radius1 = 100 radius2 = 10 width = 10 vert_array = #() face_array = #() vert_count = 0 num_faces = 10 for a = 0 to (360-(360/num_faces)) by 360/num_faces do ( v1 = [radius1*cos(a+width),radius1*sin(a+width),0] v2 = [radius1*cos(a-width),radius1*sin(a-width),0] v3 = [radius2*cos(a),radius2*sin(a),0] append vert_array v1 append vert_array v2 append vert_array v3 append face_array [vert_count+1,vert_count+3,vert_count+2] vert_count += 3 ) m = mesh vertices:vert_array faces:face_array
radius1 = 100
radius2 = 10
width = 10
最初に、ジオメトリを定義するための変数がいくつか必要です。この円形のオブジェクトには、内側と外側の半径、および外側の光線のサイズを定義する幅の値が必要です。
vert_array = #()
face_array = #()
2 つの配列は、頂点の座標と面の定義を格納します。
vert_count = 0
ユーザ変数の vert_count
が 0 に設定され、メッシュの面を作成する間に増えていきます。
num_faces = 10
ステップの数が作成する面の数に関連付けられます。これは、次のループ内でステップとして使用されます。
for a = 0 to (360-(360/num_faces)) by 360/num_faces do
(
for a
ループは、num_faces
変数で指定されたユーザ定義のステップを使用して、0 から 360 (度)までカウントし、オーバーラップを避けるために 1 ステップ マイナスします。この変数で、メッシュ内の「光線」の数を定義します。たとえば、10 本の光線が必要な場合は、360/10 = 36、つまり光線当たり 36 度ということがわかります。a
の値は、36 ずつ 9 回増えて、円を一周します。
v1 = [radius1*cos(a+width),radius1*sin(a+width),0]
v2 = [radius1*cos(a-width),radius1*sin(a-width),0]
v3 = [radius2*cos(a),radius2*sin(a),0]
次に、1 つの面に対して 3 つの頂点を定義します。
頂点の v1 と v2 は、オブジェクトの外側です。
頂点の v3 は、円の中心に近くなっています (距離は radius2)。
radius3 が 0 の場合は、すべての面のすべての v3 が中心に集中します。
ここでは、次のような円の方程式を使います。
X = CenterX + Radius * Cos(A); Y = CenterY + Radius * Sin(A); Z = 0.0
A は、0 から 2*Pi までの範囲で変化する角度です。この例では、CenterX と CenterY は 0.0 です。
角度 a
との間で幅の値を加算および減算して、3 番目の頂点に使用される実際の角度から 2 つの外側の頂点のオフセットを取得します。3 番目の座標 Z は、この例では常に 0 です。 メッシュは XY 平面にあります。
append vert_array v1
append vert_array v2
append vert_array v3
これで、3 つの新しい頂点すべてが頂点の配列に追加されます。
append face_array [vert_count+1,vert_count+3,vert_count+2]
ここで、face 配列に平面を格納することができます。 反時計回りに 3 つの頂点のインデックスを Point3 の値として格納します。これで、通常の位置指定の平面が作成されます。vert_count
は依然として vert_array
内の頂点の数より 3 少ないため、現在の値に 3 を加えて、面定義に必要な正しいインデックスを取得します。
vert_count += 3
これで、頂点のカウンタを 3 増やします。 次の平面定義で、この正しいインデックスを再度使います。同じことが、vert_count = vert_count + 3
の式で表現できます。
)
m = mesh vertices:vert_array faces:face_array
次に、mesh
コンストラクタを呼び出して頂点と面の配列を指定することで、新しい編集可能メッシュを作成することができます。
Editable_Mesh : GeometryClass および TriMesh : 値
ここでこのスクリプトを評価すると、新しいメッシュ オブジェクトがシーンに表示されます。当初の半径と幅の値を変更して、さまざまなメッシュを作成することができます。
このスクリプトは、メッシュ作成スクリプトの概略にすぎません。2 番目の段階として、このコードを発展させて、[作成] (Create)パネル内でインタラクティブに操作するリアルなジオメトリ プラグイン スクリプトを生成します。
チュートリアル - スクリプト ジオメトリ プラグインの作成
別の平面に異なるマテリアル ID を割り当てて、UVW 座標をメッシュに割り当てる方法や、その他の方法を試してみることができます。
戻る