• 締切済み

opengl

C++,openGLの質問です. 画像の上で2点を指定し,その2点を用いて画像上に四角形を表示したいのですがどういったpログラムを書けばいいでしょうか?イメージは図のような感じです.(1)と(2)が画像上で指定した点で高さが255の長方形になるようにしたいです. http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html#5 のサイトを参考に作ってみたのですが,いまいちわかりません. 以下,自分で作ってみたところです. わかりにくいと思いますが,アドバイスいただけたら嬉しいです. painted_pointはint型のベクターでクリックされた点の位置を保存しています. 最終的には,3点以上の折れ線上に長方形がつながってくっつくのことを予定しています. for(int i = 0; i<painted_point.size(); i++){ GLdouble vertex[][3] = { { painted_point.at(i).x, painted_point.at(i)., 0 }, { painted_point.at(i).x, painted_point.at(i)., 255 } } }; int edge[][2] = { {1 , 2} for(int i=0; i<painted_point.size(); i++){ edge[][2] ={{ i*2 , i*2 + 2}, { i*2+1 , i*2 + 3}, } {painted_point.size()-1,painted_point.size()} }; /* 図形の描画 */ glColor3d(0.0, 0.0, 0.0); glBegin(GL_LINES); for (i = 0; i < 12; ++i) { glVertex3dv(vertex[edge[i][0]]); glVertex3dv(vertex[edge[i][1]]); } glEnd(); }

みんなの回答

  • qwertfk
  • ベストアンサー率67% (55/81)
回答No.1

まずはc++の基本的な文法を勉強されるのが一番ではないでしょうか。

関連するQ&A

  • OpenGLについて質問があります。

    底から見上げているように立方体がみえるように実行したいんですけどここからどうしていいかわからなくてわかる方いたら教えてください。お願いします。 #include <GL/glut.h> GLdouble vertex[][3] = { { 0.0, 0.0, 0.0 }, /* A */ { 1.0, 0.0, 0.0 }, /* B */ { 1.0, 1.0, 0.0 }, /* C */ { 0.0, 1.0, 0.0 }, /* D */ { 0.0, 0.0, 1.0 }, /* E */ { 1.0, 0.0, 1.0 }, /* F */ { 1.0, 1.0, 1.0 }, /* G */ { 0.0, 1.0, 1.0 } /* H */ }; int edge[][2] = { { 0, 1 }, /* ア (A-B) */ { 1, 2 }, /* イ (B-C) */ { 2, 3 }, /* ウ (C-D) */ { 3, 0 }, /* エ (D-A) */ { 4, 5 }, /* オ (E-F) */ { 5, 6 }, /* カ (F-G) */ { 6, 7 }, /* キ (G-H) */ { 7, 4 }, /* ク (H-E) */ { 0, 4 }, /* ケ (A-E) */ { 1, 5 }, /* コ (B-F) */ { 2, 6 }, /* サ (C-G) */ { 3, 7 } /* シ (D-H) */ }; void display(void) { int i; glClear(GL_COLOR_BUFFER_BIT); /* 図形の描画 */ glColor3d(0.0, 0.0, 0.0); glBegin(GL_LINES); for (i = 0; i < 12; ++i) { glVertex3dv(vertex[edge[i][0]]); glVertex3dv(vertex[edge[i][1]]); } glEnd(); glFlush(); } void resize(int w, int h) { glViewport(0, 0, w, h); glLoadIdentity(); // glOrtho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0); gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0); //glTranslated(0.0, 0.0, -5.0); gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } void init(void) { glClearColor(1.0, 1.0, 1.0, 1.0); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutReshapeFunc(resize); init(); glutMainLoop(); return 0; }

  • OpenGLでのプログラミングについて質問です

    http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html#7.2 上記URLのソースについて幾つか質問です。 1.以下の用に記述すると、何故以前のラバーバンドを消去することになるのでしょうか? if (rubberband) { /* 以前のラバーバンドを消す */ glVertex2iv(point[pointnum - 1]); glVertex2iv(savepoint); } 2.以下の部分の、staticはどういう役割をしているのでしょうか? void motion(int x, int y) { static GLint savepoint[2]; /* 以前のラバーバンドの端点 */ 3.メインは、以下のように記述されているのですが、OpenGLは通常のCプログラミングと違い、上から下に順次処理されて行っているだけでなく、見えない部分でも何か処理をやっているようなのですが、どういう順序でこのmainは処理されているのでしょうか? int main(int argc, char *argv[]) { glutInitWindowPosition(100, 100); glutInitWindowSize(320, 240); glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutReshapeFunc(resize); glutMouseFunc(mouse); glutMotionFunc(motion); init(); glutMainLoop(); return 0; } あと、 http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html#6.1 に書かれている、 glOrtho(-w / 200.0, w / 200.0, -h / 200.0, h / 200.0, -1.0, 1.0); という関数の意味がよく分かりません。 どなたか、どれか一つだけでも良いので解答をお願いします。

  • OpenGLで写真を表示したい

    OpenGLで書いた四角の中に写真を表示したいのですが、どうやって良いのか良くわかりません。 具体的には、 glNewList(i*2,GL_COMPILE); glBegin(GL_LINE_LOOP); glColor3fv(col[i]); glVertex2i(xpos[i]-radiusx[i],ypos[i]-radiusy[i]); glVertex2i(xpos[i]+radiusx[i],ypos[i]-radiusy[i]); glVertex2i(xpos[i]+radiusx[i],ypos[i]+radiusy[i]); glVertex2i(xpos[i]-radiusx[i],ypos[i]+radiusy[i]); glEnd(); glEndList(); で描画した四角形の中に radiusx[i]*2 , radiusy[i]*2 の大きさに縮小した i番目のJpeg写真(640x480)を書きたいのです。 現在、以下のファイルをインクルードしています。 #include <windows.h> #include <gl\gl.h> #include <gl\glu.h> #include <gl\glaux.h> #include <stdio.h> 追加すべきインクルードファイル、DLLなどお教えください。 なお、開発環境はフリーの Visual Windows for BC++ です。

  • お願いします。

    IT関係の会社に内定をもらったのですが課題を出されました。 正直プログラミングなんて一度もやった事がなくて困っています。 三角形の面を定義する配列trianlglepを作成して、立方体を三つの頂点ごとの三角形で色分けするのをわかる方がいたら教えてください。お願いします。 #include <GL/glut.h> GLdouble vertex[][3] = { { 0.0, 0.0, 0.0 }, /* A */ { 1.0, 0.0, 0.0 }, /* B */ { 1.0, 1.0, 0.0 }, /* C */ { 0.0, 1.0, 0.0 }, /* D */ { 0.0, 0.0, 1.0 }, /* E */ { 1.0, 0.0, 1.0 }, /* F */ { 1.0, 1.0, 1.0 }, /* G */ { 0.0, 1.0, 1.0 } /* H */ }; int edge[][2] = { { 0, 1 }, /* ア (A-B) */ { 1, 2 }, /* イ (B-C) */ { 2, 3 }, /* ウ (C-D) */ { 3, 0 }, /* エ (D-A) */ { 4, 5 }, /* オ (E-F) */ { 5, 6 }, /* カ (F-G) */ { 6, 7 }, /* キ (G-H) */ { 7, 4 }, /* ク (H-E) */ { 0, 4 }, /* ケ (A-E) */ { 1, 5 }, /* コ (B-F) */ { 2, 6 }, /* サ (C-G) */ { 3, 7 } /* シ (D-H) */ }; int plane[][4] = { { 0, 1,2,3 }, /* 面0 (A-B-C-D) */ { 1, 5,6,2 }, /* 面1 (B-F=G-C) */ { 2, 6,7,3 }, /* 面2 (C-G-H-D) */ { 0,3,7,4 }, /* 面3 (A-D-H-E) */ { 1, 0,4,5 }, /* 面4 (B-A-E-F) */ { 4, 7,6,5 }, /* 面5 (E-H-G-F) */ }; void display(void) { int i; glClear(GL_COLOR_BUFFER_BIT); /* 図形の描画 */ //glColor3d(0.0, 0.0, 0.0); //glBegin(GL_LINES); glBegin(GL_QUADS); for (i = 0; i < 6; ++i) { switch (i) { case 0 : glColor3d(1.0, 0.0, 0.0); break; case 1 : glColor3d(0.0, 1.0, 0.0); break; case 2 : glColor3d(0.0, 0.0, 1.0); break; case 3 : glColor3d(1.0,1.0,0.0); break; case 4 : glColor3d(0.0, 1.0, 1.0); break; case 5 : glColor3d(1.0, 0.0, 1.0); break; case 6 : glColor3d(1.0, 0.5, 0.0); break; case 7 : glColor3d(0.0, 1.0, 0.5); break; case 8 : glColor3d(0.5, 0.0, 1.0); break; case 9 : glColor3d(1.0, 0.5, 0.5); break; case 10 : glColor3d(0.5, 1.0, 0.5); break; case 11 : glColor3d(0.5, 0.5, 1.0); break; default: glColor3d(0.0, 0.0, 0.0); break; } glVertex3dv(vertex[plane[i][0]]); glVertex3dv(vertex[plane[i][1]]); glVertex3dv(vertex[plane[i][2]]); glVertex3dv(vertex[plane[i][3]]); } glEnd(); glFlush(); } void resize(int w, int h) { glViewport(0, 0, w, h); glLoadIdentity(); // glOrtho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0); gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0); //glTranslated(0.0, 0.0, -5.0); gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//課題はここを弄るだけ } void init(void) { glClearColor(1.0, 1.0, 1.0, 1.0); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutReshapeFunc(resize); init(); glutMainLoop(); return 0; }

  • 内定をもらった会社から課題を出されてしまいました。

    三角形の面を定義する配列trianlglepを作成して、立方体を三つの頂点ごとの三角形で色分けするやり方がわかる方がいたら回答お願いします。 プログラミング未経験者なのでよろしくお願いします。 #include <GL/glut.h> GLdouble vertex[][3] = { { 0.0, 0.0, 0.0 }, /* A */ { 1.0, 0.0, 0.0 }, /* B */ { 1.0, 1.0, 0.0 }, /* C */ { 0.0, 1.0, 0.0 }, /* D */ { 0.0, 0.0, 1.0 }, /* E */ { 1.0, 0.0, 1.0 }, /* F */ { 1.0, 1.0, 1.0 }, /* G */ { 0.0, 1.0, 1.0 } /* H */ }; int edge[][2] = { { 0, 1 }, /* ア (A-B) */ { 1, 2 }, /* イ (B-C) */ { 2, 3 }, /* ウ (C-D) */ { 3, 0 }, /* エ (D-A) */ { 4, 5 }, /* オ (E-F) */ { 5, 6 }, /* カ (F-G) */ { 6, 7 }, /* キ (G-H) */ { 7, 4 }, /* ク (H-E) */ { 0, 4 }, /* ケ (A-E) */ { 1, 5 }, /* コ (B-F) */ { 2, 6 }, /* サ (C-G) */ { 3, 7 } /* シ (D-H) */ }; int plane[][4] = { { 0, 1,2,3 }, /* 面0 (A-B-C-D) */ { 1, 5,6,2 }, /* 面1 (B-F=G-C) */ { 2, 6,7,3 }, /* 面2 (C-G-H-D) */ { 0,3,7,4 }, /* 面3 (A-D-H-E) */ { 1, 0,4,5 }, /* 面4 (B-A-E-F) */ { 4, 7,6,5 }, /* 面5 (E-H-G-F) */ }; void display(void) { int i; glClear(GL_COLOR_BUFFER_BIT); /* 図形の描画 */ //glColor3d(0.0, 0.0, 0.0); //glBegin(GL_LINES); glBegin(GL_QUADS); for (i = 0; i < 6; ++i) { switch (i) { case 0 : glColor3d(1.0, 0.0, 0.0); break; case 1 : glColor3d(0.0, 1.0, 0.0); break; case 2 : glColor3d(0.0, 0.0, 1.0); break; case 3 : glColor3d(1.0,1.0,0.0); break; case 4 : glColor3d(0.0, 1.0, 1.0); break; case 5 : glColor3d(1.0, 0.0, 1.0); break; case 6 : glColor3d(1.0, 0.5, 0.0); break; case 7 : glColor3d(0.0, 1.0, 0.5); break; case 8 : glColor3d(0.5, 0.0, 1.0); break; case 9 : glColor3d(1.0, 0.5, 0.5); break; case 10 : glColor3d(0.5, 1.0, 0.5); break; case 11 : glColor3d(0.5, 0.5, 1.0); break; default: glColor3d(0.0, 0.0, 0.0); break; } glVertex3dv(vertex[plane[i][0]]); glVertex3dv(vertex[plane[i][1]]); glVertex3dv(vertex[plane[i][2]]); glVertex3dv(vertex[plane[i][3]]); } glEnd(); glFlush(); } void resize(int w, int h) { glViewport(0, 0, w, h); glLoadIdentity(); // glOrtho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0); gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0); //glTranslated(0.0, 0.0, -5.0); gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//課題はここを弄るだけ } void init(void) { glClearColor(1.0, 1.0, 1.0, 1.0); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutReshapeFunc(resize); init(); glutMainLoop(); return 0; }

  • OpenGL 画像のα値操作

    こんにちは。 現在、授業の一環でGLUTを用いたOpenGLのプログラムを作っています。 そのプログラムの機能の中に、読み込んだ画像のα値を記憶した後、キー操作によって表示・非表示を切り替える機能を作ろうとしています。 目的の機能自体は一応途中まで(各ピクセルのα値を255⇔0への切り替え)は作れたのですが、原理がよく分かりません。 具体的に書くと、(幅)×(高さ)×(色のチャンネル数) の画像を読み込んだのに、4倍の高さの範囲までα値に関する処理を加えないと、処理後の効果が画像全体に現れないのです。 下にプログラムの断片を張るので、わかる方がいたら解説お願いします。 出来れば、後々のために理由を知っておきたいので。 -*-*-*-*-*-*-*-*-*- /* テクスチャの情報を格納する構造体 */ typedef struct{ unsigned int name; /* 識別番号 */ unsigned char* data; /* 画像のデータ */ int width; /* 画像の幅 */ int height; /* 画像の高さ */ int channels; /* 画像の色成分の数 */ }texture; /* テクスチャ(グローバル変数) */ texture a; /* 画面表示用の関数 */ void display (void) {  /* 初期化 */ glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* 透明色を描けるようにする */ glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);  /* 描画 */ glDrawPixels(a.width, a.height, GL_RGBA, GL_UNSIGNED_BYTE, a.data); glutSwapBuffers (); } /* α値の操作(代入値がかわるだけなので、255にする方は省略) */ void alpham(void) { int i, j; for (i = 0; i < a.height * 4; ++i) { for (j = 0; j < (a.width); ++j) { a.data[(a.width * i) + (a.channels * j) +3] = 0; } } } ※画像データ の メモリ確保サイズ a.data = (unsigned char*) malloc(width * height * channels)

  • C言語 格子点が多角形の中にあるかどうか?

    こんにちは. 私はプログラミングを勉強しはじめて3ヵ月くらいです. 今、与えられた多角形(例えば、(0,0),(3,7),(5,7),(8,3),(4,1),(1,0)の五点からなる多角形)の内部に格子点が存在するかどうかをチェックする(存在すれば1を返す等)ということをプログラミングを利用して,解決したいと思っています.最終的にはそれを利用して与えられた多角形をビットマップ表示にすることが目的です. 現在ある一つの自分の決めた点に関しては与えられた多角形を打ち込むことによって中か外かを判定する関数はできているのですが、100×100個の計10000個分の格子点に関してすべて中にあるか外にあるかを判定したいのですが、なかなか上手くいきません. 分かる方いらっしゃいましたら、アドバイスやプログラムの方よろしくお願いします. 今できているプログラムをのせておきます. #include <stdio.h> #include <stdlib.h> /* #define JUST_ON 2 */ #define JUST_ON 1 int insidePolygon(int x, int y, int pn, int *px, int *py); int insidePolygon(int x, int y, int pn, int *px, int *py) /* x and y are the vertex I want to know in polygon. pn is the number of vertex of polygon *px and *py are the vertex of polygon */ { int i, j; int inside; double yy; if (pn < 1) return 0; if (pn == 1) return x==px[0] && y==py[0]; /* Point (x,y) just lies on the edge or vertex of polygon */ for (i = 0, j = pn-1; i < pn; j = i++) { if (py[i] == py[j] && y == py[i] && ((px[i]<=x && x<=px[j]) || (px[j]<=x && x<=px[i]))) return JUST_ON; else if (py[i] != py[j] && ((py[i]<=y && y<=py[j]) || (py[j]<=y && y<=py[i])) && x == (double)(px[j]-px[i])*(y-py[i])/(py[j]-py[i])+px[i]) return JUST_ON; } /* Point (x,y) is inside/outside polygon */ inside = 0; yy = y + 0.5; /* shift y to avoid acrossing the poly's edges or vertices */ for (i = 0, j = pn-1; i < pn; j = i++) { if (((py[i]<=y && y<py[j]) || (py[j]<=y && y<py[i])) && x < (double)(px[j]-px[i])*(yy-py[i])/(py[j]-py[i])+px[i]) inside = !inside; } return inside; } int main() { int ii; int xx, yy; int pnpn; int pxpx[100], pypy[100]; int ret; printf("Enter (x,y) of a point -> "); scanf("%d %d", &xx, &yy); printf("Enter the number of vertics of the polygons -> "); scanf("%d", &pnpn); for (ii= 0; ii < pnpn; ii++) { printf("Enter %d-th vertics's (x, y) -> ", ii+1); scanf("%d %d", &pxpx[ii], &pypy[ii]); } ret = insidePolygon(xx, yy, pnpn, pxpx, pypy); if (ret == 0) printf("The point is outside the polygon.\n"); else printf("The point is inside the polygon\n"); }

  • c言語でのダイクストラ法の実装

    大学の課題で、c言語におけるダイクストラ法について以下のようなものが出たのですが出力のためにどのようなコードを書けばいいかわかりません。どなたかコードや実装方法を教えていただけないでしょうか。 (入力例) 7 -1 7 3 6 -1 -1 4 7 -1 5 -1 6 -1 -1 3 5 -1 4 1 3 5 6 -1 4 -1 -1 -1 7 -1 6 1 -1 -1 2 -1 -1 -1 3 -1 2 -1 9 4 -1 5 7 -1 9 -1 1 1行目は頂点の数、2行目以降の各行は隣接行列の各要素を空白区切りで表し、最後の行の数はスタートの頂点の番号 [出力] 1. スタートとして選択した頂点から各頂点への最短経路とコストを以下の形式で 出力する.ここで s はスタートの頂点, g はゴールの頂点, c は合計のコス トを表す.また s ... g は最短経路の各頂点を空白区切りとして表す. s-->g : c ( s ... g ) 以下は上記の入力例の場合の出力例 Input>1 <-- スタートとして選択した頂点番号 1-->0 : 7 ( 1 0 ) 1-->1 : 0 ( 1 ) 1-->2 : 5 ( 1 2 ) 1-->3 : 9 ( 1 2 3 ) 1-->4 : 6 ( 1 4 ) 1-->5 : 8 ( 1 2 5 ) 1-->6 : 10 ( 1 2 6 ) ↓自分の書いたコード #include <stdio.h>#include <limits.h>#define FALSE 0 #define TRUE (!FALSE) #define INFINITY INT_MAX #define MAXSIZE 100 int dijkstr(int number_of_vertex, int weight[][MAXSIZE], int start_vertex){ int is_in_mst[MAXSIZE], d[MAXSIZE]; int i, j, number_of_edges, min_d, v; printf("Input>%d\n", start_vertex); for (i = 0; i <number_of_vertex; i++) is_in_mst[i] = FALSE; for (i = 0; i <number_of_vertex; i++) d[i] = INFINITY; d[start_vertex] = 0; for(number_of_edges = 0; number_of_edges<(number_of_vertex-1); number_of_edges++) { min_d = INFINITY; v = INFINITY; for (i = 0; i <number_of_vertex; i++) { if(is_in_mst[i] == FALSE &&d[i] <min_d) { min_d = d[i]; v = i;}} if(v != INFINITY) is_in_mst[v] = TRUE; for (i = 0; i <number_of_vertex; i++) { if(is_in_mst[i] == FALSE &&weight[i][v] != INFINITY &&(weight[i][v] + d[v]) <d[i]) d[i] = weight[i][v] + d[v];}}} int main(void){ int weight[MAXSIZE][MAXSIZE]; int i, j, data, n, start; printf("Input data size>"); scanf("%d", &n); printf("%d\n", n); for (i = 0; i <n; i++) { for(j = 0; j <n; j++) { printf("Input data>"); scanf("%d", &data); printf("%d\n", data); weight[j][i] = data; if(weight[j][i] == -1) weight[j][i] = INFINITY;}} printf("\n"); printf("Input start vertex>"); scanf("%d", &start); return 0;}

  • C++関数の仮引数について

    関数の引数に配列を指定したいのですが たとえば、 double* point[4]; void setPoint(double _point[]) { for(int i = 0; i < 4; i++){ point[i] = (_point + i); } } int main(void) { setPoint((double[])(1.0, 2.0, 3.0, 4.0)); } '型キャスト' : 'double' から 'double []' に変換できません。 とエラーが出てしまいます。 どのようにすればよいでしょうか?

  • プログラミングのopenglで困っています.

    OpenGlの超初心者です. openglで,円を一つ作ってあるsampleプログラムを拾ってきたのですが, 円をもう一つ,別の座標で作りたいのですが,以下のプログラムをどのように編集すればいいですか? 誰か助けてください. ========================================== #include <GLUT/glut.h> #include "glut.h" #include <math.h> //--初期化処理------------------------------------------------------------------ void myinit(void){ glClearColor(1.0f, 1.0f, 1.0f, 1.0f);//背景色の設定(R,G,B,ALPHA) 0.0-1.0の範囲で } //--描画内容-------------------------------------------------------------------- void display(void){ float x1,y1,x2,y2; float th1,th2; float th1_rad, th2_rad; float hankei = 0.1; glClear(GL_COLOR_BUFFER_BIT);//画面全体を背景色で塗りつぶす glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //単位行列を行列スタックに読み込む glColor3f(0.0f, 0.0f, 0.0f);//頂点カラーの指定( R, G, B すべてが1.0fなら白) for (th1 = 0.0; th1 <= 360.0; th1 = th1 + 10.0){ th2 = th1 + 10.0; th1_rad = th1 / 180.0 * 3.1415926; // 「度」を「ラジアン」に直す th2_rad = th2 / 180.0 * 3.1415926; x1 = hankei * cos(th1_rad); y1 = hankei * sin(th1_rad); x2 = hankei * cos(th2_rad); y2 = hankei * sin(th2_rad); glBegin(GL_LINES);//glBegin(GL_LINES)とglEnd()の間に glVertex2f( x1, y1 ); //描画したい直線の頂点を並べる glVertex2f( x2, y2 ); glEnd(); //ここまでで,ひとつのオブジェクトの宣言がおわる } glFlush();//OpenGLで実際に描画を行う } //--再描画---------------------------------------------------------------------- void myReshape(GLsizei w, GLsizei h){ glViewport(0,0,w,h); //ウィンドウ全体をビューポートにする glMatrixMode(GL_PROJECTION); glLoadIdentity();//単位行列を行列スタックに読み込む glOrtho(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f); } //--メイン関数------------------------------------------------------------------ int main(int argc, char **argv){ glutInitWindowPosition(100, 100); //(図形が描画される)ウィンドウ位置の設定 glutInitWindowSize(600, 600); //(図形が描画される)ウィンドウサイズの設定 glutInit(&argc, argv);//環境の初期化 glutInitDisplayMode(GLUT_RGBA|GLUT_SINGLE); //表示モードの設定 glutCreateWindow("kadai"); //ウィンドウを開く glutDisplayFunc(display); //図形表示関数の指定 myinit(); glutReshapeFunc(myReshape); //座標軸・ビューポート設定関数の指定 glutMainLoop();//無限ループ return 0; } ==========================================

専門家に質問してみよう