6

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

渲染代码:

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)

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

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

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

4

1 回答 1

13

根据glPolygonModeOpenGL 4.0 中的文档,第二个参数 ,mode可能只是GL_FILL,GL_POINT或中的一个GL_LINE。在您的示例中,您正在传递GL_LINES,这是一个完全不同的枚举值。

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

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

于 2012-11-07T03:35:59.337 回答