ようやくView/Projection行列と脳内イメージが合致した

 今年の夏は仕事がド修羅場中で、夏コミ前だってのにそっちはマジで何もやれてねぇ。
 とは言うものの時間が無い方が物事は進んだりするもので、3Dベースの2D描画システムを作るべくしこしこと実験中。
 ずっとView(カメラ)とProjection(画面への射影)に入れる値の意味というか、入れた値によって画面に出る絵がどう変わるのかがつかめなくてしっくりきてなかったのが、ようやく理解できた。

 一番わかってなかったのは、スクリーン座標系は、X・Y軸が-1〜1、Z軸が0〜1の値を取る、という意味。これは、最終的な座標変換の結果がその空間に入ってる部分がウインドウに描画されるという意味。
 で、Projection行列てのは、自分で決めたWorld座標系での描画空間を、その -1〜1、0〜1 の空間に押し込める座標変換。ようはWorld座標系での1を何にするかは自分で決めて、Projection行列で辻褄を合わせる感じ。語弊を恐れずにいえばProjection行列は描画空間そのもの。例えば640×480の画面サイズの時に、World座標系での1=1ピクセルにしたい時は、X軸が0〜640 → -1〜1。 Y軸0〜480 → 1〜-1。となるProjection行列を作ればOK。Y軸の符号が逆なのは、ピクセル座標系は↓方向が+なので、軸方向がスクリーン座標系と反対だから。

 この理解のおかげで、2D座標系をまんま3D座標持って行く行列が作れたので、もう怖い物はねーぜ! 2Dカメラも出来た。シェーダーとかそういう高級機能は無いバージョンの描画システムをようやく作れるぜ!

 しかし、今期のアニメ何も見られてねー。エヴァとハリーもいきてー。でもゲーム作ってれば幸せだから別にいいやって思っちゃうのは逃げなのか極まってるのか……。