康鳳娥, 孔令德
(太原工業(yè)學(xué)院,山西 太原 030008)
在目前應(yīng)用最廣泛的光柵圖形顯示系統(tǒng)中,圖形的走樣現(xiàn)象相當(dāng)普遍,由于圖形的走樣現(xiàn)象對(duì)圖形的質(zhì)量有極大的影響,所以反走樣技術(shù)領(lǐng)域的研究也一直是計(jì)算機(jī)圖形學(xué)的研究熱點(diǎn)。關(guān)于反走樣技術(shù)的算法基本上分為兩類[1],第一類是提高分辨率即增加采樣點(diǎn)(提高采樣頻率)。然而CRT光柵掃描顯示非常精細(xì)光柵的能力是有限的,因此人們?cè)谳^高的分辨率對(duì)光柵進(jìn)行計(jì)算,然后采用平均算法得到較低分辨率的像素的屬性,并顯示在分辨率較低的顯示器上。這種方法稱為超采樣或后置濾波。另一類方法是把像素作為一個(gè)有限區(qū)域,對(duì)區(qū)域采樣來(lái)調(diào)整像素的亮度,以光順邊界來(lái)減輕鋸齒現(xiàn)象這種方法等價(jià)于圖像的后置濾波。查閱近年來(lái)文獻(xiàn)資料[2-4],其中多是基于以上兩種方法的改進(jìn),許多算法在實(shí)際的反走樣圖形繪制中,存在著計(jì)算復(fù)雜和存儲(chǔ)量大的缺點(diǎn),使實(shí)用性受到限制。本文根據(jù)Wu反走樣算法思想[5],將灰度直線的反走樣技術(shù)推廣到彩色直線的反走樣算法,用該算法在Visual C++的MFC框架下,繪制動(dòng)態(tài)消隱的彩色球體線框光照模型,計(jì)算簡(jiǎn)單、運(yùn)行速度快,圖形光順,反走樣達(dá)到了理想的效果。
如彩色球體線框光照模型的繪制方法通常是采用有限單元法將其近似劃分為若干個(gè)小平面區(qū)域,然后用線框模型進(jìn)行球體表示。常用的小平面區(qū)域有三角形面片和四邊形面片兩種。球體的南北極部分采用三角形面片逼近,球體中間部分可采用四邊形面片或?qū)⑺倪呅蚊嫫俅蝿澐譃槿切蚊嫫平鐖D1所示。球體線框模型小面片的邊界直線采用中點(diǎn)Bresenham算法[6]繪制時(shí),出現(xiàn)了走樣“階梯”,可以采用Wu反走樣算法思想進(jìn)行改進(jìn)。在球體線框模型的光照 處理過(guò)程中,球體的前景色根據(jù)材質(zhì)、光源位置和環(huán)境光等參數(shù)來(lái)決定,線框模型的每個(gè)像素點(diǎn)的顏色因光照而發(fā)生了顏色漸變,提出了彩色直線的動(dòng)態(tài)反走樣要求。經(jīng)過(guò)研究,筆者認(rèn)為彩色直線的動(dòng)態(tài)反走樣算法不僅與直線的顏色有關(guān),而且也受到屏幕背景色的約束。
圖1 球體線框模型的三角形面片和四邊形面片
直線的距離加權(quán)反走樣算法是采用空間混色原理來(lái)對(duì)直線的灰度值進(jìn)行修正,以產(chǎn)生模糊的邊界,在視覺(jué)中形成光順效果。空間混色原理指出[2],人眼對(duì)某一區(qū)域顏色的識(shí)別取決于這個(gè)區(qū)域顏色的平均值。按照Wu反走樣算法思想,根據(jù)像素與理想直線距離的大小為相鄰像素分配灰度值,使繪制的直線達(dá)到視覺(jué)上消除“階梯”的效果。
對(duì)于斜率滿足0<k≤1的直線段AB,如圖2所示,x方向?yàn)橹魑灰品较?。理想直線段AB與像素的中心連線P1P4、P2P5、P3P6分別相交于C、D、E點(diǎn)。P1、P2、P3為理想直線上方的像素點(diǎn),P4、P5、P6分別為理想直線下方的像素點(diǎn)。直線段AB掃描轉(zhuǎn)換的結(jié)果為:P2、P3和P4。由于轉(zhuǎn)換后的像素點(diǎn)分別位于上下兩行,直線段AB發(fā)生了走樣。Wu反走樣的原理是使用垂直方向的兩個(gè)相鄰像素共同表示理想直線段上的一點(diǎn)。即將C點(diǎn)表示為P1和P4,D點(diǎn)表示為P2和P5,E點(diǎn)表示為P3和P6??梢詫⑸舷聝蓚€(gè)像素到交點(diǎn)的距離作為加權(quán)參數(shù),對(duì)像素的灰度值進(jìn)行調(diào)節(jié)。使所繪制的直線達(dá)到視覺(jué)上消除“階梯”的反走樣效果。
圖 2 距離加權(quán)反走樣原理
對(duì)于任意斜率的直線,相鄰兩個(gè)像素灰度值的設(shè)置見(jiàn)表1。表中d為像素點(diǎn)與理想直線的距離。從表1第1行可以看出,對(duì)于左右兩個(gè)相鄰像素點(diǎn)(x, y)和(x+1, y),當(dāng)d為0時(shí),理想直線過(guò)像素點(diǎn)(x, y),其灰度為黑色,像素點(diǎn)(x+1, y)的灰度為白色;當(dāng)d為1時(shí),理想直線過(guò)像素點(diǎn)(x+1, y),其灰度為黑色,像素點(diǎn)(x, y)的灰度為白色。根據(jù)表1設(shè)計(jì)的算法可以實(shí)現(xiàn)任意斜率直線的Wu反走樣算法繪制[4],相鄰兩像素灰度值為
表1 不同斜率直線的相鄰像素的灰度值設(shè)置
這里,直線的前景色為黑色,屏幕背景色為白色。圖3為球體線框模型的Wu反走樣算法的灰度效果圖。
圖 3 球體線框模型反走樣效果圖
在真實(shí)感圖形的繪制中,直線的顏色發(fā)生漸變,可以繪制出如圖4所示的球體線框光照模 型[7-8]。圖4中在球體的右上方和左下方施加了兩個(gè)光源,出現(xiàn)了兩個(gè)鏡面反射高光區(qū)域。但圖4線框邊界直線未進(jìn)行反走樣處理,“階梯”明顯,需要提出彩色線條的反走樣算法。真實(shí)感圖形顯示的另一個(gè)問(wèn)題是屏幕的背景色需要根據(jù)場(chǎng)景實(shí)時(shí)進(jìn)行變換,這樣球體線框光照模型反走樣算法就需要處理前景色和背景色的關(guān)系。本文根據(jù)研究結(jié)果提出了基于屏幕背景色的彩色直線反走樣算法。
圖 4 球體線框模型雙光源走樣光照效果圖
對(duì)Wu反走樣算法進(jìn)行改進(jìn),根據(jù)彩色直線上每個(gè)像素點(diǎn)的顏色來(lái)進(jìn)行反走樣處理。假設(shè)屏幕的背景色仍為白色,直線上任一點(diǎn)的前景色為RGB(r, g, b),則彩色直線的反走樣算法是從直線顏色變化到白色,形成模糊邊界。相鄰兩個(gè)像素灰度值的設(shè)置見(jiàn)表2,表2中d為像素點(diǎn)與理想直線的距離。從表2第1行可以看出,對(duì)于左右兩個(gè)相鄰像素點(diǎn)(x, y)和(x+1, y),當(dāng)d為0時(shí),理想直線過(guò)像素點(diǎn)(x, y),其顏色為直線顏色RGB(r, g, b),像素點(diǎn)(x+1, y)的顏色為白色;當(dāng)d為1時(shí),理想直線過(guò)像素點(diǎn)(x+1, y),其顏色為直線顏色RGB(r, g, b),像素點(diǎn)(x, y)的顏色為白色。根據(jù)表2設(shè)計(jì)的算法可以實(shí)現(xiàn)任意顏色直線的反走樣,相鄰兩像素的顏色值為
這里注意直線的前景色為彩色,屏幕的背景色仍為白色。使用本模型繪制的球體線框模型光照反走樣效果如圖5所示。
表2 彩色直線的相鄰像素的顏色設(shè)置
對(duì)于圖5所示的反走樣球體線框光照模型,白色背景不能充分展示其光照效果,一般常將背景色設(shè)置為黑色。在不改變白色背景色的反走樣算法的前提下,只是簡(jiǎn)單將背景色更換為黑色,再次顯示的圖形如圖6所示。圖6中球體的線框直線失去了反走樣效果,這是由于背景色從白色更換為黑色而引起的。從這里可以得到一個(gè)結(jié)論,彩色直線的反走樣效果與屏幕的背景色直接相關(guān),反走樣算法需要考慮屏幕背景色的影響。
圖 5 球體線框模型反走樣光照效果圖
圖 6 沒(méi)有考慮背景色因子的黑色背景球體 線框模型光照效果圖
設(shè)直線的前景色為RGB(rf, gf, bf),背景色為RGB(rb, gb, bb)。則彩色直線的反走樣是從前景色變化到背景色,出現(xiàn)模糊邊界。相鄰兩個(gè)像素灰度值的設(shè)置見(jiàn)表3。表3中d為像素點(diǎn)與理想直線的距離,從表3第1行可以看出,對(duì)于左右兩個(gè)相鄰像素點(diǎn)(x, y)和(x+1, y),當(dāng)d為0時(shí),理想直線過(guò)像素點(diǎn)(x, y),其顏色為直線顏色RGB(rf, gf, bf),像素點(diǎn)(x+1, y)的顏色為背景色RGB(rb, gb, bb);當(dāng)d為1時(shí),理想直線過(guò)像素點(diǎn)(x+1, y),其顏色為直線顏色RGB(rf, gf, bf),像素點(diǎn)(x, y)的顏色為直線顏色RGB(rb, gb, bb)。根據(jù)表3設(shè)計(jì)的算法可以實(shí)現(xiàn)任意顏色直線的反走樣,相鄰兩像素的顏色值為
使用本模型繪制的球體線框模型反走樣光照效果如圖7所示。圖7中背景的每個(gè)像素全部為黑色,如果使用動(dòng)態(tài)場(chǎng)景做為屏幕背景,背景的每個(gè)像素的顏色不再一致,使用本原理實(shí)現(xiàn)的動(dòng)態(tài)場(chǎng)景反走樣效果如圖8所示。
表3 包含背景色參數(shù)的彩色直線的相鄰像素的顏色設(shè)置
圖 7 考慮背景色因子的黑色背景球體線框模型反走樣光照效果圖
圖 8 動(dòng)態(tài)場(chǎng)景的球線框模型反走樣光照效果圖
本文提出了基于背景色的彩色直線反走樣的算法,將Wu 反走樣算法擴(kuò)展到前景色和背景色的層面上去研究,深化了反走樣理論。本算法可以實(shí)現(xiàn)任意斜率的彩色直線在任意背景下的反走樣圖形的繪制,這種背景可以是靜態(tài)背景也可以是動(dòng)態(tài)背景。本文在Visual C++的MFC 框架下實(shí)現(xiàn),未使用任何圖形標(biāo)準(zhǔn)(如,OpenGL或DirectX)。使用本算法繪制的球體線框光照反走樣模型在筆者主持開(kāi)發(fā)的虛擬現(xiàn)實(shí)項(xiàng)目中得到了應(yīng)用。
[1] 陳傳波, 陸 楓. 計(jì)算機(jī)圖形學(xué)基礎(chǔ)[M]. 北京: 電子工業(yè)出版社, 2002. 140-144.
[2] 王榮林, 陳文飛. 計(jì)算機(jī)圖形學(xué)反走樣技術(shù)的探索與應(yīng)用[J]. 科技進(jìn)步與對(duì)策, 2000, 17(2): 89-90.
[3] 楊愛(ài)良, 楊 睿, 熊智勇. 反走樣技術(shù)在計(jì)算機(jī)圖形仿真中的應(yīng)用[J]. 計(jì)算機(jī)仿真, 2005, 22(4): 124-127.
[4] 江 修, 張煥春, 經(jīng)亞枝. 三像素寬反走樣直線的繪制算法研究[J]. 南京航空航天大學(xué)學(xué)報(bào), 2003, 35(2): 148-151.
[5] Wu X. An efficient antiliasing technique [J]. Computer Graphics, 1991, 5(4): 143-152.
[6] 孫家廣, 胡事民. 計(jì)算機(jī)圖形學(xué)基礎(chǔ)教程[M]. 北京:清華大學(xué)出版社, 2005. 18-21.
[7] 孔令德. 計(jì)算機(jī)圖形學(xué)基礎(chǔ)教程(Visual C++版)[M].北京: 清華大學(xué)出版社, 2008. 192-194.
[8] 孔令德. 計(jì)算機(jī)圖形學(xué)實(shí)踐教程(Visual C++版)[M].北京: 清華大學(xué)出版社, 2008. 388-420.