圖形學的基本目標和任務
目標
視覺交流,通過圖形或者幾何的方式來表示或展示一些問題或信息。
基本任務
表示:將客觀世界用二維或三維的方式表示
繪制:如何將計算機中的對象用一種直觀形象的圖形圖像方式表現出來
交互:通過計算機輸入輸出設備,以有效的方式表示與繪制的技術
計算機圖形學相關學科
圖像處理:將客觀世界中原來存在的物體形象處理成新的數字化圖像的相關技術。
模式識別:用攝像機和計算機代替人眼對目標進行識別跟蹤和測量,用計算的方法模擬人類的視覺系統。
計算幾何:研究幾何模型和數據處理的學科,討論幾何形體的計算機表示,分析和綜合。。
計算機圖形學的應用領域
計算機輔助設計與制造
科學計算可視化
虛擬現實
計算機動畫
計算機游戲
CG插畫
圖形系統體系結構(圖形流水線)
應用程序階段(產生圖元):把數據以圖元的形式提供給圖形硬件,也提供用于表面紋理映射的圖像或者位圖。
幾何處理階段(產生二維屏幕坐標):以每個頂點為基礎對幾何圖元進行處理,并從三維坐標變換為二維屏幕坐標。
幾何處理階段.PNG
像素處理階段:屏幕對象被傳送到像素處理器進行光柵化,再對每個像素進行著色,然后再輸出到幀緩沖器,最后再輸出到顯示器。
直線生成算法(待補)
區域填充
- 邊界定義的區域,區域邊界上的像素顏色已確定,區域內部像素沒有設置制定的顏色。邊界上和區域內的目標顏色值可相同也可不同。
- 內定義區域。只劃分區域內外部分,區域外所有像素已有特定顏色,區域內顏色與區域外不同。
漫水法:四連通&&八連通
void FloodFill4 (int x, int y, int newcolor, int boundaryColor) {
// 當處理內定義區域時,用if (getpixel(x, y)!=newcolor)判斷即可
if (getpixel(x, y)!=newcolor && getpixel(x,y)!=boundaryColor) {
setpixel(x, y, newcolor, boundaryColor);
FloodFill4(x-1, y, newcolor, boundaryColor);
FloodFill4(x, y+1, newcolor, boundaryColor);
FloodFill4(x+1, y, newcolor, boundaryColor);
FloodFill4(x, y-1, newcolor, boundaryColor);
//如果是基于八連通,則要增加其它四個方向的類似代碼
}
}
void FloodFill (int x, int y, int newcolor, int boundaryColor)
{
Stack stack;
stack.Push(Pixel(x, y)); //把種子像素(x,y)推入棧中
while (! stack.Empty()) //當棧不空時循環執行以下代碼
{
pixel=stack.Pop(); //從棧頂彈出一個像素
// 當處理內定義區域時,用if (pixel.Color !=newcolor)判斷即可
if (pixel.Color != newcolor && pixel.Color != boundaryColor) {
xx = pixel.x; yy = pixel.y;
setpixel( xx, yy, newcolor, boundaryColor);
stack.Push ( Pixel (xx-1, yy ));
stack.Push ( Pixel( xx, yy+1));
stack.Push ( Pixel (xx+1, yy ));
stack.Push ( Pixel(xx, yy-1));
}
}
}
種子掃描線填充算法:
從給定的種子點開始,填充當前掃描線上種子點所在的區間,然后確定與這一區間相鄰上下兩條掃描線上需要填充的區間。在這個區間上取最左側或最右側的一個點作為新的種子點,不斷重復以上過程,直到所有區間都被處理完。
算法步驟:
- 從包含種子像素的堆棧中推出區段內的種子像素;
- 沿著掃描線,對種子像素的左右像素進行填充,直至遇到邊界像素為止;
- 區段內最左和最右像素記為xl和xr,在此區間內,檢查與當前掃描線相鄰的上下兩條掃描線是否全為邊界像素或已被填充過;
- 如果經測試,這些掃描線上的像素段需要填充,則在xl和xr區間范圍內,把每一像素段的最右像素作為種子像素,并壓入堆棧;
- 初始化時,向堆棧壓入種子像素,并在堆棧為空時結束。
反走樣技術
對圖形進行光柵化時,離散的像素表示連續直線和區域邊界時引起的失真現象稱為走樣。用于減小和消除走樣的技術稱為反走樣。
- 超采樣方法:通過軟件方式來提高分辨率。將圖形以高于物理光柵設備分辨率完成光柵化(偽光柵化),按每個子像素合并得到要顯示的像素灰度值。
- 線段反走樣技術:假定線段有寬度,把線段看成狹長矩形,線段通過每個像素時,求出兩者相交的面積,根據該面積值來確定像素的灰度值和顏色值。顏色值與面積呈線性關系。
- 多邊形反走樣算法:采用線段反走樣來改善多邊形邊界的顯示質量。求像素與邊界的相交面積。