コンピュータグラフィックス演習,平成 19 年?月?日

コンピュータグラフィックス演習,平成 19 年?月?日レポート(参考)
情報工学科 3 年
学生番号
u196000
1. glBegin,glEnd について説明せよ。
glBegin は点・線・多角形プリミティブの頂点データ
の始まりを宣言する。
glEnd は点・線・多角形プリミティブの頂点データの
終了を宣言する。
2. Display 関数部分のプログラムを示せ。
リスト1にプログラムを示す。
void display( void )
{
int n=10;
//分割数
int i;
float r=0.5;
//半径
float x=0,y=0,z=0;
//座標
glClear( GL_COLOR_BUFFER_BIT );
glColor3f(1.0,1.0,1.0);
//描画物体に白色を設定
glBegin(GL_LINE_LOOP);
//ポリゴンの描画
for(i=0;i<n;i++){
//分割数の数だけ処理を繰り返す
x=r*cos(2.0*PAI*(float)i/(float)n);
y=r*sin(2.0*PAI*(float)i/(float)n);
z=0.0;
glVertex3f(x,y,z);
}
glEnd();
//ポリゴンの描画終了
名前
河田成広(TA)
一方 GL_LINE_STRIP は頂点 V0 から V4 までの線し
か描かないので、頂点 V4 から V0 までに線は描かれな
い。そのため、GL_LINE_LOOP より、一回多く処理を
しなくてはいけない。
今回のような円を描くプログラムでは、
GL_LINE_LOOP を使うと、for 文の繰り返し文で i<n
の形でよいが、GL_LINE_STRIP では、for 文の繰り返
し文で i<=n の形にしなくては、きちんとした円が描か
れない。参考に図3に分割数 n=10 の GL_LINE_STRIP
で、for 文の繰り返し文を i<n の形で実行した結果を示
す。
図3.GL_LINE_STRIP にて
for 文の繰り返し文を i<n で実行した結果
5. プログラムを自由に変更し、自分で作った絵を貼り
付けよ。また、工夫した点について述べよ。
glFlush();
}
リスト1.中心(0,0)、半径 0.5 の
円を描くプログラムの一部
3. 2種類の分割数に対する結果を貼り付けよ。
分割数 n=10 の円を図1に、分割数 n=100 の円を図2
に示す。
図1.分割数 n=10
図2.分割数
今回は glLineWidth()コマンドを使用しての線の太さ
を変えながら円を描くプログラムを作成した。結果は図
4に示す。
glLineWidth()コマンドは glBegin の前に宣言しなけ
ればいけないので、線の太さを変えていくために、for
文を glBegin の前に宣言させた。glLineWidth()コマンド
では線の太さを 8 ビットまでしか大きくできなかったの
で、線を 8 ビットまで太くしたら、今度は 1 ビットまで
細くして、1 ビットになったら、また 8 ビットまで太く
しながら円を描くようにした。それを実行するために、
flag という変数を作り、線分が 8 ビットになったら flag
を 1 にして線分を細くしていき、線分が1ビットになっ
たら flag を 0 にして線分を太くしていくプログラムにし
た。
n=100
4. GL_LINE_LOOP・GL_LINE_STRIP をそれぞれ
使った円を描くプログラムの異なる点を説明せよ。
GL_LINE_LOOP は頂点が V0~V4 までの5つあると
き、V0 から V4 まで線を描き、さらに頂点 V4 と V0 の
間にも線を描く。
図4.線の太さを変化させながら描いた結果