12

ボタンを押した後にウィンドウの背景色を変更したいのですが、プログラムが動作しません。誰か教えてもらえますか?

int main(int argc, char* argv[])
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  glutInitWindowSize(800, 600);
  glutInitWindowPosition(300,50);
  glutCreateWindow("GLRect");
        
  glClearColor(1.0f, 0.0f, 0.0f, 1.0f);   <---
    
  glutDisplayFunc(RenderScene);
  glutReshapeFunc(ChangeSize);
  glutMainLoop();
    
  system("pause");
  glClearColor(0.0f, 1.0f, 0.0f, 1.0f);   <---
    
  return 0;
}
4

2 に答える 2

25

glClearColor実際にクリアしたときの色を設定するだけです。glClearクリア自体を行うには、 (少なくとも) で呼び出す必要がありますCOLOR_BUFFER_BIT

編集: glut を使用してからかなりの時間が経過しているため、この詳細は間違っている可能性がありますが、メモリが役立つ場合は、キーボードのキーを押したときに画面の色を変更するには、次のようにします。

void keyboard (unsigned char key, int x, int y)
{
    // we'll switch between red and blue when the user presses a key:
    GLfloat colors[][3] = { { 0.0f, 0.0f, 1.0f}, {1.0f, 0.0f, 0.0f } };
    static int back;

    switch (key) {
    case 27: 
        exit(0);
    default:
        back ^= 1;
        glClearColor(colors[back][0], colors[back][1], colors[back][2], 1.0f);
        glutPostRedisplay();
    }
}

void draw() { 
    glClear(GL_COLOR_BUFFER_BIT);
    // other drawing here...
}

int main() { 

    // glutInit, glutInitDisplayMode, etc.

     glutDisplayFunc(draw);
     glutKeyboardFunc(keyboard);
     glutMainLoop();
}

基本的に、 に渡す関数ですべての描画を行いますglutDisplayFuncPostRedisplayFunc();他のほとんどのものは状態を変更するだけで、ウィンドウを再描画する必要があることを glut に伝えるために呼び出します。警告: 私が言ったように、私が glut を使用してからしばらく経ち、このコードをテストしていません。私の記憶の限りでは、過剰プログラムの一般的な構造を示していますが、そのままで正確に機能するとは思わないでください。

于 2010-05-24T16:39:35.680 に答える
0

を呼び出した時点で OpenGL コンテキストがないと思いますglClearColor

しかし...

...私は前に glut を使用したことがないので、ドキュメントをざっと見てみると、実際には後にコンテキストがあることが示唆されているglutCreateWindowので、おそらくそうではありません。

あなたの質問に対する私のコメントが言っているように、私は への 2 番目の呼び出しと、glClearColorそれにどのように到達すると思うかについて興味があります。それが問題の原因である可能性が高くなります。キーを押して何かを行うには、を使用してコールバックを登録する必要があると思いますglutKeyboardFunc

于 2010-05-24T16:32:13.547 に答える