チュートリアル - カスタム メッシュ オブジェクトの作成

チュートリアル > カスタム メッシュ オブジェクトの作成

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 回増えて、円を一周します。

for ループ

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)パネル内でインタラクティブに操作するリアルなジオメトリ プラグイン スクリプトを生成します。

チュートリアル - スクリプト Geometry プラグインの作成

別の平面に異なるマテリアル ID を割り当てて、UVW 座標をメッシュに割り当てる方法や、その他の方法を試してみることができます。

戻る

「チュートリアル」のインデックス ページ