テキスト

2010年1月5日

ファイル

16-text.tar.gz

使い方

ウインドウ上でマウスを動かしたりボタンを押したりすると、ウインドウ上にメッセージが表示されます。

内容

マウスの状態をウインドウ上にテキストで描画します。ここでは GLUT のビットマップフォントを使います。

テキストを描画する関数は drawText() です。その中でテキスト描画は以下の部分です。

	glRasterPos2f(x, y);
	for(i = 0; i < strlen(str); i++){
		glutBitmapCharacter(GLUT_BITMAP_8_BY_13, str[i]);
	}

glRasterPos*() でテキストを描画する場所を指定し、glutBitmapCharacter() で文字列の文字を一つずつ描画しています。GLUT_BITMAP_8_BY_13 というのはフォントの指定で、以下のものが指定できます。

  • GLUT_BITMAP_8_BY_13
  • GLUT_BITMAP_9_BY_15
  • GLUT_BITMAP_TIMES_ROMAN_10
  • GLUT_BITMAP_TIMES_ROMAN_24
  • GLUT_BITMAP_HELVETICA_10
  • GLUT_BITMAP_HELVETICA_12
  • GLUT_BITMAP_HELVETICA_18

drawText() ではテキスト描画のための座標の設定を行っていますが、そこで glMatrixMode() という関数を指定しています。これまで変換行列は 1 つのものを操作してましたが、実は射影、モデルビューなどと変換行列を切り替えて設定できます。それを行うのが glMatrixMode() です。この関数に GL_PROJECTION を渡すと射影変換行列の操作に切り替わり、GL_MODELVIEW を渡すとモデルビュー変換行列の操作に切り替わります。

	glMatrixMode(GL_PROJECTION);
	glPushMatrix();

	glLoadIdentity();
	gluOrtho2D(0., w, 0., h);

	glMatrixMode(GL_MODELVIEW);

	glPushMatrix();

	glLoadIdentity();
	glScalef(1., -1., 1.);
	glTranslatef(0., -h, 0.);

上では、まず射影変換行列の操作に切り替えて、以前の設定を変更しないようにするために変換行列をスタックに積み上げ、描画領域をウインドウの大きさを合わせ、次にモデルビュー変換行列の操作に切り替え、これもまた以前の設定をいじらないようにスタックに積み上げ、座標系を下向きにし、原点がウインドウの左上隅にくるようにしています。これ以降は、文字列の描画、スタックからモデルビュー変換行列と射影変換行列を取り出して元に戻す、ということをしています。

OpenGL プログラミング 目次へ