コンピュータグラフィックス演習,平成 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.線の太さを変化させながら描いた結果
© Copyright 2024 ExpyDoc