我想按下按钮后改变窗口的背景颜色,但我的程序不起作用,有人可以告诉我原因,提前谢谢
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;
}
答案 0 :(得分:18)
glClearColor
本身不会进行任何清除 - 它只会设置实际清除时的颜色。要进行清算,您需要至少使用glClear
致电COLOR_BUFFER_BIT
。
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();
告诉过剩窗口需要重绘。警告:正如我所说,我使用过剩已经有一段时间了,我没有测试过这段代码。它尽可能地展示了过剩计划的一般结构,但不要指望它完全按照原样运作。
答案 1 :(得分:0)
我想你当时没有一个OpenGL上下文,你可以调用glClearColor
。
但是...
...我以前从未使用过剩,所以快速查看docs表明你实际上会在glutCreateWindow
之后有一个上下文,所以也许不是它。
正如我对你的问题的评论所说,我对第二次致电glClearColor
感到好奇,以及你认为你会如何接触它。这更可能是导致问题的原因。要在按键上执行任何操作,我相信您必须使用glutKeyboardFunc
注册回调。