点

2010年1月4日

ファイル

04-point.tar.gz

内容

点を描画します。点の描画は、描画コールバック関数において以下のようにします。

	glBegin(GL_POINTS);
	glVertex2f(0., 0.);
	glVertex2f(0.5, 0.5);
	glVertex2f(0.5, -0.5);
	glVertex2f(-0.5, 0.5);
	glVertex2f(-0.5, -0.5);
	glEnd();

glBegin(GL_POINTS) ... glEnd(); の間に glVertex*() を書いていきます。glVertex2f() の 2 は引数の数、f は引数に浮動小数点数を取ることを意味しています。

点の大きさは glPointSize() で指定します。点の色は glBegin() の前に glColor*() で指定します。

	glPointSize(5.);
	glColor3f(0., 0., 0.);

本プログラムでは、ウインドウサイズ変更時の再描画コールバック関数を設定しています。

	glutReshapeFunc(reshape);

コールバック関数 reshape() は、引数にウインドウの幅と高さを取ります。reshape() 内では、ビューポートと正射影の設定をしています。ビューポートの設定は以下のようにします。

	glViewport(0, 0, w, h);

これは描画領域の範囲 (領域の始点と幅と高さ) を指定しています。

正射影の設定は gluOrtho2D() で行っています。

	if(w > h){
		aspect = (float)w/h;
		gluOrtho2D(-aspect, aspect, -1., 1.);
	}else{
		aspect = (float)h/w;
		gluOrtho2D(-1., 1., -aspect, aspect);
	}

上では、ウインドウの形に応じて描画領域が歪まないように調整しています。gluOrtho2D() の引数では、ワールド座標 (点とか線などのモノが置かれる座標) の範囲を指定しています。その領域内のモノがビューポート内に描画されます。

gluOrtho2D() の前 (setOrtho() の前) に呼ばれている glLoadIdentity() は、変換行列を単位行列に初期化するための関数です。

OpenGL プログラミング 目次へ