版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、圖形與圖像(t xin)的關(guān)系? 答:圖形(txng)是指由外部輪廓線條構(gòu)成的矢量圖。即由計(jì)算機(jī)繪制的直線、圓、矩形、 曲線、圖表等;而圖像是由掃描儀、攝像機(jī)等輸入設(shè)備捕捉實(shí)際(shj)的畫面產(chǎn)生的數(shù)字圖像,是由像素點(diǎn)陣構(gòu)成的位圖。 位圖圖像由像素點(diǎn)組合而成;色彩豐富、過渡自然;保存時(shí)計(jì)算機(jī)需記錄每個(gè)像素點(diǎn)的位置和顏色,所以圖像像素點(diǎn)越多(分辨率高),圖像越清晰,文件就越大。一般能直接通過照相、掃描、攝像得到圖形都是位圖圖像。缺點(diǎn):體積一般較大;放大圖形不能增加圖形的點(diǎn)數(shù),可以看到不光滑邊緣和明顯顆粒,質(zhì)量不容易得到保證 矢量圖形由數(shù)學(xué)公式表達(dá)的線條所構(gòu)成;線條非常光滑流暢,放大圖形,其線條依
2、然可以保持良好的光滑性及比例相似性,圖形整體不變形;占用空間較小。工程設(shè)計(jì)圖、圖表、插圖經(jīng)常以矢量圖形曲線來表示。隨機(jī)掃描與光柵掃描?答:隨機(jī)掃描顯示器顯示圖形時(shí),電子束的移動(dòng)方式是 隨機(jī)的,電子束可以在任意方向上自由移動(dòng),按照顯示命令用畫線的方式繪出圖形,因此也稱矢量顯示器。而光柵掃描顯示器顯示圖形時(shí),電子束依照固定的掃描線和規(guī)定的掃描順序進(jìn)行掃描。電子束先從熒光屏左上角開始,向右掃一條水平線,然后迅速地回掃到左邊偏下一點(diǎn)的位置,再掃第二條水平線,照此固定的路徑及順序掃下去,直到最后一條水平線,即完成了整個(gè)屏幕的掃描。隨機(jī)掃描顯示器依靠顯示文件對(duì)屏幕圖形進(jìn)行刷新;光柵掃描顯示器是靠幀緩存實(shí)現(xiàn)
3、對(duì)屏幕圖形的刷新。窗口與視口?答:窗口:就是用窗口的邊界去裁剪數(shù)據(jù)并獲得所需要的部分。二維情況下窗口由一個(gè)矩形上下左右四條邊確定。視口:是顯示設(shè)備上用于顯示窗口內(nèi)圖形數(shù)據(jù)的一個(gè)區(qū)域。二維規(guī)則視口由一個(gè)矩形上 下左右四條邊確定。圖形系統(tǒng)初始化#includemain()int driver=DETECT,mode;/適配器驅(qū)動(dòng)程序設(shè)為自動(dòng)檢測(cè),圖形顯示模式為0initgraph(&driver,&mode,”c:tc”);closegraph();/關(guān)閉圖形系統(tǒng)顏色設(shè)置背景色void setbkcolor(int color)設(shè)置畫筆色void setcolor(int color)返回背景色i
4、nt getbkcolor()返回畫筆色int getcolor()返回點(diǎn)的顏色int getpixel(int x,int y)01234567BLACKBLUEGREENCYAN青REDMAGENTA洋紅BROWNLIGHTGRAY89101112131415DARKGRAYLIGHTBLUELIGHTGREENLIGHTCYANLIGHTREDLIGHTMAGENTAYELLOWWHITE設(shè)置線格式void setlinestyle(int linestyle,unsigned upattern,int thickness)linestyle樣式SOLID-LINE0實(shí)線DOTTED-L
5、INE1點(diǎn)線CENTER-LINE2中心線DASHED-LINE3虛線USERBIT-LINE4自定義線upattern僅在自定義線時(shí)有效,默認(rèn)為0thickness線寬NORM-WIDTH1一個(gè)像素寬THICK-WIDTH3三個(gè)像素寬點(diǎn)畫點(diǎn) void putpixel(int x,int y,int color)指定點(diǎn) void moveto(int x,int y)50,30當(dāng)前坐標(biāo)50,30相對(duì)畫點(diǎn) void moverel(int dx,int dy)10,20當(dāng)前坐標(biāo)60,50獲取坐標(biāo)int getx()int gety()直線2個(gè)點(diǎn)畫(din hu)線void line(int x
6、0,int y0,int x1,int y1)從已有點(diǎn)(yudin)畫線到指定坐標(biāo)lineto(int x,int y)相對(duì)(xingdu)畫線linerel(int dx,int dy)矩形畫矩形void rectangle(int 左上角x,int 左上角y,int 右下角x,int 右下角y)圓,圓弧橢圓畫圓void circle(int x,int y,int r) 指定圓心和半徑畫同心圓弧void arc(int x,int y,int sangle,int eangle,int r)指定圓心半徑,從開始角到終止角畫弧,角度0360即圓畫異心圓弧void ellipse(int x,
7、int y,int sangle,int eangle,int xr,int yr)指定圓心,x方向半徑,y方向半徑,從開始角到終止角畫弧,角度0360即橢圓多邊形畫多邊形void drawpoly(int num,int *polypoints)num為頂點(diǎn)數(shù)polypoints為各頂點(diǎn)的整數(shù)序列若第一個(gè)和最后一個(gè)點(diǎn)坐標(biāo)相同則畫出多邊形,否則為折線int Round(float x)return (int)(xabs(y2-y1)?abs(x2-x1):abs(y2-y1);x=(float)x1;y=(float)y1;dx=(float)(x2-x1)/steps;dy=(float)(
8、y2-y1)/steps;for(i=0;isteps;i+)putpixel(Round(x),Round(y),color);x=x+dx;y=y+dy;缺點(diǎn):浮點(diǎn)增量的連續(xù)迭加,誤差積累使長(zhǎng)線段計(jì)算的象素位置偏離實(shí)際線段浮點(diǎn)運(yùn)算十分耗時(shí)簡(jiǎn)述 dda直線的數(shù)字微分分析法的算法與步驟? 答:直線生成算法中的數(shù)字微分分析法是一種增量計(jì)算方法。它使用數(shù)字微分分析器(通過同時(shí)在X方向和Y方向分別增加dx和dy成正比的小數(shù)值來積分微分方程的機(jī)械設(shè)備),按照斜率絕對(duì)值|k|1來遞增畫描點(diǎn)。|k|1時(shí),取像素(int)(x+0.5),y)。其步驟為:1.選擇dx或dy中的較大者為一個(gè)光柵單位Length
9、;2.取y=dy/Length, x=dx/Length 3. 按照斜率絕對(duì)值|k|1來遞增畫描點(diǎn)。直線Bresenham算法void BRES(int x1,int y1,int x2,int y2,int color)int x,y,dx,dy; int i=0;float p;x=x1;y=y1;dx=x2-x1;dy=y2-y1;p=2*dy-dx;for(i=0;i=0)y+;p=p-2*dx;(要保證x2x1)優(yōu)點(diǎn):不做除法,只用整數(shù),只有整數(shù)加減和乘2運(yùn)算圓的生成算法圓的Bresenham算法void putdot(int x1,int y1,int x,int y,int co
10、lor)/8方向?qū)ΨQ畫點(diǎn)putpixel(x1+x,y1+y,color);putpixel(x1+x,y1-y,color);putpixel(x1-x,y1+y,color);putpixel(x1-x,y1-y,color);putpixel(x1+y,y1+x,color);putpixel(x1+y,y1-x,color);putpixel(x1-y,y1+x,color);putpixel(x1-y,y1-x,color);void BRESC(int x1,int y1,int r,int color)int x,y;float p;x=0;y=r;p=5/4-r;while(x
11、=y)putdot(x1,y1,x,y,color);if(p0)p=p+x*2+3;elsep=p+2*(x-y)+5;y-;x+;圓的生成(shn chn)Bresenham算法(sun f)及步驟? 答:考慮(kol)以坐標(biāo)原點(diǎn)為圓心的第一四分圓,取x=0,y=R為起點(diǎn)按順時(shí)針方向生成圓,假設(shè)圓心及起點(diǎn)均精確地落在像素點(diǎn)上。從圓上任意一點(diǎn)出發(fā),按順時(shí)針方向生成圓時(shí),為了最佳逼近該圓,對(duì)于下一像素的的取法只有三種可能:右方mh,右下角md,下方mv。要在三個(gè)像素中選擇一個(gè)使其與真正圓的距離的平方達(dá)到最小即可。結(jié)合圓與點(diǎn)(xi,yi)附近光柵網(wǎng)格相交關(guān)系的五種可能,找到最合適的像素點(diǎn)顯示即為
12、圓的Bresenham算法。其具體步驟為:1.判別圓心到右下角像素的距離和圓心到圓上點(diǎn)距離的平方之差i的正負(fù)性;2.根據(jù)第一步的結(jié)果,繼續(xù)判別圓到mh,md距離的平方差。當(dāng)i0,取md; 當(dāng)i0時(shí),若0,取md, 若0,取mv; 當(dāng)i=0時(shí),取md。填色算法掃描線填色算法:按掃描線順序計(jì)算掃描線與多邊形的相交區(qū)間,再用要求的顏色或圖案顯示這些區(qū)間的象素,需提供多邊形各頂點(diǎn)坐標(biāo)1.用水平掃描線由上往下掃描多邊形2.每根掃描線與多邊形各邊產(chǎn)生一系列交點(diǎn),采用遞歸算法3.將交點(diǎn)按x坐標(biāo)進(jìn)入分類,將分類后的交點(diǎn)成對(duì)取出,作為兩個(gè)端點(diǎn),以所需要填的色彩畫水平直線。種子填色算法:要求給出邊界顏色特征區(qū)域內(nèi)
13、的一個(gè)點(diǎn)的坐標(biāo)1.從(x,y)開始檢測(cè)相鄰位置以確定它們是否是邊界顏色,若不是,則用填充顏色涂色,并檢測(cè)其相鄰位置。 2.直至檢測(cè)完所有象素。void seed_filling(x,y,fill_color,boundary_color)int c;c=inquire_color(x,y); if(cboundary_color)&(cfill_color) setpixel(x,y,fill_color); seed_filling(x,y+1,fill_color,boundary_color); seed_filling(x,y-1,fill_color,boundary_color);
14、 seed_filling(x-1,y,fill_color,boundary_color); seed_filling(x+1,y,fill_color,boundary_color);種子填充算法?答:從多邊形區(qū)域的一個(gè)內(nèi)點(diǎn)(種子)開始,由內(nèi)向外用給定的顏色畫點(diǎn)直到邊界為止。如果邊界是以一種顏色指定的,則種子填充算法可逐個(gè)像素地處理直到遇到邊界顏色為止。種子填充算法常用四連通域和八連通域技術(shù)進(jìn)行填充操作。從區(qū)域內(nèi)任意一點(diǎn)出發(fā),通過上、下、左、右四個(gè)方向到達(dá)區(qū)域內(nèi)的任意像素。用這種方法填充的區(qū)域就稱為四連通域;這種填充方法稱為四向連通算法。從區(qū)域內(nèi)任意一點(diǎn)出發(fā),通過上、下、左、右、左上、左下
15、、右上和右下八個(gè)方向到達(dá)區(qū)域內(nèi)的任意像素。用這種方法填充的區(qū)域就稱為八連通域;這種填充方法稱為八向連通算法。設(shè)置填充方式setfillstyle(int pattern,int color)EMPTY-FILL0用背景色SOLID-FILL1實(shí)心LINE-FILL2粗水平線LTSLASH-FILL3細(xì)斜線SLASH-FILL4粗斜線BKSLASH-FILL5粗反斜線LTBKSLASH-FILL6細(xì)反斜線HATCH-FILL7網(wǎng)格線XHATCH-FILL8斜網(wǎng)格線INTERLEAVE-FILL9隔點(diǎn)WIDE-DOT-FILL10寬間斷點(diǎn)CLOSE-DOT-FILL11密間斷點(diǎn)USER-FILL1
16、2自定義用當(dāng)前樣式(yngsh)填充長(zhǎng)方形bar(int x1,int y1,int x2,int y2)3d長(zhǎng)方形bar3d(int x1,int y1,int x2,int y2,int depth,int topflag)depth垂直于屏幕方向(fngxing)上的深度topflag,0畫頂點(diǎn)(dngdin),非0不畫頂點(diǎn)多邊形fillpoly(int num,int *polypoints)扇形pieslice(int x,int y,int sangle,int eangle,int r)橢圓扇形sector(int x,int y,int sangle,int eangle,in
17、t xr,int yr)種子floodfill(int x,int y,int border)border邊界線顏色文字設(shè)置字體樣式settextstyle(int font,int direction,int charsize)fontDEFAULT-FONT08*8點(diǎn)陣字TRIPLEX-FONT1三元組SMALL-FONT2小型字SANSSERIF-FONT3無襯線GOTHIC-FONT4粗黑體direction0從左到右1從下到上charsize放大因子,010整數(shù)設(shè)置對(duì)齊方式settextjustify(int horiz,int vert)horiz水平0左對(duì)齊,1居中對(duì)齊,2右對(duì)齊
18、vert垂直0底對(duì)齊,1垂直對(duì)齊,2頂對(duì)齊輸出文本outtext(char *text)outtextxy(int x,int y,char *text)裁剪Cohen-Sutherland直線裁剪算法_最早的線段裁剪算法左右下上100100010101100000000100101000100110線段細(xì)分裁剪算法 答:(1)檢查線段P1P2是否為完全可見或顯然不可見;(2)若P1在窗口外,繼續(xù)步驟(3),否則交換P1,P2;(3)用P1P2和窗口的交點(diǎn)取代P1點(diǎn),并重復(fù)步驟(1)-(3)。Sutherland和Hodgman多邊形裁剪算法用窗口的上邊框?qū)Χ噙呅芜M(jìn)行裁剪,得到一個(gè)(或若干個(gè))
19、新的多邊形,再用其余三條邊框線對(duì)新產(chǎn)生的多邊形裁剪P,S在窗框非同側(cè),求交點(diǎn)I,將I保存在P前面;P在窗框內(nèi)側(cè),保存P,否則不保存Pfor(對(duì)第一個(gè)頂點(diǎn)直到最后一個(gè)頂點(diǎn),逐一處理)if(Pi在邊界內(nèi)側(cè)) if(flag!=0)flag=0;求交點(diǎn)并放入新的多邊形頂點(diǎn)序列Qj中;j+;將當(dāng)前頂點(diǎn)放入新的多邊形頂點(diǎn)序列Qj中:Qj=Pi;j+; else if(flag=0) flag=1; 求交點(diǎn)并放入新的多邊形頂點(diǎn)序列Qj中;j+;將當(dāng)前頂點(diǎn)賦給S:S=Pi;曲線(qxin)生成三次(sn c)Bezier曲線(qxin),由4個(gè)控制點(diǎn)生成Bezier的Casteljau算法r=1,.,n i
20、=0,.,n-r并且即為Bezier曲線上參數(shù)t處的點(diǎn)void draw_polygon(struct node coeff)int i; for(i=0;in;i+)if(i=0)moveto(coeff0.x,coeff0.y);lineto(coeffi.x,coeffi.y);struct node decasteljau(struct node coeff,float t) int i,r; struct node point,coeffa20; for(i=0;in;i+)coeffai=coeffi; for(r=1;rn;r+)for(i=0;in-r;i+) coeffai.
21、x=(1.0-t)*coeffai.x+t*coeffai+1.x;coeffai.y=(1.0-t)*coeffai.y+t*coeffai+1.y;return coeffa0;void draw_bezier_curve(struct node coeff)int i,x,y;float t,delta;struct node point;delta=1.0/(float)(npoints);for(i=0,t=0;t=1.0;i+,t=t+delta)point=decasteljau(coeff,t);if(i=0)moveto(point.x,point.y);lineto(poi
22、nt.x,point.y);縮放因子Sx=(Xvmax-Xvmin)/(Xwmax-Xwmin)w世界坐標(biāo)系,v屏幕坐標(biāo)系Sy=(Yvman-Yvmin)/(Ywmax-Ywmin)投影透視變化方程:Xp=X(Zprp-Zvp)/(Zprp-Z)=X*dp/(Zprp-Z)dp=Zprp-Zvp是投影參考點(diǎn)Yp=Y(Zprp-Zvp)/(Zprp-Z)=Y*dp/(Zprp-Z)到觀察平面的距離當(dāng)Zvp=0Xp=XZprp/(Zprp-Z)=X*1/(1-Z/Zprp)Yp=YZprp/(Zprp-Z)=Y*1/(1-Z/Zprp)當(dāng)Zprp=0Xp=X*Zvp/Z=X*1/(Z/Zvp)Yp
23、=Y*Zvp/Z=Y*1/(Z/Zvp)邏輯輸入設(shè)備按數(shù)據(jù)類型:定位設(shè)備,描畫設(shè)備,字符串設(shè)備,定值設(shè)備,選擇設(shè)備,拾取設(shè)備鼠標(biāo)的使用功能#include 0重置鼠標(biāo)及取得其狀態(tài)1在屏幕上顯示鼠標(biāo)光標(biāo)2從屏幕上隱藏鼠標(biāo)光標(biāo)3返回鼠標(biāo)位置4把鼠標(biāo)移到確定位置5檢索上次調(diào)用之后一共按了多少次鍵6檢索上次調(diào)用之后一共釋放多少次鍵void mouse (int *m1,int *m2,int *m3,int *m4)union REGS inregs,outregs;inregs.x.ax=*m1;inregs.x.bx=*m2;inregs.x.cx=*m3;inregs.x.dx=*m4;int8
24、6(0 x33,&inregs,&outregs);*m1=outregs.x.ax;*m2=outregs.x.bx;*m3=outregs.x.cx;*m4=outregs.x.dx;初始化鼠標(biāo)int resetmouse(void)m1,m2 ,m3,m4;m1=0;預(yù)設(shè)(y sh)Mouse,如存在(cnzi)Mouse,m1返回(fnhu)1,否則返回0mouse(&m1,&m2,&m3,&m4);return(m1);顯示(隱藏)鼠標(biāo)void showmouse(void)int m1,m2,m3,m4;m1=1;顯示為1,隱藏為2mouse(&m1,&m2,&m3,&m4);移動(dòng)
25、到指定位置void movemouse(void)int *x,*y;m1=4; mouse(&m1,&m2,x,y);返回鼠標(biāo)位置void getmouse(void)int *x; int *y; m1=3; mouse(&m1,&m2,x,y);檢查一共按了幾次鼠標(biāo)m2=0檢查左鍵m2=1檢查右鍵m3中返回x坐標(biāo)m4中返回y坐標(biāo)m1=5; m2=0; mouse(&m1,&m2,x,y);檢查一共釋放了幾次鼠標(biāo) 按鍵動(dòng)作數(shù)目返回到m2 m1=6;m2=0; mouse(&m1,&m2,&m3,&m4);橡皮條技術(shù):選擇第一個(gè)線段端點(diǎn),光標(biāo)移動(dòng)時(shí)從初始化拉出一線段,線段隨光標(biāo)移動(dòng)直到選定第
26、二個(gè)端點(diǎn)#include #include #include typedef structvoid (*Inits)();/*初始化鼠標(biāo)驅(qū)動(dòng)*/int (*MButton)();/*按鍵位置與按鍵狀態(tài)*/void (*MouseIco)();/*畫鼠標(biāo)光標(biāo)*/int x;/*橫向坐標(biāo)*/int y;/*豎向坐標(biāo)*/int ox;int oy;int button;/*按鍵標(biāo)志*/MOUSE;/*鼠標(biāo)類*/void mInits();int mMButton();void mMouseIco();union REGS rg;int main()MOUSE *pM,mouse;int graphd
27、rive=0,graphmode=0;int tracking=0,x1,y1,ox1,oy1;pM=&mouse;pM-Inits=mInits;pM-MButton=mMButton;pM-MouseIco=mMouseIco;initgraph(&graphdrive,&graphmode,c:tc);setbkcolor(1);setwritemode(1);/*畫線模式*/pM-Inits(&pM-x,&pM-y);pM-ox=pM-x;pM-oy=pM-y;dopM-button=pM-MButton(&pM-x,&pM-y);pM-MouseIco(&pM-x,&pM-y,&pM
28、-ox,&pM-oy); if(pM-button=1) if(!tracking)/*捕捉開關(guān)*/ox1=x1=pM-x;oy1=y1=pM-y;tracking=1; if(pM-x!=ox1|pM-y!=oy1)line(x1,y1,ox1,oy1);ox1=pM-x;oy1=pM-y;line(x1,y1,pM-x,pM-y); else tracking=0;while(pM-button!=3);void mInits(int *mx,int *my)rg.x.ax=0;int86(0 x33,&rg,&rg);if(rg.x.ax=0) exit(1);rg.x.ax=7;rg.
29、x.cx=2;rg.x.dx=640;int86(0 x33,&rg,&rg);rg.x.ax=8;rg.x.cx=2;rg.x.dx=480;int86(0 x33,&rg,&rg);rg.x.ax=4;*mx=rg.x.cx=640/2;*my=rg.x.dx=480/2;int86(0 x33,&rg,&rg);rectangle(rg.x.cx-2,rg.x.dx-2,rg.x.cx+2,rg.x.dx+2);int mMButton(int *lx,int *ly)rg.x.ax=3;int86(0 x33,&rg,&rg);*lx=rg.x.cx;*ly=rg.x.dx;retur
30、n rg.x.bx;void mMouseIco(int *x,int *y,int *oldx,int *oldy)if(*x!=*oldx|*y!=*oldy)rectangle(*oldx-2,*oldy-2,*oldx+2,*oldy+2); *oldx=*x;*oldy=*y; rectangle(*x-2,*y-2,*x+2,*y+2);消隱(xio yn)消隱(xio yn)算法:對(duì)一個(gè)三維物體(wt),從某視點(diǎn)觀察;對(duì)若干個(gè)三維物體,物體之間相互遮擋;將對(duì)象表面上不可見的點(diǎn),線,面消去,執(zhí)行這種功能的算法,稱消隱算法判斷面是否可見:DAB面,法向量n=DA*AB=(A-D)*(
31、B-A) 都是向量觀察方向向量k=(0,0,1)n*k0可見研究情況:1原理上不復(fù)雜。只需將物體上的所有線段與遮擋面進(jìn)行遮擋測(cè)試,看線段是否被全部遮擋,部分遮擋或不被遮擋,然后畫出線段的可見部分。2消隱算法實(shí)現(xiàn)時(shí)要求適當(dāng)?shù)乃惴按罅康倪\(yùn)算。在60年代,消隱問題雖被認(rèn)為是計(jì)算機(jī)圖形學(xué)中的幾大難問題之一。3目前已提出僅十種算法,研究圍繞算法正確,節(jié)省內(nèi)存空間,加快運(yùn)算速度等目標(biāo)進(jìn)行。消隱算法分類:按操作對(duì)象:對(duì)象空間方法:將三維平面作為分析對(duì)象,通過比較各平面的參數(shù)來確定可見性圖象空間方法:比較象素投影到二維空間后的z值,確定其可見性按應(yīng)用分類:線消隱(線框圖),面消隱(填色圖)線消隱浮動(dòng)水平算法
32、Floating Horizon Algorithm通過對(duì)某一變量(如z)的離散化,使原來的在三維空間中顯示曲面的問題,轉(zhuǎn)變?yōu)轱@示一系列曲線F(x,y,zi)=0 i=0,1,n的問題從幾何上看,這樣做就是選取一組互相平等的平面:z=zi, i=0,1,.,n,使它們依次和原來要顯示的曲面相交,顯示這些交線,就相當(dāng)于顯示了原曲面浮動(dòng)水平線的算法思想? 其基本思想是,采用一系列與坐標(biāo)平面平行的平面(X,Y或Z為定值)去切割曲面,把三維問題轉(zhuǎn)化為二維問題。將X(Y或Z)定為一系列常數(shù)值,可定義一簇平行平面。函數(shù)F(x,y,z)=0表示的曲面與每一平行平面的交線為一條曲線,即y=f(x,y)或x=g
33、(y,z)其中z為常數(shù)。面消隱畫家算法Depth-sorting method算法基本思想:1先把屏幕置成背景色2先將場(chǎng)景中的物體按其距觀察點(diǎn)的遠(yuǎn)近進(jìn)行排序,結(jié)果放在一張線性表中;(線性表構(gòu)造:距觀察點(diǎn)遠(yuǎn)的稱優(yōu)先級(jí)低,放在表頭;距觀察點(diǎn)近的稱優(yōu)先級(jí)高,放在表尾。該表稱為深度優(yōu)先級(jí)表)3然后按照從遠(yuǎn)到近(從表頭到表尾)的順序逐個(gè)繪制物體。不可處理: 多邊形循環(huán)遮擋,多邊形相互穿透Z緩沖器算法 Z-buffer幀緩沖器-保存各像素顏色值(CB) z緩沖器-保存各像素處物體深度值(ZB) z緩沖器中的單元與幀緩沖器中的單元一一對(duì)應(yīng)思想:先將z緩沖器中個(gè)單元的初始值置為+Zmax (大于場(chǎng)景中的所有Z
34、值)。當(dāng)要改變某個(gè)像素的顏色值時(shí),首先檢查當(dāng)前多邊形的深度值是否小于該像素原來的深度值(保存在該像素所對(duì)應(yīng)的Z緩沖器的單元中),如果小于,說明當(dāng)前多邊形更靠近觀察點(diǎn),用它的顏色替換像素原來的顏色;否則說明在當(dāng)前像素處,當(dāng)前多邊形被前面所繪制的多邊形遮擋了,是不可見的,像素的顏色值不改變。幀緩存全置為背景色深度緩存全置為最小Z值for(每一個(gè)多邊形) for(該多邊形所覆蓋的每個(gè)象素(x,y) ) 計(jì)算該多邊形在該象素的深度值Z(x,y); if(Z(x,y)大于Z緩存在(x,y)的值) 把Z(x,y)存入Z緩存中(x,y)處 把多邊形在(x,y)處的顏色值存入幀緩存的(x,y)處 優(yōu)點(diǎn):1)簡(jiǎn)
35、單穩(wěn)定,利于硬件實(shí)現(xiàn)2)不需要整個(gè)場(chǎng)景的幾何數(shù)據(jù)缺點(diǎn)(qudin): 1)需要(xyo)一個(gè)額外的Z緩沖器2)在每個(gè)多邊形占據(jù)的每個(gè)像素(xin s)處都要計(jì)算深度值,計(jì)算量大Z緩沖器算法改進(jìn)算法幀緩存全置為背景色for(屏幕上的每個(gè)象素(i,j) 深度緩存變量zb置最小值MinValue for(多面體上的每個(gè)多邊形Pk) if(象素點(diǎn)(i,j)在pk的投影多邊形之內(nèi))計(jì)算Pk在(i,j)處的深度值depth;if(depth大于zb)zb = depth;indexp = k; if(zb != MinValue) 在交點(diǎn) (i,j) 處用多邊形Pindexp的顏色顯示 光線投射法思想:
36、將通過繪圖窗口內(nèi)每一個(gè)像素的投影線與場(chǎng)景中的所有多邊形求交。如果有交點(diǎn),用深度值最大的交點(diǎn)(最近的)所屬的多邊形的顏色顯示相應(yīng)的像素;如果沒有交點(diǎn),說明沒有多邊形的投影覆蓋此像素,用背景色顯示即可。for (v=0;vvmax;v+)for (u=0; uumax; u+) 形成通過像素(u,v)的投影線; for(場(chǎng)景中每一個(gè)多邊形)將投影線與多邊形求交; if(有交點(diǎn))以最近交點(diǎn)所屬多邊形的顏色顯示像素(u,v);else以背景色顯示像素(u,v);光照模型Gouraud方法在每個(gè)多邊形頂點(diǎn)處計(jì)算顏色,然后在各個(gè)多邊形內(nèi)部進(jìn)行線性插值,得到多邊形內(nèi)部各點(diǎn)顏色.即它是一種顏色插值著色方法.1
37、先計(jì)算出多面體頂點(diǎn)的法線方向.2用光照模型求得V點(diǎn)的亮度. 3由兩頂點(diǎn)的亮度,插值得出棱上各點(diǎn)的亮度.由棱上各點(diǎn)的亮度,插值得出面上各點(diǎn)的亮度.優(yōu)點(diǎn):能有效的顯示漫反射曲面,計(jì)算量小缺點(diǎn):1高光有時(shí)會(huì)異常2當(dāng)對(duì)曲面采用不同的多邊形進(jìn)行分割時(shí)會(huì)產(chǎn)生不同的效果.3Gouraud明暗處理會(huì)造成表面上出現(xiàn)過亮或過暗的條紋,稱為馬赫帶(Mach_band)效應(yīng)改進(jìn)Phong提出雙線性法向插值,以時(shí)間為代價(jià),解決高光問題Phong方法通過對(duì)多邊形頂點(diǎn)的法矢量進(jìn)行插值,獲得其內(nèi)部各點(diǎn)的法矢量,又稱為法向插值著色方法.1計(jì)算多邊形單位法矢量2計(jì)算多邊形頂點(diǎn)單位法矢量3對(duì)多邊形頂點(diǎn)法矢量進(jìn)行雙線性插值,獲得內(nèi)部
38、各點(diǎn)的法矢量4利用光照明方程計(jì)算多邊形內(nèi)部各點(diǎn)顏色兩種方法比較Phong著色方法繪制的圖形比Gouraud方法更真實(shí),體現(xiàn)在兩個(gè)方面:高光區(qū)域的擴(kuò)散,產(chǎn)生正確的高光區(qū)域1Phong著色方法計(jì)算量遠(yuǎn)大于Gouraud著色方法2在處理某些多邊形分割的曲面時(shí),Phong算法還不如Gouraud算法好基本造型方法造型技術(shù):研究如何在計(jì)算機(jī)中建立恰當(dāng)?shù)哪P捅硎疚矬w的技術(shù)稱為造型技術(shù),現(xiàn)有實(shí)體造型技術(shù),曲面造型技術(shù),非幾何形體的造型技術(shù)結(jié)構(gòu)實(shí)體幾何模型CSG Constructive Solid Geometry 體素構(gòu)造法,結(jié)構(gòu)實(shí)體幾何法由兩個(gè)物體間的并交差操作生成(shn chn)一新物體,物體(wt
39、)為立方體,圓柱(yunzh),圓錐等CSG結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu):一棵二叉樹體素 集合運(yùn)算 變換(平移,旋轉(zhuǎn))操作終端結(jié)點(diǎn) 非終端結(jié)點(diǎn) 非終端結(jié)點(diǎn)CSG樹定義了構(gòu)造方式,不反映面,邊,點(diǎn)等邊界信息,這種表示稱為物體的隱式模型優(yōu)點(diǎn):1數(shù)據(jù)結(jié)構(gòu)比較簡(jiǎn)單,數(shù)據(jù)量比較小;2CSG方法表示的形體形狀,比較容易修改缺點(diǎn):1對(duì)形體的表示受體素的種類和對(duì)體素操作的種類的限制;2由于形體的邊界幾何元素(點(diǎn),邊,面)是隱含地表示在CSG中,則顯示與繪制CSG表示的形體需要較長(zhǎng)時(shí)間實(shí)體的性質(zhì):具有一定的形狀;具有確定的封閉的邊界;是一個(gè)內(nèi)部連通的三維點(diǎn)集;占據(jù)有限的空間;經(jīng)過任意的運(yùn)算后,仍為有效實(shí)體正則集合運(yùn)算保證集合運(yùn)算的結(jié)果仍是一個(gè)正則形體,即丟棄懸邊、懸面等分解模型空間位置枚舉表示法:將形體空間細(xì)分為小的立方體單元,與此相應(yīng),在計(jì)算機(jī)內(nèi)存中開辟一個(gè)三維數(shù)組,凡有形體占有的空間,存儲(chǔ)單元中記為1;其余空間記為0;表示簡(jiǎn)單,但占用存儲(chǔ)量大.分層樹結(jié)構(gòu):稱八叉樹,用于表示實(shí)體,為四叉樹編碼的擴(kuò)展.樹根表示整幅圖象,將圖象分成4個(gè)大小相等的子圖,4個(gè)子圖用4個(gè)結(jié)點(diǎn)表示.根據(jù)均勻性準(zhǔn)則判定圖塊是否再被細(xì)分建立過程:1八叉樹的根結(jié)點(diǎn)對(duì)應(yīng)整個(gè)物體空間2如果它完全被物體占據(jù),將該結(jié)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東酒店管理職業(yè)技術(shù)學(xué)院《俄語(yǔ)詞匯學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東交通職業(yè)技術(shù)學(xué)院《精密機(jī)械設(shè)計(jì)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東工商職業(yè)技術(shù)大學(xué)《視覺形象識(shí)別設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 《如何對(duì)待批評(píng)》課件
- 培訓(xùn)課件-車輛消防安全知識(shí)培訓(xùn)
- 《新藥研發(fā)概論》課件
- 廣安職業(yè)技術(shù)學(xué)院《專業(yè)韓語(yǔ)1》2023-2024學(xué)年第一學(xué)期期末試卷
- 共青科技職業(yè)學(xué)院《人文采風(fēng)》2023-2024學(xué)年第一學(xué)期期末試卷
- 《素材卡通圖》課件
- 《性格分析與溝通》課件
- 蘇科版九年級(jí)物理上冊(cè)教案:11.5機(jī)械效率
- DL∕T 2602-2023 電力直流電源系統(tǒng)保護(hù)電器選用與試驗(yàn)導(dǎo)則
- DL∕T 1919-2018 發(fā)電企業(yè)應(yīng)急能力建設(shè)評(píng)估規(guī)范
- DL∕T 612-2017 電力行業(yè)鍋爐壓力容器安全監(jiān)督規(guī)程
- DBJ43-T 315-2016 現(xiàn)澆混凝土保溫免拆模板復(fù)合體系應(yīng)用技術(shù)規(guī)程
- 自然資源價(jià)格評(píng)估通則 TD/T 1061-2021
- 社區(qū)居家養(yǎng)老食堂方案策劃書(2篇)
- 2024年肺結(jié)節(jié)病的診斷與鑒別診斷講座課件
- 2023-2024學(xué)年浙江省寧波市余姚市九年級(jí)(上)期末英語(yǔ)試卷
- 健康狀況與風(fēng)險(xiǎn)評(píng)估智慧樹知到期末考試答案章節(jié)答案2024年上海健康醫(yī)學(xué)院
- 《金融風(fēng)險(xiǎn)管理》期末復(fù)習(xí)試題及答案
評(píng)論
0/150
提交評(píng)論