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

时间:2015-01-29 02:16:11

标签: opengl 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();
}

2 个答案:

答案 0 :(得分:3)

不知何故,你忘了调用一些函数,例如过剩初始化和设置窗口大小。此外,您没有设置清晰的颜色和注释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();
}

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

答案 1 :(得分:0)

好的,我发现我错过了一行代码。我需要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()也适用于我的原始代码,并且是一个更简单的修复。)