由于GL_LINE_SMOOTH不受硬件加速支持,也不能在所有GFX卡上使用,那么在2D模式下如何绘制平滑线条,使其看起来与GL_LINE_SMOOTH一样好呢?
编辑2: 我目前的解决方案是从两个四边形绘制一条直线,从边缘向零透明度淡化,并且这两个四边形之间的颜色即为线条颜色。对于基本平滑线条渲染来说,它已经足够好用并且不需要使用纹理,因此非常快速。
由于GL_LINE_SMOOTH不受硬件加速支持,也不能在所有GFX卡上使用,那么在2D模式下如何绘制平滑线条,使其看起来与GL_LINE_SMOOTH一样好呢?
编辑2: 我目前的解决方案是从两个四边形绘制一条直线,从边缘向零透明度淡化,并且这两个四边形之间的颜色即为线条颜色。对于基本平滑线条渲染来说,它已经足够好用并且不需要使用纹理,因此非常快速。
所以,你想要平滑的线条,但不想使用以下任何一种技术:
好的。
你最好使用 Valve 的Alpha-Tested Magnification 技术。对于你的需求,基本思路是创建一个纹理来表示距离线条的距离,其中纹理中心的距离为 1.0。这可能可以是一维纹理。
然后使用文献中描述的技术(包括抗锯齿版本在内)绘制代表您的线条的四边形。显然,你需要使用 alpha 混合 (因此它不是无序的)。使用线宽来控制它变成适当颜色的距离,从而使您能够制作窄或宽线条。
使用着色器完成上面的过程与上述方法几乎相同,只是没有使用纹理。顶点着色器将距离传递并插值。对于四边形的左侧,顶点着色器传递 0。对于右侧,它传递 1。您将这个值乘以 2,减去 1,并取绝对值。
这就是您距离线条的距离(线条是四边形的中心)。然后按照 Valve 的算法使用该距离即可。
GL_LUMINANCE8
纹理就足够了。我相信你不会错过那4K内存的。 - Nicol BolasGL_LINE_SMOOTH
一样。 - Rookie目前我使用2或3个四边形来完成这个任务,这是最简单的方法。
在下面的图像中,您可以看到带有蓝色边框的四边形。白色表示完全不透明,黑色表示零不透明度(=完全透明)。