glPolygonMode(GL_FRONT_AND_BACK, GL_LINES) 不起作用

glPolygonMode(GL_FRONT_AND_BACK, GL_LINES) isn't working

本文关键字:GL LINES 不起作用 AND FRONT glPolygonMode BACK      更新时间:2023-10-16

我正在尝试以正常的填充模式渲染基元,然后作为线框。

渲染代码:

glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.9f, 0.9f, 0.9f, 1);
// reset matrix
glLoadIdentity();
// fill display list
glColor3c(150, 255, 255);
glCallList(lDList);
// wireframe display list
glColor3f(0, 0, 0);
glLineWidth(10);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINES);
glCallList(lDList);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

显示列表创建代码:

lDList = glGenLists(1);
glNewList(lDList, GL_COMPILE);
glBegin(GL_QUADS);
glVertex3i(-1, -1, 0);
glVertex3i(1, -1, 0);
glVertex3i(1, -1, -25);
glVertex3i(-1, -1, -25);
glEnd();
glEndList();

glColor3c 宏:

#define glColor3c(r, g, b) glColor3f(r / 255, g / 255, b / 255)

我希望得到一个青色的平面,周围有一个黑框,但所发生的只是,当我第二次渲染显示列表时,它只是填充和绘制整个东西,覆盖另一个基元的像素。我最终得到了我想画的平面,但它只是黑色(我为"版本"行指定的颜色)。

任何其他可能有用的信息是我在 Windows 7 上使用 SDL MSVC++ 2010.我没有对glEnable进行任何调用,所以我没有启用会搞砸它的奇怪设置,或者,也许可以解决问题。我唯一的OpenGL设置代码设置投影和模型视图矩阵,然后创建显示列表。

显然,我的问题是为什么我第二次绘制显示列表是填充基元而不是创建线条?我该如何解决这个问题?

根据 OpenGL 4.0 中glPolygonMode的文档,第二个参数mode可能只是GL_FILLGL_POINTGL_LINE中的一个。 在您的示例中,您传递的是GL_LINES,这是一个完全不同的枚举值。

我怀疑传递GL_LINES是由 OpenGL 处理的,因此如果接收模式不是它期望的,它会默认回到GL_FILL

另请注意:glPolygonMode的规范与OpenGL 2.1相同。