【问题标题】:Antialiasing algorithm?抗锯齿算法?
【发布时间】:2010-06-10 02:32:37
【问题描述】:

我有我正在创建的纹理并希望对它们进行抗锯齿处理。我可以访问每个像素的颜色,鉴于此,我如何才能对整个纹理进行抗锯齿处理?

谢谢

【问题讨论】:

    标签: c++ c algorithm antialiasing


    【解决方案1】:

    我很抱歉,但真正的抗锯齿并不包括从邻居那里获得平均颜色,如上所述。这无疑会柔化边缘,但它不是抗锯齿而是模糊。真正的抗锯齿不能在位图上正确完成,因为它必须在绘制时计算以判断哪些像素和/或边缘必须“软化”,哪些不能。例如:假设您绘制了一条必须恰好为 1 像素厚(例如“高”)并且必须准确放置在整数屏幕行坐标上的水平线。显然,您会希望它不柔化,并且适当的抗锯齿算法会做到这一点,将您的线条绘制成一排完美的实心像素,周围是完美的背景色像素,根本没有色调混合。但是,如果在绘制同一条线(即位图)并应用平均方法后,您会在该线的上方和下方变得模糊,从而产生 3 像素粗的水平线,这不是目标。当然,一切都可以通过正确的编码来实现,但要采用一种非常不同且复杂得多的方法。

    【讨论】:

    • 混叠违反了香农采样定理。从这个意义上说,模糊是一种有效的解决方案——它消除了高频分量。就像将图像的所有像素都变成相同的值。
    【解决方案2】:

    抗锯齿的基本方法是:对一个像素P,对其周围的像素进行采样。 P 的新颜色是其原始颜色与样本颜色的平均值。

    您可以采样更多或更少的像素,更改要采样的像素周围区域的大小,或者随机选择要采样的像素。

    不过,正如其他人所说:抗锯齿实际上并不是对已经是像素位图的图像进行的处理。这是一种在 2D/3D 渲染引擎中实现的技术。

    【讨论】:

    • 您能否详细说明您如何计算颜色的“平均值”?
    【解决方案3】:

    “抗锯齿”可以指范围广泛的不同技术。这些通常都不是您会提前对纹理执行的操作。

    也许你的意思是mip映射? http://en.wikipedia.org/wiki/Mipmap

    【讨论】:

    • 不,我不是在找这个,我想让锯齿状的边缘看起来光滑
    • 如果工件已经在您的纹理中,请尝试将它们缩小到更小的尺寸。或者将它们加载到 Photoshop 中并尝试使用模糊工具来改善外观。没有神奇的算法可以在渲染后消除锯齿错误。
    • 锯齿状边缘是“光栅化”的结果。适当的抗锯齿是在“中间”而不是之后完成的。如果您在已经生成的锯齿状像素上执行此操作,您可能会获得模糊而不是正确的抗锯齿。
    【解决方案4】:

    用这种模糊的术语来询问抗锯齿并不是很有意义。这一切都取决于纹理的性质以及它们将如何使用。

    一般来说,如果您无法控制显示环境,并且您的纹理可能会被缩放、旋转或与您无法控制的其他元素合成,您应该使用透明度来指示图像的结束位置并且它只部分填充了一个像素。

    避免锐利的边缘和相对于可能完成的缩放量较小的特征通常也很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多