-- ビットマップ
gBitmap = undefined
-- 平面のサイズ
gPlaneSizeX = 500.0
gPlaneSizeY = 500.0
-- 平面のセグメント数
gNumSegX = 25
gNumSegY = 25
-- 最大の高さ
gHeightMax = 25.0
-- メッシュの作成
fn CreatePlaneMesh len wid segX segY =
(
m = mesh length:len width:wid lengthsegs:segY widthsegs:segX
return m
)
-- セグメントのインデックスからピクセルのインデックスを取得
fn GetPixIdx segIdx segNum pixNum =
(
segIdxF = segIdx as float
segNumF = segNum as float
f = segIdxF / segNumF
pixIdx = f * (pixNum - 1)
return pixIdx as integer
)
-- メッシュの指定したインデックスの頂点に高さをセット
fn SetHeight m idx height =
(
v = patch.getVert m idx
v.z = height
patch.setVert m idx v
)
-- メッシュにハイトマップの高さをセット
fn Mesh_SetHeightMap m nSegX nSegY bm =
(
-- 高さをセットするメッシュの頂点のインデックス
idx = 1
bmWidth = bm.width
bmHeight = bm.height
for y = 0 to nSegY do (
pixY = GetPixIdx y nSegY bmHeight
pixY = pixY as integer
for x = 0 to nSegX do (
pixX = GetPixIdx x nSegX bmWidth
pixX = pixX as integer
-- ビッドマップからピクセルの配列を取得
pixArray = getPixels bm [pixX, pixY] 1
-- 高さ
h = pixArray[1].r / 255.0
h = h * gHeightMax
SetHeight m idx h
idx = idx + 1
)
)
)
-- ハイトマップからメッシュを作成
fn CreateMeshFromHeightmap =
(
-- ハイトマップを開く
fPath = getOpenFileName caption:"Open Heightmap:" \
types:"Bmp(*.bmp)|*.bmp|Jpeg(*.jpg)|*.jpg"
if fPath == undefined then return -1
gBitmap = openBitMap fPath
format "w = % h = %\n" gBitmap.width gBitmap.height
-- メッシュを作成
m = CreatePlaneMesh gPlaneSizeX gPlaneSizeY gNumSegX gNumSegY
-- パッチに変換
convertTo m Editable_Patch
-- 高さをセット
Mesh_SetHeightMap m gNumSegX gNumSegY gBitmap
)
-- テスト
CreateMeshFromHeightmap()
2012年1月31日火曜日
MAXScript ハイトマップからメッシュの作成(1)
Bmp, Jpeg画像のハイトマップから地形を作成するスクリプト
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿