如何使用 glut 将白色矩形更改为彩色矩形?

How do I change a white rectangle into a colored rectangle using glut?

我正在尝试制作除白色或黑色以外的任何颜色的矩形,但似乎失败得很惨,因为无论我在代码中输入什么,它总是白色的。我不知道我做错了什么(如果我的代码有任何问题,据我所知,它与我见过的一些例子没有什么不同)。这是我认为应该制作红色矩形但只制作白色矩形的代码:

#include <gl/glut.h>

void mydisplay ()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1.0f, 0.0f, 0.0f); //sets color
    glBegin(GL_QUADS);
        glVertex2f(-0.5, -0.5);
        glVertex2f(-0.5, 0.5);
        glVertex2f(0.5, 0.5);
        glVertex2f(0.5, -0.5);
    glEnd();

    //glutSwapBuffers();
    //glutSolidTeapot(1);
}

int main (int argc, char** argv)
{
    glutCreateWindow("simple");
    glutDisplayFunc(mydisplay);
    glutMainLoop();
}

不知何故,您忘记调用某些函数,例如过剩初始化和设置 window 大小。你也没有设置清晰的颜色和评论 glutSwapBuffers 功能。

#include <gl/glut.h>

void mydisplay()
{
    glClearColor(1.0, 1.0, 1.0, 1.0); // add this
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1.0f, 0.0f, 0.0f); //sets color
    glBegin(GL_QUADS);
    glVertex2f(-0.5, -0.5);
    glVertex2f(-0.5, 0.5);
    glVertex2f(0.5, 0.5);
    glVertex2f(0.5, -0.5);
    glEnd();

    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv); // add this
    glutInitWindowSize(640, 480); // add this
    glutCreateWindow("simple");
    glutDisplayFunc(mydisplay);
    glutMainLoop();
}

我标记了我添加的行。试试吧。

好的,我发现我少了一行代码。我需要 glFlush();而不是 glutSwapBuffers();此外,我可以通过为每个顶点分配颜色来混合颜色。这是我现在拥有的,它会给出一个五颜六色的正方形:

#include <gl/glut.h>

void mydisplay ()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

 //sets color
    glBegin(GL_QUADS);
        glColor3f(1.0f, 0.0f, 0.0f);
        glVertex2f(-0.5, -0.5);
        glColor3f(1.0f, 0.0f, 0.0f);
        glVertex2f(-0.5, 0.5);
        glColor3f(0.0f, 1.0f, 0.0f);
        glVertex2f(0.5, 0.5);
        glColor3f(0.0f, 0.0f, 1.0f);
        glVertex2f(0.5, -0.5);

     glEnd();
     glFlush();
//glutSwapBuffers();
//glutSolidTeapot(1);
}

int main (int argc, char** argv)
{
    glutCreateWindow("simple");
    glutDisplayFunc(mydisplay);
    glutMainLoop();
}

上一个答案中给出的其他代码也可以。因此,我投票赞成,但接受我的回答(glFlush() 也适用于我的原始代码,并且是一个更简单的修复程序)。