簡単なOpenGLプログラム例―その2
「簡単なOpenGLプログラム例」で説明した準備の後、以下で説明するようにプログラムを書いて実行すると図1の画面が表示される。
図1
図1の描画は、「簡単なOpenGLプログラム例―その1」におけるdisplay関数を以下のように変更したものである。
void display(){
::glClear(GL_COLOR_BUFFER_BIT); // カラーバッファの初期化
::glBegin(GL_TRIANGLES); // 3角形の描画
::glColor3f(1.0,
0.0, 0.0); // 色の設定(R, G, B)
::glVertex2f(-0.5,
-0.4);
::glColor3f(0.0,
1.0, 0.0);
::glVertex2f(
0.5, -0.4);
::glColor3f(0.0,
0.0, 1.0);
::glVertex2f(
0.0, 0.4);
::glEnd();
::glLineWidth(20); // 線の太さ
::glBegin(GL_LINES); // 線分の描画
::glColor3f(1.0,
0.0, 1.0);
::glVertex2f(-0.5,
-0.7);
::glColor3f(0.0,
1.0, 1.0);
::glVertex2f(0.5,
-0.7);
::glEnd();
::glFlush(); // OpenGLのコマンドの実行
}
すなわち、まず3角形の頂点の色を関数glColor3fによって異なるものに設定している。このとき、3角形は設定された各頂点から色がなだらかに変化するように描画される。さらに線分を、その太さを関数glLineWidthによって設定して引いている。この場合も端点の色を変えて設定しているので、線分の色も両端に設定された色からなだらかに変わっている。
描画用画面の色は白となるように
::glClearColor(1.0, 1.0, 1.0, 1.0); // OpenGL用ウィンドウの色(R, G, B, Alpha); Alpha=1.0としておく
と設定している。
図1の描画を行うプログラム全体は以下のようである。
===========================================
#include "stdafx.h"
#include <glut.h>
void display(){
::glClear(GL_COLOR_BUFFER_BIT); // カラーバッファの初期化
::glBegin(GL_TRIANGLES); // 3角形の描画
::glColor3f(1.0,
0.0, 0.0); // 色の設定(R, G, B)
::glVertex2f(-0.5,
-0.4);
::glColor3f(0.0,
1.0, 0.0);
::glVertex2f(
0.5, -0.4);
::glColor3f(0.0,
0.0, 1.0);
::glVertex2f(
0.0, 0.4);
::glEnd();
::glLineWidth(20); // 線の太さ
::glBegin(GL_LINES); // 線分の描画
::glColor3f(1.0,
0.0, 1.0);
::glVertex2f(-0.5,
-0.7);
::glColor3f(0.0,
1.0, 1.0);
::glVertex2f(0.5,
-0.7);
::glEnd();
::glFlush(); // OpenGLのコマンドの実行
}
int _tmain(int argc, char *
argv[]) // 2番目のパラメータの型を「char *」と変更する。
{
::glutInit(&argc,
argv); // 初期化
::glutInitWindowSize(500,
500); // OpenGL用のウィンドウのサイズ
::glutInitDisplayMode(GLUT_RGB); // ディスプレイモードの設定
::glutCreateWindow("Draw Circle"); // OpenGL用ウィンドウの作成表示
::glutDisplayFunc(display); // 下のglutMainLoopに入ったときに呼び出される関数名の登録
::glClearColor(1.0,
1.0, 1.0, 1.0); // OpenGL用ウィンドウの色(R, G, B, Alpha); Alpha=1.0としておく
::glutMainLoop(); // OpenGLのプログラム実行中は、このループ関数が実行中状態になる
return 0;
}
===========================================