我正在尝试更改背景的颜色,但无法正常工作

时间:2019-10-29 09:01:05

标签: c++ opengl glut

我正在尝试使用c ++学习opengl,并且试图更改背景颜色。这是我到目前为止的代码

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

void display();

void init()
{
    glClearColor(1.0, 1.0, 0.0, 1.0);
}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB);

    glutInitWindowPosition(200, 100);
    glutInitWindowSize(500, 500);

    glutCreateWindow("Window 1");

    glutDisplayFunc(display);
    init();

    glutMainLoop();
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity();

    glFlush();
}

运行此命令时,我只会得到一个没有颜色的黑色窗口。有人可以告诉我我在做什么错

2 个答案:

答案 0 :(得分:0)

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

void display();
void idle();

void init()
{
    glClearColor(1.0, 1.0, 0.0, 1.0);
}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB);

    glutInitWindowPosition(200, 100);
    glutInitWindowSize(500, 500);

    glutCreateWindow("Window 1");

    glutDisplayFunc(display);
    glutIdleFunc(idle); // added this
    init();

    glutMainLoop();
}

void idle()
{
    glutPostRedisplay(); // tell glut we're overdue for a redraw.
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity();

    glFlush();
}

答案 1 :(得分:0)

您未指定Double Buffer设置(GLUT_DOUBLE或GLUT_SINGLE)。默认情况下,使用GLUT_SINGLE。

  

glutInitDisplayMode(GLUT_RGB);

但是,有些驱动程序不允许单个缓冲区窗口。

我推断这就是哈彭。尝试添加glutSwapBuffers()而不是glFlush()。

glutSwapBuffers(); // glFlush

您的窗口显示前缓冲区,但是您正在清除后缓冲区,该缓冲区永远不会复制到前缓冲区。

相关问题