書式
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);
と等価である。