二維圖形變換和顯示_第1頁
二維圖形變換和顯示_第2頁
二維圖形變換和顯示_第3頁
二維圖形變換和顯示_第4頁
二維圖形變換和顯示_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

二維圖形變換和顯示第一頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-2內(nèi)容二維圖形顯示流程坐標(biāo)體系窗口與視區(qū)的變換直線裁剪多邊形裁減文本裁減二維幾何變換第七章第八章第二頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-3對第六章函數(shù)圖形繪制的思考第三頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-4二維圖形顯示流程第八章第七章第四、五章第二章第四頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-5坐標(biāo)體系建模坐標(biāo)系MC(ModelingCoordinateSystem)局部坐標(biāo)系。相對于世界坐標(biāo)系,建模坐標(biāo)系是依賴于物體本身而建立的。物體在建模坐標(biāo)系中表示相對簡單,易于描述。取值范圍為整個實(shí)數(shù)域。世界坐標(biāo)系WC(WorldCoordinateSystem)用戶坐標(biāo)系或全局坐標(biāo)系(一般為右手坐標(biāo)系)。主要用于圖形場景中的所有圖形對象的空間定位、觀察者(視點(diǎn))的位置和視線的定義。取值范圍為整個實(shí)數(shù)域。第五頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-6坐標(biāo)體系第六頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-7坐標(biāo)體系第七頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-8坐標(biāo)體系觀察坐標(biāo)系VC(ViewingCoordinateSystem)觀察坐標(biāo)系通常是以視點(diǎn)的位置為原點(diǎn),通過用戶指定的一個向上的觀察向量來定義的坐標(biāo)系(一般為左手坐標(biāo)系,但在OpenGL中觀察坐標(biāo)系為右手坐標(biāo)系)。主要用于從觀察者的角度對整個世界坐標(biāo)系內(nèi)的場景進(jìn)行觀察,以便簡化幾何物體在視平面(又成為成像面或投影面)上成像的數(shù)學(xué)演算。視平面(成像面/觀察平面)坐標(biāo)系是一個二維直角坐標(biāo)系統(tǒng)。主要用于計(jì)算物體在成像面上的投影??蛇M(jìn)一步在投影面上定義一個稱之為窗口的矩形區(qū)域來實(shí)現(xiàn)部分成像。第八頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-9坐標(biāo)體系設(shè)備坐標(biāo)系DC(DeviceCoordinateSystem)對于顯示器,也稱屏幕坐標(biāo)系。圖形的顯示是在設(shè)備上進(jìn)行的,在設(shè)備上描述圖形的坐標(biāo)系稱為設(shè)備坐標(biāo)系。取值范圍為整數(shù)的有限區(qū)域。規(guī)范化設(shè)備坐標(biāo)系NDCNormalizedDeviceCoordinateSystemNDC為虛擬坐標(biāo)系,與具體的設(shè)備無關(guān),取值范圍[0,1]NDC主要用于聯(lián)系WC和DC,使兩種坐標(biāo)系建立一一對應(yīng)的關(guān)系。第九頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-10窗口與視區(qū)窗口(window)在WC中定義一個矩形區(qū)域,該區(qū)域內(nèi)的對象將予以顯示。視區(qū)(viewport)在DC或ScreenWindow中定義一個矩形區(qū)域,所有在窗口內(nèi)的對象都將顯示在該區(qū)域中。第十頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-11點(diǎn)的繪制-示例2_2第十一頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-12點(diǎn)的繪制-示例2_2

voidSetupRC(void){glClearColor(1.0,1.0,1.0,0.0);//setwhitebackgroundcolorglColor3f(1.0f,0.0f,0.0f);//setthedrawingcolorglPointSize(4.0);glMatrixMode(GL_PROJECTION);glLoadIdentity();//gluOrtho2D(0.0,640.0,0.0,480.0);gluOrtho2D(0.0,4.0,-1.0,1.0);//在世界坐標(biāo)中定義窗口

}for(GLdoublex=0.0;x<4.0;x+=0.005){GLdoublefunc=exp(-x)*cos(2*3.14159265*x);glVertex2d(x,func);}glEnd(); glFlush(); 第十二頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-13進(jìn)一步剖析示例2_2問題:如果用戶想從不同的位置、角度和方位觀察世界坐標(biāo)系中物體的各個部分時(shí),應(yīng)該如何實(shí)現(xiàn)?由用戶的視點(diǎn)可以確定一個觀察坐標(biāo)系,因?yàn)橐朁c(diǎn)位于世界坐標(biāo)系中,所以觀察坐標(biāo)系也位于世界坐標(biāo)系中。默認(rèn)狀態(tài),觀察坐標(biāo)系與世界坐標(biāo)系重合。觀察坐標(biāo)系確定的平面,稱為觀察平面。所以對于二維情況,默認(rèn)狀態(tài)下,觀察平面是世界坐標(biāo)系XOY確定的平面。而觀察窗口就建立在觀察坐標(biāo)系的觀察平面上。這也就解釋了為什么默認(rèn)狀態(tài)下,我們說觀察窗口建立在世界坐標(biāo)系中的原因。第十三頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-14進(jìn)一步剖析示例2_2021-1xy默認(rèn)狀態(tài)下,觀察坐標(biāo)系與世界坐標(biāo)系的關(guān)系。uv第十四頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-15進(jìn)一步剖析示例2_2因?yàn)樵诔绦蛑胁]有調(diào)用gluLookAt函數(shù),所以視點(diǎn)處于默認(rèn)狀態(tài)。gluLookAt函數(shù)用于確定視點(diǎn)的位置和方位。為了定義觀察坐標(biāo)系,必須指定:觀察參考點(diǎn)(Viewreferencepoint—Eye)觀察方向點(diǎn)(Look-atpoint—Look)觀察正向(View-upvector

—Up)n=eye-looku=upxnv=nxu定義觀察平面第十五頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-16進(jìn)一步剖析示例2_2一、改變視點(diǎn)Eye的位置,Up和Look不變。021-1xyuv第十六頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-17進(jìn)一步剖析示例2_2二、只改變Up;Eye和Look為默認(rèn)值。021-1xyuv第十七頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-18進(jìn)一步剖析示例2_2三、改變Eye和Up,Look為默認(rèn)值。021-1xyuv第十八頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-19示例2_2小結(jié)在世界坐標(biāo)系中建立觀察坐標(biāo)系,并且在觀察坐標(biāo)系所在的觀察平面上建立觀察窗口,經(jīng)窗口裁減操作后,將窗口內(nèi)的圖形映射到屏幕窗口的視口中,這種映射稱為窗口-視口映射,或簡稱窗視變換。由于物體在世界坐標(biāo)系中定義的,而裁減窗口在觀察坐標(biāo)系中定義的,在進(jìn)行窗視變換前,還需要進(jìn)行世界坐標(biāo)系到觀察坐標(biāo)系的變換——觀察變換。即,物體重新定義在觀察坐標(biāo)系中。這樣便于后面要講的窗視變換。注意:gluLookAt函數(shù)完成物體從世界坐標(biāo)系到觀察坐標(biāo)系的變換。第十九頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-20窗口到視區(qū)的變換xw-xwmin xv-xvmin

─────=─────xwmax-xwminxvmax-xvminyw-ywminyv-yvmin─────=─────ywmax-ywminyvmax-yvmin

xw-xwminxv=xvmin+─────(xvmax-xvmin)xwmax-xwmin

yw-ywminyv=yvmin+─────(yvmax-yvmin)ywmax-ywmin(Xvmin,Yvmin)(Xvmax,Yvmax)第二十頁,共七十七頁,2022年,8月28日

xw-xwminx=xvmin+─────(xvmax-xvmin)xwmax-xwmin

x1=50+(20-10)(250-50)/(35-10)=130(20,25)(30,20)10,1035,300W130,52x2=50+(30-10)(250-50)/(35-10)=210210,120050,40250,200Vy1=40+(25-10)(200-40)/(30-10)=52y2=40+(20-10)(200-40)/(30-10)=120第二十一頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-22窗口到視區(qū)的變換-示例位于世界坐標(biāo)的窗口中第二十二頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-23二維裁剪第八章第七章第四、五章第二章第二十三頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-24二維裁剪直線段裁剪直接求交算法Cohen-Sutherland算法中點(diǎn)分割算法Liang-Barskey算法多邊形裁剪Sutlerland_Hodgman算法Weiler-Athenton算法文本裁減第二十四頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-25基本概念裁剪確定圖形中哪些部分落在窗口之內(nèi),哪些落在窗口之外,以便只顯示落在窗口內(nèi)的那部分圖形。這個選擇過程稱為裁剪。圖形裁剪算法,直接影響圖形系統(tǒng)的效率。窗口第二十五頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-26點(diǎn)的裁剪圖形裁剪中最基本的問題。假設(shè)窗口的左下角坐標(biāo)為(xL,yB),右上角坐標(biāo)為(xR,yT),對于給定點(diǎn)P(x,y),則P點(diǎn)在窗口內(nèi)的條件是要滿足下列不等式:

xL<=x<=xR

并且yB<=y<=yT(xL,yB)(xR,yT)第二十六頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-27直線段裁剪直線段裁剪算法是復(fù)雜圖形裁剪的基礎(chǔ)。復(fù)雜的曲線可以通過折線段來近似,從而裁剪問題也可以化為直線段的裁剪問題。直線與窗口的關(guān)系整個線段全在窗口內(nèi)(完全可見)整個線段全在窗口外(顯然不可見)線段部分在窗口外,部分在窗口內(nèi)提高裁剪效率快速判斷情形(1)(2),對于情形(3),設(shè)法減少求交次數(shù)和每次求交時(shí)所需的計(jì)算量。第二十七頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-28直接求交算法第二十八頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-29Cohen-Sutherland裁剪基本思想第一步:判別線段兩端是否都落在窗口內(nèi),如果是,則線段完全可見;否則進(jìn)入第二步。判別線段是否為顯然不可見,即線段的兩端點(diǎn)均落在窗口某邊所在直線的外側(cè),如果是,則裁剪結(jié)束,否則進(jìn)入第三步。第三步:求線段與窗口邊延長線的交點(diǎn),這個交點(diǎn)將線段分為兩段,其中一段顯然不可見,丟棄。對余下的另一段重新進(jìn)行第一步、第二步判斷,直至結(jié)束。第二十九頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-30Cohen-Sutherland裁剪基本原理首先用窗口四條邊所在的直線將整個二維平面分成9個區(qū)域,每個區(qū)域賦予一個四位的編碼CtCbCrCl,它表示該區(qū)域與窗口的四個相對坐標(biāo)位置:上,下,右,左的關(guān)系。任何位賦值為1,代表該區(qū)域落在相應(yīng)的位置上,否則該位為0。則裁剪窗口的編碼為0000。然后確定待裁剪線段的兩個端點(diǎn)的編碼,即為它所在區(qū)域的編碼。000010001001101000010101001001100100oxyxminxmaxyminymaxP1P2P3P4第三十頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-31Cohen-Sutherland裁剪一旦給定所有的線段端點(diǎn)的區(qū)域碼,就可以快速判斷哪條直線完全在剪取窗口內(nèi),哪條直線完全在窗口外。所以得到以下規(guī)則:如果兩端點(diǎn)的編碼均為0000,表示該線段在窗口內(nèi)。如果兩端點(diǎn)的編碼相與不為0000,表示該線段在窗口外。否則需計(jì)算線段與窗口(或延長線)的交點(diǎn),計(jì)算交點(diǎn)編碼,以交點(diǎn)作為裁剪線段的新端點(diǎn),重復(fù)(1)(2)(3)。直線裁剪程序演示結(jié)果第三十一頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-32Cohen-Sutherland裁剪例如:01010010010000100000001000000000第三十二頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-33Cohen-Sutherland算法描述BOOLdone,draw;

done表示是否完成,draw表示是否可見;

unsignedcharcode1,code2;端點(diǎn)1,端口2的編碼While(!done){if(判斷code1,code2,若為第一種情況){done=TRUE;draw=TRUE;}elseif(為第二種情況){done=TRUE;draw=FALSE; } else{檢查在窗口外的端點(diǎn);

求線段與窗口的交點(diǎn),以該交點(diǎn)為新的端點(diǎn);

}}第三十三頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-34Cohen-Sutherland裁剪如何判定應(yīng)該與窗口的哪條邊求交呢?對于線段AD,D點(diǎn)編碼中CL=1,而A點(diǎn)編碼中的CL=0,則知道AD和窗口的左邊所在的直線相交。在程序中,求交測試的順序是固定的。不妨假定求交測試的順序?yàn)榇翱诘淖筮叀⒂疫?、下邊、上邊。按照這個順序,線段EJ和窗口四邊被求出的交點(diǎn)順序?yàn)镕,I,H,G。從而該裁剪算法在最壞的情況下,一條線段在裁剪時(shí)需要求交4次。第三十四頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-35Cohen-Sutherland算法描述if(LEFT&code!=0){x=XL; y=y1+(y2-y1)*(XL-x1)/(x2-x1);}elseif(RIGHT&code!=0){x=XR; y=y1+(y2-y1)*(XR-x1)/(x2-x1);}elseif(BOTTOM&code!=0){y=YB; x=x1+(x2-x1)*(YB-y1)/(y2-y1);}elseif(TOP&code!=0){y=YT; x=x1+(x2-x1)*(YT-y1)/(y2-y1);}

如何判定應(yīng)該與窗口的哪條邊求交呢?編碼中對應(yīng)位為1的邊。計(jì)算線段P1(x1,y1)P2(x2,y2)與窗口邊界的交點(diǎn)具體算法見p140第三十五頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-36Cohen-Sutherland算法小結(jié)本算法的優(yōu)點(diǎn)在于簡單,易于實(shí)現(xiàn)。它可以簡單的描述為將直線在窗口外邊的部分刪去,按左,上,右,下的順序依次進(jìn)行,處理之后,剩余部分就是可見的了。在這個算法中求交點(diǎn)是很重要的,它決定了算法的速度。本算法對于其它形狀的窗口未必同樣有效。特點(diǎn):用編碼方法可快速判斷線段的完全可見和顯然不可見。第三十六頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-37中點(diǎn)分割算法基本思想:從P0點(diǎn)出發(fā)找出離P0最近的可見點(diǎn),和從P1點(diǎn)出發(fā)找出離P1最近的可見點(diǎn)。這兩個可見點(diǎn)的連線就是原線段的可見部分。與Cohen-Sutherland算法一樣首先對線段端點(diǎn)進(jìn)行編碼,并把線段與窗口的關(guān)系分為三種情況,對前兩種情況,進(jìn)行一樣的處理;對于第三種情況,用中點(diǎn)分割的方法求出線段與窗口的交點(diǎn)。A、B分別為距P0

、P1最近的可見點(diǎn),Pm為P0P1中點(diǎn)。P0P1PmAB第三十七頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-38中點(diǎn)分割算法從P0出發(fā)找距離P0最近可見點(diǎn)采用中點(diǎn)分割方法先求出P0P1的中點(diǎn)Pm;若P0Pm不是顯然不可見的,并且P0P1在窗口中有可見部分,則距P0最近的可見點(diǎn)一定落在P0Pm上,所以用P0Pm代替P0P1;否則取PmP1代替P0P1;再對新的P0P1求中點(diǎn)Pm。重復(fù)上述過程,直到PmP1長度小于給定的控制常數(shù)為止,此時(shí)Pm收斂于交點(diǎn)。從P1出發(fā)找距離P1最近可見點(diǎn)采用上面類似方法P0P1PmAB第三十八頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-39多邊形裁剪錯覺:直線段裁剪的組合?新的問題邊界不再封閉,需要用窗口邊界的恰當(dāng)部分來封閉它,如何確定其邊界?一個凹多邊形可能被裁剪成幾個小的多邊形,如何確定這些小多邊形的邊界?第三十九頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-40Sutherland-Hodgman算法逐邊裁剪算法—分割處理策略將多邊形關(guān)于矩形窗口的裁剪分解為多邊形關(guān)于窗口四邊所在直線的裁剪。流水線過程(左上右下):前邊的結(jié)果是后邊的輸入。對左邊剪取對上邊剪取對右邊剪取對下邊剪取第四十頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-41Sutherland-Hodgman算法基本思想一次用窗口的一條邊裁剪多邊形考慮窗口的一條邊以及延長線構(gòu)成的裁剪線,該線把平面分成兩個部分:可見一側(cè);不可見一側(cè)多邊形的各條邊的兩端點(diǎn)S、P(設(shè)P為當(dāng)前處理頂點(diǎn),S為已經(jīng)處理的前一個頂點(diǎn))。它們與裁剪線的位置關(guān)系只有四種:第四十一頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-42Sutherland-Hodgman算法情況(1)僅輸出頂點(diǎn)P;情況(2)輸出0個頂點(diǎn);情況(3)輸出線段SP與裁剪線的交點(diǎn)I;情況(4)輸出線段SP與裁剪線的交點(diǎn)I和終點(diǎn)P第四十二頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-43Sutherland-Hodgman算法算法描述:while對于每一條窗口邊{if(P1在窗口邊的可見一側(cè))輸出P1

fori=1到n{ifPi在窗口邊的可見一側(cè)

{if(Pi+1在窗口邊的可見一側(cè))輸出Pi+1

else計(jì)算交點(diǎn)并輸出交點(diǎn)}

elseif(Pi+1在窗口邊的可見一側(cè))計(jì)算交點(diǎn)并輸出交點(diǎn),同時(shí)輸出Pi+1

}}第四十三頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-44Sutherland-Hodgman算法算法分析對凸多邊形應(yīng)用本算法可以得到正確的結(jié)果,但是對凹多邊形的裁剪將顯示出一條多余的直線。這種情況在裁剪后的多邊形有兩個或者多個分離部分的時(shí)候出現(xiàn)。因?yàn)橹挥幸粋€輸出頂點(diǎn)表,所以表中最后一個頂點(diǎn)總是連著第一個頂點(diǎn)。解決這個問題有多種方法一是把凹多邊形分割成若干個凸多邊形,然后分別處理各個凸多邊形。二是修改本算法,沿著任何一個裁剪窗口邊檢查頂點(diǎn)表,正確的連接頂點(diǎn)對。再有就是Weiler-Atherton算法。凹多邊形裁剪演示1

凹多邊形裁剪演示2第四十四頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-45Weiler-Athenton算法Weiler-Atherton算法是一個通用的多邊形裁剪算法。主多邊形:被裁剪多邊形。裁剪多邊形:裁剪窗口。主多邊形和裁剪多邊形可以為任意多邊形(凸、凹、帶內(nèi)環(huán))。主多邊形和裁剪多邊形

(演示)第四十五頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-46Weiler-Athenton算法其它相關(guān)的算法概念多邊形的方向:這里約定使多邊形區(qū)域位于有向邊的右側(cè)外環(huán):順時(shí)針;內(nèi)環(huán):逆時(shí)針頂點(diǎn)表主多邊形的頂點(diǎn)表:用來定義主多邊形裁剪多邊形的頂點(diǎn)表:用來定義剪取多邊形進(jìn)點(diǎn)表:包含主多邊形進(jìn)入剪取多邊形內(nèi)部時(shí)的交點(diǎn);出點(diǎn)表:包含主多邊形離開剪取多邊形內(nèi)部時(shí)的交點(diǎn);主多邊形的內(nèi)表:主多邊形被裁剪后的多邊形的頂點(diǎn)表;第四十六頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-47Weiler-Athenton算法算法原理首先從進(jìn)點(diǎn)開始,沿主多邊形的邊界方向跟蹤,直至找到它與剪取多邊形的另一交點(diǎn)(出點(diǎn))為止;在出點(diǎn)處沿剪取多邊形的邊界方向跟蹤,直至找到其與主多邊形的一個交點(diǎn)(進(jìn)點(diǎn))后再次沿主多邊形的邊界跟蹤;重復(fù)執(zhí)行上述過程,直至再回到算法的起始交點(diǎn)(進(jìn)點(diǎn))為止。實(shí)線描繪的是主多邊形,虛線描繪的是剪取多邊形。紫色箭頭為入點(diǎn),綠色頭為出點(diǎn)。第四十七頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-48Weiler-Athenton算法裁剪類型內(nèi)裁剪:A∩B外裁剪:A-B前面的算法是針對多邊形的內(nèi)裁剪,這也是我們討論的默認(rèn)裁減方式對于外裁剪,其過程和內(nèi)裁剪大致相同,只是在遇到出點(diǎn)時(shí)跟蹤主多邊形邊界,而遇進(jìn)點(diǎn)時(shí)逆序跟蹤裁剪多邊形邊界即可。AB第四十八頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-49Weiler-Athenton算法-示例1C2C3C4C1S1S7S6S5S3S2S4I1I2I3I4I5I6I7I8S1I2I3S2I4S3I5S4S5S6S7I6I7I8I1S1I2I3S2I4S3I5S4S5S6S7I6I7I8I1C1C2C3I1I2I3I4I5I6I7I8C4C1C1C2C3I1I2I3I4I5I6I7I8C4C1S1S1主多邊形表裁剪多邊形表主多邊形表內(nèi)裁剪外裁剪裁剪多邊形表第四十九頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-50Weiler-Athenton算法-示例2C2C3C4C1S1S7S6S3S2S4I1I2I3I4S5S8S9S1I2I3S2I4S3S4S5S6S7I1C1C2C3I1I2I3I4C4C1S8S9S1S1I2I3S2I4S3S4S5S6S7I1C1C2C3I1I2I3I4C4C1S8S9S1主多邊形表裁剪多邊形表主多邊形表裁剪多邊形表外裁剪內(nèi)裁剪第五十頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-51文本裁剪abcdabcdabcd字符可按以下不同方法進(jìn)行裁剪:1、筆畫裁剪把窗口以外的字符或筆劃予以裁剪矢量字符:按直線的裁剪方法。點(diǎn)陣字符:按點(diǎn)的裁剪方法。2、字符裁剪把窗口以外或與窗口相交的字符予以裁剪。3、字符串裁剪若字符串與窗口相交,則該字符串被整個裁剪。第五十一頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-52二維圖形顯示流程第八章第七章第四、五章第五十二頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-53圖形變換—內(nèi)容二維(三維)幾何變換仿射變換平移變換旋轉(zhuǎn)變換縮放變換對稱變換錯切變換組合變換投影變換(三維變換到二維)窗口到視區(qū)的變換第五十三頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-54二維幾何變換仿射變換平移變換旋轉(zhuǎn)變換縮放變換對稱變換錯切變換組合變換第五十四頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-55概述幾何變換是一種線性變換,對各種圖形的幾何變換,實(shí)際上是對點(diǎn)的變換。對原來圖形中的一點(diǎn)坐標(biāo)通過變換生成一個新的點(diǎn)坐標(biāo)。二維圖形的幾何變換的表示采用3*3矩陣的形式,稱為變換矩陣,點(diǎn)的坐標(biāo)表示采用齊次坐標(biāo)形式,故幾何變換操作的過程是將變換矩陣T作用于齊次坐標(biāo)點(diǎn)P生成新的坐標(biāo)點(diǎn)P′,即P′=PT。yx第五十五頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-56應(yīng)用(d)(b)(c)(a)motifsnowflake第五十六頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-57簡化的OpenGL繪制流程AsimplifiedviewoftheOpenGLpipelinecurrenttransformation第五十七頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-58齊次坐標(biāo)基本思想用一個有n+1個分量的向量去表示一個有n個分量的向量的方法。P(x,y)齊次坐標(biāo)P(hx,hy,h)(5,8)的齊次坐標(biāo)為:(5,8,1)(10,16,2)(15,24,3)...齊次坐標(biāo)不唯一,規(guī)范化齊次坐標(biāo)表示就是h=1的齊次坐標(biāo)表示。第五十八頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-59齊次坐標(biāo)作用將各種變換用階數(shù)統(tǒng)一的矩陣來表示。(1)便于變換合成;(2)便于硬件實(shí)現(xiàn)。提供了用矩陣運(yùn)算把二維、三維甚至高維空間上的一個點(diǎn)從一個坐標(biāo)系變換到另一坐標(biāo)系的有效方法。便于表示無窮遠(yuǎn)點(diǎn)。在n+1維中,h=0的奇次坐標(biāo)表示一個n維的無窮遠(yuǎn)點(diǎn)。二維及三維奇次坐標(biāo)變換矩陣QxQy1=PxPy1T第五十九頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-60仿射變換仿射變換是計(jì)算機(jī)圖形學(xué)中最常用的變換類型,具有如下特性平行線段變換后仍保持平行線段變換后長度和方向可能改變本章所討論的所有變換均為仿射變換其它類型的變化可用于創(chuàng)建一些特效,此時(shí)變換矩陣T可能很復(fù)雜(a)(b)第六十頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-61仿射變換仿射變換對應(yīng)的變換矩陣具有簡潔一致的特性QxQy1=t11Px+t12Py+t13t21Px+t22Py+t231Q是P的線性組合QxQy1=t11

t12

t13t21

t22

t23001PxPy1仿射變換的矩陣表示形式第六十一頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-62平移變換(Translation)點(diǎn)的平移變換是指該點(diǎn)在X軸和Y軸方向上分別移動一段距離。設(shè)圖形上點(diǎn)P(x,y),將在X軸和Y軸方向分別移動tx和ty,結(jié)果生成新的點(diǎn)Q(x,y),如圖所示,則有yxP(x,y)Q(x,y)txtyQx=Px+tx,Qy=Py+ty

用齊次坐標(biāo)和矩陣形式可表示為QxQy1=PxPy110tx01ty001QxQy1=Px+txPy+ty1二維平移變換矩陣T函數(shù)T(P)第六十二頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-63旋轉(zhuǎn)變換(Rotation)點(diǎn)的旋轉(zhuǎn)變換是指將點(diǎn)繞坐標(biāo)原點(diǎn)旋轉(zhuǎn)一角度的坐標(biāo)變換。設(shè)有圖形上點(diǎn)P(x,y),將其繞原點(diǎn)旋轉(zhuǎn)變換θ角度(假設(shè)按逆時(shí)針旋轉(zhuǎn)為正角),結(jié)果生成的新的點(diǎn)坐標(biāo)P′(x′,y′)。將點(diǎn)P繞原點(diǎn)做逆時(shí)針旋轉(zhuǎn)θ角度的變換看作將坐標(biāo)系繞原點(diǎn)做順時(shí)針旋轉(zhuǎn)θ角度的等價(jià)變換。

x′=xcosθ-ysinθ

y′=xsinθ+ycosθ用齊次坐標(biāo)和矩陣形式可表示為x′y′1=xy1cosθ

-sinθ

0sinθ

cosθ

0001yθP′(x′,y′)P(x,y)第六十三頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-64縮放變換(Scaling)點(diǎn)的縮放是指將該點(diǎn)沿X軸和Y軸方向按比例縮小或放大的變換。(注:以坐標(biāo)原點(diǎn)為放縮參照點(diǎn))設(shè)圖形上的點(diǎn)P(x,y),在X軸和Y軸方向分別作sx和sy的縮放,結(jié)果生成新的點(diǎn)坐標(biāo)P′(x′,y′),如圖所示,則x′=sx.x

y′=sy.y用齊次坐標(biāo)和矩陣形式可表示為x′y′1=xy1sx

0

00

sy

00

0

1二維縮放變換矩陣S第六十四頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-65縮放變換(Scaling)記二維縮放變換矩陣為S

(sx,sy),則

S2

(sx,sy)=sx

0

00

sx

00

0

1(Sx,Sy)=(-1,2)如果|sx|或|sy|大于1,則表示圖形在x軸方向或y軸方向放大;如果|sx|或|sy|小于1,則表示圖形在x軸方向或y軸方向縮??;如果|sx|或|sy|等于1,則表示圖形在x軸方向或y軸方向不變;如果sx=1,sy=-1,則等價(jià)于圖形關(guān)于x軸作對稱變換;如果sx=-1,sy=1,則等價(jià)于圖形關(guān)于y軸作對稱變換。第六十五頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-66對稱變換(Reflection)點(diǎn)的對稱變換是指該點(diǎn)關(guān)于某一鏡面的反射鏡像。在二維空間中,這個鏡面即為一條直線,這條直線稱為對稱軸。設(shè)圖形上的點(diǎn)P(x,y),經(jīng)過對稱變換,結(jié)果生成新的點(diǎn)坐標(biāo)P′(x′,y′),則用齊次坐標(biāo)和矩陣形式表示,有關(guān)于x軸的對稱變換關(guān)于y軸的對稱變換關(guān)于任意軸的對稱變換—通過復(fù)合變換x′y′1=xy11

0

00

-1

00

0

1x′y′1=xy1-1

0

00

1

00

0

1第六十六頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-67錯切變換(Shearing)錯切變換是用來產(chǎn)生一個目標(biāo)圖形的失真的變換。沿x方向的錯切沿y方向的錯切沿x方向的錯切將點(diǎn)P(x,y)變換到點(diǎn)P′(x′,y′),使

x′=x+y·shx(shx≠0,shx=tanθ)

y′=y 1

shx

00

1

00

0

1x′y′1xy1=θxyABDCA’B’第六十七頁,共七十七頁,2022年,8月28日二維圖形變換和顯示第七、八章-68錯切變換(Shearing)沿y方向的錯切將點(diǎn)P(x,y)變換到點(diǎn)P′(x′,y′),使

x′=x

y′=y+x·shy(shy≠0) x′y′1xy1=

1

0

0shy

1

00

0

1θxy

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論