Image

OpenGLとC言語で関数を複数回呼び出す - 多重短形

OpenGLとC言語で作成した関数を複数回呼び出してみましょう。XcodeでOpenGLとC言語を使用します。

OpenGLとC言語で関数を複数回呼び出す

今回はfor文を使用して前回作成した図形を描画するコードを複数回呼び出します。

目次   

01. 図形を描画する関数

02. 関数を複数回呼び出す

03. まとめ


01. 図形を描画する関数


使用する図形を描画する関数は以下の関数です。



//矩形描画関数

void drawRect(double pos[2], double size[2], double color[3]) {

           glColor3d(color[0], color[1], color[2]); //描画色を指定

           glBegin(GL_LINE_LOOP);

           glVertex2d(pos[0], pos[1]); //点Aの座標

           glVertex2d(pos[0] + size[0], pos[1]); //点Bの座標

           glVertex2d(pos[0] + size[0], pos[1] - size[1]); //点Cの座標

           glVertex2d(pos[0], pos[1] - size[1]); //点Dの座標

           glEnd();

}




//円描画関数

void drawCircle(double pos_x, double pos_y, double radius, int startAngle, int endAngle) {

           int i;

           glBegin(GL_LINE_STRIP); //折れ線の描画開始

           for (i = startAngle; i <= endAngle; i += 360.0 / 36) {

                      glColor3d(i / 360.0, i / 360.0, i / 360.0); //描画色を指定

                      glVertex2d(

                                  pos_x + radius * cos(3.14 * i / 180), //線分のx座標

                                  pos_y + radius * sin(3.14 * i / 180//線分のy座標

                      );

           }

           glEnd(); //描画終了

}



これらの関数については前回の記事で触れておりますのでぜひ参考までに。


02. 関数を複数回呼び出す


関数を複数回呼び出すにはdisplay関数内でfor文を使用します。



//描画関数

void display(void) {

           int i;

           double pos[2], size[2], color[3];

           //バッファをクリア

           glClear(GL_COLOR_BUFFER_BIT);

           //多重矩形の描画

           for (i = 1; i < 10; i++) {

                      pos[0] = -0.2 * i; //点Aのx座標

                      pos[1] = 0.2 * i; //点Aのy座標

                      size[0] = 0.1 * i; //点B~Dのx座標(点Aのx座標からの変化量)

                      size[1] = 0.1 * i; //点B~Dのy座標(点Aのy座標からの変化量)

                      color[0] = 1.0 - 0.1 * i; //線の色(赤)

                      color[1] = 0.1; //線の色(緑)

                      color[2] = 0.0 + 0.1 * i; //線の色(青)

                      drawRect(pos, size, color); //矩形描画関数の呼び出し

           }

           // 3つの円の描画

           for (i = 0; i <= 2; i++) {

                      drawCircle(1.0 - i, -1.0 + i, 0.5, 0, 360); //円描画関数の呼び出し

           }

           glFlush(); //命令実行

}



関数を複数回呼び出す処理は関数に渡す値をfor文を使用して1サイクルごとに変化させています。

pos[]とsize[]とcolor[]は引数として渡す配列です。

pos[]は図形を描画する際の点の座標を指定するための配列です。

size[]は図形のサイズを描画するための配列です。

color[]は図形の色を指定するための配列です。

円の描画ではiを使用して円を描画する引数であるpos_xとpos_yを変化させることで円を描画させる座標を変えています。


03. まとめ


お疲れ様でした。

ここまで読んでいただきありがとうございました。

今回は作成した関数をfor文で複数回呼び出して複数の図形を描画しました。

同様のタグを持っている投稿もピックアップされているのでぜひ参考までに。