我正在尝试更改背景的颜色,但它不起作用
Posted
技术标签:
【中文标题】我正在尝试更改背景的颜色,但它不起作用【英文标题】:I'm trying to change the colour of the background but it's not working 【发布时间】:2019-10-29 09:01:05 【问题描述】:我正在尝试使用 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();
当我运行它时,我只是得到一个没有颜色的黑色窗口。谁能告诉我我做错了什么
【问题讨论】:
我之前没用过glut,但是貌似只有在窗口损坏的情况下才使用Display func。改用 glutIdleFunc 试试? 我已经尝试替换它,但现在我得到一个错误,因为没有显示回调 看看GLUT examples,您似乎可以在空闲函数中简单地调用glutPostRedisplay()
。
@Botije 你的意思是在初始化函数的末尾编辑:我试着把它放在初始化函数的末尾,但它仍然显示一个黑色窗口
将glutIdleFunc
指向一个只调用glutPostRedisplay()
的函数。将glutDisplayFunc
指向您的display
函数。
【参考方案1】:
#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();
【讨论】:
我试过了,但现在我得到了这个Process terminated with status -1073741819 (0 minute(s), 3 second(s))
附加一个调试器,然后看看它为什么会崩溃。这是直接从我链接到的“搅拌机”示例中提取的。
我附加了一个调试器,它说没有错
不,它仍然只是一个普通的黑色窗口
您是否进行了干净的重建?我开始怀疑您忽略了编译错误并使用旧版本运行。【参考方案2】:
您没有指定双缓冲区设置(GLUT_DOUBLE 或 GLUT_SINGLE)。默认使用 GLUT_SINGLE。
glutInitDisplayMode(GLUT_RGB);
但是,有些驱动程序不允许单个缓冲区窗口。
我推断这是正在发生的事情。尝试添加一个 glutSwapBuffers() 而不是 glFlush()。
glutSwapBuffers(); // glFlush
您的窗口正在显示前端缓冲区,但您正在清除后端缓冲区,该缓冲区永远不会被复制到前端缓冲区。
【讨论】:
以上是关于我正在尝试更改背景的颜色,但它不起作用的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试使用 Elementor Typography Control。但它不起作用