版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
三維圖形學(xué)基礎(chǔ)第一頁(yè),共一百四十六頁(yè),編輯于2023年,星期六屏幕坐標(biāo)及圖形坐標(biāo)顯示器上的位置用整型的屏幕坐標(biāo)來(lái)描述,與幀緩存中的像素位置相對(duì)應(yīng)。y坐標(biāo)給出像素的行序號(hào),x坐標(biāo)給出列序號(hào)。屏幕刷新硬件一般從屏幕的左上角開(kāi)始對(duì)像素進(jìn)行編址,從最上面的第0行到最下面的第ymax行,對(duì)掃描行進(jìn)行編號(hào);每行從左到右,從第0到第xmax對(duì)掃描列進(jìn)行編號(hào)。圖形軟件可以按照任意方式設(shè)定屏幕位置的圖形坐標(biāo)系統(tǒng),如可以設(shè)定屏幕區(qū)域的左下角為原點(diǎn)(視區(qū)的默認(rèn)值),用整數(shù)坐標(biāo)或非整數(shù)笛卡爾坐標(biāo)來(lái)描述圖形。描述物體對(duì)象的坐標(biāo)值最終轉(zhuǎn)換為幀緩存中的整數(shù)像素位置。圖元的掃描轉(zhuǎn)換根據(jù)給定的坐標(biāo)來(lái)確定要顯示的像素位置,如給定一條直線段的兩個(gè)端點(diǎn),顯示函數(shù)必須計(jì)算出兩端點(diǎn)間位于線段上的所有像素的位置。由于一個(gè)像素位置占有屏幕上的一個(gè)有限范圍,因此圖形顯示算法必須考慮像素的有限大小,一般假定像素坐標(biāo)對(duì)應(yīng)于像素區(qū)域的中心。第二頁(yè),共一百四十六頁(yè),編輯于2023年,星期六屏幕上的笛卡爾坐標(biāo)系第三頁(yè),共一百四十六頁(yè),編輯于2023年,星期六顯示窗口OpenGL函數(shù)庫(kù)中用gluOrtho2D(xmin,xmax,ymin,ymax)函數(shù)設(shè)定一個(gè)二維視見(jiàn)空間(二維笛卡爾坐標(biāo)系),其參數(shù)指定了顯示窗口(裁剪窗口)的x、y坐標(biāo)范圍。顯示窗口的左下角位于坐標(biāo)(xmin,ymin)處,右上角位于坐標(biāo)(xmax,ymax)處。如果一個(gè)圖元的坐標(biāo)范圍完全在顯示窗口(裁剪窗口)內(nèi),該圖元將完整地顯示出來(lái),否則,僅僅位于顯示窗口范圍內(nèi)的部分圖元能顯示出來(lái),這涉及到裁剪。第四頁(yè),共一百四十六頁(yè),編輯于2023年,星期六隨機(jī)掃描顯示器20世紀(jì)60年代中期較早出現(xiàn)的是隨機(jī)掃描顯示器(也稱為向量顯示器vectordiaplay),只能顯示線條圖形。這些線條由隨機(jī)掃描系統(tǒng)按定義圖形時(shí)的順序繪制并刷新。筆試?yán)L圖儀也以類似的方式進(jìn)行繪圖。隨機(jī)掃描系統(tǒng)的刷新頻率依賴于顯示的線條數(shù)目。圖形的定義保存在刷新顯示文件存儲(chǔ)區(qū)中,是一組畫線指令,刷新顯示文件稱為顯示列表。為了顯示指定的圖形,系統(tǒng)必須按顯示文件中的一組命令依次畫出各個(gè)線條,當(dāng)所有畫線命令處理完后,系統(tǒng)返回到該列表的第一條畫線命令,然后重新開(kāi)始繪制。隨機(jī)掃描顯示器以每秒30~60次的刷新速度畫出圖形的所有線條。第五頁(yè),共一百四十六頁(yè),編輯于2023年,星期六光柵掃描顯示器大約在1980年左右,誕生了光柵掃描顯示器,它采用彩色電視技術(shù),用三個(gè)電子束逐行掃描熒光屏上整齊排列的紅、綠、藍(lán)三基色點(diǎn)簇,一條電子束對(duì)準(zhǔn)一種基色,一個(gè)點(diǎn)簇稱作一個(gè)像素。蔭罩法(shadow-mask)常用于光柵掃描系統(tǒng)。該方法基于紅、綠、藍(lán)三原色原理,對(duì)每個(gè)像素位置,蔭罩CRT有三個(gè)熒光彩色點(diǎn):一個(gè)熒光點(diǎn)發(fā)射紅光,另一個(gè)發(fā)射綠光,第三個(gè)發(fā)射藍(lán)光。這類CRT有三支電子槍,與每個(gè)彩色點(diǎn)一一對(duì)應(yīng),而蔭罩柵格位于緊靠涂覆有熒光層的屏幕之后。由于人眼可將三點(diǎn)發(fā)出的光合成為一種彩色,因此三種熒光粉發(fā)出的光生成一個(gè)小彩色點(diǎn),稱為像素點(diǎn)。第六頁(yè),共一百四十六頁(yè),編輯于2023年,星期六與光柵掃描顯示器有關(guān)的幾個(gè)基本概念在光柵掃描系統(tǒng)中,電子束橫向掃描屏幕,一次一行,從頂?shù)降滓来芜M(jìn)行,每一行稱為一個(gè)掃描行。當(dāng)電子束橫向沿每一行移動(dòng)時(shí),電子束的強(qiáng)度不斷變化,由不同的顏色和亮度生成圖形。圖形定義保存在幀緩存
(framebuffer)中,這里幀指整個(gè)屏幕范圍,該存儲(chǔ)器保存一組對(duì)應(yīng)于屏幕所有點(diǎn)的強(qiáng)度值,電子束在屏幕上逐點(diǎn)移動(dòng)時(shí)從幀緩存中取出對(duì)應(yīng)位置的值,控制其強(qiáng)度。每個(gè)可由電子束點(diǎn)亮的屏幕點(diǎn)稱為一個(gè)像素(pixel,是picture與element的簡(jiǎn)寫),像素的陣列為光柵。一幅圖像的像素全部存放在幀緩存的內(nèi)存里。第七頁(yè),共一百四十六頁(yè),編輯于2023年,星期六與光柵掃描顯示器有關(guān)的幾個(gè)基本概念光柵掃描系統(tǒng)對(duì)屏幕的每一點(diǎn)都有存儲(chǔ)顏色及亮度信息的能力,從而能適用于包含細(xì)微陰影和色彩變化的真實(shí)感圖形顯示。顯示器的像素個(gè)數(shù)稱為分辨率,如1024×768,1280×1024。顯示器的另一特征是縱橫比(aspectratio),定義為系統(tǒng)能顯示的像素列數(shù)除以行數(shù)??v橫比還可由屏幕上顯示相同長(zhǎng)度的水平和垂直線段所需像素點(diǎn)數(shù)之比來(lái)描述。如縱橫比為4/3,表示用4個(gè)點(diǎn)繪出的水平線與用3個(gè)點(diǎn)繪出的垂直線的物理長(zhǎng)度相同。光柵系統(tǒng)可顯示的顏色數(shù)目依賴于幀緩存中的位數(shù),每個(gè)像素的位數(shù)稱為緩存深度或精度。如1位深度緩存只能顯示兩種顏色,8位深度緩存則可以顯示28(=256)中顏色,在真彩色系統(tǒng)里,深度為24位,紅、綠、藍(lán)三基色各8位,可以顯示224(=16777216)種顏色數(shù),能表示大多數(shù)真實(shí)感圖形。第八頁(yè),共一百四十六頁(yè),編輯于2023年,星期六光柵化幀緩存通常采用特殊類型的內(nèi)存芯片,可以快速顯示幀緩存的內(nèi)容,在一些基于軟件的圖形系統(tǒng)里,幀緩存是系統(tǒng)內(nèi)存的一部分。在一些簡(jiǎn)單的圖形系統(tǒng)里,幀緩存只存儲(chǔ)像素的顏色值,可以簡(jiǎn)單地將幀緩存稱為顏色緩存(colorbuffer)。目前,對(duì)于大多數(shù)的圖形系統(tǒng),幀緩存能存儲(chǔ)更多的信息,如三維圖形的深度信息等。在這些系統(tǒng)里,幀緩存可以由多個(gè)緩存器組成。處理器的圖形處理功能是根據(jù)應(yīng)用程序的要求生成各種圖元(如直線、圓和多邊形),把顏色值賦給幀緩存中的像素,使這些像素能表現(xiàn)這些實(shí)體。如三角形可用三個(gè)頂點(diǎn)來(lái)描述,為了顯示三角形的三條邊,圖形系統(tǒng)必須生成一組像素,使這組像素看起來(lái)像三角形的邊線。將幾何形體的數(shù)據(jù)轉(zhuǎn)換為像素在幀緩存里的位置和顏色的過(guò)程稱為光柵化或掃描轉(zhuǎn)換。第九頁(yè),共一百四十六頁(yè),編輯于2023年,星期六幀緩存在早期的圖形系統(tǒng)里,幀緩存是標(biāo)準(zhǔn)存儲(chǔ)器的一部分,CPU可以直接對(duì)它進(jìn)行存取操作。目前,幾乎所有的圖形系統(tǒng)都采用了專用的圖形處理單元(GraphicsProcessingUints,簡(jiǎn)稱GPU),這種專用的圖形處理單元是專門針對(duì)某些特定的圖形功能而設(shè)計(jì)的。GPU可以在主板上,也可以在圖形顯示卡上。計(jì)算機(jī)通過(guò)GPU對(duì)幀緩存進(jìn)行存取操作,因此常把幀緩存包含在GPU內(nèi)。第十頁(yè),共一百四十六頁(yè),編輯于2023年,星期六直線段的掃描轉(zhuǎn)換算法直線的掃描轉(zhuǎn)換:根據(jù)直線的幾何特征,可確定最佳逼近于該直線的一組象素,并且按掃描線順序,對(duì)這些象素進(jìn)行寫操作。兩種常用算法:數(shù)值微分法(DDA)Bresenham算法。問(wèn)題:怎樣又快又好地繪制一條直線段?第十一頁(yè),共一百四十六頁(yè),編輯于2023年,星期六數(shù)字微分法基本思想:根據(jù)線段斜率的不同,在某個(gè)坐標(biāo)軸上以單位間隔對(duì)線段采樣,在另一個(gè)坐標(biāo)軸上確定最靠近線段的對(duì)應(yīng)整數(shù)值。已知過(guò)端點(diǎn)P0(x0,y0),P1(x1,y1)的直線段L的方程為:
y=kx+b
直線斜率為當(dāng)斜率的絕對(duì)值小于1時(shí),從x的左端點(diǎn)x0開(kāi)始,向x的右端點(diǎn)逐步遞增。步長(zhǎng)=1(象素單位),計(jì)算相應(yīng)的y坐標(biāo)y=kx+b;取象素點(diǎn)(x,round(y))作為當(dāng)前點(diǎn)的坐標(biāo)。第十二頁(yè),共一百四十六頁(yè),編輯于2023年,星期六由直線方程可得下一個(gè)采樣點(diǎn)的y坐標(biāo)為:
yi+1=kxi+1+b
=kxi+b+kx =yi+kx
當(dāng)x=1時(shí); yi+1=yi+k
即:當(dāng)x每遞增1,y遞增k(即直線斜率);注意上述分析的算法僅適用于k≤1的情形。在此情況下,x每增加1,y最多增加1。當(dāng)k
1時(shí),必須把x,y的地位互換:
xi+1=xi+1/k該算法能在有限的線段長(zhǎng)度內(nèi),根據(jù)斜率的不同合理確定盡可能多的像素來(lái)逼近該直線段。
DDA算法計(jì)算像素的位置比直接使用直線方程計(jì)算的速度要快,它利用光柵特性消除了直線方程中的乘法,在x或y方向使用合適的增量,在直線路徑上逐步得到各像素的位置。但在浮點(diǎn)增量的連續(xù)累加中,取整誤差的積累使得對(duì)于較長(zhǎng)線段所得到的像素位置偏離實(shí)際線段,且該過(guò)程中的取整操作和浮點(diǎn)運(yùn)算仍然十分耗時(shí)。促使人們考慮既能用于直線,又能用于曲線的更通用的掃描線算法。第十三頁(yè),共一百四十六頁(yè),編輯于2023年,星期六例:畫直線段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第十四頁(yè),共一百四十六頁(yè),編輯于2023年,星期六Bresenham算法Bresenham畫線算法是一種精確而有效的光柵線生成算法,該算法還可用于圓和其它曲線。思路:固定直線的兩個(gè)端點(diǎn),控制總體誤差。如下圖,首先考慮斜率小于1的直線的掃描轉(zhuǎn)換過(guò)程,沿線段路徑的像素位置由以單位x間隔的采樣來(lái)確定。從給定線段的左端點(diǎn)(x0,y0)開(kāi)始,逐步處理每個(gè)后繼列(x位置),并在其掃描線y值最接近線段的像素上繪出一點(diǎn)。下圖顯示了這個(gè)過(guò)程的第k步。假設(shè)當(dāng)前已顯示的像素點(diǎn)在(xk,yk),那么下一步需要確定在列xk+1=xk+1上繪制哪個(gè)像素,是在位置(xk+1,yk),還是在(xk+1,yk+1)。從(xk,yk)像素開(kāi)始,繪制斜率0<m<1的直線的屏幕局部第十五頁(yè),共一百四十六頁(yè),編輯于2023年,星期六在采樣位置xk+1,用dlower和dupper來(lái)表示兩個(gè)像素與直線段路徑的垂直偏移。直線段上像素列位置處的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要確定兩像素中哪一個(gè)更接近線段路徑,需要測(cè)試這兩個(gè)像素偏移的差:
dlower-dupper=2m(xk+1)-2yk+2b-1在采樣位置xk+1處,像素位置到直線上y坐標(biāo)之間的垂直距離第十六頁(yè),共一百四十六頁(yè),編輯于2023年,星期六設(shè)y和x分別為兩端點(diǎn)的垂直和水平偏移量,則m=y/x,定義決策參數(shù)pk為:
pk=x(dlower-dupper)
=2yxk-2xyk+c3-1
其中c=2y+x(2b-1),pk的符號(hào)與dlower-dupper的符號(hào)相同(此例中x>0
)。假如yk處的像素比yk+1的像素更接近于線段(即dlower<dupper),那么參數(shù)pk是負(fù)的,此時(shí)繪制下面的像素,反之,繪制上面的像素??梢岳眠f增整數(shù)運(yùn)算得到后繼的決策參數(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的符號(hào)。決策參數(shù)的遞歸運(yùn)算在線段的坐標(biāo)端點(diǎn)開(kāi)始的每個(gè)整數(shù)x位置進(jìn)行,起始像素位置(x0,y0)的第一個(gè)參數(shù)p0由式3-1及m=y/x可得:p0=2y-x遞推時(shí),僅進(jìn)行兩個(gè)常量2y及2y-2x之間的整數(shù)加減。第十七頁(yè),共一百四十六頁(yè),編輯于2023年,星期六正斜率小于1的線段的Bresenham畫線算法的主要步驟概括如下:(1)輸入線段的兩個(gè)端點(diǎn),并將左端點(diǎn)儲(chǔ)存在(x0,y0)中;(2)將(x0,y0)裝入幀緩存,畫出第一個(gè)點(diǎn);(3)計(jì)算常量x
、y、2y和2y-2x,并得到?jīng)Q策參數(shù)的第一個(gè)值;
p0=2y-x(4)從k=0開(kāi)始,在線段路徑的每個(gè)xk處,進(jìn)行下列檢測(cè):如果pk<0,下一個(gè)要繪制的點(diǎn)是(xk+1,yk),并且pk+1=pk+2y
否則,下一個(gè)要繪制的點(diǎn)是(xk+1,yk+1),并且
pk+1=pk+2y-2x(5)重復(fù)步驟4,共x-1次。當(dāng)斜率
1時(shí),也必須把x,y的地位互換。例:繪制一條線段,端點(diǎn)為(20,10)和(30,18)。該線段的斜率為0.8,且x=10,y=8初始決策參數(shù)為:p0=2y-x=6后繼決策參數(shù)的增量為:2y=16,2y-2x=-4繪制初始點(diǎn)(x0,y0)=(20,10),并根據(jù)決策參數(shù)確定后繼像素點(diǎn)的位置為:第十八頁(yè),共一百四十六頁(yè),編輯于2023年,星期六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)沿端點(diǎn)(20,10)和(30,18)用Bresenham畫線算法繪制的像素點(diǎn)第十九頁(yè),共一百四十六頁(yè),編輯于2023年,星期六圓的生成算法圓的方程為:(x-xc)2+(y-yc)2=r23.4.1利用這個(gè)方程,可以沿x軸從xc-r到xc+r以單位步長(zhǎng)計(jì)算對(duì)應(yīng)的y值,從而得到圓周上每點(diǎn)的位置:
y=yc±(r2-(x-xc)2)1/23.4.2該方法的每一步包含很大的計(jì)算量,而且所繪制像素的間距不一致,如下圖所示。我們可以在圓斜率的絕對(duì)值大于1后,交換x和y(即步進(jìn)y值并計(jì)算x值)來(lái)調(diào)整間距,但增加了計(jì)算量和處理過(guò)程??傊?,該方法不是一種理想的畫圓方法。
用方程3.4.2繪制的正半圓第二十頁(yè),共一百四十六頁(yè),編輯于2023年,星期六另一種消除不等間距的方法是使用極坐標(biāo)r和來(lái)計(jì)算圓周上的點(diǎn),圓的極坐標(biāo)方程為:
x=xc+rcos
y=yc+rsin使用上述方法以固定角度為步長(zhǎng)可以生成等間距的點(diǎn)來(lái)繪制圓,盡管利用極坐標(biāo)能生成等距點(diǎn),但三角函數(shù)的計(jì)算十分耗時(shí)??梢岳脠A的對(duì)稱性減少計(jì)算量,圓的形狀在每個(gè)象限中是相似的,如果確定了圓在第一象限中的位置,則可以生成圓在第二象限的部分,因?yàn)閳A相對(duì)于y軸是對(duì)成的。根據(jù)圓相對(duì)于x軸的對(duì)稱性,由第一象限和第二象限中的圓弧,可以得到第三象限和第四象限中的圓弧。在八分圓之間也有對(duì)稱性,一個(gè)象限中相鄰八分圓的圓弧對(duì)于45°直線是對(duì)稱的,如下圖。圖中八分之一圓上的一點(diǎn)(x,y)可映射到其它7個(gè)八分圓的點(diǎn)。利用圓的對(duì)稱性,可由1個(gè)八分圓上的點(diǎn),映射到其余7個(gè)八分圓上的點(diǎn)第二十一頁(yè),共一百四十六頁(yè),編輯于2023年,星期六利用圓的對(duì)稱性,僅需計(jì)算從x=0到x=y這段圓弧的點(diǎn)就可得到整個(gè)圓的所有像素位置。在該八分圓中,圓弧斜率的絕對(duì)值≤1,x=0時(shí)的斜率為0,x=y時(shí)圓弧的斜率為-1.0。使用對(duì)稱性及圓的方程來(lái)確定圓周上的像素位置,仍然需要大量的計(jì)算,更有效地畫圓算法是采用類似Bresenham畫線算法,通過(guò)設(shè)定在每一步采樣步驟中尋找最接近圓周像素的決策參數(shù)。但圓的方程是非線性的,包含平方運(yùn)算,一個(gè)避免平方運(yùn)算的方法是:檢驗(yàn)兩像素間的中點(diǎn)位置是在圓邊界之內(nèi)還是之外。中點(diǎn)畫圓算法:對(duì)于中心為(xc,
yc)、半徑為r的圓,先計(jì)算圓心在(0,0)的圓的像素位置,然后通過(guò)將xc加到x且yc加到y(tǒng),將圓平移到真正位置。在第一象限,圓弧段從x=0到x=y,曲線的斜率從0變到-1.0??梢栽谠摪朔謭A上的正x方向取單位步長(zhǎng),并使用決策參數(shù)來(lái)確定每一步兩個(gè)可能的y位置中,哪一個(gè)更接近于圓的位置,其余7個(gè)八分圓中的位置可由對(duì)稱性得到。定義圓函數(shù):
f(x,y)=x2+y2-r2任何點(diǎn)的相對(duì)位置可由圓函數(shù)的符號(hào)來(lái)決定:第二十二頁(yè),共一百四十六頁(yè),編輯于2023年,星期六
<0,如果(x,y)位于圓內(nèi)f(x,y)=0,如果(x,y)位于圓上
>0,如果(x,y)位于圓外圓函數(shù)即為決策參數(shù),下圖給出了采樣位置xk+1上兩個(gè)候選像素間的中點(diǎn)。圓周上采樣位置xk+1上候選像素間的中點(diǎn)假設(shè)已在(xk,yk)繪制了一個(gè)像素,下一步需要確定是像素(xk+1,yk)還是像素(xk+1,yk-1)更接近于圓,在兩像素的中點(diǎn)求決策參數(shù)的值:
pk=f(xk+1,yk-1/2)=(xk+1)2+(yk-1/2)2-r2假若pk<0,則該中點(diǎn)位于圓內(nèi),掃描線yk上的像素接近于圓周邊界。否則該中點(diǎn)位于圓外或圓周上,選擇掃描線yk-1的像素。第二十三頁(yè),共一百四十六頁(yè),編輯于2023年,星期六后續(xù)的決策參數(shù)可以使用增量運(yùn)算得到,如對(duì)采樣位置xk+1=xk+2處的圓函數(shù)求值,可以得到下一個(gè)決策參數(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的符號(hào)。若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的求值也可以通過(guò)增量的方式求得:2xk+1=2xk+22yk+1=2yk-2在起始位置(0,r)處,這兩項(xiàng)的初始值分別為0和2r。在起始位置(0,r)處,初始決策參數(shù)為:p0=f(1,r-1/2)=1+(r-1/2)2-r2=5/4-r如果將半徑r指定為整數(shù),可以對(duì)p0進(jìn)行簡(jiǎn)單的取整,p0=1-r,則中點(diǎn)方法使用整數(shù)加減來(lái)計(jì)算圓周的像素位置。第二十四頁(yè),共一百四十六頁(yè),編輯于2023年,星期六中點(diǎn)畫圓算法的步驟:(1)輸入圓半徑r和圓心(xc,yc),并得到圓周(圓心在原點(diǎn))上的第一個(gè)點(diǎn):(x0,y0)=(0,r)(2)計(jì)算決策參數(shù)的初始值:
p0=5/4-r(3)在每個(gè)xk位置,從k=0開(kāi)始,計(jì)算決策參數(shù),若pk<0,則圓周下一像素位置為(xk+1,yk),并且
pk+1=pk+2xk+1+1否則圓的下一點(diǎn)為(xk+1,yk-1),并且
pk+1=pk+2xk+1+1-2yk+1其中,2xk+1=2xk+2且2yk+1=2yk-2(4)確定其它7個(gè)八分圓中的對(duì)稱點(diǎn)。(5)將每個(gè)計(jì)算出來(lái)的像素位置(x,y)平移到圓心在(xc,yc)的圓周上,并繪出各點(diǎn)(x+xc,y+yc)。(6)重復(fù)步驟3到步驟5,直至x≥y。第二十五頁(yè),共一百四十六頁(yè),編輯于2023年,星期六例,使用中點(diǎn)畫圓算法畫圓給定圓半徑r=10,確定在第一象限從x=0到x=y沿八分圓的各像素點(diǎn)位置。決策參數(shù)的初始值為:p0=1-r=-9對(duì)于中心在原點(diǎn)的圓,初始點(diǎn)(x0,y0)=(0,10),決策參數(shù)的初始增量值:2x0=0,2y0=20使用中點(diǎn)畫圓法計(jì)算的后續(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第二十六頁(yè),共一百四十六頁(yè),編輯于2023年,星期六用中點(diǎn)畫圓法得到的像素位置(空心圓為第一象限的對(duì)稱位置)第二十七頁(yè),共一百四十六頁(yè),編輯于2023年,星期六使用折線來(lái)逼近曲線常見(jiàn)的曲線除圓以外,還有橢圓、圓錐曲線、三角和指數(shù)函數(shù)、樣條曲線等。顯示曲線的簡(jiǎn)單方法是使用直線段來(lái)逼近曲線,僅需確定一組曲線上的點(diǎn)并將它們連接成一組直線段。折線中的線段越多,曲線越平滑。第二十八頁(yè),共一百四十六頁(yè),編輯于2023年,星期六3.5填充區(qū)圖元圖形學(xué)中常常需要用某種顏色或某種圖案來(lái)填充一個(gè)區(qū)域,盡管有可能使用各種形狀,但圖形庫(kù)一般不支持任意的填充形狀,多數(shù)庫(kù)函數(shù)要求填充區(qū)為多邊形。多邊形是由三個(gè)或更多的頂點(diǎn)連接而成的封閉圖形,由于多邊形的邊界為直線段,因而比它形狀更容易處理??蓪⑶€轉(zhuǎn)換為由分段折線構(gòu)成的多邊形,曲面也可以用一系列多邊形面片來(lái)逼近。如果一個(gè)多邊形的所有內(nèi)角均小于180°,則該多邊形為凸(convex)多邊形。等價(jià)定義:它的內(nèi)部完全在它的任一邊及其延長(zhǎng)線的一側(cè)。如果任意兩點(diǎn)位于凸多邊形的內(nèi)部,則其連線上的任一點(diǎn)也在凸多邊形的內(nèi)部。不是凸多邊形的多邊形稱為凹(concave)多邊形。退化多邊形是指有共線或重合頂點(diǎn)的多邊形,共線的頂點(diǎn)生成一條線段,重疊的頂點(diǎn)可以生成多余線段、重疊邊或長(zhǎng)度為0的邊。為了軟件的魯棒性,圖形軟件可以拒絕退化或非平面的多邊形。凹多邊形也會(huì)產(chǎn)生一些問(wèn)題,對(duì)凹多邊形的填充及其它處理比較復(fù)雜,常常將凹多邊形分割成一組凸多邊形以提高效率。第二十九頁(yè),共一百四十六頁(yè),編輯于2023年,星期六可以為多邊形的每一條邊建立一個(gè)向量,用相鄰邊的叉積來(lái)測(cè)試凸凹性,凸多邊形的所有向量叉積均同號(hào),如果某些叉積為正而另一些為負(fù),則為凹多邊形。識(shí)別凹多邊形的另一個(gè)方法是觀察多邊形頂點(diǎn)位置與每條邊延長(zhǎng)線的關(guān)系。如果有些頂點(diǎn)在某一延長(zhǎng)線的一側(cè)而有些頂點(diǎn)在另一側(cè),則為凹多邊形。多邊形的填充算法分為掃描線填充算法和種子填充算法。掃描線的含義來(lái)源于光柵顯示器,對(duì)屏幕上的每個(gè)像素點(diǎn),按從上到下,從左到右的順序進(jìn)行顯示,水平方向從左到右每掃描一行,就是一條y方向的掃描線,同理,從上到下也能形成x方向的掃描線。掃描線填充算法的原理是:待填充區(qū)域按y方向(或x方向)掃描線的順序,計(jì)算掃描線與多邊形的相交區(qū)間,再用指定的顏色填充這些區(qū)間的像素,區(qū)間的端點(diǎn)可以通過(guò)計(jì)算掃描線與多邊形邊界的交點(diǎn)求得。第三十頁(yè),共一百四十六頁(yè),編輯于2023年,星期六通用多邊形的掃描線填充算法下圖給出了多邊形區(qū)域?qū)嵭奶畛涞膾呙杈€過(guò)程。對(duì)每一條與多邊形相交的掃描線,與邊的交點(diǎn)從左到右排序,且將每一對(duì)交點(diǎn)之間的像素位置包括這對(duì)像素在內(nèi),設(shè)定為指定顏色,本例中與邊界的四個(gè)交點(diǎn)定義了兩段內(nèi)部像素:從x=10到14的5個(gè)像素,以及從x=18到x=24的7個(gè)像素。如果是用圖案填充多邊形,則沿一條掃描線的每一個(gè)像素顏色由與圖案重疊的位置確定。穿過(guò)多邊形區(qū)域的掃描線上的內(nèi)部像素第三十一頁(yè),共一百四十六頁(yè),編輯于2023年,星期六有時(shí)情況比較復(fù)雜,當(dāng)一條掃描線經(jīng)過(guò)多邊形的一個(gè)頂點(diǎn)時(shí),掃描線在該頂點(diǎn)處與多邊形的兩條邊相交,這種情況可能導(dǎo)致在這條掃描線上的交點(diǎn)要增加兩個(gè)點(diǎn)。下圖給出了在頂點(diǎn)處與多邊形相交的兩條掃描線。掃描線y’與偶數(shù)條邊相交,必須將該頂點(diǎn)處的交點(diǎn)作為2個(gè)交點(diǎn),才能正確標(biāo)識(shí)該掃描線上的兩對(duì)交點(diǎn)之間為內(nèi)部像素段。掃描線y與多邊形的5條邊相交,必須將該頂點(diǎn)處的交點(diǎn)作為1個(gè)交點(diǎn),才能正確標(biāo)識(shí)該掃描線上的兩對(duì)交點(diǎn)之間為內(nèi)部像素段。通過(guò)觀察相交邊相對(duì)于掃描線的位置,可以發(fā)現(xiàn)掃描線y和掃描線y’間的拓?fù)洳町悺?duì)于掃描線y,共享一個(gè)頂點(diǎn)的兩條相交邊位于掃描線的兩側(cè),對(duì)于掃描線y’,兩條相交邊位于掃描線的同一側(cè)。掃描線與多邊形頂點(diǎn)相交,y’生成奇數(shù)個(gè)交點(diǎn),y生成偶數(shù)個(gè)交點(diǎn)第三十二頁(yè),共一百四十六頁(yè),編輯于2023年,星期六可以通過(guò)順時(shí)針或逆時(shí)針?lè)较騺?lái)搜索多邊形邊界,并觀察從一條邊移動(dòng)到另一條邊時(shí)頂點(diǎn)y坐標(biāo)的相對(duì)變化來(lái)判別這個(gè)點(diǎn)。假如兩條相鄰邊的三個(gè)端點(diǎn)y坐標(biāo)值單調(diào)遞增或遞減,那么對(duì)于任何穿過(guò)該頂點(diǎn)的掃描線,必須將該相交頂點(diǎn)(中間的共享頂點(diǎn))計(jì)為1個(gè)交點(diǎn)。否則,該相交頂點(diǎn)(中間的共享頂點(diǎn))即為多邊形邊界上的一個(gè)局部極值,(極大或極小),須將該相交頂點(diǎn)計(jì)為2個(gè)交點(diǎn)??偨Y(jié):對(duì)凹多邊形的填充判斷比較復(fù)雜。凸多邊形的掃描線填充對(duì)于凸多邊形,掃描線填充過(guò)程可以簡(jiǎn)化,每一條掃描線與多邊形至多有兩個(gè)交點(diǎn),可以使用坐標(biāo)范圍來(lái)確定哪些邊與掃描線相交,當(dāng)掃描線與單個(gè)頂點(diǎn)相交時(shí),僅繪出該點(diǎn)本身,當(dāng)有兩個(gè)交點(diǎn)時(shí),兩交點(diǎn)之間的部分都是多邊形內(nèi)部的點(diǎn)。第三十三頁(yè),共一百四十六頁(yè),編輯于2023年,星期六種子填充算法區(qū)域填充的另一種方法是從區(qū)域的一個(gè)內(nèi)部點(diǎn)開(kāi)始,由內(nèi)向外逐點(diǎn)繪制直到邊界。可以使用單一顏色或一個(gè)圖案來(lái)填充一個(gè)區(qū)域。假如邊界是以單一顏色指定的,則填充算法可逐個(gè)像素地向外處理,直至遇到邊界顏色。該算法從一個(gè)內(nèi)點(diǎn)開(kāi)始檢測(cè)相鄰位置的顏色,若檢測(cè)位置不是該邊界顏色,就將它設(shè)置成邊界顏色,再檢測(cè)其相鄰位置,這個(gè)過(guò)程持續(xù)到檢測(cè)完區(qū)域邊界顏色范圍內(nèi)的所有像素為止。區(qū)域填充算法要求區(qū)域是連通的。從一個(gè)當(dāng)前位置檢測(cè)其相鄰像素有兩種方法:4-連通和8-連通。4-連通即檢測(cè)當(dāng)前位置的上、下、左、右4個(gè)方向的相鄰像素,8-連通即檢測(cè)當(dāng)前位置的上、下、左、右、左上、右上、左下及右下8個(gè)方向的相鄰像素。4-連通8-連通4-連通區(qū)域8-連通區(qū)域第三十四頁(yè),共一百四十六頁(yè),編輯于2023年,星期六第三十五頁(yè),共一百四十六頁(yè),編輯于2023年,星期六圖案填充可以將一個(gè)區(qū)域填充為某種單一顏色,也可以用某種圖案進(jìn)行填充,還可以不填充而只繪制其邊界。對(duì)多邊形可以使用不同顏色、線寬和線型繪制其邊框,還可以為區(qū)域的前向面和后向面設(shè)置不同的顯示屬性。填充圖案可以用一個(gè)對(duì)不同位置指定不同顏色的矩形顏色陣列來(lái)給出,即一個(gè)填充圖案可當(dāng)作一個(gè)點(diǎn)陣來(lái)處理,其中每一位置點(diǎn)指定一種顏色。描述填充圖案的矩陣是一個(gè)應(yīng)用于顯示區(qū)域的掩模。有些圖形系統(tǒng)可以設(shè)置掩模的初始位置,從該初始位置開(kāi)始,掩模在水平方向和垂直方向反復(fù)填充直到整個(gè)區(qū)域都填滿無(wú)重疊的掩模。這種用矩形圖案填充一個(gè)區(qū)域的處理稱為平鋪,而矩形填充圖案有時(shí)也稱為平鋪圖案。填充圖案的起始位置可設(shè)定在填充區(qū)內(nèi)的任意位置,有些軟件包將顯示窗口的坐標(biāo)原點(diǎn)作為圖案的起始位置。第三十六頁(yè),共一百四十六頁(yè),編輯于2023年,星期六字符圖元圖形顯示中常包括文字信息,包括字母、數(shù)字或其他字符等。字體是指一組按照特定尺寸和格式的模板字符樣式。字體有兩種不同的表示方法,第一種稱為位圖字體(或光柵字體),每個(gè)字符都由一個(gè)二值形式的點(diǎn)陣圖案表示,如圖3.6a,由于所有字符都已完成掃描轉(zhuǎn)換,繪制一個(gè)字符只需將該字符的位圖直接映射或復(fù)制到幀緩存的指定位置,值為1的位對(duì)應(yīng)的像素位置將用當(dāng)前顏色進(jìn)行顯示。盡管可以由一組點(diǎn)陣字符生成不同尺寸以及類似粗體、斜體等其它字體,但字符放大時(shí)會(huì)有鋸齒現(xiàn)象。第二種表示方法稱為輪廓字體,又稱筆畫字體或向量字體。每個(gè)字符的外形輪廓均由直線和曲線段來(lái)描述,如圖3.6b,字符輪廓的內(nèi)部按填充區(qū)進(jìn)行掃描轉(zhuǎn)換處理。與位圖字符相比,輪廓字體在進(jìn)行放大時(shí)其字符形狀不會(huì)變形。第三十七頁(yè),共一百四十六頁(yè),編輯于2023年,星期六第三十八頁(yè),共一百四十六頁(yè),編輯于2023年,星期六反走樣在圖形光柵化的過(guò)程中由于圖元的坐標(biāo)點(diǎn)離散化為整數(shù)像素位置,因此光柵化后生成的圖元具有鋸齒形或階梯狀的外觀。當(dāng)我們把對(duì)象的連續(xù)表示(無(wú)限的分辨率)變換為對(duì)象的離散表示時(shí),不可避免地會(huì)出現(xiàn)這類誤差,這種由于低頻采樣(不充分采樣)而造成的圖形失真稱為走樣(aliasing)。另一個(gè)不太引人注目的走樣現(xiàn)象是不同走向的線段具有不同的亮度,雖然所有線段都用同樣的顏色亮度來(lái)顯示,但一條斜線看上去要比一條水平或垂直線暗一些。這一現(xiàn)象的原因可由圖3.7.1解釋,圖中水平線上的像素間的距離為一個(gè)單位長(zhǎng)度,而斜線上的像素間的距離大約為1.414個(gè)單位長(zhǎng)度,密度上的差異造成亮度感覺(jué)上的差異。如果一個(gè)物體沒(méi)有與像素柵格對(duì)齊,或者不能與像素柵格吻合,會(huì)出現(xiàn)籬柵問(wèn)題。圖3.7.2(a)表示一道樁與樁之間的距離并非像素間距整數(shù)倍的籬柵。將該籬柵掃描轉(zhuǎn)換后樁的端點(diǎn)都要向像素位置靠攏對(duì)齊,結(jié)果是樁之間的距離不再均勻相等圖3.7.2(b)。此現(xiàn)象有時(shí)稱為局部走樣,這時(shí)籬柵的總長(zhǎng)度基本上是正確的。若要保持樁距均勻,籬柵的總長(zhǎng)度就會(huì)明顯失真圖3.7.2(c),這一現(xiàn)象有時(shí)稱為總體走樣。第三十九頁(yè),共一百四十六頁(yè),編輯于2023年,星期六反走樣盡管數(shù)學(xué)上的線段只有長(zhǎng)度沒(méi)有寬度,但光柵化后的線段為了可見(jiàn),必須有一個(gè)寬度,幀緩存以像素為最小單位,若一條理想的線段在幀緩存里的寬度為一個(gè)像素,當(dāng)仔細(xì)觀察一個(gè)像素寬的直線時(shí),會(huì)發(fā)現(xiàn)該線段只是部分覆蓋了1個(gè)像素大小的方形區(qū)域,如圖3.7.3。第四十頁(yè),共一百四十六頁(yè),編輯于2023年,星期六第四十一頁(yè),共一百四十六頁(yè),編輯于2023年,星期六反走樣提高顯示器的分辨率只能減輕而不能消除鋸齒問(wèn)題。第四十二頁(yè),共一百四十六頁(yè),編輯于2023年,星期六反走樣對(duì)于能顯示兩級(jí)以上亮度的光柵系統(tǒng),可以采用反走樣方法適當(dāng)?shù)匦薷难貓D元邊界的像素亮度,平滑邊界,減小鋸齒狀、斑塊狀的亮度差異,改善顯示效果。一種簡(jiǎn)單、直接的反走樣方法,就是把屏幕看成由比實(shí)際更細(xì)的網(wǎng)格所覆蓋,從而增加采樣頻率,然后根據(jù)這種更細(xì)網(wǎng)格,使用采樣點(diǎn)來(lái)確定每個(gè)屏幕像素的合適亮度。這種在高分辨率下對(duì)對(duì)象進(jìn)行采樣并在較低分辨率上顯示其結(jié)果的技術(shù)稱為過(guò)采樣(supersampling),也稱為后濾波(postfiltering)。另一種方法是通過(guò)計(jì)算待顯示的每個(gè)像素在對(duì)象上的覆蓋區(qū)域來(lái)確定像素的亮度。計(jì)算覆蓋區(qū)域的反走樣稱為區(qū)域采樣(areasampling),也稱為前濾波(prefiltering)。還可以通過(guò)移動(dòng)像素區(qū)域的顯示位置而實(shí)現(xiàn)反走樣,這種技術(shù)稱為像素移相(pixelphasing)。第四十三頁(yè),共一百四十六頁(yè),編輯于2023年,星期六前濾波與后濾波濾波的概念來(lái)源于信號(hào)處理領(lǐng)域。若將亮度作為信號(hào),則顏色均勻的、亮度緩慢變化的區(qū)域?qū)?yīng)于低頻部分,具有清晰邊界的、亮度快速變化的區(qū)域?qū)?yīng)于高頻部分。為了減少圖像空間里的線段與其它線段的參差不齊現(xiàn)象,希望將亮度的突變“抹平”,從信號(hào)處理角度來(lái)看,就是將高頻率的成分“過(guò)濾掉”。前濾波就是在采樣前對(duì)原始連續(xù)信號(hào)進(jìn)行處理直接獲取各個(gè)像素應(yīng)有的亮度(在采樣之前進(jìn)行濾波)。后濾波則首先從原始連續(xù)信號(hào)獲取離散采樣值,然后再用這些采樣值計(jì)算像素值(在采樣之后進(jìn)行濾波)。第四十四頁(yè),共一百四十六頁(yè),編輯于2023年,星期六區(qū)域采樣區(qū)域采樣屬于前濾波技術(shù),把一個(gè)柵格網(wǎng)疊放在需要柵格化的物體上,對(duì)于每一個(gè)與該物體疊交的像素區(qū)域,計(jì)算該區(qū)域與物體疊交的百分比。該百分比決定了該像素的總體顏色中有多少成分來(lái)源于該物體,該像素區(qū)域與物體疊交的百分比越高,該物體對(duì)像素總體顏色的影響就越大。圖3.7.4a中用寬度為1個(gè)像素的長(zhǎng)方形區(qū)域來(lái)代表一條直線,該長(zhǎng)方形區(qū)域與每個(gè)疊交的像素的面積百分比通過(guò)解析方式算出。如果背景為黑色,直線為白色,計(jì)算所得的百分比可直接用來(lái)設(shè)定各像素的顏色(圖3.7.4b)。第四十五頁(yè),共一百四十六頁(yè),編輯于2023年,星期六雖然圖3.7.4b所示經(jīng)過(guò)區(qū)域采樣得到的直線的離散逼近看起來(lái)有些“模糊”,但它不再有從物體顏色到背景顏色之間的突然過(guò)渡。而這種突然過(guò)渡是使用普通掃描轉(zhuǎn)換的結(jié)果(圖3.7.4c)。在減少圖像失真與造成圖像模糊兩者之間力求折中是以濾波為基礎(chǔ)的反走樣技術(shù)的特征。第四十六頁(yè),共一百四十六頁(yè),編輯于2023年,星期六直線段的過(guò)采樣直線段的過(guò)采樣可以用多種方式來(lái)完成。對(duì)于直線段,可以把每個(gè)像素分成一定數(shù)目的子像素,并統(tǒng)計(jì)沿直線路徑的子像素?cái)?shù)目,再將每個(gè)像素的亮度設(shè)置為正比于子像素?cái)?shù)目的值。圖3.7.5中,每個(gè)正方形像素區(qū)域被分成9個(gè)大小相等的正方形子像素,陰影區(qū)域表示由Bresenham算法選擇的子像素。由于任何像素中可供選擇的子像素的最大數(shù)目為3,因次該方法能提供0以上的3種亮度等級(jí)。該例中位置(10,20)像素的亮度設(shè)置為3;位置(11,21)和(12,21)像素的亮度設(shè)置為2;位置(11,20)和(12,22)像素的亮度設(shè)置為1。因此,該直線分布在較多數(shù)目的像素上,并且通過(guò)在階梯狀附近顯示有些模糊的直線路徑,從而平滑階梯狀效果。如果要使用更多的亮度等級(jí)來(lái)實(shí)現(xiàn)直線段的反走樣,就需要增加每個(gè)像素中的子像素采樣數(shù)目,如16個(gè)子像素能給出0以上的4個(gè)亮度等級(jí),25個(gè)子像素能給出5個(gè)等級(jí)。對(duì)于寬度超過(guò)1個(gè)像素的直線段的反走樣,也可以采用該方法處理,如圖3.7.6。第四十七頁(yè),共一百四十六頁(yè),編輯于2023年,星期六由于首先獲得離散的采樣值,然后再由這些采樣值計(jì)算像素值,因此過(guò)采樣是一種后濾波技術(shù)。但由于這只不過(guò)是用每個(gè)像素范圍內(nèi)有限的采樣值來(lái)求準(zhǔn)確的解析解的近似值,過(guò)采樣技術(shù)也可認(rèn)為是區(qū)域采樣法的一種近似實(shí)現(xiàn)。第四十八頁(yè),共一百四十六頁(yè),編輯于2023年,星期六低通濾波低通濾波是一種給每個(gè)像素計(jì)算出一個(gè)新值的后濾波技術(shù)。這個(gè)新值是該像素的原始值及其相鄰若干像素的加權(quán)平均。計(jì)算所需的權(quán)值存放在一個(gè)(2n+1)×(2n+1)形式定義的模板中,模板里所有權(quán)值的總和為1,圖3.7.7a為一個(gè)3×3的濾波器。為某一像素計(jì)算新值就是將濾波器以該像素為中心與像素柵格對(duì)齊。模板中每個(gè)權(quán)系數(shù)與其對(duì)應(yīng)的像素值的乘積之和就是該像素的加權(quán)平均值。用這個(gè)濾波器處理圖3.7.4c的像素值的結(jié)果如圖3.7.7b。第四十九頁(yè),共一百四十六頁(yè),編輯于2023年,星期六圖形變換計(jì)算機(jī)繪圖是產(chǎn)生三維場(chǎng)景的二維圖像(屏幕上只能繪出二維圖像),計(jì)算機(jī)對(duì)物體繪圖的過(guò)程類似于用一部相機(jī)拍攝照片,如圖4.1.第五十頁(yè),共一百四十六頁(yè),編輯于2023年,星期六第五十一頁(yè),共一百四十六頁(yè),編輯于2023年,星期六繪圖與拍照過(guò)程對(duì)比用照相機(jī)拍照的步驟大致如下:(1)把照相機(jī)固定在三腳架上,并讓它對(duì)準(zhǔn)場(chǎng)景(視圖變換)。(2)對(duì)場(chǎng)景進(jìn)行安排,使各個(gè)物體在照片中的位置是我們所希望的(模型變換)。(3)選擇照相機(jī)的鏡頭,并調(diào)整放大倍數(shù)(投影變換)。(4)確定最終照片的大小(視口變換)。與此類似,把一個(gè)物體的三維坐標(biāo)變換到屏幕上的像素坐標(biāo),共需要三個(gè)步驟:(1)坐標(biāo)變換,包括模型、視圖和投影變換,變換過(guò)程用矩陣乘法表示,包括平移、旋轉(zhuǎn)、縮放、投影等。(2)由于場(chǎng)景是在一個(gè)矩形窗口(相當(dāng)于取景框)中繪制的,因此位于窗口之外的物體(或物體的一部分)必須被裁減掉。(3)最后,經(jīng)過(guò)變換的坐標(biāo)和屏幕像素之間必須建立對(duì)應(yīng)關(guān)系,這個(gè)過(guò)程稱為視口變換。人們對(duì)上述過(guò)程總結(jié)出了一套規(guī)范的標(biāo)準(zhǔn)流程,首要任務(wù)是將場(chǎng)景中的各個(gè)對(duì)象進(jìn)行建模,然后按規(guī)范流程對(duì)物體的頂點(diǎn)坐標(biāo)分階段地進(jìn)行統(tǒng)一處理,最終獲得二維屏幕圖像。第五十二頁(yè),共一百四十六頁(yè),編輯于2023年,星期六幾何變換計(jì)算機(jī)圖形系統(tǒng)的基本功能之一就是模擬在三維空間中對(duì)物體進(jìn)行操縱,這種模擬的空間操縱稱為變換。在構(gòu)建三維物體和場(chǎng)景的過(guò)程中,通過(guò)將簡(jiǎn)單圖元進(jìn)行平移、旋轉(zhuǎn)、縮放等操作來(lái)構(gòu)建復(fù)雜對(duì)象和場(chǎng)景??梢詮膬煞N互補(bǔ)的觀點(diǎn)來(lái)描述物體的變換。第一種是物體相對(duì)于一個(gè)固定的坐標(biāo)系進(jìn)行變換,即對(duì)物體的每一個(gè)點(diǎn)(頂點(diǎn))進(jìn)行變換,改變它的位置、方向或大小,稱為幾何變換。第二種觀點(diǎn)將物體看做固定不動(dòng),而坐標(biāo)系則相對(duì)于物體做變換,稱為坐標(biāo)變換。如要顯示一輛在一片風(fēng)景前駛過(guò)的汽車,我們既可以保持背景不動(dòng)而讓汽車移動(dòng)(幾何變換),也可以保持汽車不動(dòng)而讓背景移動(dòng)(坐標(biāo)變換)。幾何變換有時(shí)也稱為建模變換。第五十三頁(yè),共一百四十六頁(yè),編輯于2023年,星期六基本二維幾何變換平移、旋轉(zhuǎn)和縮放是所有圖形軟件包中都具有的基本幾何變換。平移:通過(guò)將位移量加到一個(gè)點(diǎn)的坐標(biāo)上生成一個(gè)新的坐標(biāo)位置,可以實(shí)現(xiàn)一次平移。對(duì)于一個(gè)由多個(gè)頂點(diǎn)定義的對(duì)象,可以通過(guò)對(duì)所有頂點(diǎn)使用相同的位移量來(lái)實(shí)現(xiàn)平移。設(shè)原始坐標(biāo)為(x,y),平移向量為(tx,ty),新坐標(biāo)為(x,y),則:若用列向量來(lái)表示坐標(biāo)位置和平移向量(以前有些文獻(xiàn)用行向量表示,目前的規(guī)范大多用列向量表示),則:用矩陣形式表示二維平移方程為:第五十四頁(yè),共一百四十六頁(yè),編輯于2023年,星期六平移平移是一種移動(dòng)對(duì)象而不改變其形狀的剛體變換。對(duì)象上的每一點(diǎn)移動(dòng)了相同的距離。一條直線段的平移通過(guò)對(duì)其兩端點(diǎn)分別平移而實(shí)現(xiàn),多邊形的平移也以類似的方法實(shí)現(xiàn)。第五十五頁(yè),共一百四十六頁(yè),編輯于2023年,星期六二維旋轉(zhuǎn)通過(guò)指定一個(gè)旋轉(zhuǎn)軸和一個(gè)旋轉(zhuǎn)角度,可以進(jìn)行一次旋轉(zhuǎn)變換,將對(duì)象的所有頂點(diǎn)按指定角度繞指定旋轉(zhuǎn)軸旋轉(zhuǎn)后,該對(duì)象的所有點(diǎn)都旋轉(zhuǎn)到新位置。可以將對(duì)象繞與xy平面垂直的旋轉(zhuǎn)軸(與z軸平行)旋轉(zhuǎn)。二維旋轉(zhuǎn)的參數(shù)包括旋轉(zhuǎn)角、旋轉(zhuǎn)基準(zhǔn)點(diǎn)(xr,yr),如圖?;鶞?zhǔn)點(diǎn)是旋轉(zhuǎn)軸與xy平面的交點(diǎn),正角度表示將對(duì)象繞基準(zhǔn)點(diǎn)作逆時(shí)針旋轉(zhuǎn),負(fù)角度表示將對(duì)象繞基準(zhǔn)點(diǎn)作順時(shí)針旋轉(zhuǎn)。第五十六頁(yè),共一百四十六頁(yè),編輯于2023年,星期六繞原點(diǎn)的二維旋轉(zhuǎn)為了簡(jiǎn)化,先考慮當(dāng)基準(zhǔn)點(diǎn)為坐標(biāo)原點(diǎn)時(shí)點(diǎn)P進(jìn)行旋轉(zhuǎn)的變換方程。如下圖,r是點(diǎn)P到原點(diǎn)的固定距離,角是點(diǎn)的原始位置向量與水平軸的夾角,是旋轉(zhuǎn)角,利用三角等式,可得旋轉(zhuǎn)后的點(diǎn)坐標(biāo)為:點(diǎn)的原始坐標(biāo)為:第五十七頁(yè),共一百四十六頁(yè),編輯于2023年,星期六二維旋轉(zhuǎn)的矩陣形式代入上式得:用列向量表示坐標(biāo)位置,則旋轉(zhuǎn)方程的矩陣形式為:其中,旋轉(zhuǎn)矩陣為旋轉(zhuǎn)變換的矩陣形式中,用列向量來(lái)表示坐標(biāo)是目前標(biāo)準(zhǔn)的數(shù)學(xué)形式,早期的文獻(xiàn)及圖形系統(tǒng)有些用行向量表示坐標(biāo)位置,這會(huì)改變執(zhí)行旋轉(zhuǎn)時(shí)矩陣相乘的順序,現(xiàn)在OpenGL、Java、PHIGS、GKS等都按標(biāo)準(zhǔn)列向量方式表示。第五十八頁(yè),共一百四十六頁(yè),編輯于2023年,星期六繞任意點(diǎn)的二維旋轉(zhuǎn)上圖給出了繞任意基準(zhǔn)點(diǎn)旋轉(zhuǎn)的例子,利用圖中的三角關(guān)系,可得繞任意基準(zhǔn)點(diǎn)旋轉(zhuǎn)的變換方程:這個(gè)通用的旋轉(zhuǎn)方程包含了一個(gè)加項(xiàng),后面章節(jié)中將討論更一致的方法。旋轉(zhuǎn)也是一種不變形地移動(dòng)對(duì)象的剛體變換,物體上的所有點(diǎn)旋轉(zhuǎn)相同的角度,線段、多邊形的旋轉(zhuǎn)可通過(guò)將每個(gè)頂點(diǎn)旋轉(zhuǎn)指定的角度來(lái)實(shí)現(xiàn)。第五十九頁(yè),共一百四十六頁(yè),編輯于2023年,星期六二維縮放改變一個(gè)對(duì)象的大小,可使用縮放變換,一個(gè)簡(jiǎn)單的二維縮放可通過(guò)將縮放系數(shù)sx
、sy與對(duì)象坐標(biāo)相乘來(lái)實(shí)現(xiàn)(相對(duì)于坐標(biāo)原點(diǎn)的縮放)。寫成矩陣形式為:或其中S為縮放矩陣,縮放系數(shù)sx在x方向縮放對(duì)象,sy在y方向縮放對(duì)象,值小于1將縮小對(duì)象的尺寸,值大于1則放大對(duì)象,若sx和sy不等將產(chǎn)生差值縮放,有些系統(tǒng)中,縮放系數(shù)可為負(fù)值,這不僅改變對(duì)象的尺寸,還產(chǎn)生相對(duì)于坐標(biāo)軸的反射。第六十頁(yè),共一百四十六頁(yè),編輯于2023年,星期六相對(duì)于固定點(diǎn)的縮放可以選擇一個(gè)在縮放變換后不改變位置的點(diǎn),稱為固定點(diǎn)(縮放的基準(zhǔn)點(diǎn)),以控制縮放后對(duì)象的位置。固定點(diǎn)的坐標(biāo)(xf,yf)可以選擇為對(duì)象的中心,也可以選擇為任意其他位置。多邊形通過(guò)縮放每個(gè)頂點(diǎn)到固定點(diǎn)的距離而進(jìn)行縮放。如下圖,頂點(diǎn)(x,y)經(jīng)過(guò)縮放后的坐標(biāo)(x,y)為:第六十一頁(yè),共一百四十六頁(yè),編輯于2023年,星期六相對(duì)于固定點(diǎn)的縮放將乘法項(xiàng)與加法項(xiàng)重新組合后為:其中加法項(xiàng)xf(1-sx)和yf(1-sy)對(duì)于對(duì)象中的任何點(diǎn)都是常數(shù)。在縮放公式中包含固定點(diǎn)的坐標(biāo),類似于在旋轉(zhuǎn)公式中包含基準(zhǔn)點(diǎn)的坐標(biāo)。多邊形的縮放可以通過(guò)將變換方程應(yīng)用于每個(gè)頂點(diǎn),然后利用變換后的頂點(diǎn)重新生成多邊形而實(shí)現(xiàn)。第六十二頁(yè),共一百四十六頁(yè),編輯于2023年,星期六復(fù)合變換與齊次坐標(biāo)在實(shí)際繪圖時(shí),常常需要對(duì)物體連續(xù)進(jìn)行多次變換,例如先平移,再旋轉(zhuǎn),然后再放大,這就需要對(duì)該物體的點(diǎn)集按變換順序依次進(jìn)行,計(jì)算量較大。如果只對(duì)物體進(jìn)行旋轉(zhuǎn)和縮放兩類變換,則可以先將這兩種變換合成為一個(gè)復(fù)合變換,將兩次運(yùn)算簡(jiǎn)化為一次性的復(fù)合矩陣與坐標(biāo)向量的乘法。對(duì)圖形做上述一系列變換時(shí),只要用點(diǎn)集與這個(gè)復(fù)合矩陣相乘即可。但如果在變換中有平移變換,矩陣就不容易合并了,因?yàn)槠揭谱儞Q與旋轉(zhuǎn)、縮放變換的表示形式不一樣;平移變換為矩陣的加法,而旋轉(zhuǎn)和縮放變換為矩陣的乘法。為了使各種變換的表示形式一致,使變換的合成更容易,人們引入了齊次坐標(biāo)的概念。第六十三頁(yè),共一百四十六頁(yè),編輯于2023年,星期六齊次坐標(biāo)如果將22的矩陣表達(dá)式擴(kuò)充為33的矩陣,就可以把平移也表示為乘法形式,此時(shí)變換矩陣的第三列用于平移項(xiàng),因而所有的變換公式都可以表示為矩陣乘法的形式。為了實(shí)現(xiàn)這種操作,必須解釋從二維坐標(biāo)到三元列向量的矩陣表示。標(biāo)準(zhǔn)的實(shí)現(xiàn)技術(shù)是將二維坐標(biāo)(x,y)擴(kuò)充到三維表示(xw,yw,w),稱為齊次坐標(biāo),其中齊次參數(shù)w是一個(gè)非零值,定義
,這樣,普通的二維齊次坐標(biāo)可表示為(xw,yw,w)。對(duì)于二維幾何變換,可以把齊次參數(shù)w取為任何非零值,因而坐標(biāo)點(diǎn)(x,y)可以有無(wú)數(shù)個(gè)等價(jià)的齊次表達(dá)式,最方便的選擇是簡(jiǎn)單地設(shè)置w=1,因此每個(gè)二維位置都可用齊次坐標(biāo)(x,y,1)來(lái)表示。利用齊次坐標(biāo),可以使我們能用統(tǒng)一的矩陣相乘的形式來(lái)表示所有的幾何變換公式,這是圖形系統(tǒng)中使用的標(biāo)準(zhǔn)方法。二維坐標(biāo)位置用三元列向量表示,而二維變換用一個(gè)33的矩陣表示。第六十四頁(yè),共一百四十六頁(yè),編輯于2023年,星期六二維平移矩陣的齊次坐標(biāo)表示使用齊次坐標(biāo),二維平移可表示為下面的乘法。該式可簡(jiǎn)寫為:其中T(tx,ty)是上式中的33矩陣,可以簡(jiǎn)單地用T來(lái)表示平移矩陣。齊次坐標(biāo)的詭秘性在于把2階(或3階)的列矩陣相加變成了3階(或4階)的矩陣與矩陣相乘的運(yùn)算。第六十五頁(yè),共一百四十六頁(yè),編輯于2023年,星期六二維旋轉(zhuǎn)矩陣的齊次坐標(biāo)表示使用齊次坐標(biāo),繞坐標(biāo)原點(diǎn)的二維旋轉(zhuǎn)可表示為下面的矩陣乘法。該式可簡(jiǎn)寫為:其中R()為上式中的33矩陣,可以簡(jiǎn)單地用R來(lái)表示旋轉(zhuǎn)矩陣。有些圖形軟件包只支持繞坐標(biāo)原點(diǎn)的旋轉(zhuǎn),繞任意基準(zhǔn)點(diǎn)的旋轉(zhuǎn)需要一系列的變換操作來(lái)完成。第六十六頁(yè),共一百四十六頁(yè),編輯于2023年,星期六二維縮放矩陣的齊次坐標(biāo)表示使用齊次坐標(biāo),相對(duì)于原點(diǎn)的二維縮放可表示為如下的矩陣乘法。該式可簡(jiǎn)寫為:其中S(sx,sy)為上式中的33矩陣,可以簡(jiǎn)單地用S來(lái)表示縮放矩陣。有些圖形軟件包僅支持相對(duì)于坐標(biāo)原點(diǎn)的縮放,相對(duì)于另一固定點(diǎn)的縮放需要用一系列的變換操作來(lái)完成。此外還有其他一些變換,如反射、錯(cuò)切等。第六十七頁(yè),共一百四十六頁(yè),編輯于2023年,星期六逆變換對(duì)于平移變換,通過(guò)對(duì)平移距離取負(fù)值而得到逆矩陣,二維平移距離為tx和ty的逆平移矩陣為:這產(chǎn)生相反方向的平移,而平移矩陣與其逆矩陣的乘積是一個(gè)單位矩陣。逆旋轉(zhuǎn)通過(guò)用負(fù)的旋轉(zhuǎn)角度來(lái)實(shí)現(xiàn),繞坐標(biāo)原點(diǎn)旋轉(zhuǎn)角為的二維逆旋轉(zhuǎn)矩陣為:第六十八頁(yè),共一百四十六頁(yè),編輯于2023年,星期六逆變換旋轉(zhuǎn)角的負(fù)值生成順時(shí)針?lè)较虻男D(zhuǎn),因而旋轉(zhuǎn)矩陣與其逆旋轉(zhuǎn)矩陣的乘積為單位矩陣。將縮放矩陣用縮放系數(shù)的倒數(shù)取代就得到縮放變換的逆矩陣。以坐標(biāo)原點(diǎn)為中心、縮放參數(shù)為sx、sy的二維逆縮放矩陣為:該矩陣生成相反的縮放變換,因而縮放矩陣與其逆縮放矩陣的乘積為單位矩陣。第六十九頁(yè),共一百四十六頁(yè),編輯于2023年,星期六復(fù)合變換矩陣實(shí)際應(yīng)用中對(duì)物體作幾何變換時(shí)往往是多種簡(jiǎn)單變換的組合,可以將一系列連續(xù)的變換矩陣合成為一個(gè)復(fù)合變換矩陣,稱為矩陣的合并或復(fù)合。由于引入了齊次坐標(biāo),基本的幾何變換均可以表示為P=TP的形式,一個(gè)頂點(diǎn)坐標(biāo)用列矩陣表示,復(fù)合變換時(shí)必須按操作的次序?qū)⒚恳徊降淖儞Q矩陣左乘該列矩陣。因此復(fù)合變換的結(jié)合是每次的變換矩陣相乘,即將多個(gè)基本變換進(jìn)行串乘:
P=Tn
(T3
(T2
(T1
P)))由于矩陣的乘法滿足結(jié)合律,因此
P=(Tn
T3
T2
T1)P=TP最后的結(jié)果也具有P=TP的形式,這里,T=Tn
T3
T2
T1由于場(chǎng)景中許多頂點(diǎn)用相同的順序進(jìn)行變換,通常在計(jì)算時(shí)先求出復(fù)合矩陣T,再用T與頂點(diǎn)列矩陣相乘,這與逐步用矩陣相乘相比能有效提高計(jì)算效率。第七十頁(yè),共一百四十六頁(yè),編輯于2023年,星期六矩陣的串乘復(fù)合變換就是將多個(gè)基本變換進(jìn)行串乘,這種方法非常適合于流水線結(jié)構(gòu)的圖形系統(tǒng)。假設(shè)對(duì)某點(diǎn)P執(zhí)行一系列的變換操作后得到新點(diǎn)Q,這一變換序列表示為如下形式:
Q=CBAP式中并沒(méi)有括號(hào),但變換的執(zhí)行次序會(huì)直接影響計(jì)算效率。一種方式是先執(zhí)行變換A,再執(zhí)行B ,最后執(zhí)行C。該執(zhí)行順序與下圖的組合次序相同,是按步驟對(duì)多個(gè)點(diǎn)進(jìn)行變換,每一步都是對(duì)已經(jīng)變換過(guò)的點(diǎn)再進(jìn)行新的變換。
Q=(C(B(AP)))第七十一頁(yè),共一百四十六頁(yè),編輯于2023年,星期六圖形系統(tǒng)的流水線結(jié)構(gòu)如果只對(duì)原始的點(diǎn)進(jìn)行一次總的變換,這個(gè)執(zhí)行次序是最有效的,因?yàn)槊看巫儞Q只是用一個(gè)總的變換矩陣與點(diǎn)的列矩陣相乘。如果需要對(duì)多個(gè)點(diǎn)進(jìn)行變換,就把運(yùn)算過(guò)程分成兩個(gè)步驟。第一步,先計(jì)算:
M=CBA第二步,把這個(gè)矩陣應(yīng)用到每一點(diǎn)上:
Q=MP這種運(yùn)算次序?qū)?yīng)于右圖的流水線結(jié)構(gòu):在這種流水線結(jié)構(gòu)中,先計(jì)算矩陣M,然后把M裝載到流水線結(jié)構(gòu)的變換處理單元里,再應(yīng)用到成千上萬(wàn)個(gè)頂點(diǎn)上,由于只用單個(gè)矩陣對(duì)每個(gè)點(diǎn)進(jìn)行運(yùn)算,因而比一步步用單個(gè)矩陣進(jìn)行多次變換的計(jì)算量要小得多。第七十二頁(yè),共一百四十六頁(yè),編輯于2023年,星期六二維復(fù)合變換二維復(fù)合平移:將兩個(gè)連續(xù)的平移向量(t1x,t1y)和(t2x,t2y)作用于點(diǎn)P,平移后的點(diǎn)P可按下式計(jì)算: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)這表示兩個(gè)連續(xù)平移是相加的。第七十三頁(yè),共一百四十六頁(yè),編輯于2023年,星期六二維復(fù)合旋轉(zhuǎn)將兩個(gè)連續(xù)的旋轉(zhuǎn)變換作用于點(diǎn)P,旋轉(zhuǎn)后的點(diǎn)P可按下式計(jì)算:
P=R(2){R(1)P}={R(2)R(1)}P可以證明,兩個(gè)連續(xù)旋轉(zhuǎn)也是相加的:
R(2)R(1)=R(1+2)點(diǎn)旋轉(zhuǎn)后的坐標(biāo)可以使用復(fù)合矩陣表示為:
P=R(1+2)P第七十四頁(yè),共一百四十六頁(yè),編輯于2023年,星期六二維復(fù)合縮放合并兩個(gè)連續(xù)的二維縮放矩陣,生成的復(fù)合縮放矩陣為:或
S(s2x,s2y)S(s1x,s1y)=S(s1xs2x,s1y
s2y)這表明連續(xù)縮放操作是相乘的。第七十五頁(yè),共一百四十六頁(yè),編輯于2023年,星期六通用二維基準(zhǔn)點(diǎn)旋轉(zhuǎn)當(dāng)圖形軟件包僅提供繞坐標(biāo)系原點(diǎn)的旋轉(zhuǎn)函數(shù)時(shí),可通過(guò)下列平移-旋轉(zhuǎn)-平移操作來(lái)實(shí)現(xiàn)繞任意基準(zhǔn)點(diǎn)(xr,yr)的旋轉(zhuǎn)。1、平移對(duì)象使基準(zhǔn)點(diǎn)位置移動(dòng)到坐標(biāo)原點(diǎn);2、繞坐標(biāo)原點(diǎn)旋轉(zhuǎn);3、平移對(duì)象使基準(zhǔn)點(diǎn)回到其坐標(biāo)位置。這個(gè)變換次序如下圖所示。第七十六頁(yè),共一百四十六頁(yè),編輯于2023年,星期六通用二維基準(zhǔn)點(diǎn)旋轉(zhuǎn)利用矩陣合并可得該變換序列的復(fù)合變換矩陣:用矩陣表達(dá)的結(jié)果與以前推導(dǎo)的一般式完全相同,但表達(dá)更明確。該式還可以用下列形式表示:T(xr,yr
)R()T(-xr,-yr
)=R(xr,yr,
)第七十七頁(yè),共一百四十六頁(yè),編輯于2023年,星期六回顧:繞任意點(diǎn)的二維旋轉(zhuǎn)上圖給出了繞任意基準(zhǔn)點(diǎn)旋轉(zhuǎn)的例子,利用圖中的三角關(guān)系,可得繞任意基準(zhǔn)點(diǎn)旋轉(zhuǎn)的變換方程:第七十八頁(yè),共一百四十六頁(yè),編輯于2023年,星期六通用二維基準(zhǔn)點(diǎn)縮放當(dāng)圖形軟件包只有相對(duì)于坐標(biāo)原點(diǎn)的縮放函數(shù)時(shí),可通過(guò)下列平移-縮放-平移操作來(lái)實(shí)現(xiàn)相對(duì)于任意基準(zhǔn)點(diǎn)(xf,yf)的縮放。1、平移對(duì)象使固定點(diǎn)與坐標(biāo)原點(diǎn)重合;2、相對(duì)于坐標(biāo)原點(diǎn)進(jìn)行縮放;3、平移對(duì)象使固定點(diǎn)返回到原始位置。這個(gè)變換次序如下圖所示。第七十九頁(yè),共一百四十六頁(yè),編輯于2023年,星期六通用二維基準(zhǔn)點(diǎn)縮放利用矩陣合并可得該序列的復(fù)合變換矩陣:用矩陣表達(dá)的結(jié)果也與以前推導(dǎo)的一般式完全相同,但表達(dá)更明確。該式還可以用下列形式表示:T(xf,yf
)S(sx,sy
)T(-xf,-yf
)=S(xf,yf,,sx,sy
)第八十頁(yè),共一百四十六頁(yè),編輯于2023年,星期六回顧:相對(duì)于固定點(diǎn)的縮放可以選擇一個(gè)在縮放變換后不改變位置的點(diǎn),稱為固定點(diǎn)(縮放的基準(zhǔn)點(diǎn)),以控制縮放后對(duì)象的位置。固定點(diǎn)的坐標(biāo)(xf,yf)可以選擇為對(duì)象的中心,也可以選擇為任意其他位置。多邊形通過(guò)縮放每個(gè)頂點(diǎn)到固定點(diǎn)的距離而進(jìn)行縮放。如下圖,頂點(diǎn)(x,y)經(jīng)過(guò)縮放后的坐標(biāo)(x,y)為:第八十一頁(yè),共一百四十六頁(yè),編輯于2023年,星期六二維坐標(biāo)系間的變換計(jì)算機(jī)圖形經(jīng)常需要在場(chǎng)景處理的各階段將對(duì)象的描述從一個(gè)坐標(biāo)系變換到另一個(gè)坐標(biāo)系,如在建模過(guò)程中,每個(gè)對(duì)象在各自的局部坐標(biāo)系中設(shè)計(jì),這些局部坐標(biāo)描述必須變換到一個(gè)統(tǒng)一的世界坐標(biāo)系的相應(yīng)位置和方向。下圖給出了一個(gè)在xy坐標(biāo)系中,原點(diǎn)在(x0,y0)、方向角為的xy坐標(biāo)系。為了將對(duì)象描述從xy坐標(biāo)系變換到xy坐標(biāo)系,必須建立把xy軸疊加到xy軸的變換,這需要分兩步進(jìn)行:第八十二頁(yè),共一百四十六頁(yè),編輯于2023年,星期六二維坐標(biāo)系間的變換(1)將xy坐標(biāo)系的原點(diǎn)(x0,y0)平移到xy坐標(biāo)系的原點(diǎn)(0,0);(2)將x軸旋轉(zhuǎn)到x軸上。坐標(biāo)原點(diǎn)的平移可以用以下的矩陣表示:平移操作后兩個(gè)坐標(biāo)系的方位如圖所示。第八十三頁(yè),共一百四十六頁(yè),編輯于2023年,星期六二維坐標(biāo)系間的變換為了將兩個(gè)系統(tǒng)的軸重合,可以順時(shí)針旋轉(zhuǎn):將這兩個(gè)變換矩陣合并起來(lái),就給出了將對(duì)象描述從xy坐標(biāo)系變換到xy坐標(biāo)系的復(fù)合變換矩陣:第八十四頁(yè),共一百四十六頁(yè),編輯于2023年,星期六三維空間的幾何變換三維幾何變換是在二維變換的基礎(chǔ)上增加了Z坐標(biāo)而得到的,可以通過(guò)指定一個(gè)在三個(gè)坐標(biāo)方向移動(dòng)距離的三維向量來(lái)對(duì)物體進(jìn)行平移變換。也可以利用三個(gè)坐標(biāo)方向的縮放因子來(lái)縮放對(duì)象。三維空間的旋轉(zhuǎn)比二維坐標(biāo)系中的旋轉(zhuǎn)要復(fù)雜,在xy平面上對(duì)物體進(jìn)行二維旋轉(zhuǎn)時(shí),只需考慮沿垂直于xy平面的坐標(biāo)軸進(jìn)行旋轉(zhuǎn);但在三維空間中,可以選擇任意方向的旋轉(zhuǎn)軸。大多數(shù)圖形軟件將三維旋轉(zhuǎn)分解為繞三個(gè)坐標(biāo)軸的二維旋轉(zhuǎn)的復(fù)合,另一方案是根據(jù)旋轉(zhuǎn)軸的方向和旋轉(zhuǎn)角度建立一個(gè)總的旋轉(zhuǎn)矩陣。一個(gè)三維點(diǎn)在齊次坐標(biāo)中表示為四元列向量,每一個(gè)幾何變換都是一個(gè)44矩陣,多個(gè)變換序列可以依次合并,每一后續(xù)變換矩陣都從左邊與現(xiàn)有矩陣相乘,最終得到一個(gè)總的變換矩陣。第八十五頁(yè),共一百四十六頁(yè),編輯于2023年,星期六三維平移在三維齊次坐標(biāo)系中,通過(guò)將平移向量(tx,ty,tz)加到P點(diǎn)的坐標(biāo),將點(diǎn)P(x,y,z)平移到新位置P=(x,y,z):
x=x+tx,y=y+ty,z=z+tz,用矩陣表示為:或第八十六頁(yè),共一百四十六頁(yè),編輯于2023年,星期六三維平移在三維空間中,對(duì)象的平移通過(guò)平移該對(duì)象的各個(gè)頂點(diǎn)來(lái)實(shí)現(xiàn),如下圖。第八十七頁(yè),共一百四十六頁(yè),編輯于2023年,星期六三維旋轉(zhuǎn)可以圍繞空間的任意軸旋轉(zhuǎn)一個(gè)對(duì)象,但繞與坐標(biāo)軸平行的軸的旋轉(zhuǎn)是最容易處理的。可以利用繞坐標(biāo)軸的旋轉(zhuǎn)(結(jié)合適當(dāng)?shù)钠揭?的復(fù)合變換來(lái)表示繞任意軸的旋轉(zhuǎn)。通常,如果沿著坐標(biāo)軸的正半軸觀察原點(diǎn),那么繞坐標(biāo)軸的逆時(shí)針旋轉(zhuǎn)為正向旋轉(zhuǎn),如下圖。在二維觀察中,xy平面上的正向旋轉(zhuǎn)是繞基準(zhǔn)點(diǎn)(平行于z坐標(biāo)軸的軸)進(jìn)行逆時(shí)針旋轉(zhuǎn)。第八十八頁(yè),共一百四十六頁(yè),編輯于2023年,星期六繞z軸的三維旋轉(zhuǎn)繞z軸的旋轉(zhuǎn)可以很容易推廣到三維:參數(shù)表示繞z軸旋轉(zhuǎn)的角度,上式用齊次坐標(biāo)表示為:更簡(jiǎn)潔的形式為:下圖為一個(gè)對(duì)象繞z軸旋轉(zhuǎn)的示意圖。第八十九頁(yè),共一百四十六頁(yè),編輯于2023年,星期六繞y軸的三維旋轉(zhuǎn)同理,繞y軸的三維旋轉(zhuǎn)矩陣為:第九十頁(yè),共一百四十六頁(yè),編輯于2023年,星期六繞x軸的三維旋轉(zhuǎn)繞x軸的三維旋轉(zhuǎn)矩陣為:第九十一頁(yè),共一百四十六頁(yè),編輯于2023年,星期六一般的三維旋轉(zhuǎn)一般的三維旋轉(zhuǎn):對(duì)于繞與坐標(biāo)軸不重合的軸進(jìn)行旋轉(zhuǎn)的變換矩陣,可以利用平移與坐標(biāo)軸旋轉(zhuǎn)的復(fù)合而得到。如將對(duì)象繞平行于某坐標(biāo)軸的軸旋轉(zhuǎn),可以通過(guò)下列變換序列來(lái)得到所需的旋轉(zhuǎn)矩陣。1、平移對(duì)象使其旋轉(zhuǎn)軸與平行的坐標(biāo)軸重合;2、繞該坐標(biāo)軸進(jìn)行旋轉(zhuǎn);3、平移對(duì)象將其旋轉(zhuǎn)軸移回到原來(lái)位置。該序列如下圖,其復(fù)合矩陣為:
R(
)
=T-1
Rx()T第九十二頁(yè),共一百四十六頁(yè),編輯于2023年,星期六三維縮放在二維縮放矩陣中引入z坐標(biāo)方向的縮放系數(shù),很容易擴(kuò)充到三維縮放變換,用齊次坐標(biāo)表示為:某些圖形軟件僅提供相對(duì)于坐標(biāo)原點(diǎn)的縮放函數(shù),可以應(yīng)用下列變換序列進(jìn)行相對(duì)于任意給定點(diǎn)(xf,yf,zf)的縮放變換。1、平移給定點(diǎn)到原點(diǎn);2、進(jìn)行相對(duì)于坐標(biāo)原點(diǎn)的縮放變換;3、將給定點(diǎn)移回原來(lái)位置。第九十三頁(yè),共一百四十六頁(yè),編輯于2023年,星期六三維復(fù)合變換類似于二維復(fù)合變換,可以將變換序列中各次變換的矩陣相乘合成三維復(fù)合變換。根據(jù)給定的變換次序,逐次左乘變換矩陣,最右邊的矩陣是最先作用于對(duì)象的變換,最左邊的矩陣是最后執(zhí)行的變換。第九十四頁(yè),共一百四十六頁(yè),編輯于2023年,星期六三維坐標(biāo)系間的變換前面討論了將二維場(chǎng)景從一個(gè)參考坐標(biāo)系到另一個(gè)坐標(biāo)系的變換。坐標(biāo)系之間的變換在計(jì)算機(jī)圖形軟件包中常用于場(chǎng)景的構(gòu)造(建模)、二維及三維觀察變換。對(duì)于笛卡爾坐標(biāo)系,給定xyz系統(tǒng)在xyz系統(tǒng)中的位置,要將xyz坐標(biāo)描述轉(zhuǎn)換到xyz坐標(biāo)系,先將xyz坐標(biāo)系的原點(diǎn)平移到xyz坐標(biāo)系的原點(diǎn),然后進(jìn)行一系列的旋轉(zhuǎn)使對(duì)應(yīng)的坐標(biāo)軸重合,如果兩個(gè)坐標(biāo)系使用不同的比例,則必須進(jìn)行一次縮放變換以補(bǔ)償兩坐標(biāo)系之間的差別。第九十五頁(yè),共一百四十六頁(yè),編輯于2023年,星期六顯示變換本節(jié)介紹在輸出設(shè)備上顯示二維圖形的過(guò)程和技術(shù)。圖形在計(jì)算機(jī)中是以數(shù)據(jù)的形式進(jìn)行處理的,而坐標(biāo)則建立了圖形和數(shù)據(jù)之間的聯(lián)系。三維空間中的物體要在二維的屏幕上顯示出來(lái),必須通過(guò)投影的方式把三維物體轉(zhuǎn)換成二維的平面圖形。往往在圖形顯示時(shí)只需要顯示圖形的某一部分,這時(shí)可以在投影面上定義一個(gè)窗口。只有在窗口內(nèi)的圖形才顯示,而窗口外的部分則不顯示。在屏幕上也可以定義一個(gè)矩形,稱為視口。經(jīng)過(guò)窗口到視口的變換,窗口內(nèi)的圖形才能變換到視口中顯示。第九十六頁(yè),共一百四十六頁(yè),編輯于2023年,星期六二維觀察任何一個(gè)笛卡爾坐標(biāo)系都可以作為世界坐標(biāo)系,世界坐標(biāo)系可用來(lái)定義圖形(建模)。在二維情況下,可將xy平面上包含全圖或局部圖的區(qū)域作為要顯示的窗口,所選區(qū)域中的圖形映射到設(shè)備坐標(biāo)系的指定區(qū)域(視口)。窗口(裁剪窗口,取景框)是針對(duì)世界坐標(biāo)系而言的,視口是針對(duì)顯示屏幕而言的。二維場(chǎng)景中要顯示的部分稱為裁剪窗口(clippingwindow),因?yàn)樗性诖藚^(qū)域之外的場(chǎng)景都要被裁去,只有在裁剪窗口內(nèi)的場(chǎng)景才能顯示在屏幕上。第九十七頁(yè),共一百四十六頁(yè),編輯于2023年,星期六裁剪窗口裁剪窗口有時(shí)暗指世界窗口(worldwindow)或觀察窗口(viewingwindow)。圖形系統(tǒng)曾一度簡(jiǎn)稱裁剪窗口為“窗口”,但由于現(xiàn)在眾多的窗口操作系統(tǒng)在計(jì)算機(jī)上使用,容易混淆,必須把他們區(qū)分開(kāi)來(lái)?,F(xiàn)在采用術(shù)語(yǔ)“裁剪窗口”來(lái)表示要轉(zhuǎn)換為屏幕上點(diǎn)陣圖形的場(chǎng)景部分。圖形系統(tǒng)還用稱為“視口”(viewport)的另一“窗口”來(lái)表示屏幕上的顯示區(qū)域,是用來(lái)顯示場(chǎng)景(裁剪窗口)的一個(gè)區(qū)域,也稱為視區(qū)。對(duì)象在裁剪窗口內(nèi)的部分映射到屏幕上指定的視口中(充滿整個(gè)視口,可能有縮放)。裁剪窗口決定要看什么,而視口決定在輸出設(shè)備的什么位置進(jìn)行觀察。注意:裁剪窗口是針對(duì)物體的,是世界坐標(biāo)系中需要顯示的場(chǎng)景范圍。第九十八頁(yè),共一百四十六頁(yè),編輯于2023年,星期六裁剪窗口與視口第九十九頁(yè),共一百四十六頁(yè),編輯于2023年,星期六裁剪窗口與視口通過(guò)改變視口的位置,可以在輸出設(shè)備的不同位置觀察物體,使用多個(gè)視口可在不同的屏幕位置觀察場(chǎng)景的不同部分,也可以通過(guò)改變視口的尺寸來(lái)改變顯示對(duì)象的尺寸和位置。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 溫州外貿(mào)課程設(shè)計(jì)招聘
- 北京體育職業(yè)學(xué)院《大數(shù)據(jù)分析技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 關(guān)于水廠運(yùn)行工年度個(gè)人工作總結(jié)范文簡(jiǎn)短總結(jié)計(jì)劃
- 談勞動(dòng)合同法與勞動(dòng)者合法權(quán)益的保護(hù)
- 簡(jiǎn)單房屋租賃合同范本空白
- 銷售2023工作計(jì)劃
- 健康工作計(jì)劃四篇
- 2025年度在線教育平臺(tái)講師委托管理合同3篇
- 二零二五年度O2O平臺(tái)服務(wù)及推廣合同2篇
- 2025版電子商務(wù)合同履行中的違約責(zé)任與救濟(jì)研究合同3篇
- 中考語(yǔ)文文學(xué)文本類閱讀復(fù)習(xí)專題課件:表現(xiàn)手法分析之襯托、對(duì)比與抑揚(yáng)
- 2023年海峽出版發(fā)行集團(tuán)有限責(zé)任公司招聘筆試題庫(kù)及答案解析
- 【合同范本】補(bǔ)充協(xié)議-面積差補(bǔ)款-預(yù)售版
- 鐵路工程-軌道工程施工工藝及方案
- 福建省福州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細(xì)及行政區(qū)劃代碼
- 《高中語(yǔ)文文言斷句》一等獎(jiǎng)優(yōu)秀課件
- 上海市中小學(xué)生學(xué)籍信息管理系統(tǒng)
- (完整版)自動(dòng)感應(yīng)門施工方案
- 8站小車呼叫的plc控制
- _ 基本粒子與宏觀物體內(nèi)在聯(lián)系
- 象棋比賽積分編排表
評(píng)論
0/150
提交評(píng)論