透視射影2010年1月6日 | |
![]() ファイル使い方キーボードのキー "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 つ同じく目の位置から視体積の前面・後面までの距離です。 | |
| PENGUINITIS | |