カメラをつけてみました
レイを飛ばす方向とか位置なんかをシーンに固定しっぱなしなのは使いづらいので、カメラをつけてみました。
...見た目は、前回から何も変わって無いですよね...
(以下は、後で詳しく書き直す)
描画のパイプラインをなんとなく書いてみると、こんな感じになってます。
(3D上での頂点)座標 → ワールド変換 → ビュー変換 → 射影変換 → ディスプレイ変換 → ディスプレイ上での座標
こんな変換は、簡単に出来るんですから、逆にたどってあげれば、今回飛ばしているレイのワールド上での位置と方向が簡単にわかるはずです。
カメラのローカル座標p(0.0f, 0.0f, 0.0f, 1.0f)ってのは、 つまりカメラ本体の位置を示しています。
でもって、ビュー行列ってのはカメラの姿勢を示す行列の逆行列なんでした。
すなわち、p(0.0f, 0.0f, 0.0f, 1.0f) ってのを、カメラの姿勢を示す行列でかけてあげれば、カメラのワールド上での位置は求まります。
(...ってか、こんな説明は逆に混乱するのか...)
次に、ピクセル位置を射影空間上の点に変換することを考えて見ましょう。
(めんどくさいから、あとにして)
射影空間上の一点を、ビュー空間上の一点に変換するためには、射影行列の逆行列をかければよいことがわかります。
そして、ビュー空間上の一点をワールド上の座標に変換するためには、ビュー行列の逆行列をかければよいこともわかります。
ここで、行列の基本演算を思い出しておきましょう。
わざわざ、逆射影行列で変換して、逆ビュー行列で変換して...なんてことはやる必要はありませんよね。
(続きは後で書く)