0

現在私のプログラムにあるもの: - マウスをクリックすると、形状オブジェクトが作成され、配列に格納されます。コンストラクターは、作成したばかりのオブジェクトも画面に描画します。最初のクリックで長方形、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();
}

誰かが私を正しい方向に向けることができれば、それは素晴らしいことです! 必要に応じて、完全なコードを投稿することもできます。

4

1 に答える 1