質問:
法線が現在のビューポートの外側を示す面を取得する方法はありますか。
回答:
ビュー スペースで面法線を取得することができます。 あとは、Z コンポーネントの記号を確認するだけです。 負の値の場合は、カメラから離れています。
スクリプト:
|
(
theObj = Teapot segs:10 --ティーポットを作成します。
convertToMesh theObj --EMesh に変換します。
theMeshCount = theObj.numfaces --オブジェクト内の面の数を取得します。
selArray = #() -- 面を収集するための配列を初期化します。
for f = 1 to theMeshCount do --すべての面をループします。
(
in coordsys (inverse (viewport.GetTM())) theFN = getFaceNormal theObj f
if theFN.z < 0 then append selArray f -- Z が負である場合は配列に追加します。
)
setFaceSelection theObj selArray --EMesh 内に面の選択を設定します。
max modify mode --修正モードに移動します。
select theObj --メッシュを選択します。
subObjectLevel = 3 --面の SO レベルに移動します。
modPanel.addModToSelection (deleteMesh()) --deleteMmesh を追加し、SO 選択を維持します。
)
|
結果: カメラから離れたところにある三角形は削除されます。
左側の画像には、カメラ ビューポートから見えるように背面を削除したティーポットが示されています。右側の画像には、側面から見えるようにティーポットとカメラが示されています。スクリーンショットでは、背面非表示が無効になっている場合でも、右側の画像で背面が表示されます。
一方、左側の画像では背面表示を有効にしたのと同じように背面が表示されます。これは、ビュー ポートの背面非表示でスキップされた面がスクリプトで削除されるためです。