iPhone OpenGL ES 绘制漂亮的直线

3
在我的iPhone应用程序中,有许多线条被绘制出来。但是,有些线条既不是垂直的也不是水平的,这意味着它们有锯齿状的边缘。
启用GL_LINE_SMOOTH似乎没有效果。按照苹果文档中描述的多重采样抗锯齿技术可以实现,但我无法想象不可能使线条看起来更好看。使用抗锯齿技术可以使线条变得平滑,但是线条的颜色沿线条的某些部分会发生扭曲。
使用OpenGL,如何绘制一条看起来像Quartz-2D绘制的线条,具有平滑的边框、一致的颜色和可变的宽度?
(明确一点,GL_LINE_WIDTH完美地工作,因此可变宽度目前不是问题。)

实际上,OpenGL常量GL_LINE_SMOOTH在iDevices上没有任何效果。不幸的是,人们会忘记这一点,因为它在iOS模拟器中确实有效,尽管它真的不应该。下面有一些好的建议。 - foslock
2个回答

1

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

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

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


Mk,谢谢你的回答。我可以使用一个非常细的平行四边形代替一条线,然后应用纹理或其他东西。谢谢。 - pinerd314159

0
除了Fabian所说的之外,可能只需要通过调用启用alpha混合来实现线条平滑显示效果。
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接