我正在尝试使用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();
}
运行此命令时,我只会得到一个没有颜色的黑色窗口。有人可以告诉我我在做什么错
答案 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
您的窗口显示前缓冲区,但是您正在清除后缓冲区,该缓冲区永远不会复制到前缓冲区。