4

在 glPolygonMode、OpenGL 3.2 及更高版本中,我不能单独传递 GL_FRONT 或 GL_BACK。例如 glPolygonMode(GL_FRONT, GL_LINE); 生成无效枚举:(生成了 GL_INVALID_ENUM 错误。在当前配置文件中禁用了多边形模式。)

有人可以解释为什么不推荐使用吗?为什么我必须通过两个面(GL_FRONT_AND_BACK)

如果我想“线填充”正面,然后“完全填充”多边形的背面怎么办?

不幸的是,这个链接(http://www.opengl.org/sdk/docs/man/xhtml/glPolygonMode.xml)没有提到任何关于这个的内容。至少它应该提到为什么不推荐使用它们或者如何以不同的方式填充面部。

4

1 回答 1

6

如果您需要每边不同的填充模式,您可以绘制多边形两次,每次剔除不同的边。

您应该认为自己很幸运,它甚至存在于 OpenGL 3.2 核心中,因为它已从 OpenGL ES 中删除。此外,在 D3D 中,您永远无法指定每边的多边形填充模式。

事实上,您可以使用 OpenGL 3.2 中的几何着色器和片段着色器的组合来实现您自己真正高级的填充模式(并在每边执行)。由于原始组装管道现在是可编程的,因此放弃一些没有专用固定功能硬件的东西是有意义的(授权填充模式在技术上是一种光栅化状态)。同样,固定功能的 alpha 测试也被删除,因为它现在可以在片段着色器中完成。


至于在哪里讨论GL_FRONT和的弃用GL_BACK,您必须阅读核心规范才能找到它。

OpenGL 3.2 核心配置文件- E.2。弃用和删除的功能 - 第 332 页

单独的多边形绘制模式 - PolygonMode 的面值GL_FRONTGL_BACK; 无论哪个面被光栅化,多边形总是以相同的模式绘制。

如果您浏览 3.2 核心中已弃用的整个列表,您会注意到很多与单面光栅化相关的内容已被删除。幸运的是,我们仍然有双面模板,但这当然可以追溯到模板测试不可编程的事实。

于 2013-10-30T01:35:27.583 回答