




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實驗報告 題 目: 計算機圖形學(xué) 院 (系):信息與控制工程學(xué)院專業(yè)班級: 計算機1202 姓 名: 谷萌 學(xué) 號: 120620218 指導(dǎo)教師: 周方曉 2015年12月 12日實驗一 熟悉Windows圖形開發(fā)環(huán)境一、實驗?zāi)康?#160;1. 熟悉VisualC+6.0的開發(fā)環(huán)境; 2. 掌握Windows圖形輸出的方法; 3. 理解設(shè)備環(huán)境、畫筆、畫刷的概念,掌握常用的繪制函數(shù)。 二、實驗原理 原理:使用Visual C+在Windows下進行圖形程序設(shè)計 三、實驗內(nèi)容 內(nèi)容:
2、;編寫程序,要求如下: 1. 定義一支紅色畫筆,繪制一個正方形; 2. 用不同顏色的線條連接互不相臨的兩個頂點; 3. 用不同顏色的畫刷填充用上述方法所形成的圖形的每一個區(qū)域。四、實驗步驟使用Visual C+在Windows下進行圖形程序設(shè)計的基本步驟是:(1)在繪制之前,創(chuàng)建繪圖工具并設(shè)置相關(guān)的顏色、線型、線寬等屬性;(2)調(diào)用相關(guān)的繪圖函數(shù)選擇繪圖工具并進行繪圖;(3)在繪制之后,恢復(fù)原有的繪圖工具。五、實驗環(huán)境 已安裝visual C+6.0的Windows XP計算機一臺,u盤
3、60;六、實驗結(jié)果及分析 運行結(jié)果如圖所示 分析: 代碼調(diào)試完畢,編譯運行,按預(yù)期結(jié)果輸出。七、實驗小結(jié) 對我來說這次實驗既是一次挑戰(zhàn)也是一次全新的學(xué)習(xí)機會。當(dāng)然這也是我第一次編寫Windows圖形程序,所以在編寫過程中發(fā)現(xiàn)了許多問題,比如說vc+6.0軟件存在問題,導(dǎo)致程序總是出現(xiàn)一些莫名其妙的錯誤,像無法打開工程,自動關(guān)閉等等。后來,經(jīng)過詢問老師和上網(wǎng)查詢,才發(fā)現(xiàn)是軟件和我的系統(tǒng)有兼容性問題,與一些軟件也存在沖突。后來在網(wǎng)上的建議,我換成Windows xp的虛擬機中運行,此問題得到了解決。 除此之外,程序編寫時將工程類型創(chuàng)建
4、錯了,導(dǎo)致無法連接成功。后來經(jīng)過上網(wǎng)搜索相關(guān)內(nèi)容解決了此問題。然后在調(diào)用一些畫圖的函數(shù)時對函數(shù)體了解不多,導(dǎo)致函數(shù)調(diào)用出錯。實驗二 創(chuàng)建VC6.0下 OpenGL繪圖程序的基本框架一、 實驗?zāi)康?#160;1. 了解使用VC6.0下 OpenGL繪圖程序的基本框架 2. 掌握理解簡單的OpenGL程序結(jié)構(gòu); 3. 掌握OpenGL提供的基本圖形函數(shù),尤其是生成點、線、面的函數(shù)。二、 實驗環(huán)境 安裝有Visual C+ 6.0的windowXp計算機一臺,u盤。三、 實驗原理內(nèi)容步驟 新建工程,在
5、工程設(shè)置鏈接L對象庫模版中添加OPENGL庫,即opengl32.lib glu32.lib glaux.lib如圖所示:在Visual C+中,修改視圖類成員函數(shù)代碼實現(xiàn)OpenGL繪圖的過程如下:在(文件名.view)視圖類中改造PreCreateWindow函數(shù):將窗口的客戶區(qū)設(shè)置為OpenGL能夠支持的風(fēng)格。具體添加代碼如下:cs.style|=WS_CLIPCHILDREN|WS_CLIPSIBLINGS;在工具欄的視圖類向?qū)е刑砑硬⒏脑霴nCreate函數(shù):定義像素存儲格式,并創(chuàng)建一個OpenGL操作所必須的繪圖上下文RC(Rendering Context)。使用一個PIXELF
6、ORMATDESCRIPTOR結(jié)構(gòu)來指定像素格式,使用wglCreateContext()函數(shù)創(chuàng)建繪圖上下文RC。添加頭文件: #include "GLglu.h"#include "GLgl.h"#include "GLglaux.h"OnCreate函數(shù)中具體添加代碼如下:/首先定義像素存儲格式PIXELFORMATDESCRIPTOR pfd= sizeof(PIXELFORMATDESCRIPTOR), / pfd的大小 1, /結(jié)構(gòu)的版本號 PFD_DRAW_TO_WINDOW| /支持window PFD_SUPPORT_
7、OPENGL| /支持OpenGL PFD_DOUBLEBUFFER, /雙緩存 PFD_TYPE_RGBA, /RGBA顏色模式 24, /24位顏色深度緩存 0,0,0,0,0,0, /color bits ignored 0, /no alpha buffer0, /shift bit ignored0, /不使用累積緩存0,0,0,0, /accum bits ignored32, /32位z緩沖0, /不使用模板緩存0, /no auxiliary bufferPFD_MAIN_PLANE, /選擇主層面0, /保留0,0,0 /layer masks ignored;CClient
8、DC dc(this);int pixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd);BOOL success=SetPixelFormat(dc.m_hDC,pixelFormat,&pfd);/創(chuàng)建繪圖上下文RCHGLRC m_hRC=wglCreateContext(dc.m_hDC);在工具欄的視圖類向?qū)е刑砑硬⒏脑霴nSize函數(shù):當(dāng)視圖尺寸變化是,應(yīng)及時將新的客戶區(qū)尺寸通知OpenGL,方能夠正確在窗口客戶區(qū)域顯示二維場景,通過命令glViewport完成這項工作:glViewport(0,0,cx,cy);具體添加代碼如下:if
9、(cy>0&&cx>0)glViewport(0,0,cx,cy); /視口設(shè)置成應(yīng)用程序的視圖的大小glMatrixMode(GL_PROJECTION);/投影矩陣模式glLoadIdentity();/if.else.語句是平行投影的實現(xiàn)方式/參數(shù):左、右、下、上、近、遠if(cx<=cy) /原先是3.0 左,右,下,上,近,遠glOrtho(-4.0,4.0,-4.0*(GLfloat)cx/(GLfloat)cy, 4.0*(GLfloat)cx/(GLfloat)cy,-10.0,10.0);elseglOrtho(-4.0,4.0,-4.0*(
10、GLfloat)cy/(GLfloat)cx, 4.0*(GLfloat)cy/(GLfloat)cx,-10.0,10.0);/elseglFrustum(-2.0,2.0,-2.0*cy/double(cx),2.0*cy/double(cx),2.0,6.0);/*可以乘一個自定義的投影矩陣實現(xiàn)投影: double ProjectMatrix44; . 計算投影矩陣ProjectMatrixglMultMatrixd(&ProjectMatrix00);*/glMatrixMode(GL_MODELVIEW);/以下是模型變換矩陣模式glTranslatef(0.0,0.0,-4
11、.0); /拉開視點和物體glRotated(20,0.5,1.0,0.5);在工具欄的視圖類向?qū)е刑砑硬⒏脑霴nEraseBkgnd函數(shù):重載視圖類的OnEraseBkgnd成員,使之返回TRUE值可以阻止Windows重畫窗口背景,因為OpenGL自己會設(shè)置窗口背景,這樣可以防止窗口頻繁刷新(如移動窗口)時產(chǎn)生的閃爍現(xiàn)象。在工具欄的視圖類向?qū)е刑砑硬⒏脑霴nDestroy函數(shù):在OnDestroy成員中需要釋放OnCreate成員中RC所占用的資源,命令wglDeleteContext可以完成這個工作,但在釋放RC之前,還需要使用命令wglMakeCurrent()斷開RC與設(shè)備描述表DC
12、的連接。具體代碼如下:wglMakeCurrent(NULL,NULL);wglDeleteContext(m_hRC);添加成員變量:改造OnDraw:根據(jù)當(dāng)前的視點、視距、觀看方向等參數(shù),設(shè)置合適的OpenGL視景體屬性,使用戶能夠看到預(yù)期的場景外觀。添加的代碼如下:wglMakeCurrent(pDC->m_hDC,m_hRC);DrawScene(); /用戶自定義函數(shù),用來編寫OpenGL繪制語句的wglMakeCurrent(pDC->m_hDC,NULL);添加成員函數(shù):在DrawScene( )函數(shù)中編寫具體的繪圖程序。首先需要設(shè)置視點、視距和觀看方向等場景參數(shù),然
13、后繪制圖元。四、 實驗結(jié)果編譯并運行該程序1. 該程序的作用是在一個黑色的窗口中央畫一個矩形、三角形和三個點。圖2-1是示范程序的結(jié)果,添加代碼,在原有結(jié)果基礎(chǔ)上添加三條直線組成新的三角形(如圖2-2所示),將增加的代碼寫在實驗報告紙上。 2. 使用Visual Studio C+編譯已有項目工程,并編寫代碼生成以下圖形,如圖2-3所示。 3. 在此基礎(chǔ)上,修改各頂點顏色,使得每個頂點顏色不一樣,多邊形內(nèi)部顏色漸變,如圖2-4所示(該程序需使用雙緩存區(qū))。 3、在此基礎(chǔ)上,修改各頂點顏色,使得每個頂點顏色不一樣,多邊形內(nèi)部顏色漸變,如圖2-4所示(該程
14、序需使用雙緩存區(qū))。 五、實驗小結(jié) 通過本次實驗,使我對VC6.0下 OpenGL繪圖程序的基本框架有了許多的理解,同時也掌握了一些簡單的OpenGL程序結(jié)構(gòu),對OpenGL提供的基本圖形函數(shù),有了許多了解,其中尤其是生成點、線、面的函數(shù)的使用,有了非常多的理解。實驗三 用OpenGL繪制基本圖元(直線、多邊形等)一、 實驗?zāi)康?#160;1. 學(xué)會使用OpenGL繪制基本圖元; 2. 利用OpenGL實現(xiàn)實線,虛線,點劃線的繪制,及kock曲線。二、 實驗原理該實驗是基于實驗二基礎(chǔ)上,步驟省略。添加成員函數(shù)int DrawGLSce
15、ne(GLvoid):實驗代碼如下:int DrawGLScene(GLvoid)/ Here's Where We Do All The DrawingglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/ Clear Screen And Depth BufferglLoadIdentity();/ Reset The Current Modelview Matrix/Draw lineglBegin(GL_LINES);glColor3f(1.0,0.0,0.0);/設(shè)置顏色為紅色glVertex2f(0,0);glVertex2
16、f(1,1);glColor3f(0.0,1.0,0.0);/設(shè)置顏色為綠色glVertex2f(0.2,0);glVertex2f(1.2,1);glEnd();glTranslatef(-1.5f,0.0f,-6.0f);/ Move Left 1.5 Units And Into The Screen 6.0 / Drawing TrianglesglBegin(GL_TRIANGLES);/ Drawing Using TrianglesglVertex3f( 0.0f, 1.0f, 0.0f);/ TopglVertex3f(-1.0f,-1.0f, 0.0f);/ Bottom L
17、eftglVertex3f( 1.0f,-1.0f, 0.0f);/ Bottom RightglEnd();/ Finished Drawing The TriangleglTranslatef(3.0f,0.0f,0.0f);/ Move Right 3 Units / Draw QuadglBegin(GL_QUADS);/ Draw A QuadglVertex3f(-1.0f, 1.0f, 0.0f);/ Top LeftglVertex3f( 1.0f, 1.0f, 0.0f);/ Top RightglVertex3f( 1.0f,-1.0f, 0.0f);/ Bottom Ri
18、ghtglVertex3f(-1.0f,-1.0f, 0.0f);/ Bottom LeftglEnd();/ Done Drawing The Quadreturn TRUE;/ Keep Going三、實驗內(nèi)容 1. 用OpenGL程序繪制實現(xiàn),虛線和點劃線 2. 用OpenGL程序,分別以直線和正三角形為初始生成員,實現(xiàn)迭代次數(shù)在6次以內(nèi)的kock曲線,要求用鍵盤交互控制迭代次數(shù)。 四、實驗環(huán)境 安裝有Visual C+6.0的windowXp計算機一臺,u盤 五、實驗步驟 1)相關(guān)算法
19、及原理描述 直線的繪制 在OpenGL中繪制直線通過指定直線段的端點來實現(xiàn),用glVertex函數(shù)指定直線段端點的坐標(biāo)位置,用glBegin/glEnd函數(shù)對包含一系列的點坐標(biāo),并利用符號常量解釋這些點構(gòu)成直線的方式。 虛線的繪制 繪制虛線需要先調(diào)用函數(shù)過了Enable(GL_LINE_STIPPLE);打開劃線模式。然后,函數(shù)glLineStipple將建立用于劃線的模式 glLineStipple(Glint factor, GLushort pattern); Kock曲線 Kock曲線的初始生成
20、員是一條直線,生成規(guī)則是將直線段分為三等分,首尾兩段保持不變,中間用兩段等長且互成60°角的直線段代替。這樣,直線段被分成四段,每段長度都只有原來的1/3。Kock曲線的分形維數(shù)為D=ln4/ln31.26186 假設(shè)原直線的首尾點是P0(x0,y0),P1(x1,y1),則新的四段直線段的五個端點坐標(biāo)分別為 (x0 , y0) (x0+(x1-x0)/3 , y0+(y1-y0)/3) (x1+x0)/2±(y0-y1)3
21、/6 , (y1+y0)/2±(x1-x0)3/6) (x0+2(x1-x0)/3 , y0+2(y1-y0)/3) (x1 , y1) 其中,第三個點坐標(biāo)公式中的正負號表示中間兩條心直線段處于元直線段的哪一側(cè)。根據(jù)這一規(guī)則迭代六次。六、實驗結(jié)果及分析 程序調(diào)試、測試與運行結(jié)果分析: 直線的繪制結(jié)果 虛線的繪制結(jié)果 Kock曲線繪制結(jié)果 六、實驗小結(jié) 通過本次實驗使我學(xué)會使用OpenGL繪制基本圖元,并利用OpenGL實現(xiàn)實線,虛線,點劃線的繪制,及對
22、kock曲線,對直線、虛線、Kock曲線的繪制有了一定的了解與掌握。通過實驗,對圖形學(xué)中所用算法也有了更深的認識,并且通過從八分圓構(gòu)造完整圓的過程,學(xué)會了圖形學(xué)算法設(shè)計的一種思想實驗四 用OpenGL生成NURBS曲線一、實驗?zāi)康?#160; (1)理解Bézier曲線和B樣條曲線的定義、性質(zhì)及繪制算法; (2)理解OpenGL中窗口坐標(biāo)與世界坐標(biāo)的映射關(guān)系; (3)掌握OpenGL的Bézier曲線和NURBS曲線的繪制方法。二、實驗原理,內(nèi)容及步驟在OopenGL中,GLU函數(shù)庫提供了一個NURBS接口。用戶需要提供的數(shù)據(jù)包括控
23、制點、節(jié)點等數(shù)據(jù),控制點描述曲線的大致形狀,節(jié)點控制B樣條函數(shù)的形狀。繪制一條NURBS曲線的步驟:(1)提供控制點序列和節(jié)點序列;(2)創(chuàng)建一個NURBS對象,設(shè)置NURBS對象屬性;(3)繪制曲線; 創(chuàng)建一個NURBS對象,用如下兩條語句: GLUnurbsObj *theNurbs; theNurbs=gluNewNurbsRender( );創(chuàng)建對象后,用如下函數(shù)設(shè)置NURBS對象屬性:void gluNurbsProperty(GLUnurbsObj * nobj,GLenum property,Glfloat value); 曲線的繪制是在gluBeginCurve( )/gluEndCurve( )函數(shù)對中完成。繪制曲線的函數(shù)為:void gluNurbsCurve (GLUnurbsObj * nobj,GLint nknots,GLfloat * knot,GLint stride,GLfloat *ctlarray,GLint order,GLenum type);具體參數(shù)含義在下面程序?qū)崿F(xiàn)中解釋。添加成員函數(shù)DrawNurbsCurve( ):void CView:DrawNurbsCurve( )GLfloat controlPoints73 = -1.5f, -0.5f, 0.0f, -1.0f
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 法律服務(wù)行業(yè)法律顧問服務(wù)協(xié)議
- 產(chǎn)業(yè)園物業(yè)服務(wù)合同
- 古詩文登高解讀與教學(xué)方案設(shè)計
- 個人權(quán)益保護網(wǎng)絡(luò)平臺使用協(xié)議
- 企業(yè)級網(wǎng)絡(luò)安全預(yù)防預(yù)案
- 裝修工程擔(dān)保合同
- 《宋代書法欣賞:大學(xué)書法藝術(shù)課程教案》
- 在線教育行業(yè)分析模擬試題集
- 股權(quán)擔(dān)保協(xié)議書規(guī)范
- 企業(yè)社會責(zé)任年度演講致辭草稿
- 中國后循環(huán)缺血的專家共識48506課件
- 信用管理概論課件整書電子教案完整版教學(xué)課件全套ppt教學(xué)教程最全課件最新
- 思想道德與法治全冊教案
- (高職)旅游景區(qū)服務(wù)與管理電子課件完整版PPT全書電子教案
- 唯美動畫生日快樂電子相冊視頻動態(tài)PPT模板
- 設(shè)計文件簽收表(一)
- 試運行方案計劃-
- 可研匯報0625(專家評審)
- 帶電核相試驗報告
- SCH壁厚等級對照表
- 春季常見傳染病預(yù)防知識PPT課件
評論
0/150
提交評論