OpenGLのgluLookAtや、glRotateなどの座標変換関数を使わずに、自前で座標変換を行うプログラムを作っていたのですが、若干ビュー行列を作る辺りでこんがらがってしまったので、整理のためにメモを残しておきます。
カメラの持つワールド行列が次のように定義されるとします。
XはカメラのローカルX軸、YはカメラのローカルY軸、ZはカメラのローカルZ軸、Pはカメラのワールド座標を示します。
このときカメラ視点から見た座標系であるビュー座標系に変換するためのビュー行列は次のように作れました。
ワールド座標系での位置座標Px, Py, Pzと各軸での内積をとり、カメラの位置座標をビュー座標系へ射影し、ビュー座標系でのカメラの位置座標分を引いてカメラの位置をビュー座標系の原点に持ってくるようなイメージです。 ワールド座標系からビュー座標系に変換したいあるモデルが持つワールド座標をMx, My, Mzとすると、ビュー座標へ変換後のモデルの座標Nx, Ny, Nzは次のように計算できます。
もしここに記した説明や式に何か誤りがあったらすみません、とあまり自信がないので謝っておきます。とりあえず、私の方ではこの式通りにプログラムを実装したところ、OpenGLの関数を使わなくてもちゃんとモデルがカメラ視点から表示されることが確認できました。