我在与网格相同的位置渲染线条,当线条在网格顶部时,我得到一个效果,其中线条开始剪切,部分线条消失,特别是在移动时。 我最终要做的就是下面的截图,将线条稍微移出网格以消除这种影响。有没有人对如何渲染线条有任何想法,以便它们在网格上正确而没有部分消失?
答案 0 :(得分:2)
首先,这些线条真的是线条吗?或者他们是第二次使用glPolygonMode (GL_FRONT_AND_BACK, GL_LINES)
绘制的网格物体?在任何一种情况下,问题是填充的多边形和你的线正在生成(大致)相同的深度,并且通过/失败深度测试不能像你想要的那样工作。
解决方案是向其中一个基元添加一个非常轻微的深度偏移,最简单的方法是使用glPolygonOffset (...)
。但值得一提的是,这仅适用于填充的原语(例如GL_POLYGON
,GL_QUADS
,GL_TRIANGLES
)而非GL_LINES
或GL_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 (...)
的值,它取决于许多因素,包括深度缓冲区精度和实现。通常,第二个参数将更重要,它是应用于深度的恒定偏移。第一个因素根据深度的变化(例如角度)而变化。