【问题标题】:iPhone OpenGL ES draw nice linesiPhone OpenGL ES 画出漂亮的线条
【发布时间】:2011-08-12 08:23:15
【问题描述】:

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

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

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

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

【问题讨论】:

  • 实际上,OpenGL 常量 GL_LINE_SMOOTH 对 iDevice 没有任何影响。不幸的是,人们忘记了这一点,因为它确实可以在 iOS 模拟器中工作,即使它确实不应该。不过下面有一些不错的建议。

标签: iphone opengl-es line antialiasing smooth


【解决方案1】:

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

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

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

【讨论】:

  • Mk,谢谢你的回答。我可能会使用非常平行四边形而不是线,然后应用纹理或其他东西。谢谢。
【解决方案2】:

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

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多