高級計算機圖形學(xué)實驗報告_第1頁
高級計算機圖形學(xué)實驗報告_第2頁
高級計算機圖形學(xué)實驗報告_第3頁
高級計算機圖形學(xué)實驗報告_第4頁
高級計算機圖形學(xué)實驗報告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 高級計算機圖形學(xué) 學(xué) 院: 專 業(yè): 學(xué) 號: 姓 名: 實驗一:DDA算法和中點Bresenham算法繪制直線段1 1. 實驗背景計算機圖形學(xué)(Computer Graphics,簡稱CG)是一種使用數(shù)學(xué)算法將二維或三維圖形轉(zhuǎn)化為計算機顯示器的柵格形式的科學(xué)。簡單地說,計算機圖形學(xué)的主要研究內(nèi)容就是研究如何在計算機中表示圖形、以及利用計算機進(jìn)行圖形的計算、處理和顯示的相關(guān)原理與算法。20世紀(jì)中后期,隨著計算機技術(shù)的飛速發(fā)展,計算機描述現(xiàn)實世界的方式越來越豐富:從聲音到圖像再到視頻,計算機所能表示的世界越來越復(fù)雜。通過計算機生成、處理和顯示圖形的計算機圖形學(xué)也在迅猛的發(fā)展,計算機圖形學(xué)的研究

2、內(nèi)容非常廣泛,像圖形硬件、圖形標(biāo)準(zhǔn)、圖形交互技術(shù)、光柵圖形生成算法、曲線曲面造型、實體造型、真實感圖形計算與顯示算法、非真實感繪制,以及科學(xué)計算可視化、計算機動畫、自然景物仿真、虛擬現(xiàn)實等。隨著計算機硬件的不斷更新以及各種圖形軟件的不斷推出,計算機圖形學(xué)的應(yīng)用前景將會更加引人入勝。在本次試驗中,實現(xiàn)了用DDA算法和中點Bresenham算法對給定兩點繪制直線段。2 2. 開發(fā)工具M(jìn)icrosoft Visual Studio 2013Microsoft Visual Studio(簡稱VS)是美國微軟公司的開發(fā)工具包系列產(chǎn)品。Visual Studio是一個基本完整的開發(fā)工具集,它包括了整個軟

3、件生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發(fā)環(huán)境(IDE)等等。3 3. 基本功能(1) 用DDA算法實現(xiàn)任意給定兩點的直線段繪制;(2) 用中點Bresenham算法實現(xiàn)任意給定兩點的直線段繪制。4 4. 實現(xiàn)步驟(1) 給定直線兩端點;(2) 用DDA算法繪制直線段;(3) 用中點Bresenham算法繪制直線段;5 5. 關(guān)鍵算法5.1 DDA算法(1) 給定直線兩端點P0(x0,y0)和P1(x1,y1);(2) 計算x方向的間距x=x1-x0和y方向的間距y=y1-y0,則直線斜率為dydx=yx=y1-y0x1-x0=k。(3) 每一步的x和y值為xi+1=

4、xi+x 和yi+1=yi+y。其中=1maxx,y=1x,|x|y| 1y, |y|x| ;(4) 若maxx,y=x,即|k|1:xi+1=xi+x=xi+1xx=xi±1yi+1=yi+y=yi+1xy=yi±k若maxx,y=y,即|k|1:xi+1=xi+x=xi+1yx=xi±1kyi+1=yi+y=yi+1yy=yi±1(5) 對求出的xi+1和yi+1進(jìn)行四舍五入,即round(xi+1)=(int)( xi+1+0.5)或者round(yi+1)=(int)( yi+1+0.5);(6) 繪制出直線。5.2中點Bresenham(1)

5、給定直線兩端點P0(x0,y0)和P1(x1,y1);(2) 計算初始值x和y,d=x-2y,x=x0,y=y0;(3) 繪制點(x,y),根據(jù)d的符號,更新(x,y)和d.若d<0,則(x,y)更新為(x+1,y+1),d更新為d+2x-2y;否則(x,y)更新為(x+1,y),d更新為d-2y;(4) 當(dāng)直線沒有畫完時,重復(fù)(3),否則結(jié)束。6 6. 關(guān)鍵代碼6.1 DDA算法void DDA (int x, int y, int x0, int y0)int steps,dx,dy,px,py;bool flags;float dxi,dyi,xi,yi;xi=x; yi=y;dx

6、=x0-x;dy=y0-y;if(abs(dx)>abs(dy)steps=abs(dx);flags=true;elsesteps=abs(dy);flags=false;dxi=(float)(dx)/steps;dyi=(float)(dy)/steps;if(flags=true)for(int i=0;i<steps;i+)xi=xi+dxi;yi=yi+dyi;elsefor(int i=0;i<steps;i+)xi=xi+dxi;yi=yi+dyi;6.2 中點Bresenham算法void Bresenham(int x1, int y1, int x2,

7、int y2)int x,y,dx,dy,p,px,py; if (x1 = x2)if (y1 < y2)for (int i=y1;i<=y2;i+)px=x1;py=m_DrawRect.bottom-i;elsefor (int i=y2;i<=y1;i+)px=x1;py=m_DrawRect.bottom-i;return;/斜率判斷,斜率絕對值大于1,則m為false,否則為trueBOOL m = (abs(y2-y1)<=abs(x2-x1); if (x1 > x2)p=x1;x1=x2;x2=p;p=y1;y1=y2;y2=p;x = x1;

8、 y = y1; dx = x2 - x1; dy = y2 - y1;/斜率絕對值小于等于1if (m) if (y1 <= y2)p = (dy<<1) - dx;while (x <= x2)px=x;py=m_DrawRect.bottom-y;if (p < 0)x+;p=p+(dy<<1);elsex+;y+;p=p+(dy-dx)<<1); elsep = dx - (dy<<1);while (x <= x2)px=x;py=m_DrawRect.bottom-y;if (p < 0)x+;p=p-(

9、dy<<1);elsex+;y-;p=p-(dy+dx)<<1);/斜率絕對值大于1else if (y1 <= y2)p = (dx<<1) - dy;while (y <= y2)px=x;py=m_DrawRect.bottom-y;if (p < 0)y+;p=p+(dx<<1);elsex+;y+;p=p+(dx-dy)<<1); elsep = (dx<<1) + dy;while (y >= y2)px=x;py=m_DrawRect.bottom-y;if (p < 0)y-;

10、p=p+(dx<<1);elsex+;y-;p=p+(dx+dy)<<1);7 7. 實驗結(jié)果給定直線兩端點P0(1,1)和P1(20,30)。7.1 DDA算法7.2中點Bresenham算法8 8. 總結(jié)及自我評價本次試驗主要實現(xiàn)了DDA算法和Bresenham算法繪制直線段的功能。DDA算法和Bresenham算法是計算機圖形學(xué)中繪制直線的兩種常用算法。DDA算法由于每一步都要處理浮點數(shù)的四舍五入,所以在繪圖時要進(jìn)行取整,效率較低。中點Bresenham算法是DDA算法畫線算法的一種改進(jìn)算法。本質(zhì)上它也是采取了步進(jìn)的思想。不過它比DDA算法作了優(yōu)化,避免了步進(jìn)時浮

11、點數(shù)運算,同時為選取符合直線方程的點提供了一個好思路。通過此次實驗,加深了我對基本畫圖算法的理解。在實驗過程中,把老師上課介紹的內(nèi)容進(jìn)行了更透徹的理解,更直觀的認(rèn)識圖形學(xué)中基本原理的執(zhí)行原理和效果,是對課程內(nèi)容很好的延伸和拓展,有助于為今后研究工作中用到圖形學(xué)相關(guān)知識時打下良好的基礎(chǔ)。實驗二:太陽系模型動畫1 1. 實驗背景真實的三維空間,有真實的距離空間。計算機里只是看起來很像真實世界,因此在計算機顯示的3D圖形,就是讓人眼看上就像真的一樣。人眼有一個特性就是近大遠(yuǎn)小,就會形成立體感。在本次試驗中,主要實現(xiàn)了對太陽、地球和月亮運動模型的建立,并為其增加光照系統(tǒng),模擬太陽、地球和月亮的光照環(huán)境

12、。實驗結(jié)果以動畫形式顯示。并且實現(xiàn)了模型的幾何變換。2 2. 開發(fā)工具(1) Microsoft Visual Studio 2013Microsoft Visual Studio(簡稱VS)是美國微軟公司的開發(fā)工具包系列產(chǎn)品。Visual Studio是一個基本完整的開發(fā)工具集,它包括了整個軟件生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發(fā)環(huán)境(IDE)等等。(2) OpenGLOpenGL(即開放性圖形庫,Open Graphics Library)是由美國SGI公司為圖形工作站開發(fā)了功能強大的三維圖形和模型庫。OpenGL提供強大的圖形處理功能,使簡單的三維場景制作變

13、得方便、靈活,效果更加逼真。OpenGL為用戶在VisualStudio中提供了圖形用戶接口,使用戶更容易建立三維模型。本文基于OpenGL開發(fā)了一個簡單的三維場景,并在這個場景中添加了材質(zhì)渲染,燈光,運動軌跡效果。3 3. 基本功能(1) 實現(xiàn)了對太陽、地球和月亮運動模型的建立,實驗結(jié)果以動畫形式顯示,實現(xiàn)了地球繞太陽公轉(zhuǎn)以及月球繞地球公轉(zhuǎn);(2) 增加光照系統(tǒng),模擬太陽、地球和月亮的光照環(huán)境。(3) 實現(xiàn)了幾何變換。模型可以進(jìn)行平移變換,并且可以沿坐標(biāo)軸y和坐標(biāo)軸z的進(jìn)行旋轉(zhuǎn)變換。(4) 實現(xiàn)了觀察空間的投影變換。模型呈現(xiàn)透視投影,投影中心到投影面之間的距離是有限的。4 4. 實現(xiàn)步驟(1

14、) 初始化各種屬性,光源顏色,材質(zhì)屬性,深度測試以及背景顏色;(2) 設(shè)置視區(qū)的大小尺寸,同時對空間進(jìn)行修剪,確定觀察空間;(3) 繪制太陽月亮和地球的模型,調(diào)整各個天體的大小,并為其增加自傳,公轉(zhuǎn)的設(shè)計;(4) 在初始化函數(shù)中添加設(shè)置光照的代碼,同時把光照效果中光源的坐標(biāo)位置設(shè)置為與太陽坐標(biāo)位置相同;(5) 為模型添加幾何變換。使模型可以左右平移,并且可以沿坐標(biāo)軸旋轉(zhuǎn)。5 5. 關(guān)鍵算法本實驗利用了OpenGL圖形軟件包,建立太陽、月亮和地球的運動模型,增加了光照系統(tǒng),模擬太陽、月亮和地球的光照環(huán)境。5.1三維圖形繪制利用glutSolidSphere()函數(shù)渲染球體,并利用glRotate

15、f()函數(shù)來確定三維球體的旋轉(zhuǎn)方向,并利用glColor()函數(shù)為球體賦予不同的顏色。利用glutTimerFunc(100,timerFunc, 1)設(shè)置定時器,利用glutMainLoop()函數(shù)進(jìn)入GLUT事件處理循環(huán),讓所有與事件相關(guān)的函數(shù)調(diào)用無限循環(huán),來實現(xiàn)太陽、月亮地球的運動動畫。5.2光照模型光照模型又稱明暗模型,描述物體表面的色彩明暗與光源特性和物體表面特性的關(guān)系。主要用于物體表面某點處的光強度計算。通過光照模型可以更好的繪制真實感圖像。在本實驗中,我們使用了簡單的光照模型,即僅考慮光源照射在物體表面產(chǎn)生的反射光,并且常假設(shè)物體表面是光滑的,所以生成的圖形可以模擬出不透明物體表

16、面的明暗過渡,具有一定的真實感。利用glLightfv(GL_LIGHT0, GL_POSITION, light_position)指定光源位置,即太陽位置。glEnable(GL_LIGHTING)和glEnable(GL_LIGHT0)函數(shù)打開光照并使用第0號光照。利用glEnable(GL_DEPTH_TEST)啟用深度測試,實現(xiàn)遮擋。5.3幾何變換圖形的幾何變換是指對圖形的幾何信息經(jīng)過評議、比例、旋轉(zhuǎn)等變換后產(chǎn)生新的圖形。三維基本幾何變換都是相對于坐標(biāo)原點和坐標(biāo)軸的幾何變換。在本實驗中主要運用了平移變換和旋轉(zhuǎn)變換。模型可以左右平移,并且可以繞y軸和z軸旋轉(zhuǎn)90。6 6. 關(guān)鍵代碼6.

17、1程序初始化void init()glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_SMOOTH);glEnable(GL_DEPTH_TEST);/ 啟用深度測試glFrontFace(GL_CCW);/ 控制逆時針方向表面為正面glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL);glClearColor(1.0f, 1.0f, 1.0f, 1.0f);/背景為白色6.2繪制天體void display()glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER

18、_BIT);/繪制太陽glPushMatrix();glPushMatrix();glDisable(GL_LIGHTING);glRotatef(90.0, 1.0, 0.0, 0.0);glColor3ub(255, 0, 0);glutSolidSphere(1.0, 20, 16);glPopMatrix();glEnable(GL_LIGHTING);glLightfv(GL_LIGHT0, GL_POSITION,light_position);glEnable(GL_LIGHT0);/繪制月亮glPushMatrix();glRotatef(GLfloat)month, 0.0,

19、 1.0, 0.0);glTranslatef(4.0, 0.0, 0.0);glPushMatrix();glRotatef(90.0, 1.0, 0.0, 0.0);glColor3ub(0, 0, 255);glutSolidSphere(0.6, 16, 10);glPopMatrix();/繪制地球glRotatef(day, 0.0, 1.0, 0.0);glTranslatef(1.0, 0.0, 0.0);glRotatef(90.0, 1.0, 0.0, 0.0);glColor3ub(0, 255, 255);glutSolidSphere(0.3, 10, 8);glPopMatrix();glutSwapBuffers();6.3實現(xiàn)幾何變換void keyboard2(unsigned char key, int x, int y)switch (key)case 'd':day = (day + 10) %

溫馨提示

  • 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

提交評論