透視射影

2010年1月6日

ファイル

17-perspective.tar.gz

使い方

キーボードのキー "p" を押すと、透視射影 "Perspective" と正射影 "Orthogonal" が切り替わります。

内容

透視射影でティーポットを描画します。透視射影を使うと、近くが大きく、遠くが小さく描画されます。関数 setProjection() の中で透視射影の設定をしています。以下の行です。

		gluPerspective(45., (float)w/h, 1., 10.);

第 1 引数は視界角度、第 2 引数は描画面のアスペクト比、第 3 引数は目の位置から視体積の前面までの距離、第 4 引数は目の位置から視体積の後面までの距離です。視体積の中に含まれるものが描画されます。下図のような感じです。

目の位置の設定は、display() の中の以下の行で行っています。

	gluLookAt(0., 0., 2.5, 0., 0., 0., 0., 1., 0.);

第 1 〜 3 引数は目の位置の座標、続く第 4 〜 6 引数が見ている位置の座標、最後の 3 つの引数が目の上向きの方向のベクトルです。

setProjcetion() では変数の値に応じて正射影・透視射影を切り替えていますが、正射影の設定に glOrtho() を使っています。

		if(w > h){
			aspect = (float)w/h;
			glOrtho(-aspect, aspect, -1., 1., 1., 10.);
		}else{
			aspect = (float)h/w;
			glOrtho(-1., 1., -aspect, aspect, 1., 10.);
		}

これはこれまで使っていた gluOrtho2D() の代わりとなるもので、最後の 2 つの引数は、gluPerspective() の最後の 2 つ同じく目の位置から視体積の前面・後面までの距離です。

OpenGL プログラミング 目次へ