周謙 倪健
在人機(jī)交互的界面軟件中經(jīng)常要使用各類圖形,如點(diǎn)、直線、曲線、多邊形和圓,軟件設(shè)計(jì)人員通過(guò)編寫程序?qū)D形按需要的方式呈現(xiàn)給使用者。所有圖形最終是以像素為基本單位顯示到屏幕,當(dāng)一條直線,不在水平或垂直方向時(shí),放大它的顯示結(jié)果,可以觀察到直線呈現(xiàn)鋸齒狀,效果看起來(lái)不自然。本文結(jié)合實(shí)際的軟件開(kāi)發(fā)過(guò)程,探討使用Opengl反走樣優(yōu)化圖形的顯示方法。
Opengl(Open Graphics Library)實(shí)際上是一套標(biāo)準(zhǔn)的圖形與硬件之間的開(kāi)放圖形庫(kù)接口,為軟件開(kāi)發(fā)者提供了豐富的圖形編程接口(API),支持不同的編程語(yǔ)言和硬件平臺(tái)。軟件接口由幾百個(gè)不同的函數(shù)組成,可實(shí)現(xiàn)從簡(jiǎn)單的圖形繪制到復(fù)雜的三維圖形交互。OpenGL常應(yīng)用于虛擬儀表設(shè)備、計(jì)算機(jī)輔助設(shè)計(jì)、可視化程序和游戲等軟件的開(kāi)發(fā)。其中反走樣函數(shù)功能可以很好地解決圖形鋸齒化的問(wèn)題。
軟件背景
為了設(shè)計(jì)具有360°指向的顯示圖,選用Opengl作為圖形設(shè)計(jì)的接口。在只通過(guò)360條線段連接組成的多邊形,近似地表現(xiàn)圓的外形圖,編碼完成的效果如圖1所示。
通過(guò)放大截圖,可以觀察到圓形的邊緣明細(xì)呈現(xiàn)鋸齒狀,特別是在接近垂直和水平時(shí),更是明顯。如圖2和圖3所示。
解決思路
所有計(jì)算機(jī)顯示的圖形都是是由離散的像素點(diǎn)組成的,因此屏幕上的圖像與現(xiàn)實(shí)事物存在一些誤差。誤差主要表現(xiàn)為圖形上的直線或光滑曲線的邊緣呈現(xiàn)鋸齒狀、彩色的顏色失真、微小物體的不細(xì)致體現(xiàn)等。其中的邊緣鋸齒化就叫做走樣。解決這種圖形顯示與設(shè)計(jì)者預(yù)期效果不同的走樣問(wèn)題,有2個(gè)處理思路。
其一:提高分辨率
分辨率是指屏幕在橫向上的點(diǎn)數(shù)乘以縱向上的點(diǎn)數(shù),得到總的像素點(diǎn)數(shù)。在同樣大小的屏幕上,當(dāng)分辨率低時(shí),在屏幕上顯示的像素就少,像素與像素之間的距離(像距)較大,單個(gè)像素的尺寸也較大。當(dāng)分辨率提高時(shí),在屏幕上顯示的像素增多,像素與像素之間的距離(像距)變小,單個(gè)像素尺寸也變小。通過(guò)提升硬件處理能力,增加單位面積內(nèi)的像素?cái)?shù)量。在屏幕尺寸不變的情況下,分辨率越高,縮小像素之間的距離,顯示效果就越精準(zhǔn)、細(xì)膩,可取得接近現(xiàn)實(shí)世界的效果。但這種方法的缺點(diǎn)是成本會(huì)大幅提高,并且會(huì)引起掃描轉(zhuǎn)換時(shí)間變長(zhǎng)、幀緩存容量變大等系列問(wèn)題。
其二:軟件反走樣
反走樣(Antialiasing),是計(jì)算機(jī)圖形學(xué)中的一個(gè)重要概念。反走樣就是將圖形邊緣與其相鄰的像素點(diǎn)的顏色進(jìn)行混合,讓過(guò)渡變得平緩柔和,圖像就顯得更順滑。如圖4所示,左部是走樣線,右部是反走樣線。
比較2種解決問(wèn)題的思路,第2種更簡(jiǎn)潔、經(jīng)濟(jì)和可行。
代碼實(shí)現(xiàn)
Opengl為軟件開(kāi)發(fā)人員提供了完善的反走樣函數(shù)。
首先調(diào)用glEnable (GL_BLEND)函數(shù)啟用融合,之后啟用點(diǎn)、線、多邊形的反走樣。
glEnable( GL_POINT_SMOOTH );
glEnable( GL_LINE_SMOOTH );
glEnable( GL_POLYGON_SMOOTH )。
可以調(diào)用函數(shù)glHint()對(duì)圖像質(zhì)量與制圖速度之間的作些調(diào)整,但并非所有的編碼都采用它,依據(jù)實(shí)際情況而定。其函數(shù)形式為:glHint( GLenum target , GLenum hint ),參數(shù)取值范圍見(jiàn)表1所示。
實(shí)際效果
經(jīng)過(guò)反走樣處理后的圓形邊緣鋸齒淡化了,即使放大觀察,也依然平滑,曲線的過(guò)度更柔和。
在觀察Opengl反走樣處理的圖形邊緣效果后,可看出其圖形整體的視覺(jué)效果更細(xì)膩、更自然,軟件使用者的感受會(huì)更加舒適。