freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

三維模型瀏覽工具軟件設(shè)計與開發(fā)畢業(yè)論文-資料下載頁

2025-06-28 11:15本頁面
  

【正文】 改函數(shù)中一般調(diào)用glViewport()對場景的視口進(jìn)行更改以適應(yīng)窗口尺寸的改變。 4)OnDestroy函數(shù)用以刪除繪制描述表的。程序運行結(jié)束調(diào)用該函數(shù),刪除繪制描述表。Windows應(yīng)用程序與窗口有關(guān)的操作都需要使用設(shè)備描述表,設(shè)備描述表是一個結(jié)構(gòu),它定義了一組圖形對象和該對象有關(guān)的屬性以及影響輸出的圖形模式,所有這些定義都影響下一把調(diào)用該設(shè)備描述表對窗口的操作,包括畫筆的顏色、畫刷的顏色及填充模式、繪制模式、位圖拷貝、屏幕滾動、調(diào)色板設(shè)定、映射模式以及其它圖形信息。因此,在窗口顯示圖形之前必須創(chuàng)建設(shè)備描述表。同理,調(diào)用OpenGL函數(shù)的每個線程也需要一個描述表,不過這個描述表稱作繪制描述比偶,設(shè)備描述表包含了Windows的GDI(圖形設(shè)備接口)信息,而繪制描述表包含了OpenGL繪制信息,二者具有相同的像素格式。繪制描述表必須建立在設(shè)備描述表的基礎(chǔ)上。在獲得一個設(shè)備描述表之前,首先要設(shè)置它的像素格式,再在其基礎(chǔ)上創(chuàng)建一個繪制描述表。繪制描述表創(chuàng)建以后,需要將其置為當(dāng)前,在繪制結(jié)束后,還需將繪制描述表刪除。通過三個函數(shù)完成:創(chuàng)建繪制描述表(wglCreatContext());將繪制描述表置為當(dāng)前函數(shù)(wglMakeCurrent());刪除繪制描述表函數(shù)(wglDeleteContext())。3. 設(shè)置像素格式PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), // pfd結(jié)構(gòu)的大小 1, // 版本號 PFD_DRAW_TO_WINDOW | // 支持在窗口中繪圖 PFD_SUPPORT_OPENGL | // 支持OpenGL PFD_DOUBLEBUFFER, // 雙緩存模式 PFD_TYPE_RGBA, // RGBA顏色模式 24, // 24位顏色深度 0, 0, 0, 0, 0, 0, // 忽略顏色位 0, // 沒有非透明度緩存 0, // 忽略移位位 0, // 無累加緩存 0, 0, 0, 0, // 忽略累加位 32, // 32 位深度緩存 0, // 無模板緩存 0, // 無輔助緩存 PFD_MAIN_PLANE, // 主層 0, // 保留 0, 0, 0 // 忽略層,可見性和損毀掩模 }。 3DS文件數(shù)據(jù)讀取與數(shù)據(jù)處理對3DS文件中數(shù)據(jù)的讀取,首先是先定義數(shù)據(jù)結(jié)構(gòu),然后根據(jù)塊的標(biāo)志尋找塊的地址,接下來讀入內(nèi)存,最后根據(jù)塊的長度將信息讀入相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。本程序中對3DS文件數(shù)據(jù)的讀取主要在C3dsReader類中實現(xiàn),詳細(xì)過程見圖51,其中以類中的成員函數(shù)Reader()為文件讀取入口: ()接收文件名并判斷是否為3DS格式文件,如果為3DS格式文件就根據(jù)所讀塊是否為3DS文件開始ID調(diào)用Read3DSFile()成員函數(shù)對文件讀取作進(jìn)一步處理; ()成員函數(shù)中讀取3DS文件的基本塊(編輯塊和關(guān)鍵幀塊),根據(jù)讀取的數(shù)據(jù)塊地址判斷是編輯塊的開始ID還是關(guān)鍵幀塊的開始ID進(jìn)行對編輯塊和關(guān)鍵幀塊的分開讀取。 ,如果讀取數(shù)據(jù)塊地址為編輯塊開始ID則進(jìn)入ReadMDATA()成員函數(shù),對編輯塊的子塊進(jìn)行讀取。編輯塊中有兩個重點子塊,即材質(zhì)列表和對象數(shù)據(jù)塊。 ,如果讀取數(shù)據(jù)塊地址為編輯塊子塊材質(zhì)列表的開始ID,就進(jìn)入對材質(zhì)列表信息的讀寫(ReadMatEnty()),讀入材質(zhì)的名字,顏色,材質(zhì)子塊等信息。 ,如果讀取的數(shù)據(jù)塊地址為編輯塊子塊對象數(shù)據(jù)塊的開始ID,則進(jìn)入對對象數(shù)據(jù)塊的讀寫成員函數(shù)ReadNameObject(),由第五章對3DS文件結(jié)構(gòu)的介紹可以看出,對象數(shù)據(jù)塊是重點讀取數(shù)據(jù)塊,對象數(shù)據(jù)塊中又分了三個重要的子塊:頂點列表塊、面列表塊、三角形列表塊。在該成員函數(shù)里,根據(jù)讀到的塊ID判斷是哪個子塊然后進(jìn)入相應(yīng)的子塊讀取函數(shù)進(jìn)行子塊信息讀取。 ,如果讀去的數(shù)據(jù)塊地址為關(guān)鍵幀開始ID則進(jìn)入相應(yīng)的關(guān)鍵幀塊讀寫函數(shù),本程序中未對關(guān)鍵幀塊進(jìn)行詳細(xì)的處理,故不能實現(xiàn)三維場景中物體、光源及相機的運動。圖61 數(shù)據(jù)讀取基本過程相關(guān)函數(shù)介紹:1) Reader():判斷讀入文件是否為3DS格式文件,以二進(jìn)制打開文件,讀取塊數(shù)據(jù),當(dāng)讀取的塊數(shù)據(jù)為0x4D4D,即3DS文件的開始ID,進(jìn)入3DS文件數(shù)據(jù)讀取與處理;2) ReadMDATA():讀取3DS格式文件的編輯塊數(shù)據(jù),編輯塊中有兩個重點子塊,即材質(zhì)列表和對象數(shù)據(jù)塊;3) ReadMatEntry():讀取材質(zhì)列表函數(shù),獲取材質(zhì)的名字并ReadColor()獲取材質(zhì)的顏色信息,ReadPercentage()讀取材質(zhì)子塊;4) ReadNameObject():讀取對象數(shù)據(jù)塊信息,其他名稱的塊將忽略,在對象數(shù)據(jù)塊中,三角形列表塊是重點讀取對象;5) ReadTriObject():讀取三角形列表塊數(shù)據(jù),塊中有三個重要子塊:頂點列表塊、面列表、面材質(zhì)列表,讀取一個對象后就把對象加入對象列表,以便后面實現(xiàn)3DS文件的模型顯示;6) ReadPointArray():讀取頂點列表塊信息;7) ReadFaceArray():讀取面列表塊信息;8) ReadMeshMatGroup():通過查詢材質(zhì)列表,讀入相關(guān)面材質(zhì)列表塊信息。 3DS文件顯示 將讀出來并存在數(shù)據(jù)結(jié)構(gòu)中的3DS文件信息在OpenGL環(huán)境下繪制出來。主要CMy3DSBrowserView類中進(jìn)行繪制工作,以下函數(shù)均是該類的函數(shù)成員。模型繪制基本過程如圖52。相關(guān)函數(shù)介紹:1) OnDraw():對應(yīng)用程序窗口的客戶區(qū)進(jìn)行繪圖 ,所有繪圖代碼都應(yīng)在該函數(shù)內(nèi)實現(xiàn),在本程序中該函數(shù)中調(diào)用了RendrScene()函數(shù)對場景進(jìn)行渲染;2) RendrScene():對進(jìn)行場景繪制和渲染的函數(shù),包括繪制三維軸和繪制三維模型;3) DrawAxis():繪制三維軸;4) Draw3ds():繪制三維模型; 圖52 3DS文件數(shù)據(jù)繪制基本過程 圖形控制對圖形的縮放、全角度旋轉(zhuǎn)的控制的基本方法是:捕捉鼠標(biāo)以獲取鼠標(biāo)信息根據(jù)獲取的鼠標(biāo)信息進(jìn)行圖形重繪。圖形控制函數(shù)實現(xiàn)基本過程如圖62和圖63。本程序的圖形控制主要是根據(jù)鼠標(biāo)信息的變化通過變換矩陣的乘除來改變坐標(biāo)軸的大小和旋轉(zhuǎn)角度以此來實現(xiàn)三維圖形的縮放和旋轉(zhuǎn)。接著要說點矩陣(線性代數(shù))的知識。OpenGL里面的平移、旋轉(zhuǎn)、縮放等變換均是線性變換,用矩陣相乘來表示。以平移變換為例,請見官方對glTranslatef函數(shù)的說明。假設(shè)有點(3,3,3),如果把該點沿x軸移動2單位,沿y軸移動3單位,沿z軸移動4單位,那么該點會是(3+2,3+3,4+4)=(5,6,7).用矩陣表示是:左邊的矩陣稱為平移變換矩陣,若把4換成x、y、z,則用它乘以一個齊次坐標(biāo)表示的向量,就可以將該向量平移(x,y,z).旋轉(zhuǎn)變換和縮放變換都像平移變換一樣可用一個矩陣來表示。這里可以不用理會這些矩陣長什么樣,只需清楚它們乘以一個齊次坐標(biāo)表示的向量,就可以使該向量發(fā)生需要的變換。矩陣變換相關(guān)代碼: ::glLoadIdentity()。//設(shè)置矩陣為單位矩陣 ::glTranslatef( camPos[0], camPos[1], camPos[2] )。 ::glRotatef( camRot[0], , , )。 ::glRotatef( camRot[1], , , )。 ::glRotatef( camRot[2], , , )。 ::glPushMatrix()。 ::glTranslatef(scenePos[0], scenePos[1], scenePos[2])。 ::glRotatef( sceneRot[0], , , )。 ::glRotatef( sceneRot[1], , , )。 ::glRotatef( sceneRot[2], , , )。 DrawAxis()。//根據(jù)以上矩陣變換重繪坐標(biāo)軸 Draw3ds()。//根據(jù)以上矩陣變換重繪三維圖形 ::glPopMatrix()。glTranslatef:將T(x,y,z)右乘與堆棧的棧頂變換矩陣。右乘的解釋,假設(shè)目前棧頂變換矩陣為M,那么就相當(dāng)于把M修改為M*T.glRotatef:將R(x,y,z,s)右乘與堆棧的棧頂變換矩陣。glLoadIdentity:將堆棧的棧頂變換矩陣設(shè)置成單位矩陣。glPushMatrix:將堆棧的棧頂變換矩陣復(fù)制一份,然后Push到堆棧中。所謂Push,就像塞子彈一樣把一個矩陣壓入到堆棧中,此時,棧頂就是這個新的矩陣了,注意定義的向量都是和棧頂變換矩陣作用的。glPopMatrix:將堆棧的棧頂變換矩陣Pop出來。 圖62 鼠標(biāo)左鍵按下與否圖形控制基本過程 鼠標(biāo)左鍵按下的同時移動鼠標(biāo),通過捕捉鼠標(biāo)的信息對圖形坐標(biāo)信息進(jìn)行重置,然后通過RenderScene()對重置后的圖形進(jìn)行矩陣變換后重繪,實現(xiàn)圖形隨鼠標(biāo)移動旋轉(zhuǎn)。當(dāng)放開鼠標(biāo)左鍵的時候?qū)崿F(xiàn)OnLButtonUp()函數(shù),再對圖形旋轉(zhuǎn)后最終狀態(tài)進(jìn)行一次重繪,等到圖形最終旋轉(zhuǎn)狀態(tài)。圖63 鼠標(biāo)右鍵按下與否圖形控制基本過程鼠標(biāo)右鍵按下的同時在窗口內(nèi)移動鼠標(biāo),過捕捉鼠標(biāo)的信息對圖形坐標(biāo)信息進(jìn)行重置,然后通過RenderScene()對重置后的圖形進(jìn)行重繪,實現(xiàn)圖形隨鼠標(biāo)移動進(jìn)行縮放。當(dāng)放開鼠標(biāo)左鍵的時候?qū)崿F(xiàn)OnRButtonUp()函數(shù),再對圖形縮放后最終狀態(tài)進(jìn)行一次重繪,等到圖形最終縮放狀態(tài)。打開3DS格式三維圖形文件 圖64 打開3DS格式文件按下鼠標(biāo)左鍵,拖動鼠標(biāo)對圖形進(jìn)行360個角度旋轉(zhuǎn)瀏覽圖65 三維模型旋轉(zhuǎn)操作按下鼠標(biāo)右鍵,向右側(cè)拖動鼠標(biāo),對三維模型進(jìn)行放大操作圖66 三維模型放大操作按下鼠標(biāo)右鍵,向左側(cè)拖動鼠標(biāo),對三維模型進(jìn)行縮小操作圖67 三維模型縮小操作第7章 總結(jié)和展望 總結(jié)三維圖形在日常工作和生活中越來越受到了人們的喜愛。而其中的3DS格式文件在網(wǎng)絡(luò)、媒體演示、課堂教學(xué)等多種環(huán)境中得到廣泛的使用,為了能夠方便地對3DS文件進(jìn)行動態(tài)瀏覽,本文利用VS2010+MFC+OpenGL開發(fā)了一個簡潔、實用、針對性強的3DS文件瀏覽軟件。所做的工作主要如下:1. 在實踐的基礎(chǔ)上,閱讀了大量和開發(fā)平臺以及開發(fā)技術(shù)相關(guān)的資料,分享了當(dāng)前三維圖形瀏覽軟件的狀況,提出了本課題的必要性。2. OpenGL是一個座位獨立于硬件的軟件接口,也是本課題編程的主要依托技術(shù),因此,文中較為詳細(xì)地介紹了OpenGL的工作機理和工作結(jié)構(gòu)等相關(guān)知識。3. 3DS文件格式是本課題研究的主要對象,對3DS文件的結(jié)構(gòu)以及怎么讀取和顯示3DS文件中的圖形信息作了深入的探討。4. 文中介紹了程序的開發(fā)過程,對程序的關(guān)鍵步驟做了較為詳細(xì)的說明。5. 文章的最后,利用開發(fā)的程序?qū)?DS文件進(jìn)行了實驗效果的演示。文章不足之處:由于時間和知識水平的限制,程序中還存在著很多的不足之處。主要原因是對專業(yè)性的軟件開發(fā)流程不太了解,對一些深層次的知識挖掘不夠。因此,在完整性上,該程序和商業(yè)性軟件還有較大的距離,希望在日后的學(xué)習(xí)中能將其改造得更加豐滿完美。 進(jìn)一步的研究方向 本文的三維圖形瀏覽軟件只是一個初步的瀏覽單一三維文件的軟件,對于軟件的完整性和實用性還有待進(jìn)一步研究:本文中的三維圖形瀏覽軟件只能瀏覽3DS文件格式,圖形的控制上的靈動性還未達(dá)到理性狀態(tài)。故而下一步的研究應(yīng)把其他三維圖形格式考慮進(jìn)來,改造成為面向?qū)ο蟾鼜V的三維圖形瀏覽軟件,并且在三維圖形控制算法上要進(jìn)一步改進(jìn),做到更加靈動的控制三維模型。 致謝 時光荏苒,歲月如梭。在這酷熱的五月這本集聚了我四年人生歷程的本科論文終于展現(xiàn)在了我的面前。雖然當(dāng)中尚有許多缺憾,但卻凝聚了許多的辛勞,字里行間都滲透著我、親人以及關(guān)心我教導(dǎo)我的老師、同學(xué)的汗水。 本設(shè)計的完成是在我的導(dǎo)師黎老師的細(xì)心指導(dǎo)下進(jìn)行的。在每次設(shè)計遇到問題時老師不辭辛苦的講解才使得我的設(shè)計順利的進(jìn)行。從設(shè)計的選題到資料的搜集直至最后設(shè)計的修改的整個過程中,花費了黎老師很多的寶貴時間和精力,在此向?qū)煴硎局孕牡馗兄x!導(dǎo)師嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,開拓進(jìn)取的精神和高度的責(zé)任心都將使學(xué)生受益終生!。 我還要感謝計網(wǎng)09
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1