現在地 >> メニュー >> 基本編03 >> 視野の設定

次は >> 視点の設定

<視体積の設定>


ビューポートを決定した後は、「どの範囲までが視界に入るか?」
つまり、視体積(視野)を決める。

<前準備>


まず、視体積の設定が有効になるように、行列モードを切り替える。
これは
glMatrixMode(GL_PROJECTION)
と記述すればよい。


どんな視野にするか?


視野を設定するという事は、
3次元空間上の物体が、2次元空間であるウィンドウのどの位置にうつるのか?
という、投影方法を決定する事でもある。

おもに以下の2つがある。
  • 透視投影 (こちらが普通の見え方)
  • 並行投影


<透視投影>


「透視投影」の設定には、「glFrustum()関数」や「gluPerspective()関数」がある。

[glFrustum()関数の場合]

glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble znear, GLdoble zfar)

「left」、「right」:「左」、「右」の垂直座標を指定
「bottom」、「top」:「下」、「上」の水平座標を指定
「znear」、「zfar」:「手前」、「奥行き」を指定

これによって、見る空間の広さが決まる。


[ 例 ]

glMatrixMode(GL_PROJECTION);//モード切替え
glLoadIdentity();  ///行列リセット
glFrustum(0,4,2,0,2,10);  //「透視射影」の設定



[gluPerspective()関数の場合]

gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)

「fovy」:「y座標」、すなわち「縦方向の視野角」を指定
「sapect」:「視野角」に対する、「比率」で「水平方向の視野角」を決定
「zNear」、「zFar」:「手前」、「奥行き」を指定


[ 例 ]

glMatrixMode(GL_PROJECTION);//モード切替え
glLoadIdentity();  ///行列リセット
gluPerspective(160, 0.75,1,10);  //「透視射影」の設定

この場合、

縦:160度
横:120度(4:3)

という設定をしている。


<並行投影>


真横からみるような視点。視点に影響されず、常に正しいサイズで表示する。

「正射影行列」を使うには、「glOrtho()関数」を使う。
glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zbear, GLdoble zfar)

「引数」については、「glFrustum()関数」と同じである


[ 例 ]

glMatrixMode(GL_PROJECTION);//モード切替え
glLoadIdentity();  ///行列リセット
glOrtho(-1, 1, -1, 1, 2, 4);  //「透視射影」の設定

メモ


並行投影は2次元を扱う時、例えばOpenGLで画像処理を行う場合などに用いる事がよくある。


まとめ:ビューポート、視野の設定例


void reshape(int w, int h)
{
    glViewport(0, 0, w, h);  //ビューポートの設定
    
    glMatrixMode(GL_PROJECTION);  //モードの切り替え
    glLoadIdentity();  //行列の初期化
    gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0); //視野の設定
    glMatrixMode(GL_MODELVIEW); //モードを元に戻す

}



次は >> 視点の設定

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます