次のメソッドは、一度に複数の面に影響するようなメッシュに対する高度なアクセスを提供します。
メソッド:
meshop.createPolygon <Mesh mesh> <vertIndex array> smGroup:<int=0> matID:<int=1>
指定された頂点を使用して面のセットを作成します。面の頂点の順序は、頂点配列の順序です。ポリゴンは凸型ではない場合がありますが、(ほぼ)共有面でなければなりません。
smGroup:
および matID:
はそれぞれ、新しい面に割り当てられるスムージング グループ データおよびマテリアル ID 番号を指定します。
meshop.createPolygon
コールを使用して、ポリゴンごとにメッシュ ポリゴンを作成することができます。この場合、完全なメッシュのコピーを含む undo 記録が、作成したすべての単一ポリゴンごとに内部で作成されます。その結果、プログラムが実行されます。これを回避するには、undo off
コンテキストでポリゴン作成コードを囲むことをお勧めします。オブジェクト作成自体の undo が必要な場合は、undo を追加コンテキストで使用可能にできます。例
vertArray = #();
vertArray.count=5800
for i = 1 to 5800 do
vertArray[i]=random [-100,-100,-100] [100,100,100]
faceArray=#()
faceArray.count=11300
for i = 1 to 11300 do
faceArray[i]=random [1,1,1] [5800,5800,5800]
undo on -- Turn ON Undo for mesh object creation
(
mm = mesh numverts:5800 numfaces:11300
undo off -- Turn OFF Undo for polygon creation
(
for i = 1 to 5800 do
meshop.setvert mm i vertArray[i]
for i = 1 to 11299 do
meshop.createPolygon mm #(faceArray[i].x,faceArray[i].y,faceArray[i].z)
) --End Undo OFF for polygon creation
meshop.createPolygon mm #(faceArray[11300].x,faceArray[11300].y,faceArray[11300].z)
update mm
) -- End Undo ON for mesh object creation
meshop.cut <Mesh mesh> <int edge1Index> <float edge1f> <int edge2Index> <float edge2f> <point3 normal> fixNeighbors:<boolean=true> split:<boolean=true> node:<node=unsupplied>
特定のビューポートからメッシュを参照して描画されたラインに沿って、あるエッジのポイントのメッシュを切り取り、別のエッジのポイントに貼り付けます。
<edge1Index>
は、切り取りを開始するエッジを指定します。
<edge1f>
は、切り取りを開始するエッジに沿った距離(分数)を指定します。
<edge2Index>
は、切り取りを終了するエッジを指定します。
<edge2f>
は、切り取りを終了するエッジに沿った距離(分数)を指定します。
<normal>
は、ビューの方向を指定します。切り取りは、このベクトルによって形成された平面上で開始位置から終了位置に向かって、メッシュのこの「側面」で実行されます。
fixNeighbors:
が true
の場合、終端での分割を防ぐため、切り取りの各終端の反対側の面が分割されます。split:
が true
の場合、メッシュは分割されます。false
の場合、ジオメトリの追加によってメッシュがリファインされます。<mesh>
がノードの場合、または <mesh>
が編集可能メッシュあるいはメッシュ値で、node:
が指定されている場合、法線は現在の座標系コンテキストにあります。<mesh>
が編集可能メッシュまたはメッシュ値で、node:
が指定されていない場合、法線はメッシュのローカル座標系にあります。
meshop.slice <Mesh mesh> <facelist> <point3 normal> <float offset> separate:<boolean=false> delete:<boolean=false> node:<node=unsupplied>
指定されたスライス平面に沿ってメッシュをスライスします。スライス平面は、DotProd'd に <normal>
を使用したときに、<offset>
を返すすべてのポイントとして定義されます。<normal>
は正規化値である必要があります。
separate:
には、スライスによってメッシュを 2 つの要素に分割するか(true
)、または面の分割によって既存のメッシュのリファインのみを行うか(false
)を指定します。
delete:
には、スライス平面より「下の」部分を削除するかどうかを指定します。「下の」部分は、DotProd (p,delete:
が true
の場合、separate:
は無視されます。<mesh>
がノードの場合、または <mesh>
が編集可能メッシュあるいはメッシュ値で、<node>
が指定されている場合、法線は現在の座標系コンテキストにあります。<mesh>
が編集可能メッシュまたはメッシュ値で、node:
が指定されていない場合、法線はメッシュのローカル座標系にあります。
meshop.getPolysUsingVert <Mesh mesh> <vertlist> ignoreVisEdges:<boolean=false> threshhold:<float=45.>
指定された面が含まれる「ポリゴン」にあるすべての頂点に設定されているビットで、size=(mesh 内の #faces)のビット配列を返します。ポリゴンは、非表示エッジを共有するすべての面として定義します。エッジ角度はしきい値角度未満です。既定値のしきい値角度は 45 度です。ignoreVisEdges が true に設定されている場合、エッジの可視性は無視されますが、しきい値の関連性は保持されます。
threshhold
パラメータのスペルが間違っています。
meshop.optimize <Mesh mesh> <float normalThreshold> <float edgeThreshold> <float bias> <float maxEdge> saveMatBoundries:<boolean=true> saveSmoothBoundries:<boolean=true> autoEdge:<boolean=true>
サーフェス法線のしきい値に基づいて面の数を減らすことにより、メッシュの詳細レベルを減らします。サーフェス法線の角度差が <normalThreshold>
を下回る隣接面は、1 つの三角形に集約されます。autoEdge:
が true の場合は、隣接するサーフェス法線間の角度が <edgeThreshold>
より小さいときに、エッジは非表示になります。メッシュ オブジェクトを最適化すると、最適化が進行するにつれて、細長い「縮退した」三角形が大量に生成され、レンダリング アーティファクトとなります。<bias>
を大きくすると、不自然な三角形ができなくなります。値の範囲は 0~1 です(0 でバイアス オフ)。 1 に近い値を設定すると、正三角形を維持するため、最適化の量が少なくなります。<maxEdge>
の値が 0 より大きい場合、optimize 関数でこの値より長いエッジが作成されなくなります。このパラメータが 0 以下の場合、エッジの長さに制限は設定されません。saveMatBoundries:
が true の場合、面はマテリアルの境界を越えては集約されません。saveSmoothBoundries:
が true の場合、面は異なるスムージング グループの境界を越えては集約されません。
copy <trimesh>
ソース TriMesh のコピーを生成します。
delete <trimesh>
TriMesh のジオメトリおよびトポロジを消去し、効果的にメモリを解放します。
animateVertex <mesh> <vertex_spec>
コントローラを指定された Editable_Mesh の頂点に適用します。ここで、<vertex_spec>
は次のいずれかです。
<integer_index>
<integer_index_array>
#all
コントローラを頂点に割り当てると、頂点はドライバ サブアニメーションに追加され、トラック ビューではアニメート可能として表示されます。このため、これらの頂点をさらにスクリプトで記述できるようになります。
例:
animateVertex $Sphere01 #all
アニメートされた頂点は、インデックス番号で指定されるか、またはすべての頂点をアニメートするキーワード #all
で指定されます。
編集可能なメッシュの頂点へのアクセスの詳細は、「クラスとオブジェクトの調査関数」 と「頂点およびコントロール ポイントのアニメーションのスクリプト」を参照してください。 頂点に割り当てられたコントローラ値はオブジェクト スペース内にあります。ワールド スペースからオブジェクト スペースへの変換については、「ノード変換プロパティの使い方」を参照してください。
setMesh()
メソッドは、頂点、面、テクスチャ頂点などの配列を介してメッシュに対する一括変更を可能にします。setMesh()
には次の形式があります。
setMesh <mesh> [ numverts:<integer> ] [ numfaces:<integer> ]
メッシュを所定のジオメトリにリセットしますが、このメッシュにはトポロジ(面や頂点)がありません。現在のメッシュのデータは失われます。頂点を個別に指定して、面を作成しなければなりません。頂点と面の既定値は、それぞれ 36 と 50 です。
setMesh <mesh> [ vertices:<array_of_point3s> ] [ faces:<array_of_point3s> ] [ materialIDs:<array_of_integers> ] [ tverts:<array_of_point3s> ]
所定の配列に基づいて、メッシュをリセットします。指定された部分のメッシュだけがリセットされます。たとえば、vertices:
パラメータだけが指定されている場合、既存の面データは維持されます。vertices
配列の各 Point3 値は、現在の座標系における頂点の位置を指定します。faces
配列の各 Point3 値は、面を形成する 3 つの頂点のインデックスを指定します。materialIDs
配列は、各面に割り当てられるマテリアル ID を指定します。tverts
配列の各 Point3 値は、テクスチャ頂点の UVW 座標を指定します。テクスチャ頂点の詳細については、メソッド セクションの「テクスチャ マップ」を参照してください。
setMesh <mesh> [ length:<integer> ] [ width:<integer> ] [ lengthsegs:<integer> ] [ widthhsegs:<integer> ]
所定のサイズとセグメント数を持つ、平らで矩形のメッシュをリセットします。長さおよび幅の既定値は 50、セグメント数の既定値は 5 です。
setMesh <mesh> <trimesh>
メッシュをソース TriMesh のコピーに設定します。
メッシュに関連するメソッドについては、以下を参照してください。