glPolygonMode(GL_FRONT_AND_BACK,GL_LINES)无效

Aar*_*ron 4 c++ opengl rasterizing

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

渲染代码:

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);
Run Code Online (Sandbox Code Playgroud)

显示列表创建代码:

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();
Run Code Online (Sandbox Code Playgroud)

glColor3c宏:

#define glColor3c(r, g, b) glColor3f(r / 255, g / 255, b / 255)
Run Code Online (Sandbox Code Playgroud)

我希望得到一个青铜色的平面,周围有一个黑色的框架,但所有这一切都发生在我第二次渲染显示列表时,它只是填充和绘制整个事物,覆盖另一个图元的像素.我最终得到了我想要绘制的平面,但它只是黑色(我为"版本"行指定的颜色).

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

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

kev*_*sco 10

根据该文档对于glPolygonMode在OpenGL 4.0,第二个参数,mode可以仅是一种GL_FILL,GL_POINTGL_LINE.在您的示例中,您正在传递GL_LINES,这是一个完全不同的枚举值.

我怀疑传递GL_LINES是由OpenGL处理​​的,GL_FILL如果接收的模式不符合预期,它会默认返回.

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

  • 我祝贺自己做出了最糟糕的编程错误; 虽然令人讨厌的是两个宏如此相似,但是没有,谢谢! (2认同)
  • @ ForgiveMeI'mAN00b如果我每次犯这样的错误都有一美元...... :) (2认同)