編集可能メッシュの操作
 
 
 
 

   

編集可能メッシュ - クイック ナビゲーション

面の法線のフリップ

次の関数を使用して、指定されたメッシュ オブジェクト内のすべての面に対する法線をフリップします。

fn FlipObjNormal obj =
(
for f =1 to obj.numFaces do -- メッシュの面ごと
(
verts=getface obj f -- 3 つの頂点を Point3 として取得します。
local tmp=verts.x -- 1 番目の頂点と 3 番目の頂点をスワップします。
verts.x=verts.z -- 法線をフリップします。
verts.z=tmp -- (右手規則)
setface obj f verts -- 面に対する新しい頂点順序を保存します。
)
update obj -- オブジェクトを更新して 3ds Max に変更を適用します。
)

テクスチャ頂点および面

次に、テクスチャ頂点と面を操作する作業スクリプトの例を示します。

スクリプト

-- オブジェクトに平面マッピングを適用する関数。
-- マッピングが垂直になる軸を指定するこの方向パラメータは、
-- 値 #x、#y、#z を持ちます。
--
fn ApplyPlanarMap obj direction =
(local oldcoordsys, normalize_pos
-- この場合、テクスチャ頂点の数は
-- メッシュ頂点の数に等しくなります。
obj.numtverts=obj.numverts
-- テクスチャ頂点の面を作成します。
buildTVFaces obj
-- オブジェクト座標スペースで操作します。オリジナルの座標系を保存し、
-- 後で使用します。
oldcoordsys=set coordsys local
-- メッシュ内の各頂点に対してその位置を取得し、
-- [0,0,0]から[1,1,1]の範囲に正規化します。これは、平面 UVW スペースです。
for v = 1 to obj.numverts do
( normalize_pos=((getvert obj v)-obj.min)/(obj.max-obj.min)
-- 平面マッピングが垂直である方向を基に、
-- 位置コンポーネント値をフリップします。
case direction of
(#x:( tmp=normalize_pos.x
normalize_pos.x=normalize_pos.y
normalize_pos.y=normalize_pos.z
normalize_pos.z=tmp
)
#y:( tmp=normalize_pos.y
normalize_pos.y=normalize_pos.z
normalize_pos.z=tmp
)
)
-- 一致するテクスチャ頂点の「位置」を設定
settvert obj v normalize_pos
)
-- テクスチャ頂点の「位置合わせ」が終了。テクスチャ面を作成します。
-- この場合、メッシュとテクスチャ頂点は 1 対 1 に対応するため、
-- メッシュの面に対する頂点インデックスは、
-- テクスチャ面に対するテクスチャ頂点インデックスでもあります。
for f = 1 to obj.numfaces do
setTVFace obj f (getface obj f)
-- 完了。座標系をリセットします。
set coordsys oldcoordsys
-- メッシュを更新して 3ds Max に変更を適用します。

update obj
)
--
-- テスト ベッド --球を作成し、マテリアルを適用して拡散反射光マップを
-- タイルされた 2x3 チェック マップに設定します。チェック テクスチャ マップの
-- ビューポート表示をオンにし、ApplyPlanarMap 関数を呼び出します。
--
g=geosphere()
convertToMesh g
g.material=standard()
g.material.maps[2]=checker()
g.material.maps[2].coordinates.u_tiling=2
g.material.maps[2].coordinates.v_tiling=3
showTextureMap g.material g.material.maps[2] true
ApplyPlanarMap g #x

出力:

ApplyPlanarMap() -- 5 ~ 45 行目の関数宣言の出力
$GeoSphere:GeoSphere02 @ [0.0,0.0,0.0] -- 51 行目の出力
$Editable_Mesh:GeoSphere02 @ [0.0,0.0,0.0] -- 52 行目の出力
Standard:Standard -- 53 行目の出力
Checker:Checker -- 54 行目の出力
2 -- 55 行目の出力
3 -- 56 行目の出力
OK -- 57 行目の出力
OK -- 58 行目の出力
関連事項