opengl中的背景颜色[关闭]

Posted

技术标签:

【中文标题】opengl中的背景颜色[关闭]【英文标题】:Background colour in opengl [closed] 【发布时间】: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:如何更改我的代码才能看到这种效果? 【参考方案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 注册回调。

【讨论】:

对不起,没看懂,我是初学者

以上是关于opengl中的背景颜色[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在OpenGL中设置背景颜色

OpenGL不清除填充背景颜色

在 OpenGL 中设置透明背景颜色不起作用

OpenGL:在背景图像上使用蒙版绘制颜色

OpenGL中的振荡颜色

为啥网页的背景颜色都没有了