我正在尝试更改背景的颜色,但它不起作用

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

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

【讨论】:

以上是关于我正在尝试更改背景的颜色,但它不起作用的主要内容,如果未能解决你的问题,请参考以下文章

更改标题的背景颜色不起作用

设置单元格的背景颜色不起作用 - IOS [重复]

我正在尝试使用 Elementor Typography Control。但它不起作用

在 ionic 3 中动态更改背景颜色

更改 MaterialButtonToggleGroup 的背景颜色

悬停时背景颜色变化不起作用(jquery)