2005年6月13日月曜日

第二回 「OpenGLによる三角形表示」

前回は本当に初歩の初歩、OpenGLの第一歩を踏みました。
まだ3次元形状とまでは行きませんが今回は形状を作成(表示)します。



COpenGLクラスにあるDrawOpenGL関数に
以下のようにしてみてください。



//////////////////////////////////////////////////////ここから
  glLoadIdentity();   //行列の初期化
  gluLookAt(      //カメラの設定
         0, 0, 0,   //カメラの焦点位置、X,Y,Z
         0, 0, 10,  //カメラの位置 X,Y,Z
         0, 1, 0);  //画面の縦座標軸
  //色と奥行きのクリアー
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glBegin(GL_TRIANGLES);   //三角形状の始まり
    glColor3d(1,0,0);      //色の設定
    glVertex3d(0,0,0);     //頂点の座標
    glVertex3d(0.2,0.1,0);   //頂点の座標
    glVertex3d(0.2,-0.1,0);  //頂点の座標
  glEnd();             //終わり
  SwapBuffers(m_pCDC->m_hDC);  //描画実行
//////////////////////////////////////////////////////ここまで


これでコンパイルして赤い三角形が表示されたら成功です。
OpenGLではこの三角形が基本となります。
頂点の座標を変えれば三角形の形が変わります。
またglBeginからglEndまでを繰り返せばいくつも三角形ができます。
三角形のほかにもポリゴンやら四角形やらありますがその辺りは自分で調べてみてください。


またここで重要なのが視点の設定です。
基本的にカメラの焦点、カメラの位置、上が何軸かで決定されます。


これがカメラワークとなるわけです。
カメラが焦点に近づけば形状は大きく表示されますし、遠ざかれば小さくなります。
右に回り込んだり、左に回り込んだりも出来るわけです。


ちなみにカメラを移動させるか、形状を移動させるかどちらも表示上(見た目)は変わりません。
(カメラを右にずらすのも、形状を右にずらしたことと同じことです)
考えやすいほうで移動し表示してください。
ちなみにOpenGL内には決まった単位などはありません。自分でこれはミリやインチで使用すると考えてプログラムを組んでください。


これでOpenGLの形状を表示できるようになりました。
しかしまだまだ3次元のようには見えません。次はいよいよ3次元のように見せる光の設定方法を教えます。


glColor3d関数説明:
第1引数:赤0.0~1.0までで設定
第2引数:緑0.0~1.0までで設定
第3引数:青0.0~1.0までで設定

glVertex3d関数説明:
第1引数:X座標設定
第2引数:Y座標設定
第3引数:Z座標設定

gluLookAt関数説明:
第1~3引数:カメラの焦点位置、X,Y,Z
第4~6引数:カメラの位置 X,Y,Z
第7~9引数:画面の縦座標軸 単位ベクトルで指定すること