直線掃瞄轉換演算法在處理非水平、非垂直且非45°的直線段時會出現鋸齒,這是因為直線段在光柵掃瞄顯示器上顯示的影象是由一系列亮度相同而面積不為零的離散畫素點構成的。這種由離散量表示連續量而引起的失真稱為走樣(aliasing)。用於減輕走樣現象的技術稱為反走樣(anti-aliasing,aa)或者抗鋸齒。走樣是理想直線(理想直線寬度為零)掃瞄轉換後(真實畫素點面積不為零)的必然結果。走樣是光柵掃瞄顯示器的一種固有現象,不可避免,只能減輕。
反走樣技術主要分為兩類:一類是硬體技術,通過提高顯示器的解析度來實現;另一類是軟體技術,通過改進軟體演算法來實現。
從硬體角度把顯示器的分辯率提高了一倍。由於每個鋸齒在x方向和y方向都只有原先解析度的一半,所以看上去走樣現象有所改善。雖然如此,硬體反走樣技術由於受到硬體條件和成本的限制,實現起來較為困難,很難達到理想的反走樣效果。
軟體反走樣技術主要是加權區域取樣。演算法的實質是利用人眼視覺特性,通過加權平均的方法,調節畫素的亮度和灰度,以產生模糊的邊界,從而達到較好的視覺效果以消除 「鋸齒」。加權引數可以選擇距離、面積和體積等。下面主要講解直線的距離加權反走樣演算法,關於面積加權和體積加權反走樣演算法請讀者參考相關文獻。
wu反走樣演算法是採用空間混色原理來對走樣進行修正。空間混色原理指出,人眼對某一區域顏色的識別是取這個區域顏色的平均值。wu反走樣演算法原理是對於理想直線上的任一點,同時以兩個不同亮度級別的相鄰畫素來表示。理想直線段上的點q1,掃瞄轉換後可用畫素點p1和畫素點p4以不同的亮度級別共同顯示,畫素點離理想直線段越近,其亮度值越小,畫素越暗;畫素點離理想直線段越遠,其亮度值就越大,畫素越亮,但二者的亮度級別之和等於畫素q1的灰度值。
斜率為k的理想直線段與pu
p
u和pd
p
d畫素中心連線的交點為qi
(xi+
1,ei
) qi(
xi+1
,ei)
。eie
i為qi
q
i與pd
p
d的距離。
每右移乙個畫素,ei
+1=e
i+k ei+
1=ei
+k。當ei
≥1.0
e i≥
1.0時,yi
+1=y
i+1,
ei+1
=ei−
1 yi+
1=yi
+1,e
i+1=
ei−1
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)
}
因為wu反走樣演算法是從前景色過渡到背景色,彩色直線段的反走樣需要考慮背景色的影響。設直線段的前景色(foreground color)為cf,背景色(background color)為cb。彩色直線段的反走樣是從前景色變化到背景色,出現模糊邊界。繪製光滑過渡的彩色直線段時,需要使用以下公式進行前景色線性插值 c=
(1−t
)c0+
tc1 c=(
1−t)
c0+t
c1式中,c c
為顏色漸變直線段上任一點的顏色;c0
'>c0c
0為直線段起點的顏色;c1
c
1為直線段終點的顏色。
OPENGL簡介 反走樣
由於計算機以離散點生成圖形,生成圖形必然與真實景物存在差距,這種差距表現為 直線或光滑曲面的鋸齒 花紋失去原有色彩形狀 細小物體在畫面的消失等。統統叫做走樣 aliasing 反走樣可以減少這種情況。粗略設想一下,就是把原來邊界的地方鋸齒部分用低飽和度的點補上,這樣既不影響整體輪廓,又獲得較好的平滑...
OpenGL反走樣 待續
同時我們也注意到,我們所主要引用的參考文獻easy wireframe display with barycentric coordinates中提到了利用opengl內建函式fwidth實現反走樣的方法 在後面的工作中,找到了另外幾種實現反走樣的方法,蒐集對比一下,詳見該篇文章 drawing a...
還是自適應反走樣
在fmf的反走樣策略上,作出了如下幾個決定 1 提供兩種反走樣選擇 無反走樣 自適應反走樣。將閾值為0的自適應反走樣當作傳統反走樣的替代品。2 反走樣模式只用於輸出,可以是視覺化的輸出,也可以是render to disk。提供視覺化反走樣輸出,主要是考慮一些小圖的製作,比如5000 x 5000。...