OpenGL:增加行数会改变抗锯齿?

Posted

技术标签:

【中文标题】OpenGL:增加行数会改变抗锯齿?【英文标题】:OpenGL: Increasing the number of the lines changes the antialiasing? 【发布时间】:2010-07-24 12:46:48 【问题描述】:

我正在用 Delphi 编写一个绘图程序。用户单击屏幕上的 2 个点,在它们之间画一条线。我希望线条是抗锯齿的。我把这段代码放在 OpenGL 类的 create() 过程中(一开始只调用了 1 次):

 glEnable(GL_LINE_SMOOTH);
 glEnable(GL_BLEND);
 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);

当我开始绘图时,第一、第二甚至第三行都画得很好。但有趣的是,当行数增加(比如 7、8 行)时,抗锯齿开始失效!通过在屏幕上添加每一行,它只会变得更糟,并且线条边缘开始变得像锯齿一样!!

我还在我的 draw() 过程的顶部放置了相同的代码来绘制线条(并通过每次单击鼠标运行),但没有任何变化。

我在这里做错了吗?有人有什么建议吗?

【问题讨论】:

锯齿似乎与角度有关吗?水平或垂直附近的线条通常比介于两者之间的线条模糊。 没有。事实并非如此。线的角度或长度没有区别。 有机会发截图吗? 这里是截图:第一个只有 2 行,第二个画了很多行。我认为差异是可见的? 2 行:bit.ly/9EBrg6 多行:bit.ly/9gEMHo 这些 JPEG 文件中的压缩伪影掩盖了问题,试试 PNG。 【参考方案1】:

您确定您没有多次绘制任何线段吗?你在画之前打电话glClear吗?

【讨论】:

感谢您的精彩回答!这正是问题所在。我不止一次地画了每条线,这导致了效果。【参考方案2】:

Check GL_SMOOTH_LINE_WIDTH_RANGE 的值并将其与您尝试使用的 glLineWidth()s 进行比较。

【讨论】:

很好的答案——我以为它们的宽度都一样,但他没有明确地说。 在进一步重新阅读后,我也不确定我的想法是从哪里得到的:( 你确定标准 OpenGL 有 GL_SMOOTH_LINE_WIDTH_RANGE 作为常数吗?因为它在 Delphi 中无法识别(使用标准 OpenGL.dll)。顺便说一句,我在 glLineWidth() 中使用 3,我什至检查了 1 并遇到了同样的问题。 我在上面的评论中添加了截图。

以上是关于OpenGL:增加行数会改变抗锯齿?的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL核心技术之抗锯齿

OpenGL 抗锯齿与 glAccum 和 glRasterPos

在qt的QOpenGLWidget开启opengl的抗锯齿

基于图片的抗锯齿方法

OpenGL4 多重采样抗锯齿和渲染到纹理

OpenGL核心技术之抗锯齿