みなさん、こんにちは。
今回も、C#でOpenGLを使う方法について、ご紹介します。
前回は頂点インデックスを使った描画方法についてお話しました。
今回は、座標変換行列についてお話します。
こちらの記事で少し登場していますが、座標変換行列は3Dの描画で必須の項目です。
座標変換とは、構築された3次元空間をカメラで撮影し、2次元のスクリーンに投影することが目的となります。
座標変換の詳細はグーグルなどで検索できますが(例:和歌山大学床井研究室様)、処理の過程を簡単に説明します。
①モデル座標⇒ワールド座標変換
3Dモデルをワールド空間上に配置する。
②ワールド座標⇒カメラ座標変換
ワールド空間上にカメラを置き、ワールドの中心をカメラの位置を中心とする変換を行う。
③カメラ座標⇒射影座標変換
カメラで見える領域は無限遠に続くので、奥行きに対してNear, Farの制限をかけながら3次元空間を切り取ることで、視錐台形状を作成する。
また、視錐台を直方体に収縮することでパース(※)をかける。
※パース=人間の目は手前にある物体は大きく、奥の物体は小さく見えるため、そのような見え方のことを指す。
④射影座標⇒スクリーン座標変換
パースをかけた直方体に対し、最前面の領域を2次元の領域として採用し、2Dのスクリーン画像とする。
下図が座標変換の具体的なイメージになります。
いかがでしたでしょうか?
次回は、座標変換をOpenTKで実現する方法についてお話します。