chap5-基本圖形生成算法[168頁]課件_第1頁
chap5-基本圖形生成算法[168頁]課件_第2頁
chap5-基本圖形生成算法[168頁]課件_第3頁
chap5-基本圖形生成算法[168頁]課件_第4頁
chap5-基本圖形生成算法[168頁]課件_第5頁
已閱讀5頁,還剩163頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第五章 基本圖形生成算法12如何在指定的輸出設備上根據坐標描述構造基本二維幾何圖形直線、圓多邊形域字符串相關屬性主要內容3圖形的生成:是在指定的輸出設備上,根據坐標描述構造二維幾何圖形。圖形的掃描轉換:在光柵顯示器等數字設備上確定一個最佳逼近于圖形的象素集的過程。 圖5.1 用象素點集逼近直線圖形生成的概念4直線段的掃描轉換直線段的繪制要求DDA算法中點Bresenhan算法改進的Bresenhan算法12345直線的掃描轉換直線的繪制要求直線要直;直線的端點要準確,無定向性無斷裂;直線的亮度、色澤要均勻;畫線的速度要快;具有不同的色澤、亮度、線型等。6直線的掃描轉換解決的問題:給定直線兩端點

2、P0(x0,y0)和P1(x1,y1),畫出該直線。數值微分法中點Bresenhan算法改進的Bresenhan算法7直線段的掃描轉換直線段的繪制要求DDA算法中點Bresenhan算法改進的Bresenhan算法12348數值微分法(DDA法)直線的微分方程:=1/max(|x|,|y|) 圖5.2 DDA算法原理max(|x|,|y|)=|x|,即|k|1的情況: max(|x|,|y|)=|y|,此時|k|1:10增量算法直觀、易實現不利于用硬件實現 數值微分法(DDA法)特點11直線段的掃描轉換直線段的繪制要求DDA算法中點Bresenhan算法改進的Bresenhan算法123412

3、中點Bresenham算法直線的方程圖5.3 直線將平面分為三個區(qū)域13中點Bresenham算法算法原理:根據直線的斜率確定或選擇變量在x或y方向上每次遞增一個單位,而另一方向的增量為1或0,它取決于實際直線與相鄰象素點的距離,這一距離稱為誤差項。假定0k1,即0 y/ x 1,x是最大位移方向圖5.4 Brensemham算法生成直線的原理判別式:則有:圖5.5 Brensemham算法生成直線的原理d的意義:圖5.6 Brensemham算法生成直線的原理誤差項的遞推(d0)圖5.7 誤差項遞推誤差項的遞推(d0)圖5.8 誤差項遞推19初始值d的計算中點Bresenham算法圖5.9

4、計算初值20改進:用2dx代替d ,令D2dx 則:中點Bresenham算法改進21輸入直線的兩端點P0(x0,y0)和P1(x1,y1)。計算初始值x、y、D=x-2y、x=x0、y=y0。繪制點(x,y)。判斷D的符號。若D0) then e=e-1誤差項的計算d初=0,每走一步:d=d+k if (e0) then d=d-1改進2:用E=2ex來替換ee初=-0.5每走一步有e=e+kif (e0) then e=e-1E初=-0.5*2x=-x每走一步有E=(e+k)*2x=E+2y if (e0) then E=(e-1)*2x=E-2x281.輸入直線的兩端點P0(x0,y0)

5、和P1(x1,y1)。2.計算初始值x、y、e=-x、x=x0、y=y0。3.繪制點(x,y)。4.e更新為e+2y,判斷e的符號。若e0,則(x,y)更新為(x+1,y+1),同時將e更新為e-2x;否則(x,y)更新為(x+1,y)。5.當直線沒有畫完時,重復步驟3和4。否則結束。改進的Bresenham算法算法步驟29圓的掃描轉換八分法畫圓簡單方程生成圓弧中點Bresenhan算法畫圓12330圓的掃描轉換解決的問題:繪出圓心在原點,半徑為整數R的圓x2+y2=R2。(y,x)(-y,x)(-x,y)(-x,-y)(-y,-x)(y,-x)(x,-y)圖5.11 八分法畫圓32解決問題:

6、圓的掃描轉換圖5.12 1/8圓弧33圓的掃描轉換八分法畫圓簡單方程生成圓弧中點Bresenhan算法畫圓12334簡單方程產生圓弧算法原理:利用其函數方程,直接離散計算。圓的函數方程為: 35圓的極坐標方程為: 簡單方程產生圓弧36圓的掃描轉換八分法畫圓簡單方程生成圓弧中點Bresenhan算法畫圓12337構造函數F(x,y)=x2+y2-R2。對于圓上的點,有F(x,y)=0;對于圓外的點,F(x,y)0;而對于圓內的點,F(x,y)0時,下一點取Pd(xi +1,yi-1)。構造判別式:中點Bresenham畫圓誤差項的遞推(d0) 圖5.14 d0的情況誤差項的遞推(d0) 圖5.1

7、5 d0的情況42判別式的初始值中點Bresenham畫圓改進:用d-0.25代替d此時有:441.輸入圓的半徑R。2.計算初始值d=1-R、x=0、y=R。3.繪制點(x,y)及其在八分圓中的另外七個對稱點。4.判斷d的符號。若d0,則先將d更新為d+2x+3,再將(x,y)更新為(x+1,y);否則先將d更新為d+2(x-y)+5,再將(x,y)更新為(x+1,y-1)。5.當xy時,重復步驟3和4。否則結束。程序演示中點Bresenham畫圓算法步驟45多邊形的掃描轉換與區(qū)域填充多邊形的掃描轉換區(qū)域填充多邊形掃描轉換與區(qū)域填充的比較相關概念123446多邊形的掃描轉換與區(qū)域填充多邊形的掃

8、描轉換主要是通過確定穿越區(qū)域的掃描線的覆蓋區(qū)間來填充。區(qū)域填充是從給定的位置開始涂描直到指定的邊界條件為止。47多邊形的掃描轉換頂點表示用多邊形的頂點序列來刻劃多邊形。點陣表示是用位于多邊形內的象素的集合來刻劃多邊形。掃描轉換多邊形:從多邊形的頂點信息出發(fā),求出位于其內部的各個象素,并將其顏色值寫入幀緩存中相應單元的過程。48多邊形的掃描轉換X掃描線算法改進的有效邊表算法邊緣填充算法49基本思想:按掃描線順序,計算掃描線與多邊形的相交區(qū)間,再用要求的顏色顯示這些區(qū)間的所有象素。X掃描線算法原理圖5.16 x-掃描線算法填充多邊形501.確定多邊形所占有的最大掃描線數,得到多邊形頂點的最小和最大

9、y值(ymin和ymax)。2.從y=ymin到y(tǒng)=ymax,每次用一條掃描線進行填充。3.對一條掃描線填充的過程可分為四個步驟:求交;排序;交點配對;區(qū)間填色。X掃描線算法算法步驟51交點的取整規(guī)則:使生成的像素全部位于多邊形之內。(用于直線等圖元掃描轉換的四舍五入原則可能導致部分像素位于多邊形之外,從而不可用)。假定非水平邊與掃描線y=e相交,交點的橫坐標為x,規(guī)則如下:X掃描線算法取整規(guī)則規(guī)則1:X為小數,即交點落于掃描線上兩個相鄰像素之間時:交點位于左邊界之上,向右取整;交點位于右邊界之上,向左取整;圖5.17 取整規(guī)則1 規(guī)則2:邊界上象素的取舍問題,避免填充擴大化。規(guī)定落在右邊邊界

10、上的象素不予填充。(具體實現時,只要對掃描線與多邊形的相交區(qū)間左閉右開)圖5.18 取整規(guī)則2規(guī)則3:當掃描線與多邊形頂點相交時,交點的取舍,保證交點正確配對。圖5.19 取整規(guī)則355解決方法: 當掃描線與多邊形的頂點相交時,若共享頂點的兩條邊分別落在掃描線的兩邊,交點只算一個;若共享頂點的兩條邊在掃描線的同一邊,這時交點作為零個或兩個。 X掃描線算法取整規(guī)則56實際處理:只要檢查頂點的兩條邊的另外兩個端點的Y值,兩個Y值中大于交點Y值的個數是0,1,2,來決定取0,1,2個交點。圖5.20 取整規(guī)則3X掃描線算法取整規(guī)則57填充過程實例圖5.21 與掃描線相交的多邊形頂點的交點數X掃描線算

11、法取整規(guī)則58改進的有效邊表算法(Y連貫性算法)改進原理:處理一條掃描線時,僅對有效邊求交。利用掃描線的連貫性。利用多邊形邊的連貫性。圖5.22 與多邊形邊界相交的兩條連續(xù)掃描線交點的相關性59有效邊(Active Edge):指與當前掃描線相交的多邊形的邊,也稱為活性邊。有效邊表(Active Edge Table, AET):把有效邊按與掃描線交點x坐標遞增的順序存放在一個鏈表中,此鏈表稱為有效邊表。有效邊表的每個結點: x ymax 1/k next改進的有效邊表算法(Y連貫性算法)60首先構造一個縱向鏈表,鏈表的長度為多邊形所占有的最大掃描線數,鏈表的每個結點,稱為一個桶,則對應多邊形

12、覆蓋的每一條掃描線。將每條邊的信息鏈入與該邊最小y坐標(ymin )相對應的桶處。也就是說,若某邊的較低端點為ymin,則該邊就放在相應的掃描線桶中。改進的有效邊表算法構造邊表61每條邊的數據形成一個結點,內容包括:該掃描線與該邊的初始交點x(即較低端點的x值),1/k,以及該邊的最大y值ymax。x|ymin ymax 1/k NEXT同一桶中若干條邊按X|ymin由小到大排序,若X|ymax 相等,則按照1/k由小到大排序。改進的有效邊表算法構造邊表解決頂點交點計為1時的情形:圖5-23 將多邊形的某些邊縮短以分離那些應計為1個交點的頂點圖5.24 多邊形P0P1P2P3P4P5P6圖5.

13、24 多邊形P0P1P2P3P4P5P665(1)初始化:構造邊表,AET表置空;(2)將第一個不空的ET表中的邊與AET表合并;(3)由AET表中取出交點對進行填充。填充之后刪除y=ymax的邊;(4)yi+1=yi+1,根據xi+1=xi+1/k計算并修改AET表,同時合并ET表中y=yi+1桶中的邊,按次序插入到AET表中,形成新的AET表;(5)AET表不為空則轉(3),否則結束。改進的有效邊表算法算法步驟66邊緣填充算法基本思想:按任意順序處理多邊形的每條邊。處理時,先求出該邊與掃描線的交點,再對掃描線上交點右方的所有象素取反。算法簡單,但對于復雜圖型,每一象素可能被訪問多次67柵欄

14、填充算法柵欄指的是一條過多邊形頂點且與掃描線垂直的直線。它把多邊形分為兩半?;舅枷耄喊慈我忭樞蛱幚矶噙呅蔚拿恳粭l邊,但處理每條邊與掃描線的交點時,將交點與柵欄之間的象素取反。這種算法盡管減少了被重復訪問象素的數目,但仍有一些象素被重復訪問。68邊標志算法基本思想:先用特殊的顏色在幀緩存中將多邊形的邊界勾畫出來,然后將著色的象素點依x坐標遞增的順序配對,再把每一對象素構成的區(qū)間置為填充色。分為兩個步驟:打標記;填充。當用軟件實現本算法時,速度與改進的有效邊表算法相當,但本算法用硬件實現后速度會有很大提高。69多邊形的掃描轉換與區(qū)域填充多邊形的掃描轉換區(qū)域填充多邊形掃描轉換與區(qū)域填充的比較相關概

15、念123470區(qū)域填充基本概念區(qū)域的表示方法區(qū)域的分類區(qū)域填充算法71基本概念區(qū)域填充是指從區(qū)域內的某一個象素點(種子點)開始,由內向外將填充色擴展到整個區(qū)域內的過程。區(qū)域是指已經表示成點陣形式的填充圖形,它是相互連通的一組像素的集合。圖5-25 區(qū)域的概念73邊界表示法:把位于給定區(qū)域的邊界上的象素一一列舉出來的方法。邊界表示法中,由于邊界由特殊顏色指定,填充算法可以逐個象素地向外處理,直到遇到邊界顏色為止,這種方法稱為邊界填充算法(Boundary-fill Algorithm)。區(qū)域的表示方法內點表示:枚舉出給定區(qū)域內所有象素的表示方法。以內點表示法為基礎的區(qū)域填充算法稱為泛填充算法(F

16、lood-fill Algorithm)。圖5-26 區(qū)域的表示方法75 4-連通區(qū)域,8-連通區(qū)域區(qū)域的分類圖5-27 4鄰接點與8鄰接點(a) 4鄰接點 (b)8鄰接點764-連通區(qū)域:從區(qū)域上的一點出發(fā),通過訪問已知點的4-鄰接點,在不越出區(qū)域的前提下,遍歷區(qū)域內的所有象素點。8-連通區(qū)域:從區(qū)域上的一點出發(fā),通過訪問已知點的8-鄰接點,在不越出區(qū)域的前提下,遍歷區(qū)域內的所有象素點。區(qū)域的分類圖5-28 4連通與8連通區(qū)域78連通性: 4連通可看作8連通區(qū)域,但對邊界有要求。對邊界的要求。4連通與8連通區(qū)域的區(qū)別圖5-29 4連通與8連通區(qū)域79區(qū)域填充算法區(qū)域填充算法(邊界填充算法和泛

17、填充算法)是根據區(qū)域內的一個已知象素點(種子點)出發(fā),找到區(qū)域內其他象素點的過程,所以把這一類算法也成為種子填充算法。80區(qū)域填充算法邊界填充算法算法的輸入:種子點坐標(x,y),填充色以及邊界顏色。利用堆棧實現簡單的種子填充算法 算法從種子點開始檢測相鄰位置是否是邊界顏色,若不是就用填充色著色,并檢測該象素點的相鄰位置,直到檢測完區(qū)域邊界顏色范圍內的所有象素為止。81棧結構實現4-連通邊界填充算法的算法步驟為: 種子象素入棧;當棧非空時重復執(zhí)行如下三步操作:(a)棧頂象素出棧;(b)將出棧象素置成填充色;(c)檢查出棧象素的4-鄰接點,若其中某個象素點不是邊界色且未置成多邊形色,則把該象素入

18、棧。區(qū)域填充算法邊界填充算法82棧結構實現8-連通邊界填充算法的算法步驟為:種子象素入棧;當棧非空時重復執(zhí)行如下三步操作:(a)棧頂象素出棧;(b)將出棧象素置成填充色;(c)檢查出棧象素的8-鄰接點,若其中某個象素點不是邊界色且未置成多邊形色,則把該象素入棧。區(qū)域填充算法邊界填充算法83區(qū)域填充算法邊界填充算法可以用于填充帶有內孔的平面區(qū)域。把太多的象素壓入堆棧,降低了效率,同時需要較大的存儲空間。遞歸執(zhí)行,算法簡單,但效率不高,區(qū)域內每一象素都引起一次遞歸,進/出棧費時費內存。通過沿掃描線填充水平象素段,來代替處理4-鄰接點和8-鄰接點。84區(qū)域填充算法邊界填充算法掃描線種子填充算法:掃描

19、線通過在任意不間斷掃描線區(qū)間中只取一個種子象素的方法使堆棧的尺寸極小化。不間斷區(qū)間是指在一條掃描線上的一組相鄰象素。圖5-30 掃描線種子填充算法85區(qū)域填充算法邊界填充算法基本過程:當給定種子點時,首先填充種子點所在的掃描線上的位于給定區(qū)域的一個區(qū)段,然后確定與這一區(qū)段相通的上下兩條掃描線上位于給定區(qū)域內的區(qū)段,并依次保存下來。反復這個過程,直到填充結束。圖5-31 掃描線種子填充算法過程87區(qū)域填充算法泛填充算法算法的輸入:種子點坐標(x,y),填充色和內部點的顏色。算法原理:算法從指定的種子(x,y)開始,用所希望的填充顏色賦給所有當前為給定內部顏色的象素點。88種子象素入棧;棧非空時重

20、復執(zhí)行如下三步操作: (1)棧頂象素出棧; (2)將出棧象素置成填充色; (3)檢查出棧象素的8-鄰接點,若其中某個象素點不是給定內部點的顏色且未置成新的填充色,則把該象素入棧。區(qū)域填充算法泛填充算法89當以邊界表示時,4-連通邊界填充算法只能填充4-連通區(qū)域,8-連通邊界填充算法也只能填充8-連通區(qū)域。當以內點表示時,8-連通泛填充算法可以填充8-連通區(qū)域也可以填充4-連通區(qū)域,當然4-連通泛填充算法還是只能填充4-連通區(qū)域。區(qū)域填充算法泛填充算法90多邊形的掃描轉換與區(qū)域填充多邊形的掃描轉換區(qū)域填充多邊形掃描轉換與區(qū)域填充的比較相關概念123491相同點: 都是光柵圖形面著色,用于真實感圖

21、形顯示。 可相互轉換。多邊形掃描轉換與區(qū)域填充方法比較92多邊形掃描轉換與區(qū)域填充方法比較基本思想不同:前者將頂點表示轉換成點陣表示,而后者只改變區(qū)域內填充顏色,沒有改變表示方法。對邊界的要求不同:前者只要求掃描線與多邊形邊界交點個數為偶數。后者則要求區(qū)域封閉,防止遞歸填充跨界?;镜臈l件不同:前者是從邊界頂點信息出發(fā),而后者從區(qū)域內種子點開始算法。93多邊形的掃描轉換與區(qū)域填充多邊形的掃描轉換區(qū)域填充多邊形掃描轉換與區(qū)域填充的比較相關概念123494相關概念內外測試圖532 不自交的多邊形與自相交的多邊形95奇-偶規(guī)則(Odd-even Rule) 從任意位置p作一條射線,若與該射線相交的多

22、邊形邊的數目為奇數,則p是多邊形內部點,否則是外部點。相關概念內外測試96非零環(huán)繞數規(guī)則(Nonzero Winding Number Rule)首先使多邊形的邊變?yōu)槭噶?。將環(huán)繞數初始化為零。再從任意位置p作一條射線。當從p點沿射線方向移動時,對在每個方向上穿過射線的邊計數,每當多邊形的邊從右到左穿過射線時,環(huán)繞數加1,從左到右時,環(huán)繞數減1。處理完多邊形的所有相關邊之后,若環(huán)繞數為非零,則p為內部點,否則,p是外部點。相關概念內外測試97兩種規(guī)則的比較相關概念內外測試98字符處理點陣字符矢量字符1299字符處理ASCII碼:“美國信息交換用標準代碼集”(American Standard C

23、ode for Information Interchange),簡稱ASCII碼。國際碼:“中華人民共和國國家標準信息交換編碼,簡稱為國際碼,代號GB231280。字庫:字庫中儲存了每個字符的圖形信息。矢量字庫和點陣字庫。100在點陣表示中,每個字符由一個點陣位圖來表示。顯示時:形成字符的象素圖案。字符處理點陣字符圖5-33 字符A的點陣表示101特點:(1)定義和顯示直接、簡單。(2)存儲需要耗費大量空間。解決方法:(1)從一組點陣字符生成不同尺寸和不同字體的其他字符。(2)采用壓縮技術字符處理點陣字符102字符處理點陣字符矢量字符12103矢量字符采用直線和曲線段來描述字符形狀,矢量字符

24、庫中記錄的是筆劃信息。顯示時:解釋字符的每個筆劃信息。字符處理矢量字符圖5-34 字符A的矢量表示104常用的矢量字符表示:輪廓字型法輪廓字型法采用直線或二、三次曲線的集合來描述一個字符的輪廓線,輪廓線構成了一個或若干個封閉區(qū)域,顯示時只要填充這些區(qū)域就可產生相應的字符。顯示時可以“無極放縮”占用空間少,美觀,變換方便字符處理矢量字符105屬性處理線性和線寬字符屬性區(qū)域填充屬性123106圖素或圖段的外觀由其屬性決定。圖形軟件中實現屬性選擇的方法是提供一張系統(tǒng)當前屬性值表,通過調用標準函數提供屬性值表的設置和修改。進行掃描轉換時,系統(tǒng)使用屬性值表中的當前屬性值進行顯示和輸出。屬性處理107線型

25、的顯示可用象素段方法實現針對不同的線型,畫線程序沿路徑輸出一些連續(xù)象素段,在每兩個實心段之間有一段中間空白段,他們的長度(象素數目)可用象素模板(pixel mask)指定。存在問題:如何保持任何方向的劃線長度近似地相等線型處理108可根據線的斜率來調整實心段和中間空白段的象素數目線型處理圖5-35109線刷子和方刷子處理線寬線刷子:垂直刷子、水平刷子線寬處理線刷子圖5-36110特點:實現簡單、效率高。斜線與水平(或垂直)線不一樣粗。當線寬為偶數個象素時,線的中心將偏移半個象素。利用線刷子生成線的始末端總是水平或垂直的,需要添加“線帽(line cap)”線寬處理線刷子111方帽:調整端點位

26、置,使粗線的顯示具有垂直于線段路徑的正方形端點。凸方帽:簡單將線向兩頭延伸一半線寬并添加方帽。圓帽:通過對每個方帽添加一個填充的半圓得到線寬處理線刷子112線寬處理線刷子圖5-37 線帽113當比較接近水平的線與比較接近垂直的線匯合時,匯合處外角將有缺口線寬處理線刷子圖5-38 線刷子產生的缺口114解決:斜角連接(miter join)、圓連接(round join)、斜切連接(bevel join)線寬處理線刷子圖5-39 解決線刷子產生的缺口115方刷子繪制的線條(斜線)比用線刷子所繪制的線條要粗一些方刷子繪制的斜線與水平(或垂直)線不一樣粗方刷子繪制的線條自然地帶有一個“方線帽”線寬處

27、理方刷子圖5-40 方刷子116區(qū)域填充改變刷子形狀線寬處理其他方式圖5-41 利用象素模板進行線寬處理117線型可采用象素模板的方法線寬處理曲線線型圖5-42 利用模板110進行圓的線型處理118從一個八分象限轉入下一個八分象限時要交換象素的位置,以保持劃線長度近似相等。在沿圓周移動時調整畫每根劃線的象素數目以保證劃線長度近似相等。改進:可以采用沿等角弧畫象素代替用等長區(qū)間的象素模板來生成等長劃線。線寬處理曲線線型119線刷子經過曲線斜率為1和1處,必須切換刷子。曲線接近水平與垂直的地方,線條更粗。方刷子:接近水平垂直的地方,線條更細要顯示一致的曲線寬度可通過旋轉刷子方向以使其在沿曲線移動時

28、與斜率方向一致圓弧刷子或者采用填充的辦法.線寬處理曲線線寬120屬性處理線性和線寬字符屬性區(qū)域填充屬性123121字體、字形、字號、字間距、行間距等等。一般字體確定風格,字形確定外觀,字號確定尺寸。字符屬性圖5-43 字符的常用屬性及其含義122文本高度、文本寬度(擴展/壓縮因子)、字符方向、文本路徑方向、對齊方式(左對齊,中心對齊,或右對齊,指定起始、終止點)、文本字體、字符的顏色屬性等。反繪(從右到左)、倒繪(旋轉180)、寫方式(替換或與方式)等。字符串屬性123屬性處理線性和線寬字符屬性區(qū)域填充屬性123124顏色、圖案和透明度區(qū)域填充屬性圖5-44 用模板進行區(qū)域填充125首先用模板

29、定義各種圖案。然后,修改填充的掃描轉換算法:在確定了區(qū)域內一象素之后,不是馬上往該象素填色而是先查詢模板位圖的對應位置。區(qū)域填充屬性126若是以透明方式填充圖案,則當模板位圖的對應位置為1時,用前景色寫象素,否則,不改變該象素的值。若是以不透明方式填充圖案,則視模板位圖對應位置為1或0來決定是用前景色還是背景色去寫象素。區(qū)域填充屬性127確定區(qū)域與模板之間的位置關系(對齊方式)區(qū)域填充屬性圖5-45 用模板進行區(qū)域填充128反走樣基本概念過取樣區(qū)域取樣123129用離散量表示連續(xù)量引起的失真,就叫做走樣(Aliasing)?;靖拍顖D5-46 繪制直線時的走樣現象130產生原因: 數學意義上的

30、圖形是由無線多個連續(xù)的、面積為零的點構成;但在光柵顯示器上,用有限多個離散的,具有一定面積的象素來近似地表示他們?;靖拍?31走樣現象:一是光柵圖形產生的階梯形。一是圖形中包含相對微小的物體時,這些物體在靜態(tài)圖形中容易被丟棄或忽略,在動畫序列中時隱時現,產生閃爍?;靖拍罾訄D5-47 丟失細節(jié)與運動圖形的閃爍用于減少或消除這種效果的技術,稱為反走樣(antialiasing,圖形保真)。一種簡單方法:過取樣(supersampling),或后濾波區(qū)域取樣(area sampling),或前濾波圖5-48 分辨率提高一倍,階梯程度減小一倍134反走樣基本概念過取樣區(qū)域取樣123135過取樣:

31、在高于顯示分辨率的較高分辨率下用點取樣方法計算,然后對幾個象素的屬性進行平均得到較低分辨率下的象素屬性。過取樣(super sampling)簡單過取樣 在x,y方向把分辨率都提高一倍,使每個象素對應4個子象素,然后掃描轉換求得各子象素的顏色亮度,再對4個象素的顏色亮度進行平均,得到較低分辨率下的象素顏色亮度。圖5-49 簡單的過取樣方式重疊過取樣:為了得到更好的效果,在對一個象素點進行著色處理時,不僅僅只對其本身的子象素進行采樣,同時對其周圍的多個象素的子象素進行采樣,來計算該點的顏色屬性。圖5-50 重疊過取樣基于加權模板的過取樣:前面在確定像素的亮度時,僅僅是對所有子像素的亮度進行簡單的

32、平均。更常見的做法是給接近像素中心的子像素賦予較大的權值,即對所有子像素的亮度進行加權平均。圖5-51 常用的加權模板優(yōu)點:圖5-52 過取樣的效果缺點:特殊角度的處理問題圖5-53 特殊角度的問題141反走樣基本概念過取樣區(qū)域取樣123142簡單的區(qū)域取樣在整個像素區(qū)域內進行采樣,這種技術稱為區(qū)域取樣。又由于像素的亮度是作為一個整體被確定的,不需要劃分子像素,故也被稱為前置濾波。圖5-54 有寬度的直線段143如何計算直線段與象素相交區(qū)域的面積?簡單的區(qū)域取樣圖5-55 重疊區(qū)域面積的計算144可以利用一種求相交區(qū)域的近似面積的離散計算方法: (1)將屏幕象素分割成n個更小的子象素, (2)

33、計算中心落在直線段內的子象素的個數m, (3)m/n為線段與象素相交區(qū)域面積的近似值。直線段對一個象素亮度的貢獻與兩者重疊區(qū)域的面積成正比。相同面積的重疊區(qū)域對象素的貢獻相同。簡單的區(qū)域取樣145過取樣中,我們對所有子像素的亮度進行簡單平均或加權平均來確定像素的亮度。在區(qū)域取樣中,我們使用覆蓋像素的連續(xù)的加權函數(Weighting Function)或濾波函數(Filtering Function)來確定像素的亮度。加權區(qū)域取樣加權區(qū)域取樣原理加權函數W(x,y)是定義在二維顯示平面上的函數。對于位置為(x,y)的小區(qū)域dA來說,函數值W(x,y)(也稱為在(x,y)處的高度)表示小區(qū)域dA

34、的權值。將加權函數在整個二維顯示圖形上積分,得到具有一定體積的濾波器(Filter),該濾波器的體積為1。將加權函數在顯示圖形上進行積分,得到濾波器的一個子體,該子體的體積介于0到1之間。用它來表示像素的亮度。圖5-56 常用的濾波函數148特點:接近理想直線的象素將被分配更多的灰度值;相鄰兩個象素的濾波器相交,有利于縮小直線條上相鄰象素的灰度差。加權區(qū)域取樣149在OpenGL中繪圖點和直線的繪制多邊形面的繪制實體模型繪制OpenGL中的字符函數1234點的繪制點的繪制 glBegin(GL_POINTS); glVertex3f(0.0f, 0.0f, 0.0f); glVertex3f(

35、10.0f, 0.0f, 0.0f); glEnd();點的屬性(大小) void glPointSize(GLfloat size);150直線的繪制直線的繪制模式GL_LINESGL_LINE_STRIPGL_LINE_LOOP(a)GL_LINES畫線模式 (b)GL_LINE_STRIP畫線模式 (c)GL_LINE_LOOP畫線模式圖5-57 OpenGL畫線模式151直線的繪制直線的屬性線寬 void glLineWidth(GLfloat width)線型 glEnable(GL_LINE_STIPPLE); glLineStipple(GLint factor,GLushort

36、 pattern);直線的繪制圖5-58 畫線模式用于構造線段153154在OpenGL中繪圖點和直線的繪制多邊形面的繪制實體模型繪制OpenGL中的字符函數1234多邊形面的繪制三角形面的繪制GL_TRIANGLESGL_TRIANGLE_STRIPGL_TRIANGLE_FAN四邊形面的繪制GL_QUADSGL_QUADS_STRIP多邊形面的繪制(GL_POLYGON)155多邊形面的繪制多邊形面的繪制規(guī)則所有多邊形都必須是平面的。多邊形的邊緣決不能相交,而且多邊形必須是凸的。解決:對于非凸多邊形,可以把它分割成幾個凸多邊形(通常是三角形),再將它繪制出來。156多邊形面的繪制問題:輪廓

37、圖形狀態(tài)會看到組成大表面的所有小三角形。處理OpenGL提供了一個特殊標記來處理這些邊緣,稱為邊緣標記。 glEdgeFlag(True) glEdgeFlag(False)157多邊形面的屬性多邊形面的正反屬性(繞法) 指定頂點時順序和方向的組合稱為“繞法”。繞法是任何多邊形圖元的一個重要特性。一般默認情況下,OpenGL認為逆時針繞法的多邊形是正對著的。 glFrontFace(GL_CW);158多邊形面的屬性多邊形面的顏色 glShadeModel(GL_FLAT) 用指定多邊形最后一個頂點時的當前顏色作為填充多邊形的純色,唯一例外是GL_POLYGON圖元,它采用的是第一個頂點的顏色

38、。 glShadeModel(GL_SMOOTH) 從各個頂點給三角形投上光滑的陰影,為各個頂點指定的顏色之間進行插值。159多邊形面的屬性多邊形面的顯示模式 glPolygonMode(GLenum face,GLenum mode);參數face用于指定多邊形的哪一個面受到模式改變的影響。參數mode用于指定新的繪圖模式。160多邊形面的屬性多邊形面的填充 多邊形面既可以用純色填充,也可以用3232的模板位圖來填充。 void glPolygonStipple(const GLubyte *mask); glEnable(GL_POLYGON_STIPPLE);161多邊形面的屬性多邊形面的法向量法向量是垂直于面的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論