我想按下按钮后改变窗口的背景颜色,但我的程序不起作用,有人可以告诉我原因,提前谢谢
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; }
Jerry Coffin.. 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();
告诉过剩窗口需要重绘.警告:正如我所说,我使用过剩已经有一段时间了,我没有测试过这段代码.它尽可能地展示了过剩程序的一般结构,但不要指望它完全按原样工作.
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();
告诉过剩窗口需要重绘.警告:正如我所说,我使用过剩已经有一段时间了,我没有测试过这段代码.它尽可能地展示了过剩程序的一般结构,但不要指望它完全按原样工作.