3

在我的 iPhone 应用程序中,绘制了许多线条。唉,其中一些既不是垂直的也不是水平的,这意味着它们有锯齿状的边缘。

启用 GL_LINE_SMOOTH 似乎没有任何效果。Apple 文档中描述的多重采样抗锯齿可以工作,但我无法想象不可能做出更好看的线条。使用抗锯齿,线条变得平滑,但颜色沿线条的部分扭曲。

使用 OpenGL,如何绘制一条看起来像 Quartz-2D 绘制的线,具有平滑的边框、一致的颜色和可变宽度的线?

(需要明确的是,GL_LINE_WIDTH 可以完美运行,因此可变宽度目前不是问题。)

4

2 回答 2

1

这是 3D 图形中的常见问题。大多数显卡通常更关心填充率和速度,而不是基本几何渲染中的视觉质量。他们使用 Bresenham 算法来绘制不支持抗锯齿的直线和多边形。

对于 3D API 来说,选择速度而不是视觉质量实际上是相当合理的,因为大多数视觉细节最终来自纹理(被插值)而不是几何图形的使用。

我的建议是激活多重采样,或者使用累积缓冲区手动执行 FSAA(如果在 OpenGL ES 下可用)。或者,您可以尝试绘制多条线,并在预期坐标周围有一些透明度。

于 2011-08-12T08:31:36.350 回答
0

除了 Fabian 所说的之外,您可能只需要启用 alpha 混合以使线条平滑以显示效果,方法是调用

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
于 2011-08-12T13:36:16.007 回答