法線が離れたところにある面を取得する方法はありますか。

MAXScript に関する質問と回答 > 編集可能メッシュの操作 > 法線が離れたところにある面を取得する方法はありますか。

質問:

法線が現在のビューポートの外側を示す面を取得する方法はありますか。

回答:

ビュー スペースで面法線を取得することができます。 あとは、Z コンポーネントの記号を確認するだけです。 負の値の場合は、カメラから離れています。

スクリプト:

(
theObj = Teapot segs:10 --create ateapot
convertToMesh theObj --convert to EMesh
theMeshCount = theObj.numfaces --get the number of faces in the object
selArray = #() --init. an array to collect faces
for f = 1 to theMeshCount do --loop through all faces
(
  in coordsys (inverse (viewport.GetTM())) theFN = getFaceNormal theObj f
  if theFN.z < 0 then append selArray f -- if Z is negative, add to array
)
setFaceSelection theObj selArray --set the face selection in the EMesh
max modify mode --go to modify mode
select theObj --select the mesh
subObjectLevel = 3 --go to Face SO level
modPanel.addModToSelection (deleteMesh()) --add a delete mesh, preserving the SO selection
)

結果: カメラから離れたところにある三角形は削除されます。

左側の画像には、カメラ ビューポートから見えるように背面を削除したティーポットが示されています。右側の画像には、側面から見えるようにティーポットとカメラが示されています。スクリーンショットでは、背面非表示が無効になっている場合でも、右側の画像で背面が表示されます。 一方、左側の画像では背面表示を有効にしたのと同じように背面が表示されます。これは、ビュー ポートの背面非表示でスキップされた面がスクリプトで削除されるためです。

関連事項