HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > コンピュータ・シミュレーション講座 授業日誌

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 入門)

未分類




▲このページのトップNPO法人 natural science トップ

関連記事

OpenGL入門







コンピュータ・シミュレーション講座 授業日誌







▲このページのトップNPO法人 natural science トップ




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました