2015-05-14 60 views
2

在我的引擎中,我想避免使用线条和单独的三角形类型。我想用两个相同的三角形绘制线条。但在opengl中,这个三角形不会被显示,因为它具有零区域,因此不能覆盖像素。OpenGL:使用退化三角形的绘制线

在内部,在驱动程序级别,使用退化三角形绘制一条opengl线条,并使用不同的光栅化规则,其中每条扫描线至少绘制一个像素。

D3d有一些选项,您可以将光栅化设置为始终绘制每个扫描行的第一个像素 - 有效地完成我在d3d中所需的操作。

但我怎样才能做到这一点与opengl?我看不到任何允许您更改光栅化规则的命令。

+0

也许glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); 但是如果你不得不改变线条和多边形的opengl状态,那么不使用GL_LINES的优势在哪里? – Arne

+0

你在说什么D3d选项? – Jerem

+1

我认为我没有听说过D3D标志......通常退化三角形在GL和D3D的顶点设置阶段都被拒绝(例如,即使顶点着色器没有被执行,更不用说像素了/片段着色器)。如果您渲染三角形条带,禁用退化拒绝会很奇怪,因为对于任何通用模型数据,通常会有大量的退化。你会得到......线路到处都是,我不知道为什么这是可取的? – MuertoExcobito

回答

2

那么我做了这个确切的事情,必要的三个顶点,使用前两个作为行的起点,然后在行渲染对象的开始使用glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)结束。

将此功能与适当的启用和禁用脸部剔除功能结合在一起,并且您已经拥有了一个完美的线条渲染器,它仍然使用设置的三角形。

+0

这不是我所希望的,但我能够使用它。我有1个顶点缓冲区需要保存两条线和三角形。我将线添加为退化三角形,然后在渲染时,我使用GL_FILL渲染一次VB,然后使用GL_LINES再次渲染VB。 –