由于GL_LINE_SMOOTH不是硬件加速,并非所有GFX卡都支持,如何在2D模式下绘制平滑线条,这看起来与GL_LINE_SMOOTH一样好?
Edit2:我目前的解决方案是从2个四边形中绘制一条线,从边缘渐变为零透明度,这两个四边形之间的颜色将是线条颜色。它对于基本的平滑线渲染效果不错,并且不使用纹理,因此渲染速度非常快。
答案 0 :(得分:10)
所以,你想要平滑的线条而不是:
好的。
最好的办法是使用Valve的Alpha-Tested Magnification technique。根据您的需要,基本思想是创建一个纹理,表示距离线的距离,纹理的中心距离为1.0。这可能是一维纹理。
然后使用论文中描述的技术(其中许多使用固定功能,包括抗锯齿版本),绘制一个代表你的线条的四边形。显然你需要alpha混合(因此它不是与顺序无关的)。您可以使用线宽来控制它变为合适颜色的距离,从而可以制作窄线或宽线。
使用着色器执行此操作几乎与上述相同,除非没有纹理。不是访问距离纹理,而是从顶点着色器传递和插值距离。对于四边形的左边缘,顶点着色器通过0.对于右边缘,它通过1.将此乘以2,减去1,并取绝对值。
这是你离线的距离(线是四边形的中心)。然后就像Valve的算法一样使用那个距离。
答案 1 :(得分:3)
启用全屏抗锯齿并使用四核是我的首选。
答案 2 :(得分:1)
目前我使用2或3个四边形来做这个,这是最简单的方法。
在下图中,您可以看到带有蓝色边框的四边形。白色表示完全不透明,黑色表示零不透明度(=完全透明)。