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