【发布时间】:2021-11-07 08:35:39
【问题描述】:
我开始在 C++ 中使用 OpenGL / glut,但我一直坚持能够在窗口中显示两个对象而不是一个。因此,对于第一个形状,它绘制了一个类似房子的形状,顶部有一个正方形和三角形,并带有抗锯齿功能。第二个形状应该是相同的,但没有抗锯齿。目前,第二个形状只有两个点,而不是整个形状。当我在 void render() 方法中同时拥有 withoutAntiAliasing 和 withAntiAliasing 方法时,只有一个显示。我如何才能使所描述的两种方法都可以显示在窗口中?代码如下:
#include <GL/glut.h>
void init()
{
glClearColor(1.0, 1.0, 1.0, 0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 250.0, 0.0, 250.0);
}
void withAntiAliasing()
{
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBegin(GL_LINE_LOOP);
glVertex2i(155, 150);
glVertex2i(125, 125);
glVertex2f(108.5, 162);
glVertex2f(136, 185);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex2i(100, 155.9);
glVertex2f(145, 192.5);
glVertex2i(115, 185);
glEnd();
glFlush();
}
void withoutAntiAliasing()
{
glClear(GL_COLOR_BUFFER_BIT);
glDisable(GL_LINE_SMOOTH);
glDisable(GL_BLEND);
glBegin(GL_POINTS);
glColor3f(0, 0, 0);
glVertex2i(170, 170);
glColor3f(0, 0, 0);
glVertex2i(150, 150);
glEnd();
glFlush();
}
void render()
{
glColor3f(0.0, 0.0, 0.0);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
withoutAntiAliasing();
withAntiAliasing();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
glutCreateWindow("Hey");
init();
glutDisplayFunc(render);
glutMainLoop();
}
【问题讨论】: