我正在尝试制作一个除了白色或黑色之外的任何颜色的矩形,但似乎是失败的,因为它总是白色的,无论我在代码中放入什么。我不知道我做错了什么(即使我的代码有任何问题,据我所知,它与我见过的一些例子没有什么不同)。这是我的代码,我认为应该制作一个红色矩形,但只做一个白色的矩形:
#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();
}
答案 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()也适用于我的原始代码,并且是一个更简单的修复。)