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中的背景颜色[关闭]的主要内容,如果未能解决你的问题,请参考以下文章