陰面処理

どの面が隠れているかを探す

 立体には陰になっていて見えない面があります。それで、見えない面は描画しなくてもよいので、その面を探します。

 面は最低3つの頂点で成り立っています。それで面を作っている3つの点を左回り(時計回りの反対)に順に A(Xa , Ya , Za)、B(Xb , Yb , Zb)、C(Xc , Yc , Zc) とし左隣の頂点へのベクトルをV1、V2とします。 そして視点の座標を(Xe , Ye , Ze)とすると、3つのベクトルの外積が面の法線となります。法線ベクトルNは次のようにして求められます。その面が見えるか見えないかは次の式で求められます。

V1 = (Xb-Xa , Yb-Ya , Yb-Ya)
V2 = (Xc-Xb , Yc-Yb , Yc-Yb)
N = (V1y * V2z - V1z * V2y,
V1z * V2x - V1x * V2z,
V1x * V2y - V1y * V2x)

 そして、面の中心の点をO(Xo , Yo , Zo)として視点から点OへのベクトルをEとすると、 法線ベクトルNとベクトルEの内積がマイナスであればその面は視点から見ることの出来る面と判断できます。

E = (Xo - Xe , Yo - Ye , Zo - Ze)
NE = Ex * Nx + Ey * Ny + Ez * Nz

これをアクションスクリプトで表すと、