三維圖形學(xué)基礎(chǔ)_第1頁
三維圖形學(xué)基礎(chǔ)_第2頁
三維圖形學(xué)基礎(chǔ)_第3頁
三維圖形學(xué)基礎(chǔ)_第4頁
三維圖形學(xué)基礎(chǔ)_第5頁
已閱讀5頁,還剩141頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

三維圖形學(xué)基礎(chǔ)第1頁,課件共146頁,創(chuàng)作于2023年2月屏幕坐標(biāo)及圖形坐標(biāo)顯示器上的位置用整型的屏幕坐標(biāo)來描述,與幀緩存中的像素位置相對應(yīng)。y坐標(biāo)給出像素的行序號,x坐標(biāo)給出列序號。屏幕刷新硬件一般從屏幕的左上角開始對像素進(jìn)行編址,從最上面的第0行到最下面的第ymax行,對掃描行進(jìn)行編號;每行從左到右,從第0到第xmax對掃描列進(jìn)行編號。圖形軟件可以按照任意方式設(shè)定屏幕位置的圖形坐標(biāo)系統(tǒng),如可以設(shè)定屏幕區(qū)域的左下角為原點(視區(qū)的默認(rèn)值),用整數(shù)坐標(biāo)或非整數(shù)笛卡爾坐標(biāo)來描述圖形。描述物體對象的坐標(biāo)值最終轉(zhuǎn)換為幀緩存中的整數(shù)像素位置。圖元的掃描轉(zhuǎn)換根據(jù)給定的坐標(biāo)來確定要顯示的像素位置,如給定一條直線段的兩個端點,顯示函數(shù)必須計算出兩端點間位于線段上的所有像素的位置。由于一個像素位置占有屏幕上的一個有限范圍,因此圖形顯示算法必須考慮像素的有限大小,一般假定像素坐標(biāo)對應(yīng)于像素區(qū)域的中心。第2頁,課件共146頁,創(chuàng)作于2023年2月屏幕上的笛卡爾坐標(biāo)系第3頁,課件共146頁,創(chuàng)作于2023年2月顯示窗口OpenGL函數(shù)庫中用gluOrtho2D(xmin,xmax,ymin,ymax)函數(shù)設(shè)定一個二維視見空間(二維笛卡爾坐標(biāo)系),其參數(shù)指定了顯示窗口(裁剪窗口)的x、y坐標(biāo)范圍。顯示窗口的左下角位于坐標(biāo)(xmin,ymin)處,右上角位于坐標(biāo)(xmax,ymax)處。如果一個圖元的坐標(biāo)范圍完全在顯示窗口(裁剪窗口)內(nèi),該圖元將完整地顯示出來,否則,僅僅位于顯示窗口范圍內(nèi)的部分圖元能顯示出來,這涉及到裁剪。第4頁,課件共146頁,創(chuàng)作于2023年2月隨機(jī)掃描顯示器20世紀(jì)60年代中期較早出現(xiàn)的是隨機(jī)掃描顯示器(也稱為向量顯示器vectordiaplay),只能顯示線條圖形。這些線條由隨機(jī)掃描系統(tǒng)按定義圖形時的順序繪制并刷新。筆試?yán)L圖儀也以類似的方式進(jìn)行繪圖。隨機(jī)掃描系統(tǒng)的刷新頻率依賴于顯示的線條數(shù)目。圖形的定義保存在刷新顯示文件存儲區(qū)中,是一組畫線指令,刷新顯示文件稱為顯示列表。為了顯示指定的圖形,系統(tǒng)必須按顯示文件中的一組命令依次畫出各個線條,當(dāng)所有畫線命令處理完后,系統(tǒng)返回到該列表的第一條畫線命令,然后重新開始繪制。隨機(jī)掃描顯示器以每秒30~60次的刷新速度畫出圖形的所有線條。第5頁,課件共146頁,創(chuàng)作于2023年2月光柵掃描顯示器大約在1980年左右,誕生了光柵掃描顯示器,它采用彩色電視技術(shù),用三個電子束逐行掃描熒光屏上整齊排列的紅、綠、藍(lán)三基色點簇,一條電子束對準(zhǔn)一種基色,一個點簇稱作一個像素。蔭罩法(shadow-mask)常用于光柵掃描系統(tǒng)。該方法基于紅、綠、藍(lán)三原色原理,對每個像素位置,蔭罩CRT有三個熒光彩色點:一個熒光點發(fā)射紅光,另一個發(fā)射綠光,第三個發(fā)射藍(lán)光。這類CRT有三支電子槍,與每個彩色點一一對應(yīng),而蔭罩柵格位于緊靠涂覆有熒光層的屏幕之后。由于人眼可將三點發(fā)出的光合成為一種彩色,因此三種熒光粉發(fā)出的光生成一個小彩色點,稱為像素點。第6頁,課件共146頁,創(chuàng)作于2023年2月與光柵掃描顯示器有關(guān)的幾個基本概念在光柵掃描系統(tǒng)中,電子束橫向掃描屏幕,一次一行,從頂?shù)降滓来芜M(jìn)行,每一行稱為一個掃描行。當(dāng)電子束橫向沿每一行移動時,電子束的強(qiáng)度不斷變化,由不同的顏色和亮度生成圖形。圖形定義保存在幀緩存

(framebuffer)中,這里幀指整個屏幕范圍,該存儲器保存一組對應(yīng)于屏幕所有點的強(qiáng)度值,電子束在屏幕上逐點移動時從幀緩存中取出對應(yīng)位置的值,控制其強(qiáng)度。每個可由電子束點亮的屏幕點稱為一個像素(pixel,是picture與element的簡寫),像素的陣列為光柵。一幅圖像的像素全部存放在幀緩存的內(nèi)存里。第7頁,課件共146頁,創(chuàng)作于2023年2月與光柵掃描顯示器有關(guān)的幾個基本概念光柵掃描系統(tǒng)對屏幕的每一點都有存儲顏色及亮度信息的能力,從而能適用于包含細(xì)微陰影和色彩變化的真實感圖形顯示。顯示器的像素個數(shù)稱為分辨率,如1024×768,1280×1024。顯示器的另一特征是縱橫比(aspectratio),定義為系統(tǒng)能顯示的像素列數(shù)除以行數(shù)??v橫比還可由屏幕上顯示相同長度的水平和垂直線段所需像素點數(shù)之比來描述。如縱橫比為4/3,表示用4個點繪出的水平線與用3個點繪出的垂直線的物理長度相同。光柵系統(tǒng)可顯示的顏色數(shù)目依賴于幀緩存中的位數(shù),每個像素的位數(shù)稱為緩存深度或精度。如1位深度緩存只能顯示兩種顏色,8位深度緩存則可以顯示28(=256)中顏色,在真彩色系統(tǒng)里,深度為24位,紅、綠、藍(lán)三基色各8位,可以顯示224(=16777216)種顏色數(shù),能表示大多數(shù)真實感圖形。第8頁,課件共146頁,創(chuàng)作于2023年2月光柵化幀緩存通常采用特殊類型的內(nèi)存芯片,可以快速顯示幀緩存的內(nèi)容,在一些基于軟件的圖形系統(tǒng)里,幀緩存是系統(tǒng)內(nèi)存的一部分。在一些簡單的圖形系統(tǒng)里,幀緩存只存儲像素的顏色值,可以簡單地將幀緩存稱為顏色緩存(colorbuffer)。目前,對于大多數(shù)的圖形系統(tǒng),幀緩存能存儲更多的信息,如三維圖形的深度信息等。在這些系統(tǒng)里,幀緩存可以由多個緩存器組成。處理器的圖形處理功能是根據(jù)應(yīng)用程序的要求生成各種圖元(如直線、圓和多邊形),把顏色值賦給幀緩存中的像素,使這些像素能表現(xiàn)這些實體。如三角形可用三個頂點來描述,為了顯示三角形的三條邊,圖形系統(tǒng)必須生成一組像素,使這組像素看起來像三角形的邊線。將幾何形體的數(shù)據(jù)轉(zhuǎn)換為像素在幀緩存里的位置和顏色的過程稱為光柵化或掃描轉(zhuǎn)換。第9頁,課件共146頁,創(chuàng)作于2023年2月幀緩存在早期的圖形系統(tǒng)里,幀緩存是標(biāo)準(zhǔn)存儲器的一部分,CPU可以直接對它進(jìn)行存取操作。目前,幾乎所有的圖形系統(tǒng)都采用了專用的圖形處理單元(GraphicsProcessingUints,簡稱GPU),這種專用的圖形處理單元是專門針對某些特定的圖形功能而設(shè)計的。GPU可以在主板上,也可以在圖形顯示卡上。計算機(jī)通過GPU對幀緩存進(jìn)行存取操作,因此常把幀緩存包含在GPU內(nèi)。第10頁,課件共146頁,創(chuàng)作于2023年2月直線段的掃描轉(zhuǎn)換算法直線的掃描轉(zhuǎn)換:根據(jù)直線的幾何特征,可確定最佳逼近于該直線的一組象素,并且按掃描線順序,對這些象素進(jìn)行寫操作。兩種常用算法:數(shù)值微分法(DDA)Bresenham算法。問題:怎樣又快又好地繪制一條直線段?第11頁,課件共146頁,創(chuàng)作于2023年2月數(shù)字微分法基本思想:根據(jù)線段斜率的不同,在某個坐標(biāo)軸上以單位間隔對線段采樣,在另一個坐標(biāo)軸上確定最靠近線段的對應(yīng)整數(shù)值。已知過端點P0(x0,y0),P1(x1,y1)的直線段L的方程為:

y=kx+b

直線斜率為當(dāng)斜率的絕對值小于1時,從x的左端點x0開始,向x的右端點逐步遞增。步長=1(象素單位),計算相應(yīng)的y坐標(biāo)y=kx+b;取象素點(x,round(y))作為當(dāng)前點的坐標(biāo)。第12頁,課件共146頁,創(chuàng)作于2023年2月由直線方程可得下一個采樣點的y坐標(biāo)為:

yi+1=kxi+1+b

=kxi+b+kx =yi+kx

當(dāng)x=1時; yi+1=yi+k

即:當(dāng)x每遞增1,y遞增k(即直線斜率);注意上述分析的算法僅適用于k≤1的情形。在此情況下,x每增加1,y最多增加1。當(dāng)k

1時,必須把x,y的地位互換:

xi+1=xi+1/k該算法能在有限的線段長度內(nèi),根據(jù)斜率的不同合理確定盡可能多的像素來逼近該直線段。

DDA算法計算像素的位置比直接使用直線方程計算的速度要快,它利用光柵特性消除了直線方程中的乘法,在x或y方向使用合適的增量,在直線路徑上逐步得到各像素的位置。但在浮點增量的連續(xù)累加中,取整誤差的積累使得對于較長線段所得到的像素位置偏離實際線段,且該過程中的取整操作和浮點運算仍然十分耗時。促使人們考慮既能用于直線,又能用于曲線的更通用的掃描線算法。第13頁,課件共146頁,創(chuàng)作于2023年2月例:畫直線段P0(0,0)--P1(5,2)k=0.4

xint(y+0.5)y+0.50 0 01 0 0.4+0.52 1 0.8+0.5 3 1 1.2+0.54 2 1.6+0.55 2 2.0+0.5第14頁,課件共146頁,創(chuàng)作于2023年2月Bresenham算法Bresenham畫線算法是一種精確而有效的光柵線生成算法,該算法還可用于圓和其它曲線。思路:固定直線的兩個端點,控制總體誤差。如下圖,首先考慮斜率小于1的直線的掃描轉(zhuǎn)換過程,沿線段路徑的像素位置由以單位x間隔的采樣來確定。從給定線段的左端點(x0,y0)開始,逐步處理每個后繼列(x位置),并在其掃描線y值最接近線段的像素上繪出一點。下圖顯示了這個過程的第k步。假設(shè)當(dāng)前已顯示的像素點在(xk,yk),那么下一步需要確定在列xk+1=xk+1上繪制哪個像素,是在位置(xk+1,yk),還是在(xk+1,yk+1)。從(xk,yk)像素開始,繪制斜率0<m<1的直線的屏幕局部第15頁,課件共146頁,創(chuàng)作于2023年2月在采樣位置xk+1,用dlower和dupper來表示兩個像素與直線段路徑的垂直偏移。直線段上像素列位置處的y坐標(biāo)為:

y=m(xk+1)+b則:dlower=y-yk

=m(xk+1)+b-yk

dupper=(yk+1)-y=yk+1-m(xk+1)-b要確定兩像素中哪一個更接近線段路徑,需要測試這兩個像素偏移的差:

dlower-dupper=2m(xk+1)-2yk+2b-1在采樣位置xk+1處,像素位置到直線上y坐標(biāo)之間的垂直距離第16頁,課件共146頁,創(chuàng)作于2023年2月設(shè)y和x分別為兩端點的垂直和水平偏移量,則m=y/x,定義決策參數(shù)pk為:

pk=x(dlower-dupper)

=2yxk-2xyk+c3-1

其中c=2y+x(2b-1),pk的符號與dlower-dupper的符號相同(此例中x>0

)。假如yk處的像素比yk+1的像素更接近于線段(即dlower<dupper),那么參數(shù)pk是負(fù)的,此時繪制下面的像素,反之,繪制上面的像素。可以利用遞增整數(shù)運算得到后繼的決策參數(shù)值。在k+1步,可得決策參數(shù)為:

pk+1=2yxk+1-2xyk+1+c3-2將兩式相減,可得:

pk+1

-pk=2y(xk+1-xk

)

-2x(yk+1

-yk)但xk+1=xk+1,因而

pk+1=pk+2y-2x(yk+1

-yk)其中yk+1

-yk取0或1,取決于參數(shù)pk的符號。決策參數(shù)的遞歸運算在線段的坐標(biāo)端點開始的每個整數(shù)x位置進(jìn)行,起始像素位置(x0,y0)的第一個參數(shù)p0由式3-1及m=y/x可得:p0=2y-x遞推時,僅進(jìn)行兩個常量2y及2y-2x之間的整數(shù)加減。第17頁,課件共146頁,創(chuàng)作于2023年2月正斜率小于1的線段的Bresenham畫線算法的主要步驟概括如下:(1)輸入線段的兩個端點,并將左端點儲存在(x0,y0)中;(2)將(x0,y0)裝入幀緩存,畫出第一個點;(3)計算常量x

、y、2y和2y-2x,并得到?jīng)Q策參數(shù)的第一個值;

p0=2y-x(4)從k=0開始,在線段路徑的每個xk處,進(jìn)行下列檢測:如果pk<0,下一個要繪制的點是(xk+1,yk),并且pk+1=pk+2y

否則,下一個要繪制的點是(xk+1,yk+1),并且

pk+1=pk+2y-2x(5)重復(fù)步驟4,共x-1次。當(dāng)斜率

1時,也必須把x,y的地位互換。例:繪制一條線段,端點為(20,10)和(30,18)。該線段的斜率為0.8,且x=10,y=8初始決策參數(shù)為:p0=2y-x=6后繼決策參數(shù)的增量為:2y=16,2y-2x=-4繪制初始點(x0,y0)=(20,10),并根據(jù)決策參數(shù)確定后繼像素點的位置為:第18頁,課件共146頁,創(chuàng)作于2023年2月kpk(xk+1,yk+1)06(21,11)12(22,12)2-2(23,12)314(24,13)410(25,14)kpk(xk+1,yk+1)56(26,15)62(27,16)7-2(28,16)814(29,17)910(30,18)沿端點(20,10)和(30,18)用Bresenham畫線算法繪制的像素點第19頁,課件共146頁,創(chuàng)作于2023年2月圓的生成算法圓的方程為:(x-xc)2+(y-yc)2=r23.4.1利用這個方程,可以沿x軸從xc-r到xc+r以單位步長計算對應(yīng)的y值,從而得到圓周上每點的位置:

y=yc±(r2-(x-xc)2)1/23.4.2該方法的每一步包含很大的計算量,而且所繪制像素的間距不一致,如下圖所示。我們可以在圓斜率的絕對值大于1后,交換x和y(即步進(jìn)y值并計算x值)來調(diào)整間距,但增加了計算量和處理過程??傊?,該方法不是一種理想的畫圓方法。

用方程3.4.2繪制的正半圓第20頁,課件共146頁,創(chuàng)作于2023年2月另一種消除不等間距的方法是使用極坐標(biāo)r和來計算圓周上的點,圓的極坐標(biāo)方程為:

x=xc+rcos

y=yc+rsin使用上述方法以固定角度為步長可以生成等間距的點來繪制圓,盡管利用極坐標(biāo)能生成等距點,但三角函數(shù)的計算十分耗時。可以利用圓的對稱性減少計算量,圓的形狀在每個象限中是相似的,如果確定了圓在第一象限中的位置,則可以生成圓在第二象限的部分,因為圓相對于y軸是對成的。根據(jù)圓相對于x軸的對稱性,由第一象限和第二象限中的圓弧,可以得到第三象限和第四象限中的圓弧。在八分圓之間也有對稱性,一個象限中相鄰八分圓的圓弧對于45°直線是對稱的,如下圖。圖中八分之一圓上的一點(x,y)可映射到其它7個八分圓的點。利用圓的對稱性,可由1個八分圓上的點,映射到其余7個八分圓上的點第21頁,課件共146頁,創(chuàng)作于2023年2月利用圓的對稱性,僅需計算從x=0到x=y這段圓弧的點就可得到整個圓的所有像素位置。在該八分圓中,圓弧斜率的絕對值≤1,x=0時的斜率為0,x=y時圓弧的斜率為-1.0。使用對稱性及圓的方程來確定圓周上的像素位置,仍然需要大量的計算,更有效地畫圓算法是采用類似Bresenham畫線算法,通過設(shè)定在每一步采樣步驟中尋找最接近圓周像素的決策參數(shù)。但圓的方程是非線性的,包含平方運算,一個避免平方運算的方法是:檢驗兩像素間的中點位置是在圓邊界之內(nèi)還是之外。中點畫圓算法:對于中心為(xc,

yc)、半徑為r的圓,先計算圓心在(0,0)的圓的像素位置,然后通過將xc加到x且yc加到y(tǒng),將圓平移到真正位置。在第一象限,圓弧段從x=0到x=y,曲線的斜率從0變到-1.0。可以在該八分圓上的正x方向取單位步長,并使用決策參數(shù)來確定每一步兩個可能的y位置中,哪一個更接近于圓的位置,其余7個八分圓中的位置可由對稱性得到。定義圓函數(shù):

f(x,y)=x2+y2-r2任何點的相對位置可由圓函數(shù)的符號來決定:第22頁,課件共146頁,創(chuàng)作于2023年2月

<0,如果(x,y)位于圓內(nèi)f(x,y)=0,如果(x,y)位于圓上

>0,如果(x,y)位于圓外圓函數(shù)即為決策參數(shù),下圖給出了采樣位置xk+1上兩個候選像素間的中點。圓周上采樣位置xk+1上候選像素間的中點假設(shè)已在(xk,yk)繪制了一個像素,下一步需要確定是像素(xk+1,yk)還是像素(xk+1,yk-1)更接近于圓,在兩像素的中點求決策參數(shù)的值:

pk=f(xk+1,yk-1/2)=(xk+1)2+(yk-1/2)2-r2假若pk<0,則該中點位于圓內(nèi),掃描線yk上的像素接近于圓周邊界。否則該中點位于圓外或圓周上,選擇掃描線yk-1的像素。第23頁,課件共146頁,創(chuàng)作于2023年2月后續(xù)的決策參數(shù)可以使用增量運算得到,如對采樣位置xk+1=xk+2處的圓函數(shù)求值,可以得到下一個決策參數(shù)的循環(huán)表達(dá)式:

pk+1=f(xk+1+1,yk+1-1/2)=[(xk+1)+1]2+(yk+1-1/2)2-r2=pk+2(xk+1)+(y2k+1-y2k)-(yk+1-yk)+1其中,yk+1是yk或yk-1,取決于pk的符號。若pk為負(fù),則yk+1=yk,pk+1的增量為2xk+1+1;若pk為正,則yk+1=yk-1,pk+1的增量為2xk+1+1-2yk+12xk+1和2yk+1的求值也可以通過增量的方式求得:2xk+1=2xk+22yk+1=2yk-2在起始位置(0,r)處,這兩項的初始值分別為0和2r。在起始位置(0,r)處,初始決策參數(shù)為:p0=f(1,r-1/2)=1+(r-1/2)2-r2=5/4-r如果將半徑r指定為整數(shù),可以對p0進(jìn)行簡單的取整,p0=1-r,則中點方法使用整數(shù)加減來計算圓周的像素位置。第24頁,課件共146頁,創(chuàng)作于2023年2月中點畫圓算法的步驟:(1)輸入圓半徑r和圓心(xc,yc),并得到圓周(圓心在原點)上的第一個點:(x0,y0)=(0,r)(2)計算決策參數(shù)的初始值:

p0=5/4-r(3)在每個xk位置,從k=0開始,計算決策參數(shù),若pk<0,則圓周下一像素位置為(xk+1,yk),并且

pk+1=pk+2xk+1+1否則圓的下一點為(xk+1,yk-1),并且

pk+1=pk+2xk+1+1-2yk+1其中,2xk+1=2xk+2且2yk+1=2yk-2(4)確定其它7個八分圓中的對稱點。(5)將每個計算出來的像素位置(x,y)平移到圓心在(xc,yc)的圓周上,并繪出各點(x+xc,y+yc)。(6)重復(fù)步驟3到步驟5,直至x≥y。第25頁,課件共146頁,創(chuàng)作于2023年2月例,使用中點畫圓算法畫圓給定圓半徑r=10,確定在第一象限從x=0到x=y沿八分圓的各像素點位置。決策參數(shù)的初始值為:p0=1-r=-9對于中心在原點的圓,初始點(x0,y0)=(0,10),決策參數(shù)的初始增量值:2x0=0,2y0=20使用中點畫圓法計算的后續(xù)決策參數(shù)值及像素位置如下:kpkxk+1,yk+12xk+1,2yk+10-9(1,10)2201-6(2,10)4202-1(3,10)62036(4,9)8184-3(5,9)101858(6,8)121665(7,7)1414第26頁,課件共146頁,創(chuàng)作于2023年2月用中點畫圓法得到的像素位置(空心圓為第一象限的對稱位置)第27頁,課件共146頁,創(chuàng)作于2023年2月使用折線來逼近曲線常見的曲線除圓以外,還有橢圓、圓錐曲線、三角和指數(shù)函數(shù)、樣條曲線等。顯示曲線的簡單方法是使用直線段來逼近曲線,僅需確定一組曲線上的點并將它們連接成一組直線段。折線中的線段越多,曲線越平滑。第28頁,課件共146頁,創(chuàng)作于2023年2月3.5填充區(qū)圖元圖形學(xué)中常常需要用某種顏色或某種圖案來填充一個區(qū)域,盡管有可能使用各種形狀,但圖形庫一般不支持任意的填充形狀,多數(shù)庫函數(shù)要求填充區(qū)為多邊形。多邊形是由三個或更多的頂點連接而成的封閉圖形,由于多邊形的邊界為直線段,因而比它形狀更容易處理??蓪⑶€轉(zhuǎn)換為由分段折線構(gòu)成的多邊形,曲面也可以用一系列多邊形面片來逼近。如果一個多邊形的所有內(nèi)角均小于180°,則該多邊形為凸(convex)多邊形。等價定義:它的內(nèi)部完全在它的任一邊及其延長線的一側(cè)。如果任意兩點位于凸多邊形的內(nèi)部,則其連線上的任一點也在凸多邊形的內(nèi)部。不是凸多邊形的多邊形稱為凹(concave)多邊形。退化多邊形是指有共線或重合頂點的多邊形,共線的頂點生成一條線段,重疊的頂點可以生成多余線段、重疊邊或長度為0的邊。為了軟件的魯棒性,圖形軟件可以拒絕退化或非平面的多邊形。凹多邊形也會產(chǎn)生一些問題,對凹多邊形的填充及其它處理比較復(fù)雜,常常將凹多邊形分割成一組凸多邊形以提高效率。第29頁,課件共146頁,創(chuàng)作于2023年2月可以為多邊形的每一條邊建立一個向量,用相鄰邊的叉積來測試凸凹性,凸多邊形的所有向量叉積均同號,如果某些叉積為正而另一些為負(fù),則為凹多邊形。識別凹多邊形的另一個方法是觀察多邊形頂點位置與每條邊延長線的關(guān)系。如果有些頂點在某一延長線的一側(cè)而有些頂點在另一側(cè),則為凹多邊形。多邊形的填充算法分為掃描線填充算法和種子填充算法。掃描線的含義來源于光柵顯示器,對屏幕上的每個像素點,按從上到下,從左到右的順序進(jìn)行顯示,水平方向從左到右每掃描一行,就是一條y方向的掃描線,同理,從上到下也能形成x方向的掃描線。掃描線填充算法的原理是:待填充區(qū)域按y方向(或x方向)掃描線的順序,計算掃描線與多邊形的相交區(qū)間,再用指定的顏色填充這些區(qū)間的像素,區(qū)間的端點可以通過計算掃描線與多邊形邊界的交點求得。第30頁,課件共146頁,創(chuàng)作于2023年2月通用多邊形的掃描線填充算法下圖給出了多邊形區(qū)域?qū)嵭奶畛涞膾呙杈€過程。對每一條與多邊形相交的掃描線,與邊的交點從左到右排序,且將每一對交點之間的像素位置包括這對像素在內(nèi),設(shè)定為指定顏色,本例中與邊界的四個交點定義了兩段內(nèi)部像素:從x=10到14的5個像素,以及從x=18到x=24的7個像素。如果是用圖案填充多邊形,則沿一條掃描線的每一個像素顏色由與圖案重疊的位置確定。穿過多邊形區(qū)域的掃描線上的內(nèi)部像素第31頁,課件共146頁,創(chuàng)作于2023年2月有時情況比較復(fù)雜,當(dāng)一條掃描線經(jīng)過多邊形的一個頂點時,掃描線在該頂點處與多邊形的兩條邊相交,這種情況可能導(dǎo)致在這條掃描線上的交點要增加兩個點。下圖給出了在頂點處與多邊形相交的兩條掃描線。掃描線y’與偶數(shù)條邊相交,必須將該頂點處的交點作為2個交點,才能正確標(biāo)識該掃描線上的兩對交點之間為內(nèi)部像素段。掃描線y與多邊形的5條邊相交,必須將該頂點處的交點作為1個交點,才能正確標(biāo)識該掃描線上的兩對交點之間為內(nèi)部像素段。通過觀察相交邊相對于掃描線的位置,可以發(fā)現(xiàn)掃描線y和掃描線y’間的拓?fù)洳町?。對于掃描線y,共享一個頂點的兩條相交邊位于掃描線的兩側(cè),對于掃描線y’,兩條相交邊位于掃描線的同一側(cè)。掃描線與多邊形頂點相交,y’生成奇數(shù)個交點,y生成偶數(shù)個交點第32頁,課件共146頁,創(chuàng)作于2023年2月可以通過順時針或逆時針方向來搜索多邊形邊界,并觀察從一條邊移動到另一條邊時頂點y坐標(biāo)的相對變化來判別這個點。假如兩條相鄰邊的三個端點y坐標(biāo)值單調(diào)遞增或遞減,那么對于任何穿過該頂點的掃描線,必須將該相交頂點(中間的共享頂點)計為1個交點。否則,該相交頂點(中間的共享頂點)即為多邊形邊界上的一個局部極值,(極大或極小),須將該相交頂點計為2個交點??偨Y(jié):對凹多邊形的填充判斷比較復(fù)雜。凸多邊形的掃描線填充對于凸多邊形,掃描線填充過程可以簡化,每一條掃描線與多邊形至多有兩個交點,可以使用坐標(biāo)范圍來確定哪些邊與掃描線相交,當(dāng)掃描線與單個頂點相交時,僅繪出該點本身,當(dāng)有兩個交點時,兩交點之間的部分都是多邊形內(nèi)部的點。第33頁,課件共146頁,創(chuàng)作于2023年2月種子填充算法區(qū)域填充的另一種方法是從區(qū)域的一個內(nèi)部點開始,由內(nèi)向外逐點繪制直到邊界??梢允褂脝我活伾蛞粋€圖案來填充一個區(qū)域。假如邊界是以單一顏色指定的,則填充算法可逐個像素地向外處理,直至遇到邊界顏色。該算法從一個內(nèi)點開始檢測相鄰位置的顏色,若檢測位置不是該邊界顏色,就將它設(shè)置成邊界顏色,再檢測其相鄰位置,這個過程持續(xù)到檢測完區(qū)域邊界顏色范圍內(nèi)的所有像素為止。區(qū)域填充算法要求區(qū)域是連通的。從一個當(dāng)前位置檢測其相鄰像素有兩種方法:4-連通和8-連通。4-連通即檢測當(dāng)前位置的上、下、左、右4個方向的相鄰像素,8-連通即檢測當(dāng)前位置的上、下、左、右、左上、右上、左下及右下8個方向的相鄰像素。4-連通8-連通4-連通區(qū)域8-連通區(qū)域第34頁,課件共146頁,創(chuàng)作于2023年2月第35頁,課件共146頁,創(chuàng)作于2023年2月圖案填充可以將一個區(qū)域填充為某種單一顏色,也可以用某種圖案進(jìn)行填充,還可以不填充而只繪制其邊界。對多邊形可以使用不同顏色、線寬和線型繪制其邊框,還可以為區(qū)域的前向面和后向面設(shè)置不同的顯示屬性。填充圖案可以用一個對不同位置指定不同顏色的矩形顏色陣列來給出,即一個填充圖案可當(dāng)作一個點陣來處理,其中每一位置點指定一種顏色。描述填充圖案的矩陣是一個應(yīng)用于顯示區(qū)域的掩模。有些圖形系統(tǒng)可以設(shè)置掩模的初始位置,從該初始位置開始,掩模在水平方向和垂直方向反復(fù)填充直到整個區(qū)域都填滿無重疊的掩模。這種用矩形圖案填充一個區(qū)域的處理稱為平鋪,而矩形填充圖案有時也稱為平鋪圖案。填充圖案的起始位置可設(shè)定在填充區(qū)內(nèi)的任意位置,有些軟件包將顯示窗口的坐標(biāo)原點作為圖案的起始位置。第36頁,課件共146頁,創(chuàng)作于2023年2月字符圖元圖形顯示中常包括文字信息,包括字母、數(shù)字或其他字符等。字體是指一組按照特定尺寸和格式的模板字符樣式。字體有兩種不同的表示方法,第一種稱為位圖字體(或光柵字體),每個字符都由一個二值形式的點陣圖案表示,如圖3.6a,由于所有字符都已完成掃描轉(zhuǎn)換,繪制一個字符只需將該字符的位圖直接映射或復(fù)制到幀緩存的指定位置,值為1的位對應(yīng)的像素位置將用當(dāng)前顏色進(jìn)行顯示。盡管可以由一組點陣字符生成不同尺寸以及類似粗體、斜體等其它字體,但字符放大時會有鋸齒現(xiàn)象。第二種表示方法稱為輪廓字體,又稱筆畫字體或向量字體。每個字符的外形輪廓均由直線和曲線段來描述,如圖3.6b,字符輪廓的內(nèi)部按填充區(qū)進(jìn)行掃描轉(zhuǎn)換處理。與位圖字符相比,輪廓字體在進(jìn)行放大時其字符形狀不會變形。第37頁,課件共146頁,創(chuàng)作于2023年2月第38頁,課件共146頁,創(chuàng)作于2023年2月反走樣在圖形光柵化的過程中由于圖元的坐標(biāo)點離散化為整數(shù)像素位置,因此光柵化后生成的圖元具有鋸齒形或階梯狀的外觀。當(dāng)我們把對象的連續(xù)表示(無限的分辨率)變換為對象的離散表示時,不可避免地會出現(xiàn)這類誤差,這種由于低頻采樣(不充分采樣)而造成的圖形失真稱為走樣(aliasing)。另一個不太引人注目的走樣現(xiàn)象是不同走向的線段具有不同的亮度,雖然所有線段都用同樣的顏色亮度來顯示,但一條斜線看上去要比一條水平或垂直線暗一些。這一現(xiàn)象的原因可由圖3.7.1解釋,圖中水平線上的像素間的距離為一個單位長度,而斜線上的像素間的距離大約為1.414個單位長度,密度上的差異造成亮度感覺上的差異。如果一個物體沒有與像素柵格對齊,或者不能與像素柵格吻合,會出現(xiàn)籬柵問題。圖3.7.2(a)表示一道樁與樁之間的距離并非像素間距整數(shù)倍的籬柵。將該籬柵掃描轉(zhuǎn)換后樁的端點都要向像素位置靠攏對齊,結(jié)果是樁之間的距離不再均勻相等圖3.7.2(b)。此現(xiàn)象有時稱為局部走樣,這時籬柵的總長度基本上是正確的。若要保持樁距均勻,籬柵的總長度就會明顯失真圖3.7.2(c),這一現(xiàn)象有時稱為總體走樣。第39頁,課件共146頁,創(chuàng)作于2023年2月反走樣盡管數(shù)學(xué)上的線段只有長度沒有寬度,但光柵化后的線段為了可見,必須有一個寬度,幀緩存以像素為最小單位,若一條理想的線段在幀緩存里的寬度為一個像素,當(dāng)仔細(xì)觀察一個像素寬的直線時,會發(fā)現(xiàn)該線段只是部分覆蓋了1個像素大小的方形區(qū)域,如圖3.7.3。第40頁,課件共146頁,創(chuàng)作于2023年2月第41頁,課件共146頁,創(chuàng)作于2023年2月反走樣提高顯示器的分辨率只能減輕而不能消除鋸齒問題。第42頁,課件共146頁,創(chuàng)作于2023年2月反走樣對于能顯示兩級以上亮度的光柵系統(tǒng),可以采用反走樣方法適當(dāng)?shù)匦薷难貓D元邊界的像素亮度,平滑邊界,減小鋸齒狀、斑塊狀的亮度差異,改善顯示效果。一種簡單、直接的反走樣方法,就是把屏幕看成由比實際更細(xì)的網(wǎng)格所覆蓋,從而增加采樣頻率,然后根據(jù)這種更細(xì)網(wǎng)格,使用采樣點來確定每個屏幕像素的合適亮度。這種在高分辨率下對對象進(jìn)行采樣并在較低分辨率上顯示其結(jié)果的技術(shù)稱為過采樣(supersampling),也稱為后濾波(postfiltering)。另一種方法是通過計算待顯示的每個像素在對象上的覆蓋區(qū)域來確定像素的亮度。計算覆蓋區(qū)域的反走樣稱為區(qū)域采樣(areasampling),也稱為前濾波(prefiltering)。還可以通過移動像素區(qū)域的顯示位置而實現(xiàn)反走樣,這種技術(shù)稱為像素移相(pixelphasing)。第43頁,課件共146頁,創(chuàng)作于2023年2月前濾波與后濾波濾波的概念來源于信號處理領(lǐng)域。若將亮度作為信號,則顏色均勻的、亮度緩慢變化的區(qū)域?qū)?yīng)于低頻部分,具有清晰邊界的、亮度快速變化的區(qū)域?qū)?yīng)于高頻部分。為了減少圖像空間里的線段與其它線段的參差不齊現(xiàn)象,希望將亮度的突變“抹平”,從信號處理角度來看,就是將高頻率的成分“過濾掉”。前濾波就是在采樣前對原始連續(xù)信號進(jìn)行處理直接獲取各個像素應(yīng)有的亮度(在采樣之前進(jìn)行濾波)。后濾波則首先從原始連續(xù)信號獲取離散采樣值,然后再用這些采樣值計算像素值(在采樣之后進(jìn)行濾波)。第44頁,課件共146頁,創(chuàng)作于2023年2月區(qū)域采樣區(qū)域采樣屬于前濾波技術(shù),把一個柵格網(wǎng)疊放在需要柵格化的物體上,對于每一個與該物體疊交的像素區(qū)域,計算該區(qū)域與物體疊交的百分比。該百分比決定了該像素的總體顏色中有多少成分來源于該物體,該像素區(qū)域與物體疊交的百分比越高,該物體對像素總體顏色的影響就越大。圖3.7.4a中用寬度為1個像素的長方形區(qū)域來代表一條直線,該長方形區(qū)域與每個疊交的像素的面積百分比通過解析方式算出。如果背景為黑色,直線為白色,計算所得的百分比可直接用來設(shè)定各像素的顏色(圖3.7.4b)。第45頁,課件共146頁,創(chuàng)作于2023年2月雖然圖3.7.4b所示經(jīng)過區(qū)域采樣得到的直線的離散逼近看起來有些“模糊”,但它不再有從物體顏色到背景顏色之間的突然過渡。而這種突然過渡是使用普通掃描轉(zhuǎn)換的結(jié)果(圖3.7.4c)。在減少圖像失真與造成圖像模糊兩者之間力求折中是以濾波為基礎(chǔ)的反走樣技術(shù)的特征。第46頁,課件共146頁,創(chuàng)作于2023年2月直線段的過采樣直線段的過采樣可以用多種方式來完成。對于直線段,可以把每個像素分成一定數(shù)目的子像素,并統(tǒng)計沿直線路徑的子像素數(shù)目,再將每個像素的亮度設(shè)置為正比于子像素數(shù)目的值。圖3.7.5中,每個正方形像素區(qū)域被分成9個大小相等的正方形子像素,陰影區(qū)域表示由Bresenham算法選擇的子像素。由于任何像素中可供選擇的子像素的最大數(shù)目為3,因次該方法能提供0以上的3種亮度等級。該例中位置(10,20)像素的亮度設(shè)置為3;位置(11,21)和(12,21)像素的亮度設(shè)置為2;位置(11,20)和(12,22)像素的亮度設(shè)置為1。因此,該直線分布在較多數(shù)目的像素上,并且通過在階梯狀附近顯示有些模糊的直線路徑,從而平滑階梯狀效果。如果要使用更多的亮度等級來實現(xiàn)直線段的反走樣,就需要增加每個像素中的子像素采樣數(shù)目,如16個子像素能給出0以上的4個亮度等級,25個子像素能給出5個等級。對于寬度超過1個像素的直線段的反走樣,也可以采用該方法處理,如圖3.7.6。第47頁,課件共146頁,創(chuàng)作于2023年2月由于首先獲得離散的采樣值,然后再由這些采樣值計算像素值,因此過采樣是一種后濾波技術(shù)。但由于這只不過是用每個像素范圍內(nèi)有限的采樣值來求準(zhǔn)確的解析解的近似值,過采樣技術(shù)也可認(rèn)為是區(qū)域采樣法的一種近似實現(xiàn)。第48頁,課件共146頁,創(chuàng)作于2023年2月低通濾波低通濾波是一種給每個像素計算出一個新值的后濾波技術(shù)。這個新值是該像素的原始值及其相鄰若干像素的加權(quán)平均。計算所需的權(quán)值存放在一個(2n+1)×(2n+1)形式定義的模板中,模板里所有權(quán)值的總和為1,圖3.7.7a為一個3×3的濾波器。為某一像素計算新值就是將濾波器以該像素為中心與像素柵格對齊。模板中每個權(quán)系數(shù)與其對應(yīng)的像素值的乘積之和就是該像素的加權(quán)平均值。用這個濾波器處理圖3.7.4c的像素值的結(jié)果如圖3.7.7b。第49頁,課件共146頁,創(chuàng)作于2023年2月圖形變換計算機(jī)繪圖是產(chǎn)生三維場景的二維圖像(屏幕上只能繪出二維圖像),計算機(jī)對物體繪圖的過程類似于用一部相機(jī)拍攝照片,如圖4.1.第50頁,課件共146頁,創(chuàng)作于2023年2月第51頁,課件共146頁,創(chuàng)作于2023年2月繪圖與拍照過程對比用照相機(jī)拍照的步驟大致如下:(1)把照相機(jī)固定在三腳架上,并讓它對準(zhǔn)場景(視圖變換)。(2)對場景進(jìn)行安排,使各個物體在照片中的位置是我們所希望的(模型變換)。(3)選擇照相機(jī)的鏡頭,并調(diào)整放大倍數(shù)(投影變換)。(4)確定最終照片的大小(視口變換)。與此類似,把一個物體的三維坐標(biāo)變換到屏幕上的像素坐標(biāo),共需要三個步驟:(1)坐標(biāo)變換,包括模型、視圖和投影變換,變換過程用矩陣乘法表示,包括平移、旋轉(zhuǎn)、縮放、投影等。(2)由于場景是在一個矩形窗口(相當(dāng)于取景框)中繪制的,因此位于窗口之外的物體(或物體的一部分)必須被裁減掉。(3)最后,經(jīng)過變換的坐標(biāo)和屏幕像素之間必須建立對應(yīng)關(guān)系,這個過程稱為視口變換。人們對上述過程總結(jié)出了一套規(guī)范的標(biāo)準(zhǔn)流程,首要任務(wù)是將場景中的各個對象進(jìn)行建模,然后按規(guī)范流程對物體的頂點坐標(biāo)分階段地進(jìn)行統(tǒng)一處理,最終獲得二維屏幕圖像。第52頁,課件共146頁,創(chuàng)作于2023年2月幾何變換計算機(jī)圖形系統(tǒng)的基本功能之一就是模擬在三維空間中對物體進(jìn)行操縱,這種模擬的空間操縱稱為變換。在構(gòu)建三維物體和場景的過程中,通過將簡單圖元進(jìn)行平移、旋轉(zhuǎn)、縮放等操作來構(gòu)建復(fù)雜對象和場景。可以從兩種互補(bǔ)的觀點來描述物體的變換。第一種是物體相對于一個固定的坐標(biāo)系進(jìn)行變換,即對物體的每一個點(頂點)進(jìn)行變換,改變它的位置、方向或大小,稱為幾何變換。第二種觀點將物體看做固定不動,而坐標(biāo)系則相對于物體做變換,稱為坐標(biāo)變換。如要顯示一輛在一片風(fēng)景前駛過的汽車,我們既可以保持背景不動而讓汽車移動(幾何變換),也可以保持汽車不動而讓背景移動(坐標(biāo)變換)。幾何變換有時也稱為建模變換。第53頁,課件共146頁,創(chuàng)作于2023年2月基本二維幾何變換平移、旋轉(zhuǎn)和縮放是所有圖形軟件包中都具有的基本幾何變換。平移:通過將位移量加到一個點的坐標(biāo)上生成一個新的坐標(biāo)位置,可以實現(xiàn)一次平移。對于一個由多個頂點定義的對象,可以通過對所有頂點使用相同的位移量來實現(xiàn)平移。設(shè)原始坐標(biāo)為(x,y),平移向量為(tx,ty),新坐標(biāo)為(x,y),則:若用列向量來表示坐標(biāo)位置和平移向量(以前有些文獻(xiàn)用行向量表示,目前的規(guī)范大多用列向量表示),則:用矩陣形式表示二維平移方程為:第54頁,課件共146頁,創(chuàng)作于2023年2月平移平移是一種移動對象而不改變其形狀的剛體變換。對象上的每一點移動了相同的距離。一條直線段的平移通過對其兩端點分別平移而實現(xiàn),多邊形的平移也以類似的方法實現(xiàn)。第55頁,課件共146頁,創(chuàng)作于2023年2月二維旋轉(zhuǎn)通過指定一個旋轉(zhuǎn)軸和一個旋轉(zhuǎn)角度,可以進(jìn)行一次旋轉(zhuǎn)變換,將對象的所有頂點按指定角度繞指定旋轉(zhuǎn)軸旋轉(zhuǎn)后,該對象的所有點都旋轉(zhuǎn)到新位置。可以將對象繞與xy平面垂直的旋轉(zhuǎn)軸(與z軸平行)旋轉(zhuǎn)。二維旋轉(zhuǎn)的參數(shù)包括旋轉(zhuǎn)角、旋轉(zhuǎn)基準(zhǔn)點(xr,yr),如圖?;鶞?zhǔn)點是旋轉(zhuǎn)軸與xy平面的交點,正角度表示將對象繞基準(zhǔn)點作逆時針旋轉(zhuǎn),負(fù)角度表示將對象繞基準(zhǔn)點作順時針旋轉(zhuǎn)。第56頁,課件共146頁,創(chuàng)作于2023年2月繞原點的二維旋轉(zhuǎn)為了簡化,先考慮當(dāng)基準(zhǔn)點為坐標(biāo)原點時點P進(jìn)行旋轉(zhuǎn)的變換方程。如下圖,r是點P到原點的固定距離,角是點的原始位置向量與水平軸的夾角,是旋轉(zhuǎn)角,利用三角等式,可得旋轉(zhuǎn)后的點坐標(biāo)為:點的原始坐標(biāo)為:第57頁,課件共146頁,創(chuàng)作于2023年2月二維旋轉(zhuǎn)的矩陣形式代入上式得:用列向量表示坐標(biāo)位置,則旋轉(zhuǎn)方程的矩陣形式為:其中,旋轉(zhuǎn)矩陣為旋轉(zhuǎn)變換的矩陣形式中,用列向量來表示坐標(biāo)是目前標(biāo)準(zhǔn)的數(shù)學(xué)形式,早期的文獻(xiàn)及圖形系統(tǒng)有些用行向量表示坐標(biāo)位置,這會改變執(zhí)行旋轉(zhuǎn)時矩陣相乘的順序,現(xiàn)在OpenGL、Java、PHIGS、GKS等都按標(biāo)準(zhǔn)列向量方式表示。第58頁,課件共146頁,創(chuàng)作于2023年2月繞任意點的二維旋轉(zhuǎn)上圖給出了繞任意基準(zhǔn)點旋轉(zhuǎn)的例子,利用圖中的三角關(guān)系,可得繞任意基準(zhǔn)點旋轉(zhuǎn)的變換方程:這個通用的旋轉(zhuǎn)方程包含了一個加項,后面章節(jié)中將討論更一致的方法。旋轉(zhuǎn)也是一種不變形地移動對象的剛體變換,物體上的所有點旋轉(zhuǎn)相同的角度,線段、多邊形的旋轉(zhuǎn)可通過將每個頂點旋轉(zhuǎn)指定的角度來實現(xiàn)。第59頁,課件共146頁,創(chuàng)作于2023年2月二維縮放改變一個對象的大小,可使用縮放變換,一個簡單的二維縮放可通過將縮放系數(shù)sx

、sy與對象坐標(biāo)相乘來實現(xiàn)(相對于坐標(biāo)原點的縮放)。寫成矩陣形式為:或其中S為縮放矩陣,縮放系數(shù)sx在x方向縮放對象,sy在y方向縮放對象,值小于1將縮小對象的尺寸,值大于1則放大對象,若sx和sy不等將產(chǎn)生差值縮放,有些系統(tǒng)中,縮放系數(shù)可為負(fù)值,這不僅改變對象的尺寸,還產(chǎn)生相對于坐標(biāo)軸的反射。第60頁,課件共146頁,創(chuàng)作于2023年2月相對于固定點的縮放可以選擇一個在縮放變換后不改變位置的點,稱為固定點(縮放的基準(zhǔn)點),以控制縮放后對象的位置。固定點的坐標(biāo)(xf,yf)可以選擇為對象的中心,也可以選擇為任意其他位置。多邊形通過縮放每個頂點到固定點的距離而進(jìn)行縮放。如下圖,頂點(x,y)經(jīng)過縮放后的坐標(biāo)(x,y)為:第61頁,課件共146頁,創(chuàng)作于2023年2月相對于固定點的縮放將乘法項與加法項重新組合后為:其中加法項xf(1-sx)和yf(1-sy)對于對象中的任何點都是常數(shù)。在縮放公式中包含固定點的坐標(biāo),類似于在旋轉(zhuǎn)公式中包含基準(zhǔn)點的坐標(biāo)。多邊形的縮放可以通過將變換方程應(yīng)用于每個頂點,然后利用變換后的頂點重新生成多邊形而實現(xiàn)。第62頁,課件共146頁,創(chuàng)作于2023年2月復(fù)合變換與齊次坐標(biāo)在實際繪圖時,常常需要對物體連續(xù)進(jìn)行多次變換,例如先平移,再旋轉(zhuǎn),然后再放大,這就需要對該物體的點集按變換順序依次進(jìn)行,計算量較大。如果只對物體進(jìn)行旋轉(zhuǎn)和縮放兩類變換,則可以先將這兩種變換合成為一個復(fù)合變換,將兩次運算簡化為一次性的復(fù)合矩陣與坐標(biāo)向量的乘法。對圖形做上述一系列變換時,只要用點集與這個復(fù)合矩陣相乘即可。但如果在變換中有平移變換,矩陣就不容易合并了,因為平移變換與旋轉(zhuǎn)、縮放變換的表示形式不一樣;平移變換為矩陣的加法,而旋轉(zhuǎn)和縮放變換為矩陣的乘法。為了使各種變換的表示形式一致,使變換的合成更容易,人們引入了齊次坐標(biāo)的概念。第63頁,課件共146頁,創(chuàng)作于2023年2月齊次坐標(biāo)如果將22的矩陣表達(dá)式擴(kuò)充為33的矩陣,就可以把平移也表示為乘法形式,此時變換矩陣的第三列用于平移項,因而所有的變換公式都可以表示為矩陣乘法的形式。為了實現(xiàn)這種操作,必須解釋從二維坐標(biāo)到三元列向量的矩陣表示。標(biāo)準(zhǔn)的實現(xiàn)技術(shù)是將二維坐標(biāo)(x,y)擴(kuò)充到三維表示(xw,yw,w),稱為齊次坐標(biāo),其中齊次參數(shù)w是一個非零值,定義

,這樣,普通的二維齊次坐標(biāo)可表示為(xw,yw,w)。對于二維幾何變換,可以把齊次參數(shù)w取為任何非零值,因而坐標(biāo)點(x,y)可以有無數(shù)個等價的齊次表達(dá)式,最方便的選擇是簡單地設(shè)置w=1,因此每個二維位置都可用齊次坐標(biāo)(x,y,1)來表示。利用齊次坐標(biāo),可以使我們能用統(tǒng)一的矩陣相乘的形式來表示所有的幾何變換公式,這是圖形系統(tǒng)中使用的標(biāo)準(zhǔn)方法。二維坐標(biāo)位置用三元列向量表示,而二維變換用一個33的矩陣表示。第64頁,課件共146頁,創(chuàng)作于2023年2月二維平移矩陣的齊次坐標(biāo)表示使用齊次坐標(biāo),二維平移可表示為下面的乘法。該式可簡寫為:其中T(tx,ty)是上式中的33矩陣,可以簡單地用T來表示平移矩陣。齊次坐標(biāo)的詭秘性在于把2階(或3階)的列矩陣相加變成了3階(或4階)的矩陣與矩陣相乘的運算。第65頁,課件共146頁,創(chuàng)作于2023年2月二維旋轉(zhuǎn)矩陣的齊次坐標(biāo)表示使用齊次坐標(biāo),繞坐標(biāo)原點的二維旋轉(zhuǎn)可表示為下面的矩陣乘法。該式可簡寫為:其中R()為上式中的33矩陣,可以簡單地用R來表示旋轉(zhuǎn)矩陣。有些圖形軟件包只支持繞坐標(biāo)原點的旋轉(zhuǎn),繞任意基準(zhǔn)點的旋轉(zhuǎn)需要一系列的變換操作來完成。第66頁,課件共146頁,創(chuàng)作于2023年2月二維縮放矩陣的齊次坐標(biāo)表示使用齊次坐標(biāo),相對于原點的二維縮放可表示為如下的矩陣乘法。該式可簡寫為:其中S(sx,sy)為上式中的33矩陣,可以簡單地用S來表示縮放矩陣。有些圖形軟件包僅支持相對于坐標(biāo)原點的縮放,相對于另一固定點的縮放需要用一系列的變換操作來完成。此外還有其他一些變換,如反射、錯切等。第67頁,課件共146頁,創(chuàng)作于2023年2月逆變換對于平移變換,通過對平移距離取負(fù)值而得到逆矩陣,二維平移距離為tx和ty的逆平移矩陣為:這產(chǎn)生相反方向的平移,而平移矩陣與其逆矩陣的乘積是一個單位矩陣。逆旋轉(zhuǎn)通過用負(fù)的旋轉(zhuǎn)角度來實現(xiàn),繞坐標(biāo)原點旋轉(zhuǎn)角為的二維逆旋轉(zhuǎn)矩陣為:第68頁,課件共146頁,創(chuàng)作于2023年2月逆變換旋轉(zhuǎn)角的負(fù)值生成順時針方向的旋轉(zhuǎn),因而旋轉(zhuǎn)矩陣與其逆旋轉(zhuǎn)矩陣的乘積為單位矩陣。將縮放矩陣用縮放系數(shù)的倒數(shù)取代就得到縮放變換的逆矩陣。以坐標(biāo)原點為中心、縮放參數(shù)為sx、sy的二維逆縮放矩陣為:該矩陣生成相反的縮放變換,因而縮放矩陣與其逆縮放矩陣的乘積為單位矩陣。第69頁,課件共146頁,創(chuàng)作于2023年2月復(fù)合變換矩陣實際應(yīng)用中對物體作幾何變換時往往是多種簡單變換的組合,可以將一系列連續(xù)的變換矩陣合成為一個復(fù)合變換矩陣,稱為矩陣的合并或復(fù)合。由于引入了齊次坐標(biāo),基本的幾何變換均可以表示為P=TP的形式,一個頂點坐標(biāo)用列矩陣表示,復(fù)合變換時必須按操作的次序?qū)⒚恳徊降淖儞Q矩陣左乘該列矩陣。因此復(fù)合變換的結(jié)合是每次的變換矩陣相乘,即將多個基本變換進(jìn)行串乘:

P=Tn

(T3

(T2

(T1

P)))由于矩陣的乘法滿足結(jié)合律,因此

P=(Tn

T3

T2

T1)P=TP最后的結(jié)果也具有P=TP的形式,這里,T=Tn

T3

T2

T1由于場景中許多頂點用相同的順序進(jìn)行變換,通常在計算時先求出復(fù)合矩陣T,再用T與頂點列矩陣相乘,這與逐步用矩陣相乘相比能有效提高計算效率。第70頁,課件共146頁,創(chuàng)作于2023年2月矩陣的串乘復(fù)合變換就是將多個基本變換進(jìn)行串乘,這種方法非常適合于流水線結(jié)構(gòu)的圖形系統(tǒng)。假設(shè)對某點P執(zhí)行一系列的變換操作后得到新點Q,這一變換序列表示為如下形式:

Q=CBAP式中并沒有括號,但變換的執(zhí)行次序會直接影響計算效率。一種方式是先執(zhí)行變換A,再執(zhí)行B ,最后執(zhí)行C。該執(zhí)行順序與下圖的組合次序相同,是按步驟對多個點進(jìn)行變換,每一步都是對已經(jīng)變換過的點再進(jìn)行新的變換。

Q=(C(B(AP)))第71頁,課件共146頁,創(chuàng)作于2023年2月圖形系統(tǒng)的流水線結(jié)構(gòu)如果只對原始的點進(jìn)行一次總的變換,這個執(zhí)行次序是最有效的,因為每次變換只是用一個總的變換矩陣與點的列矩陣相乘。如果需要對多個點進(jìn)行變換,就把運算過程分成兩個步驟。第一步,先計算:

M=CBA第二步,把這個矩陣應(yīng)用到每一點上:

Q=MP這種運算次序?qū)?yīng)于右圖的流水線結(jié)構(gòu):在這種流水線結(jié)構(gòu)中,先計算矩陣M,然后把M裝載到流水線結(jié)構(gòu)的變換處理單元里,再應(yīng)用到成千上萬個頂點上,由于只用單個矩陣對每個點進(jìn)行運算,因而比一步步用單個矩陣進(jìn)行多次變換的計算量要小得多。第72頁,課件共146頁,創(chuàng)作于2023年2月二維復(fù)合變換二維復(fù)合平移:將兩個連續(xù)的平移向量(t1x,t1y)和(t2x,t2y)作用于點P,平移后的點P可按下式計算:P=T(t2x,t2y){T(t1x,t1y)P}={T(t2x,t2y)T(t1x,t1y)}P該平移序列的復(fù)合變換矩陣為:或T(t2x,t2y)T(t1x,t1y)=T(t1x+2x,t1y+2y)這表示兩個連續(xù)平移是相加的。第73頁,課件共146頁,創(chuàng)作于2023年2月二維復(fù)合旋轉(zhuǎn)將兩個連續(xù)的旋轉(zhuǎn)變換作用于點P,旋轉(zhuǎn)后的點P可按下式計算:

P=R(2){R(1)P}={R(2)R(1)}P可以證明,兩個連續(xù)旋轉(zhuǎn)也是相加的:

R(2)R(1)=R(1+2)點旋轉(zhuǎn)后的坐標(biāo)可以使用復(fù)合矩陣表示為:

P=R(1+2)P第74頁,課件共146頁,創(chuàng)作于2023年2月二維復(fù)合縮放合并兩個連續(xù)的二維縮放矩陣,生成的復(fù)合縮放矩陣為:或

S(s2x,s2y)S(s1x,s1y)=S(s1xs2x,s1y

s2y)這表明連續(xù)縮放操作是相乘的。第75頁,課件共146頁,創(chuàng)作于2023年2月通用二維基準(zhǔn)點旋轉(zhuǎn)當(dāng)圖形軟件包僅提供繞坐標(biāo)系原點的旋轉(zhuǎn)函數(shù)時,可通過下列平移-旋轉(zhuǎn)-平移操作來實現(xiàn)繞任意基準(zhǔn)點(xr,yr)的旋轉(zhuǎn)。1、平移對象使基準(zhǔn)點位置移動到坐標(biāo)原點;2、繞坐標(biāo)原點旋轉(zhuǎn);3、平移對象使基準(zhǔn)點回到其坐標(biāo)位置。這個變換次序如下圖所示。第76頁,課件共146頁,創(chuàng)作于2023年2月通用二維基準(zhǔn)點旋轉(zhuǎn)利用矩陣合并可得該變換序列的復(fù)合變換矩陣:用矩陣表達(dá)的結(jié)果與以前推導(dǎo)的一般式完全相同,但表達(dá)更明確。該式還可以用下列形式表示:T(xr,yr

)R()T(-xr,-yr

)=R(xr,yr,

)第77頁,課件共146頁,創(chuàng)作于2023年2月回顧:繞任意點的二維旋轉(zhuǎn)上圖給出了繞任意基準(zhǔn)點旋轉(zhuǎn)的例子,利用圖中的三角關(guān)系,可得繞任意基準(zhǔn)點旋轉(zhuǎn)的變換方程:第78頁,課件共146頁,創(chuàng)作于2023年2月通用二維基準(zhǔn)點縮放當(dāng)圖形軟件包只有相對于坐標(biāo)原點的縮放函數(shù)時,可通過下列平移-縮放-平移操作來實現(xiàn)相對于任意基準(zhǔn)點(xf,yf)的縮放。1、平移對象使固定點與坐標(biāo)原點重合;2、相對于坐標(biāo)原點進(jìn)行縮放;3、平移對象使固定點返回到原始位置。這個變換次序如下圖所示。第79頁,課件共146頁,創(chuàng)作于2023年2月通用二維基準(zhǔn)點縮放利用矩陣合并可得該序列的復(fù)合變換矩陣:用矩陣表達(dá)的結(jié)果也與以前推導(dǎo)的一般式完全相同,但表達(dá)更明確。該式還可以用下列形式表示:T(xf,yf

)S(sx,sy

)T(-xf,-yf

)=S(xf,yf,,sx,sy

)第80頁,課件共146頁,創(chuàng)作于2023年2月回顧:相對于固定點的縮放可以選擇一個在縮放變換后不改變位置的點,稱為固定點(縮放的基準(zhǔn)點),以控制縮放后對象的位置。固定點的坐標(biāo)(xf,yf)可以選擇為對象的中心,也可以選擇為任意其他位置。多邊形通過縮放每個頂點到固定點的距離而進(jìn)行縮放。如下圖,頂點(x,y)經(jīng)過縮放后的坐標(biāo)(x,y)為:第81頁,課件共146頁,創(chuàng)作于2023年2月二維坐標(biāo)系間的變換計算機(jī)圖形經(jīng)常需要在場景處理的各階段將對象的描述從一個坐標(biāo)系變換到另一個坐標(biāo)系,如在建模過程中,每個對象在各自的局部坐標(biāo)系中設(shè)計,這些局部坐標(biāo)描述必須變換到一個統(tǒng)一的世界坐標(biāo)系的相應(yīng)位置和方向。下圖給出了一個在xy坐標(biāo)系中,原點在(x0,y0)、方向角為的xy坐標(biāo)系。為了將對象描述從xy坐標(biāo)系變換到xy坐標(biāo)系,必須建立把xy軸疊加到xy軸的變換,這需要分兩步進(jìn)行:第82頁,課件共146頁,創(chuàng)作于2023年2月二維坐標(biāo)系間的變換(1)將xy坐標(biāo)系的原點(x0,y0)平移到xy坐標(biāo)系的原點(0,0);(2)將x軸旋轉(zhuǎn)到x軸上。坐標(biāo)原點的平移可以用以下的矩陣表示:平移操作后兩個坐標(biāo)系的方位如圖所示。第83頁,課件共146頁,創(chuàng)作于2023年2月二維坐標(biāo)系間的變換為了將兩個系統(tǒng)的軸重合,可以順時針旋轉(zhuǎn):將這兩個變換矩陣合并起來,就給出了將對象描述從xy坐標(biāo)系變換到xy坐標(biāo)系的復(fù)合變換矩陣:第84頁,課件共146頁,創(chuàng)作于2023年2月三維空間的幾何變換三維幾何變換是在二維變換的基礎(chǔ)上增加了Z坐標(biāo)而得到的,可以通過指定一個在三個坐標(biāo)方向移動距離的三維向量來對物體進(jìn)行平移變換。也可以利用三個坐標(biāo)方向的縮放因子來縮放對象。三維空間的旋轉(zhuǎn)比二維坐標(biāo)系中的旋轉(zhuǎn)要復(fù)雜,在xy平面上對物體進(jìn)行二維旋轉(zhuǎn)時,只需考慮沿垂直于xy平面的坐標(biāo)軸進(jìn)行旋轉(zhuǎn);但在三維空間中,可以選擇任意方向的旋轉(zhuǎn)軸。大多數(shù)圖形軟件將三維旋轉(zhuǎn)分解為繞三個坐標(biāo)軸的二維旋轉(zhuǎn)的復(fù)合,另一方案是根據(jù)旋轉(zhuǎn)軸的方向和旋轉(zhuǎn)角度建立一個總的旋轉(zhuǎn)矩陣。一個三維點在齊次坐標(biāo)中表示為四元列向量,每一個幾何變換都是一個44矩陣,多個變換序列可以依次合并,每一后續(xù)變換矩陣都從左邊與現(xiàn)有矩陣相乘,最終得到一個總的變換矩陣。第85頁,課件共146頁,創(chuàng)作于2023年2月三維平移在三維齊次坐標(biāo)系中,通過將平移向量(tx,ty,tz)加到P點的坐標(biāo),將點P(x,y,z)平移到新位置P=(x,y,z):

x=x+tx,y=y+ty,z=z+tz,用矩陣表示為:或第86頁,課件共146頁,創(chuàng)作于2023年2月三維平移在三維空間中,對象的平移通過平移該對象的各個頂點來實現(xiàn),如下圖。第87頁,課件共146頁,創(chuàng)作于2023年2月三維旋轉(zhuǎn)可以圍繞空間的任意軸旋轉(zhuǎn)一個對象,但繞與坐標(biāo)軸平行的軸的旋轉(zhuǎn)是最容易處理的??梢岳美@坐標(biāo)軸的旋轉(zhuǎn)(結(jié)合適當(dāng)?shù)钠揭?的復(fù)合變換來表示繞任意軸的旋轉(zhuǎn)。通常,如果沿著坐標(biāo)軸的正半軸觀察原點,那么繞坐標(biāo)軸的逆時針旋轉(zhuǎn)為正向旋轉(zhuǎn),如下圖。在二維觀察中,xy平面上的正向旋轉(zhuǎn)是繞基準(zhǔn)點(平行于z坐標(biāo)軸的軸)進(jìn)行逆時針旋轉(zhuǎn)。第88頁,課件共146頁,創(chuàng)作于2023年2月繞z軸的三維旋轉(zhuǎn)繞z軸的旋轉(zhuǎn)可以很容易推廣到三維:參數(shù)表示繞z軸旋轉(zhuǎn)的角度,上式用齊次坐標(biāo)表示為:更簡潔的形式為:下圖為一個對象繞z軸旋轉(zhuǎn)的示意圖。第89頁,課件共146頁,創(chuàng)作于2023年2月繞y軸的三維旋轉(zhuǎn)同理,繞y軸的三維旋轉(zhuǎn)矩陣為:第90頁,課件共146頁,創(chuàng)作于2023年2月繞x軸的三維旋轉(zhuǎn)繞x軸的三維旋轉(zhuǎn)矩陣為:第91頁,課件共146頁,創(chuàng)作于2023年2月一般的三維旋轉(zhuǎn)一般的三維旋轉(zhuǎn):對于繞與坐標(biāo)軸不重合的軸進(jìn)行旋轉(zhuǎn)的變換矩陣,可以利用平移與坐標(biāo)軸旋轉(zhuǎn)的復(fù)合而得到。如將對象繞平行于某坐標(biāo)軸的軸旋轉(zhuǎn),可以通過下列變換序列來得到所需的旋轉(zhuǎn)矩陣。1、平移對象使其旋轉(zhuǎn)軸與平行的坐標(biāo)軸重合;2、繞該坐標(biāo)軸進(jìn)行旋轉(zhuǎn);3、平移對象將其旋轉(zhuǎn)軸移回到原來位置。該序列如下圖,其復(fù)合矩陣為:

R(

)

=T-1

Rx()T第92頁,課件共146頁,創(chuàng)作于2023年2月三維縮放在二維縮放矩陣中引入z坐標(biāo)方向的縮放系數(shù),很容易擴(kuò)充到三維縮放變換,用齊次坐標(biāo)表示為:某些圖形軟件僅提供相對于坐標(biāo)原點的縮放函數(shù),可以應(yīng)用下列變換序列進(jìn)行相對于任意給定點(xf,yf,zf)的縮放變換。1、平移給定點到原點;2、進(jìn)行相對于坐標(biāo)原點的縮放變換;3、將給定點移回原來位置。第93頁,課件共146頁,創(chuàng)作于2023年2月三維復(fù)合變換類似于二維復(fù)合變換,可以將變換序列中各次變換的矩陣相乘合成三維復(fù)合變換。根據(jù)給定的變換次序,逐次左乘變換矩陣,最右邊的矩陣是最先作用于對象的變換,最左邊的矩陣是最后執(zhí)行的變換。第94頁,課件共146頁,創(chuàng)作于2023年2月三維坐標(biāo)系間的變換前面討論了將二維場景從一個參考坐標(biāo)系到另一個坐標(biāo)系的變換。坐標(biāo)系之間的變換在計算機(jī)圖形軟件包中常用于場景的構(gòu)造(建模)、二維及三維觀察變換。對于笛卡爾坐標(biāo)系,給定xyz系統(tǒng)在xyz系統(tǒng)中的位置,要將xyz坐標(biāo)描述轉(zhuǎn)換到xyz坐標(biāo)系,先將xyz坐標(biāo)系的原點平移到xyz坐標(biāo)系的原點,然后進(jìn)行一系列的旋轉(zhuǎn)使對應(yīng)的坐標(biāo)軸重合,如果兩個坐標(biāo)系使用不同的比例,則必須進(jìn)行一次縮放變換以補(bǔ)償兩坐標(biāo)系之間的差別。第95頁,課件共146頁,創(chuàng)作于2023年2月顯示變換本節(jié)介紹在輸出設(shè)備上顯示二維圖形的過程和技術(shù)。圖形在計算機(jī)中是以數(shù)據(jù)的形式進(jìn)行處理的,而坐標(biāo)則建立了圖形和數(shù)據(jù)之間的聯(lián)系。三維空間中的物體要在二維的屏幕上顯示出來,必須通過投影的方式把三維物體轉(zhuǎn)換成二維的平面圖形。往往在圖形顯示時只需要顯示圖形的某一部分,這時可以在投影面上定義一個窗口。只有在窗口內(nèi)的圖形才顯示,而窗口外的部分則不顯示。在屏幕上也可以定義一個矩形,稱為視口。經(jīng)過窗口到視口的變換,窗口內(nèi)的圖形才能變換到視口中顯示。第96頁,課件共146頁,創(chuàng)作于2023年2月二維觀察任何一個笛卡爾坐標(biāo)系都可以作為世界坐標(biāo)系,世界坐標(biāo)系可用來定義圖形(建模)。在二維情況下,可將xy平面上包含全圖或局部圖的區(qū)域作為要顯示的窗口,所選區(qū)域中的圖形映射到設(shè)備坐標(biāo)系的指定區(qū)域(視口)。窗口(裁剪窗口,取景框)是針對世界坐標(biāo)系而言的,視口是針對顯示屏幕而言的。二維場景中要顯示的部分稱為裁剪窗口(clippingwindow),因為所有在此區(qū)域之外的場景都要被裁去,只有在裁剪窗口內(nèi)的場景才能顯示在屏幕上。第97頁,課件共146頁,創(chuàng)作于2023年2月裁剪窗口裁剪窗口有時暗指世界窗口(worldwindow)或觀察窗口(viewingwindow)。圖形系統(tǒng)曾一度簡稱裁剪窗口為“窗口”,但由于現(xiàn)在眾多的窗口操作系統(tǒng)在計算機(jī)上使用,容易混淆,必須把他們區(qū)分開來?,F(xiàn)在采用術(shù)語“裁剪窗口”來表示要轉(zhuǎn)換為屏幕上點陣圖形的場景部分。圖形系統(tǒng)還用稱為“視口”(viewport)的另一“窗口”來表示屏幕上的顯示區(qū)域,是用來顯示場景(裁剪窗口)的一個區(qū)域,也稱為視區(qū)。對象在裁剪窗口內(nèi)的部分映射到屏幕上指定的視口中(充滿整個視口,可能有縮放)。裁剪窗口決定要看什么,而視口決定在輸出設(shè)備的什么位置進(jìn)行觀察。注意:裁剪窗口是針對物體的,是世界坐標(biāo)系中需要顯示的場景范圍。第98頁,課件共146頁,創(chuàng)作于2023年2月裁剪窗口與視口第99頁,課件共146頁,創(chuàng)作于2023年2月裁剪窗口與視口通過改變視口的位置,可以在輸出設(shè)備的不同位置觀察物體,使用多個視口可在不同的屏幕位置觀察場景的不同部分,也可以通過改變視口的尺寸來改變顯示對象的尺寸和位置。如果將不同大小的裁剪窗口連續(xù)映射到固定尺寸的視口中,則可以得到“拉鏡頭的效果”,因為裁剪窗口通過映射“占滿”整個視口。當(dāng)裁剪窗口變小時,就可以聚焦到場景中的某一部分,從而觀察到放大的細(xì)節(jié),同樣通過連續(xù)地放大裁剪窗口,可以得到逐步擴(kuò)大的場景,通過將一個固定尺寸的裁剪窗口移過場景中的不同對象,可以得到“搖鏡頭”的效果。裁剪窗口和視口一般都是矩形,其各邊分別于坐標(biāo)軸平行,有時也采用多邊形、圓形等視口,但處理復(fù)雜。上圖為矩形裁剪窗口與視口。第100頁,課件共146頁,創(chuàng)作于2023年2月二維觀察變換二維世界坐標(biāo)系場景到設(shè)備坐標(biāo)系

溫馨提示

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

最新文檔

評論

0/150

提交評論