アイデアのスケッチです。何に使うんだって感じですが、

faceBBox1
メッシュ面毎にバウンディングボックスを生成するとどんな感じになるかと思い、ざっくりスクリプトを組んで見ました。さらにLatticeモディファイヤを適用。

スキャッタ(でしたっけ?)とか、PFlow使っても似たようなことは出来ますね。ボックス自体は姿勢を保つのでアニメーションするオブジェクトに適用すればなんか面白くなるかな。

使い方はオブジェクトを一つ選択して「スクリプトを起動」です。多くても3,000ポリゴン(三角でカウント)くらいのオブジェクトへの適用にとどめておいた方がいいです。max9上でしか試してませんのでお気をつけて。

-- faceBBox.ms
-- Attention! Do not use this script with high mesh object.

freezeMesh = snapshotasmesh selection[1]

numOfFaces = getNumFaces freezeMesh
for faceIndex = 1 to numOfFaces do
(
	vertexIndexPt3 = getFace freezeMesh faceIndex
	
	vtx1 = getVert freezeMesh vertexIndexPt3.x
	vtx2 = getVert freezeMesh vertexIndexPt3.y
	vtx3 = getVert freezeMesh vertexIndexPt3.z
	
	xArray = #(vtx1.x , vtx2.x , vtx3.x)
	yArray = #(vtx1.y , vtx2.y , vtx3.y)
	zArray = #(vtx1.z , vtx2.z , vtx3.z)
	
	BBoxMax = point3 (amax xArray) (amax yArray) (amax zArray)
	BBoxMin = point3 (amin xArray) (amin yArray) (amin zArray)
	
	myBox = box width:(BBoxMax.x - BBoxMin.x) \
		length:(BBoxMax.y - BBoxMin.y) \
		height:(BBoxMax.z - BBoxMin.z)
	
	faceCenter = meshop.getFaceCenter freezeMesh faceIndex
	myBox.center = faceCenter
	
	format "face:\t%/%\n" faceIndex numOfFaces
)
delete freezeMesh

上で使っているgetFaceメソッド、ある面で使われている頂点インデックスの取得するものですが、普通、整数の配列で返ってくると思いきや何故かPoint3です。三角ポリゴンの頂点だから3つの数が入ればいいとはいえ、Point3って3次元ベクトル用でしょう?
同じ機能をもつメソッドで「meshop.getVertsUsingFace」と言うのがあります。試していませんがこちらはちゃんとbitArrayで返してくれるようです。

maxscript大嫌い。

faceBBoxA

faceBBoxB

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です