gluLookAt(3) ビューイング変換を定義する

書式

void gluLookAt( GLdouble eyeX,


GLdouble eyeY,
GLdouble eyeZ,
GLdouble centerX,
GLdouble centerY,
GLdouble centerZ,
GLdouble upX,
GLdouble upY,
GLdouble upZ )

delim $$

引き数

eyeX, eyeY, eyeZ
視点の位置を指定する。
centerX, centerY, centerZ
参照点の位置を指定する。
upX, upY, upZ
up ベクトルの方向を指定する。

説明

gluLookAt は視点、シーンの中心を示す参照点、 UP ベクトルからビューイング行列を作る。

この行列は参照点を z 軸上(座標が負の範囲)にマップし、 視点を原点にマップする。 したがって、普通の射影行列が使われているときは、シーンの 中心はビューポートの中心にマップされる。 同様に、ビューイング平面上に投影される UP ベクトルが示す方向は、 y 軸上(座標が正の範囲)にマップされる。 この際の方向は、ビューポート内で上を向くようにされる。 UP ベクトルは、視点と参照点を結ぶ視線と平行になってはならない。

行列

F ~=~ left ( down 20 { ~ matrix {
   ccol {"centerX" above "centerY" above "centerZ"}
   ccol { ~-~ above ~-~ above ~-~}
   ccol {"eyeX" above "eyeY" above "eyeZ"} } } ~~ right )

とし、

UP をベクトル $("upX", "upY", "upZ")$ とする。

この場合、正規化は次のようになされる: f ~=~ F over {|| F ||}

UP sup prime ~=~ UP over {|| UP ||}

最後に、$s ~=~ f ~times~ UP sup prime$, $u ~=~ s ~times~ f$ とする。

すると M は次のように組み立てられる: M ~=~ left ( matrix {
   ccol { ~s[0] above ~u[0] above -f[0] above 0 }
   ccol { ~s[1] above ~u[1] above -f[1] above 0 }
   ccol { ~s[2] above ~u[2] above -f[2] above 0 }
   ccol { 0 above 0 above 0  above 1 } } ~~right )

また、gluLookAt は glMultMatrixf(M); glTranslated (-eyex, -eyey, -eyez);

と等価である。