如何在透视模式下实现抗锯齿?

时间:2014-05-06 02:14:50

标签: opengl-es webgl

我想绘制一些平行线。起初我使用gl.LINES,但问题是渲染的线在屏幕上的任何一点都是一个像素宽,无论它是非常接近还是离相机很远。

相反,我渲染了细长方形: enter image description here

正如你所看到的,他们现在变得越来越瘦,因为他们越来越远离相机,但现在我得到了所有这些丑陋的混叠神器。在OpenGL / WebGL中有一种“正确”的方法吗?

2 个答案:

答案 0 :(得分:2)

有几种方法可以解决这个问题。

(1)正如其他人所提到的,只需运行超级或多重采样。

(2)使用着色器。如果您使用的是Es2 / WebGL,那么您已经这样做了。但是,不是输出恒定的颜色,而是写一个颜色加上一个alpha来确定你与该线的接近程度。然后启用与该alpha混合。

一种非常简单的方法是将纹理映射为矩形的Alpha通道。

或者,您可以绘制2个四边形而不是一个,并在着色器中计算距离。然后使用斜坡函数将距离映射到alpha。

答案 1 :(得分:0)

如果你正在使用GLUT,你可以试试这样的东西 -

glutInitDisplayMode(GLUT_MULTISAMPLE);// along with all the other flags

如果你没有使用GLUT,那么你可以找到一个非常有用的主题here。 每个平台都允许您在获取OpenGL上下文后执行multisampling