康鳳娥, 孔令德
(太原工業學院,山西 太原 030008)
在目前應用最廣泛的光柵圖形顯示系統中,圖形的走樣現象相當普遍,由于圖形的走樣現象對圖形的質量有極大的影響,所以反走樣技術領域的研究也一直是計算機圖形學的研究熱點。關于反走樣技術的算法基本上分為兩類[1],第一類是提高分辨率即增加采樣點(提高采樣頻率)。然而CRT光柵掃描顯示非常精細光柵的能力是有限的,因此人們在較高的分辨率對光柵進行計算,然后采用平均算法得到較低分辨率的像素的屬性,并顯示在分辨率較低的顯示器上。這種方法稱為超采樣或后置濾波。另一類方法是把像素作為一個有限區域,對區域采樣來調整像素的亮度,以光順邊界來減輕鋸齒現象這種方法等價于圖像的后置濾波。查閱近年來文獻資料[2-4],其中多是基于以上兩種方法的改進,許多算法在實際的反走樣圖形繪制中,存在著計算復雜和存儲量大的缺點,使實用性受到限制。本文根據Wu反走樣算法思想[5],將灰度直線的反走樣技術推廣到彩色直線的反走樣算法,用該算法在Visual C++的MFC框架下,繪制動態消隱的彩色球體線框光照模型,計算簡單、運行速度快,圖形光順,反走樣達到了理想的效果。
如彩色球體線框光照模型的繪制方法通常是采用有限單元法將其近似劃分為若干個小平面區域,然后用線框模型進行球體表示。常用的小平面區域有三角形面片和四邊形面片兩種。球體的南北極部分采用三角形面片逼近,球體中間部分可采用四邊形面片或將四邊形面片再次劃分為三角形面片逼近,如圖1所示。球體線框模型小面片的邊界直線采用中點Bresenham算法[6]繪制時,出現了走樣“階梯”,可以采用Wu反走樣算法思想進行改進。在球體線框模型的光照 處理過程中,球體的前景色根據材質、光源位置和環境光等參數來決定,線框模型的每個像素點的顏色因光照而發生了顏色漸變,提出了彩色直線的動態反走樣要求。經過研究,筆者認為彩色直線的動態反走樣算法不僅與直線的顏色有關,而且也受到屏幕背景色的約束。

圖1 球體線框模型的三角形面片和四邊形面片
直線的距離加權反走樣算法是采用空間混色原理來對直線的灰度值進行修正,以產生模糊的邊界,在視覺中形成光順效果。空間混色原理指出[2],人眼對某一區域顏色的識別取決于這個區域顏色的平均值。按照Wu反走樣算法思想,根據像素與理想直線距離的大小為相鄰像素分配灰度值,使繪制的直線達到視覺上消除“階梯”的效果。
對于斜率滿足0<k≤1的直線段AB,如圖2所示,x方向為主位移方向。理想直線段AB與像素的中心連線P1P4、P2P5、P3P6分別相交于C、D、E點。P1、P2、P3為理想直線上方的像素點,P4、P5、P6分別為理想直線下方的像素點。直線段AB掃描轉換的結果為:P2、P3和P4。由于轉換后的像素點分別位于上下兩行,直線段AB發生了走樣。Wu反走樣的原理是使用垂直方向的兩個相鄰像素共同表示理想直線段上的一點。即將C點表示為P1和P4,D點表示為P2和P5,E點表示為P3和P6。可以將上下兩個像素到交點的距離作為加權參數,對像素的灰度值進行調節。使所繪制的直線達到視覺上消除“階梯”的反走樣效果。

圖 2 距離加權反走樣原理
對于任意斜率的直線,相鄰兩個像素灰度值的設置見表1。表中d為像素點與理想直線的距離。從表1第1行可以看出,對于左右兩個相鄰像素點(x, y)和(x+1, y),當d為0時,理想直線過像素點(x, y),其灰度為黑色,像素點(x+1, y)的灰度為白色;當d為1時,理想直線過像素點(x+1, y),其灰度為黑色,像素點(x, y)的灰度為白色。根據表1設計的算法可以實現任意斜率直線的Wu反走樣算法繪制[4],相鄰兩像素灰度值為


表1 不同斜率直線的相鄰像素的灰度值設置
這里,直線的前景色為黑色,屏幕背景色為白色。圖3為球體線框模型的Wu反走樣算法的灰度效果圖。

圖 3 球體線框模型反走樣效果圖
在真實感圖形的繪制中,直線的顏色發生漸變,可以繪制出如圖4所示的球體線框光照模 型[7-8]。圖4中在球體的右上方和左下方施加了兩個光源,出現了兩個鏡面反射高光區域。但圖4線框邊界直線未進行反走樣處理,“階梯”明顯,需要提出彩色線條的反走樣算法。真實感圖形顯示的另一個問題是屏幕的背景色需要根據場景實時進行變換,這樣球體線框光照模型反走樣算法就需要處理前景色和背景色的關系。本文根據研究結果提出了基于屏幕背景色的彩色直線反走樣算法。

圖 4 球體線框模型雙光源走樣光照效果圖
對Wu反走樣算法進行改進,根據彩色直線上每個像素點的顏色來進行反走樣處理。假設屏幕的背景色仍為白色,直線上任一點的前景色為RGB(r, g, b),則彩色直線的反走樣算法是從直線顏色變化到白色,形成模糊邊界。相鄰兩個像素灰度值的設置見表2,表2中d為像素點與理想直線的距離。從表2第1行可以看出,對于左右兩個相鄰像素點(x, y)和(x+1, y),當d為0時,理想直線過像素點(x, y),其顏色為直線顏色RGB(r, g, b),像素點(x+1, y)的顏色為白色;當d為1時,理想直線過像素點(x+1, y),其顏色為直線顏色RGB(r, g, b),像素點(x, y)的顏色為白色。根據表2設計的算法可以實現任意顏色直線的反走樣,相鄰兩像素的顏色值為

這里注意直線的前景色為彩色,屏幕的背景色仍為白色。使用本模型繪制的球體線框模型光照反走樣效果如圖5所示。

表2 彩色直線的相鄰像素的顏色設置
對于圖5所示的反走樣球體線框光照模型,白色背景不能充分展示其光照效果,一般常將背景色設置為黑色。在不改變白色背景色的反走樣算法的前提下,只是簡單將背景色更換為黑色,再次顯示的圖形如圖6所示。圖6中球體的線框直線失去了反走樣效果,這是由于背景色從白色更換為黑色而引起的。從這里可以得到一個結論,彩色直線的反走樣效果與屏幕的背景色直接相關,反走樣算法需要考慮屏幕背景色的影響。

圖 5 球體線框模型反走樣光照效果圖

圖 6 沒有考慮背景色因子的黑色背景球體 線框模型光照效果圖
設直線的前景色為RGB(rf, gf, bf),背景色為RGB(rb, gb, bb)。則彩色直線的反走樣是從前景色變化到背景色,出現模糊邊界。相鄰兩個像素灰度值的設置見表3。表3中d為像素點與理想直線的距離,從表3第1行可以看出,對于左右兩個相鄰像素點(x, y)和(x+1, y),當d為0時,理想直線過像素點(x, y),其顏色為直線顏色RGB(rf, gf, bf),像素點(x+1, y)的顏色為背景色RGB(rb, gb, bb);當d為1時,理想直線過像素點(x+1, y),其顏色為直線顏色RGB(rf, gf, bf),像素點(x, y)的顏色為直線顏色RGB(rb, gb, bb)。根據表3設計的算法可以實現任意顏色直線的反走樣,相鄰兩像素的顏色值為


使用本模型繪制的球體線框模型反走樣光照效果如圖7所示。圖7中背景的每個像素全部為黑色,如果使用動態場景做為屏幕背景,背景的每個像素的顏色不再一致,使用本原理實現的動態場景反走樣效果如圖8所示。

表3 包含背景色參數的彩色直線的相鄰像素的顏色設置

圖 7 考慮背景色因子的黑色背景球體線框模型反走樣光照效果圖

圖 8 動態場景的球線框模型反走樣光照效果圖
本文提出了基于背景色的彩色直線反走樣的算法,將Wu 反走樣算法擴展到前景色和背景色的層面上去研究,深化了反走樣理論。本算法可以實現任意斜率的彩色直線在任意背景下的反走樣圖形的繪制,這種背景可以是靜態背景也可以是動態背景。本文在Visual C++的MFC 框架下實現,未使用任何圖形標準(如,OpenGL或DirectX)。使用本算法繪制的球體線框光照反走樣模型在筆者主持開發的虛擬現實項目中得到了應用。
[1] 陳傳波, 陸 楓. 計算機圖形學基礎[M]. 北京: 電子工業出版社, 2002. 140-144.
[2] 王榮林, 陳文飛. 計算機圖形學反走樣技術的探索與應用[J]. 科技進步與對策, 2000, 17(2): 89-90.
[3] 楊愛良, 楊 睿, 熊智勇. 反走樣技術在計算機圖形仿真中的應用[J]. 計算機仿真, 2005, 22(4): 124-127.
[4] 江 修, 張煥春, 經亞枝. 三像素寬反走樣直線的繪制算法研究[J]. 南京航空航天大學學報, 2003, 35(2): 148-151.
[5] Wu X. An efficient antiliasing technique [J]. Computer Graphics, 1991, 5(4): 143-152.
[6] 孫家廣, 胡事民. 計算機圖形學基礎教程[M]. 北京:清華大學出版社, 2005. 18-21.
[7] 孔令德. 計算機圖形學基礎教程(Visual C++版)[M].北京: 清華大學出版社, 2008. 192-194.
[8] 孔令德. 計算機圖形學實踐教程(Visual C++版)[M].北京: 清華大學出版社, 2008. 388-420.