第9回:グラフィックス

今週は,関数の復習を兼ねて,コンピュータで絵を描く方法を学ぶ.


第8回演習:解答例


グラフィック入門編

まず,道具箱をダウンロードしよう.

ここ(mogla.zip)を右クリックして,ソースファイルを保存するフォルダと同じ場所に保存する.
(この時,「ファイルの種類」は「テキスト文書」ではなく「すべてのファイル」に変更する.)

これは,グラフィックスの基本的な関数を集めたライブラリ(OpenGL)を,borland C で使えるようにしたもので,ファイルをダブルクリックするとmogla という名前のフォルダができる.グラフィックスを利用してプログラムを組むときは,このフォルダの中で作業をする.

プログラムで,使える命令は下記の通りである. これらの関数を呼び出して,画面に絵を描いてみよう.


画面に絵を描画する場合,まず,座標系に注意しよう.
X座標は左から右へ増加,Y座標は下から上へ増加する.
原点は,新しくできるウインドウの中心となる.
座標値は整数である.
これらの特徴は,コンピュータのディスプレイの仕組みに依存する.


下記に絵を描くための関数の使い方を示す.座標の値はint型と書いてあるが,float型でもdouble型でも可.


グラフィックのサンプルプログラム


#include <stdio.h>
#include "mogla.f"		/* この行を忘れないこと */

void graphic(void)		/* この関数の中で描画する */
{
	double x1,x2,x3,y1,y2,y3;

	gl_clearbuffer();		/* おまじない */

		x1=-200.0;
		y1=0.0;
		x2=0.0;
		y2=200.0;
		x3=(x1+x2)/2.0;
		y3=(y1+y2)/2.0;

	line(x1,y1,x2,y2,10);
	line(0.0,0.0,x3,y3,12);
	line(0,0,320,0,5);

	box(0,0,100,100,2);

	circle(256,256,100,3);
	
	gl_flush();			/* おまじない */

}

void main()
{
	gl_int(640, 480);		/*  640*480ピクセルのウインドウを開く  */

	gl_displayfunc(graphic);	/* 描画関数の呼び出し */

	gl_loop();			/* 再描画処理  */
}

このプログラムは,先ほどのmoglaフォルダに,mogla.cとして保存されている.これをコンパイルするには,「cd mogla」と二回入力してmoglaフォルダ内に移動して,bccglというコマンドを用いて,

bccgl mogla.c

と入力する.実行すると,新しいウィンドウが開いて,グラフィックが描かれる.(若干画面が乱れますが,画面を重ねると直ります)

絵が描画されたウインドウを閉じるには,ウインドウ右上の閉じるボタン「×」を押す.


【演習課題】

(1)台形を表示するプログラムを作成してみよう.

(2)y = x のグラフを表示するプログラムを作成してみよう.ただし,x軸とy軸も色を変えて表示させること.

(3)(2)と同様に y = x2 のグラフを表示するプログラムを作成してみよう.ただし,できるだけ見やすい形になるよう工夫しよう(ピクセルの座標値にとらわれないこと).

(4)(3)と同様に y = sin(x) および y = cos(x) のグラフを表示するプログラムを作成してみよう.また,それぞれのグラフを色分けしてみよう.

(5)前々回の演習(3)で作成した"sin.csv" のファイルを読み込んで,(4)と同様に y = sin(x) のグラフを表示するプログラムを作成してみよう."sin.csv" のファイルをmoglaフォルダ内に保存することを忘れないこと.

(6)16×16の2次元配列に配色のデータ(データの値を色の番号として考える)を書いてあります.配列をファイルから読み込み,グラフィックスを用いて画面に表示するプログラムを作成してみよう.どんな図柄が現れるかな??
配列は、次のファイルを(右クリック-->[対象をファイルに保存])で保存したものを用いよ.
   [graphics.txt]

授業終了時までのプログラムと完成した提出用プログラムをoh-meijiシステムを使って提出すること.
授業終了時に送るのは出席の確認用であり,完成した課題は提出用の回に送ること.
(提出期限を厳守し,提出用の回に提出しないと採点を行わない)