Wu反走样算法介绍(简单易懂) -Xiaolin Wu’s Algorithm

目录

一、算法介绍

二、算法描述

三、算法总结


一、算法介绍

  Wu反走样算法,可以将线条变得更平滑,即产生抗锯齿效果。示意图如下: 

原图
经过Wu反走样算法改善后

Wu反走样算法介绍(简单易懂) -Xiaolin Wu’s Algorithm_第1张图片 原图
Wu反走样算法介绍(简单易懂) -Xiaolin Wu’s Algorithm_第2张图片 经过Wu反走样算法改善后

二、算法描述

  从起点开始,每走一步,x增加1。

  在每一步中,分别计算 距离真实直线最近的 上下两个像素点 和直线之间的误差值——y坐标与真实直线y坐标之差。

  如果误差值为0,则该像素点的强度取100%;如果误差值为0.8,则该像素点的强度取20%,依此类推,将上下两个像素涂上不同强度的颜色。

  如下图所示:

Wu反走样算法介绍(简单易懂) -Xiaolin Wu’s Algorithm_第3张图片 原图

Wu反走样算法介绍(简单易懂) -Xiaolin Wu’s Algorithm_第4张图片 反走样改善后

  上图中,红线代表最近的上方像素距离直线的误差值;绿线代表最近的下方像素距离直线的误差值。可以很容易看出,误差值越小,颜色涂得越深。在代码中,要计算误差值,可以使用浮点数并取小数部分的误差值。

  综上,即为Wu反走样算法内容。

三、算法总结

伪代码:

void CTestView::ALine(CDC *pDC)
{
	CPoint p0(-100,-50),p1(200,50),p;
	int dx,dy; dx=p1.x-p0.x; dy=p1.y-p0.y;
	double k=(double)dy/dx,e;
     for(p=p0,e=0;p.xSetPixelV(p.x, p.y,RGB(e*255,e*255,e*255));
    pDC->SetPixelV(p.x, p.y+1,RGB((1-e)*255,                                                                (1-e)*255,(1-e)*255));	           
            e+=k;
            if(e>=1.0)
		{   p.y++; e--; }				     
}}

你可能感兴趣的:(计算机图形学,算法,C++,图形渲染,图像处理)