精密工学科プログラミング基礎 第6回資料 その2

精密工学科プログラミング基礎
第6回資料 その2 (11/18実施)
今回の授業で追加で習得してほしいこと:
• グラフィクスライブラリ(OpenGL)を例にして、
他の人が作った関数ライブラリを使ってみる
– ライブラリ中の関数の使い方
– 繰り返し・条件分岐の復習
– 図形を表示して楽しむ
資料のURL : http://lecture.ecc.u-tokyo.ac.jp/~tohtake/
OpenGL とは?
• グラフィクス出力のための面倒な計算を
行うための関数ライブラリ
• 座標値を渡すだけで絵が描ける
データ
(0,0)
(1,0)
(0,1)
ディスプレイに
表示
2
OpenGL で描くことができる図形
• 点・線分・多角形 などの基本図形
– glBegin(図形タイプ) で始めて、 glEnd() で閉じる。
– glVertex2d(x,y)で図形を定義する点の座標を指定
• “2d” は 2次元のdouble型という意味
3角形
glBegin(GL_POLYGON);
glVertex2d(0,0);
glVertex2d(1,0);
glVertex2d(0,1);
glEnd();
4角形
glBegin(GL_POLYGON);
glVertex2d( 1, 1);
glVertex2d(-1, 1);
glVertex2d(-1,-1);
glVertex2d( 0,-1);
glEnd();
3
描ける図形タイプ
3点を描画
glPointSize(3);
glBegin(GL_POINTS);
glVertex2d(0,0);
glVertex2d(1,0);
glVertex2d(0,1);
glEnd();
線分2本を描画
glLineWidth(2.5);
glBegin(GL_LINES);
glVertex2d(0,0);
glVertex2d(1,0);
glVertex2d(0,1);
glVertex2d(1,1);
glEnd();
描画される点(線分)の
大きさ(太さ)の設定
1本目
2本目
4
色の設定
• glColor3d で、(R, G, B) を指定する
• 値は 0.0~1.0 まで
glBegin(GL_POINTS);
glColor3d(1,0,0);
glVertex2d(0,0.5);
glColor3d(0,1,0);
glVertex2d(0,0);
glColor3d(0,0,1);
glVertex2d(0.5,0);
glEnd();
5
例: 円を点で描画
• 三角関数で、円周上に100個の点を並べる。
・・・・ (省略)
こ
こ
を
変
え
る
と
図
形
が
変
わ
る
/* 図形描画のためのOpenGLのプログラムをここに書く */
void paint(){
int i; /* 繰り返しのカウンタ */
glPointSize(3.0); /* 点の大きさ (単位はピクセル) */
glColor3d(1, 1, 1); /* 色の設定. 光の3原色(赤, 緑, 青) */
}
/* 点で円を描く */
for(i=0; i<100; i++){
double a = 2*3.1415*i/100; /* 角度 */
glBegin(GL_POINTS);
glVertex2d(200*cos(a)+250, 200*sin(a)+250);
glEnd();
}
中心 (250, 250)
・・・・・ (省略)
半径 200 の円
𝑥
𝑦
ウィンドウサイズは
500 × 500
6
MACでのコンパイル方法
• OpenGL と GLUT というライブラリを使用
gcc -framework OpenGL –framework GLUT sample.c
MAC のコンパイルにおいて、
ライブラリを指定するオプションです.
メモ :
OpenGL : 2D・3Dグラフィックス描画のためのライブラリです.
GLUT : ウィンドウを出したりマウスの操作を行うための OpenGL の補助ライブラリです.
7
課題
以下を表示するプログラムを作成せよ。
• 同心円
• 3色のルーレット
• 2色のチェック模様
– 3色以上も考えてみよ
マウスやキーボードの利用やアニメーションなどもできる。
詳しくは下記のURLなどを参考。
http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html
8