【问题标题】:Background colour in opengl [closed]opengl中的背景颜色[关闭]
【发布时间】:2010-05-24 16:29:18
【问题描述】:

我想在按下按钮后更改窗口的背景颜色,但我的程序不起作用,谁能告诉我为什么?

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

【问题讨论】:

  • 按下“什么按钮”后?
  • 由于glutMainLoop() 永远不会返回,您希望如何处理您的system("pause") 语句和第二个glClearColor 调用?
  • @tafa:如何更改我的代码才能看到这种效果?

标签: c opengl glut


【解决方案1】:

glClearColor 本身不进行任何清除——它只是设置您实际清除时的颜色。要自行清理,您需要使用(至少)COLOR_BUFFER_BIT 调用 glClear

编辑:自从我使用 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 程序的一般结构,但不要期望它完全按原样工作。

【讨论】:

  • 我做了,还是不行,可能是glutMainLoop的问题?
  • 这个解决方案很好。尝试使用双缓冲? glutMainLoop 很好。告诉我它是否适用于双缓冲
【解决方案2】:

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

但是……

...我以前从未使用过 glut,所以快速查看docs 表明您实际上在glutCreateWindow 之后会有一个上下文,所以也许不是这样。

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

【讨论】:

  • 对不起,没看懂,我是初学者
猜你喜欢
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 2018-01-01
  • 2022-10-05
  • 2018-02-21
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
相关资源
最近更新 更多