ポリゴンの平面化

さて今回はポリゴンのフラット化について。歪んだポリゴンを綺麗に平面上にそろえたいことってありますよね?自分の場合はドイツ戦車の傾斜装甲(多角形平面)との遭遇でその必要に迫られました。

flatten_face_example_02

こういった場合に使えるのが平面の方程式です。

空間上の平面は平面式 ax + by + cz  + d = 0 と定義できます。(平面式の詳細を知りたい方は検索して調べてくださいネ)

 

plane_equation

a, b, cはベクトル、x, y, zは座標で、dは係数です(原点から平面までの距離が入ることになります)。つまり、ベクトル(面法線)と座標があれば平面は定義できるわけです(ある座標に接していて、ベクトル方向を向いている無限に続く平面を想像してみてください)。

では実際にどのような手順で定義するかというと、まず平面を定義するために三角形(または3頂点)が必要です。三角形の面法線を三角形の頂点などから外積で導きます。これがベクトル(a, b, c)になります。

座標(x, y ,z)には三角形の頂点座標のどれかを使います。これで平面式のd以外の要素がそろいました。平面式は

a*x + b*y + c*z  + d = 0

なのでd以外を右辺に移動させることでdの値を計算できます。

d = -(a*x + b*y + c*z)

これで平面が定義できました。では実際にどのように使うかというと・・・

 

plane_equasion_02

ある頂点を定義された平面に沿ってY軸方向にそろえるとしましょう。知りたい値は移動後のY座標になります。平面と交差する座標ですね。

まずは平面を定義してa, b, c, dを取得しておきます。

平面式のy以外を右辺に移動させます。

a*x + b*y + c*z  + d = 0

b*y = -(a*x + c*z + d)

y = -(a*x + c*z + d)/b;

xとzはわかっているのでa, b, c, dと一緒に右辺に代入すればyの値が得られますね。x軸やz軸でも同じ要領です。これで軸方向にそろえることができるようになりました。

 

flatten_face_ui_02

参考に自分がMayaで書いたスクリプトのインターフェイスです。3頂点かポリゴンを選択した状態で平面を定義するとa, b, c, dに数値が入り、その値を使って選択した頂点をX, Y, Z軸いずれかでそろえるという仕組みです。

 

flatten_face_example_03

使用例です。頂点座標をスパッとブーリアンで切ったような断面に整えることができます。

次回は特定のベクトル方向との交差点を求める方法を書いてみます。つづく。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中