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