重叠网格时线条剪辑

时间:2014-01-02 01:33:38

标签: opengl

我在与网格相同的位置渲染线条,当线条在网格顶部时,我得到一个效果,其中线条开始剪切,部分线条消失,特别是在移动时。 我最终要做的就是下面的截图,将线条稍微移出网格以消除这种影响。有没有人对如何渲染线条有任何想法,以便它们在网格上正确而没有部分消失?

enter image description here

1 个答案:

答案 0 :(得分:2)

首先,这些线条真的是线条吗?或者他们是第二次使用glPolygonMode (GL_FRONT_AND_BACK, GL_LINES)绘制的网格物体?在任何一种情况下,问题是填充的多边形和你的线正在生成(大致)相同的深度,并且通过/失败深度测试不能像你想要的那样工作。

解决方案是向其中一个基元添加一个非常轻微的深度偏移,最简单的方法是使用glPolygonOffset (...)。但值得一提的是,这仅适用于填充的原语(例如GL_POLYGONGL_QUADSGL_TRIANGLES)而非GL_LINESGL_POINTS


如果它是两次绘制的相同网格,则在第二遍中你可以这样做:

glPolygonOffset (-0.1f, -1.0f);
glEnable        (GL_POLYGON_OFFSET_LINE);

   ... Draw Mesh Second Time

glDisable       (GL_POLYGON_OFFSET_LINE);

否则,在第一次绘制(实体)网格时需要应用深度偏移:

glPolygonOffset (0.1f, 1.0f);
glEnable        (GL_POLYGON_OFFSET_FILL);

  ... Draw Mesh

glDisable       (GL_POLYGON_OFFSET_FILL);

... Draw Lines

您可能需要调整用于glPolygonOffset (...)的值,它取决于许多因素,包括深度缓冲区精度和实现。通常,第二个参数将更重要,它是应用于深度的恒定偏移。第一个因素根据深度的变化(例如角度)而变化。