複数の平行光源を使いライティングを行います。

…その前に、ポリゴンのクリッピングを実装しておきます。
クリッピングとは、視錘台(見える範囲)の外に
はみ出ているポリゴンを切り取る作業です。


これにより、床などの大きなポリゴンを一枚で表現することが可能になります。
元々ポリゴンは三角形ですが、切り取った時に四角形になる事もあります。
その場合は、三角形二つに分割してやります。

続いてライティングを実装します。


Phongの反射モデルを使い、表面の陰影を計算します。
鏡面光だけは特殊なので、視線の反射ベクトルが必要になります。
真面目に計算すると複雑になる(平面でも場所によって向きが変わってくる)ので、
視線ベクトルは平行投影であると仮定して計算しています。

これで一通り基礎的な描画機能は揃いました。
次回以降はテクスチャマッピングやグーローシェーディングなど、
応用的な描画機能を実装していきます。