VisualC++ を使った OpenGL 入門
【2.1日目】視点の設定
前回では、 OpenGL の基本形を解説しました。今回は「gluLookAt」を利用して、視点の場所、向きを設定して描画してみます。
プログラムソースは、前回と同じです。ソースをVisualC++に貼り付けて、 「デバック開始」ボタンをクリックすると、上の図のように「世界の始まり」ウィンドウが生成されます。
プログラムの解説
gluLookAt( 0.0, -200.0, 50.0, // 視点の位置x,y,z; 0.0, 0.0, 20.0, // 視界の中心位置の参照点座標x,y,z 0.0, 0.0, 1.0); //視界の上方向のベクトルx,y,z
プログラム中ほどの「gluLookAt」関数を見つけてください。
今回のテーマである「視点の設定」を行なっている場所です。
視点の設定は以下の3つのパラメータで指定します。
(1) 視点の位置 (x0, y0, z0)
(2) 視点の位置からの方向 (x1, y1, z1)
(3) 描画ウィンドウの上を表す単位ベクトル (x2, y2, z2)
はじめに (3) の「描画ウィンドウの上を表す単位ベクトル (x2, y2, z2) 」です。
例では「(0.0, 0.0, 1.0)」としていますが、これは「画面の上下が z軸で、z軸の正の向きを上とする」という意味となります。また逆に、(0.0, 0.0, -1.0)と指定すれば「z軸の負の向きを上とする」という意味となり、逆立ちしたような描画となります。本講座では「z軸」=「高さ」と定義し、zの値が大きいほど高い位置、すなわち画面の上方に描画することとします。
次に、(1)「視点の位置からの方向 (x0, y0, z0)」と (2)「視点の位置からの方向 (x1, y1, z1)」を指定します。この2つのパラメータを指定することで (x0,y0,z0) から (x1,y1,z1) の方向を向いて描画することを表すことができます。これによって、 x軸, y軸, z軸 の描画時の向きを指定することができます。上の例では、(0.0,-200.0,50.0) から (0.0,0.0,50.0)の方向への描画、
すなわち「y軸が画面の手前から奥」となります。
gluLookAt( 0.0, -200.0, 50.0, // 視点の位置x,y,z; 0.0, 0.0, 50.0, // 視界の中心位置の参照点座標x,y,z 0.0, 0.0, 1.0); //視界の上方向のベクトルx,y,z
(1)(2)(3)を合わせて、「z軸が下→上」「y軸が手前→奥」を指定しているので、右手座標系であるOpenGLの場合には結果的に「x軸は左→右」となります。 「gluLookAt」の値を変更して、描画を試してみてください。
gluLookAt の例1
gluLookAt( 0.0, -200.0, 50.0, // 視点の位置x,y,z; 0.0, 0.0, 0.0, // 視界の中心位置の参照点座標x,y,z 0.0, 0.0, 1.0); //視界の上方向のベクトルx,y,z
gluLookAt の例2
gluLookAt( 20.0, -200.0, 40.0, // 視点の位置x,y,z; 0.0, 0.0, 0.0, // 視界の中心位置の参照点座標x,y,z 0.0, 0.0, 1.0); //視界の上方向のベクトルx,y,z
gluLookAt の例3
gluLookAt( 20.0, -200.0, -40.0, // 視点の位置x,y,z; 0.0, 0.0, 0.0, // 視界の中心位置の参照点座標x,y,z 0.0, 0.0, 1.0); //視界の上方向のベクトルx,y,z
今回は、仮想実験場(物理シミュレーション)における「視点の設定」をメインに説明しました。 次回以降も、仮想実験場の建設を行なっていきます。
補足
右手座標系と左手座標系
x軸 y軸 z軸はそれぞれ直角で一意に決まるのですが、軸の方向までを加味すると「右手座標系」と「左手座標系」の2種類が存在します。 手の親指方向を x軸方向 、人差し指方向を y軸方向 、中指を z軸方向と表したとき、各方向が右手の関係と左手の関係の場合をそれぞれ「右手座標系」と「左手座標系」と呼ばれます。 OpenGL は「右手座標系」が採用されています。また物理の世界では、「右ねじの法則」などの便利なように「右手座標系」が一般的に採用されています。どちらの座標系でも本質的な差があるわけではありません。 (3Dグラフィックの世界でよく利用されているDirectXでは「左手座標系」が採用されています)
参考ページ
【目次】 (VisualC++ を使った OpenGL 入門)
- 【参考文献リスト】
- ■ 【0日目】はじめに ・ (0.1日目)OpenGL と Visual C++ 2008 Express Edition の準備
- ■ 【1日目】 世界の始まり ・(1.1日目)OpenGL の基本形
- ■ 【2日目】 地平線 ・ (2.1日目)視点の設定
- ■ 【3日目】 創造物
- ■ 【4日目】 光源
- ■ 【5日目】 視点
- ■ 【6日目】 記憶
- ■ 【7日目】 キーボード入力
- ■ 【8日目】 影
- ■ 【9日目】 文字
- ■ 【10日目】 回転
未分類
- ・ Windows7 OpenGL freeglut のインストール
- ・ OpenGLで霧を表現
- ・ 光源のパラメータ設定1
- ・ 光源のパラメータ設定2
- ・ 光源のパラメータ設定3
- ・ 平面に光をあてるときの注意点
- ・ 波動方程式のテスト
- ・ OpenGLで霧を表現
- ・ OpenGLのカラーサンプル(teapots.c)
- ・ 直方体を回転させよう!