アイデアのスケッチです。何に使うんだって感じですが、
メッシュ面毎にバウンディングボックスを生成するとどんな感じになるかと思い、ざっくりスクリプトを組んで見ました。さらに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大嫌い。