現在私のプログラムにあるもの: - マウスをクリックすると、形状オブジェクトが作成され、配列に格納されます。コンストラクターは、作成したばかりのオブジェクトも画面に描画します。最初のクリックで長方形、2 回目のクリックで円、3 回目のクリックで長方形に戻ります。
私のプログラムは、次のように for ループを使用して一度に 25 個の形状を表示しようとしています。
for (int i = 0; i < obj_count; i++) {
if (objects[i].type == 0) {
objects[i].drawRect();
} else if (objects[i].type == 1) {
objects[i].drawCirc();
}
}
しかし、これを実行すると、ちらつきが多く、一度に1つの長方形といくつかの円しか表示されません。if ステートメントを使用して一度に 1 つの図形のみを表示して、配列内の最後の図形を描画しようとすると問題なく動作するため、どこから問題が発生しているのかわかりません。
関連するコードの残りの部分は次のとおりです。
void my_display(void) {
glClear(GL_COLOR_BUFFER_BIT) ;
for (int i = 0; i < obj_count; i++) {
if (objects[i].type == 0) {
objects[i].drawRect();
} else if (objects[i].type == 1) {
objects[i].drawCirc();
}
}
glutSwapBuffers();
return ;
}
void my_TimeOut(int id) {
time += 1;
my_display();
glutTimerFunc(25, my_TimeOut, 0);
}
(タイマーは最終的に形状を動かすために使用されます)
オブジェクト クラス:
void A1_Object::drawRect() {
// glClear(GL_COLOR_BUFFER_BIT) ;
glColor3f(0,0,1) ;
glRectf(vertices[0], vertices[1], vertices[2], vertices[3]);
glutSwapBuffers();
}
void A1_Object::drawCirc() {
// glClear(GL_COLOR_BUFFER_BIT) ;
glColor3f(1,0,0) ;
int triangles = 50;
GLfloat radius = 0.05;
GLfloat twoPi = 2 * 3.14159f;
glBegin(GL_TRIANGLE_FAN);
glVertex2f(center_x, center_y);
for (int i = 0; i <= triangles; i++) {
glVertex2f(center_x + radius*cos(i*twoPi/triangles), center_y + radius*sin(i*twoPi/triangles));
}
glEnd();
// glutSwapBuffers();
}
誰かが私を正しい方向に向けることができれば、それは素晴らしいことです! 必要に応じて、完全なコードを投稿することもできます。