当前位置:  开发笔记 > 后端 > 正文

opengl中的背景颜色

如何解决《opengl中的背景颜色》经验,为你挑选了1个好方法。

我想按下按钮后改变窗口的背景颜色,但我的程序不起作用,有人可以告诉我原因,提前谢谢

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();告诉过剩窗口需要重绘.警告:正如我所说,我使用过剩已经有一段时间了,我没有测试过这段代码.它尽可能地展示了过剩程序的一般结构,但不要指望它完全按原样工作.



1> Jerry Coffin..:

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();告诉过剩窗口需要重绘.警告:正如我所说,我使用过剩已经有一段时间了,我没有测试过这段代码.它尽可能地展示了过剩程序的一般结构,但不要指望它完全按原样工作.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有