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();
}

基本上,你用你传递给的任何函数来完成所有的绘图glutDisplayFunc。几乎其他任何事情都只是改变状态,然后调用PostRedisplayFunc();告诉 glut 需要重绘窗口。警告:正如我所说,我使用 glut 已经有一段时间了,我还没有测试过这段代码。它尽我所能展示了 glut 程序的一般结构,但不要期望它完全按原样工作。

于 2010-05-24T16:39:35.680 回答
0

我想你当时没有你调用的 OpenGL 上下文glClearColor

但...

...我以前从未使用过 glut,所以快速浏览一下文档表明你实际上会有一个上下文,glutCreateWindow所以也许不是这样。

正如我对你的问题的评论所说,我很好奇第二次打电话glClearColor以及你认为你将如何达到它。这更有可能是问题的原因。要在按键上执行任何操作,我相信您必须使用glutKeyboardFunc.

于 2010-05-24T16:32:13.547 回答