gluPerspective(3) 透視射影行列を設定する

書式

void gluPerspective( GLdouble fovy,


GLdouble aspect,
GLdouble zNear,
GLdouble zFar )

delim $$

引き数

fovy
y 方向の視野角を指定する。 単位は度数である。
aspect
アスペクト比を指定する。 この値は x 方向の視野を決める。 アスペクト比は x (幅)と y (高さ)の比である。
zNear
視点と、視点に近い側のクリッピング平面の距離を指定する(常に正である)。
zFar
視点と、視点から遠い側のクリッピング平面の距離を指定する(常に正である)。

説明

gluPerspective は、視野角錐体(viewing frustum)をワールド座標系 に対して指定する。 一般的には、gluPerspective で指定するアスペクト比は、 これに対応するビューポートのアスペクト比と同じになるべきである。 例えば "aspect" ~=~ 2.0 $ ならば、観測者の x 方向の視野角は y 方向の視野角の 2 倍になる。 ビューポートの幅が高さの 2 倍ならば、画像は歪むことなくビューポート に表示される。

gluPerspective が作った行列には、現在の行列が掛けられる。 これは gluPerspective が作った行列 を引き数に glMultMatrix を呼び出した場合と同様の動作である。 乗算を行うのではなく、透視射影行列を現在の行列スタックにロードするには、 gluPerspective の前に glLoadIdentity を呼び出しておくこと。

f


f ~=~ cotangent"("{"fovy" over 2}")" のように定義されている場合、 生成される行列は次のようになる:


left ( ~~ down 130 { matrix {
   ccol { {f over "aspect"} above 0 above 0 above 0 }
   ccol { 0 above f above 0 above 0 }
   ccol { 0 above 0 above {{"zFar" + "zNear"} over {"zNear" - "zFar"}} above -1 }
   ccol { 0 above 0 above {{2 * "zFar" * "zNear"} over {"zNear" - "zFar"}} above 0} }} ~~~ right )

注意

デプスバッファの精度は、zNear および zFar に指定した 値の影響を受ける。 zNear に対する zFar の比率が大きいほど、 互いに近い曲面をデプスバッファが区別する際の効率は悪くなっていく。 もし

$r ~=~ "zFar" over "zNear"$

ならば、 デプスバッファの精度はだいたい $log sub 2 r$ ビット失われる。 zNear が 0 に近付いていくと $r$ は無限大に近付いていくため、 zNear は 0 に設定してはならない。