下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、https:/SharpGL 三維建模技術(shù)實(shí)現(xiàn)三維建模技術(shù)實(shí)現(xiàn)摘要:目前沒有在 C#中開發(fā) OpenGL 的標(biāo)準(zhǔn),在.NET Framework 中也沒有 OpenGL API 接口。為此,研究了在 C#中聯(lián)合 SharpGL 編寫三維建模算法,闡述了三維建模關(guān)鍵步驟,并且實(shí)例化例子。相比較 C+,在動態(tài)鏈接庫SharpGL.dll 支持下,在 C#中進(jìn)行 SharpGL 三維建模代碼可讀性強(qiáng),開發(fā)變得更簡潔,程序可移植性佳。關(guān)鍵詞:SharpGL;C#;動態(tài)鏈接庫;三維建模中圖分類號:TP317.4文獻(xiàn)標(biāo)識碼:A文章編號:16727800(2017)0040205030 引言SharpGL
2、是進(jìn)行三維顯示的函數(shù)庫,其運(yùn)行環(huán)境與平臺無關(guān),能在Windows、Linux 及 Mac OS 等操作系統(tǒng)上運(yùn)行,故其在硬件、窗口及操作系統(tǒng)方面是相互獨(dú)立的,SharpGL 能不依賴于任何硬件或操作系統(tǒng)即可運(yùn)行。SharpGL 本身只定義了一個(gè)標(biāo)準(zhǔn),因此只要符合定義標(biāo)準(zhǔn)的函數(shù)庫,都可以稱為 SharpGL 標(biāo)準(zhǔn)函數(shù)庫。ATT、UNIX 軟件實(shí)驗(yàn)室、IBM 等著名企業(yè)都采用OpenGL 標(biāo)準(zhǔn)。SharpGL 標(biāo)準(zhǔn)定義的函數(shù)庫分為 4 個(gè)部分:SharpGL 核心庫、SharpGL 實(shí)用庫、SharpGL 輔助庫、SharpGL 工具庫。SharpGL 函數(shù)庫是一個(gè)實(shí)時(shí)渲染函數(shù)庫,能夠在短時(shí)間進(jìn)行
3、實(shí)時(shí)交互繪制。DirectX 與其相似,但只能在 Windows 操作系統(tǒng)上執(zhí)行。 C#是微軟公司早在 2000 年就開始推出的一種高級編程語言,這種高級編程語言運(yùn)行在.NET CLR 環(huán)境上,并基于.NETFramework 框架創(chuàng)作。C#是從 C 與 C+語言派生出的,吸收了 C 與 C+的優(yōu)點(diǎn),并彌補(bǔ)了 C 與 C+的缺點(diǎn),從而產(chǎn)生功能強(qiáng)大、類型安全、更簡單的面向?qū)ο笳Z言。C#代碼框架具有面向?qū)ο?、引用類等概念,幾乎囊括所有軟件開發(fā)與工程研究的最新成果。相比較 C 與 C+而言,C#具有語法簡單易學(xué)、配置與調(diào)制簡單、程序開發(fā)周期短等優(yōu)點(diǎn),廣泛應(yīng)用于當(dāng)今工程開發(fā)。本文將 C#和SharpG
4、L 聯(lián)合,開發(fā)三維物體模型程序以提高效率。1SharpGL 函數(shù)庫1.1SharpGL 核心庫SharpGL 動態(tài)鏈接庫 核心庫包含約 115 個(gè)可以被調(diào)用的函數(shù),統(tǒng)一將函數(shù)名的前綴命名為 gl。核心庫函數(shù)用于常規(guī)圖形處理,應(yīng)用范圍較廣。同一個(gè)功能函數(shù)輸入不同類型的參數(shù),從基本的 115 個(gè)函數(shù)中派生出來的函數(shù)表達(dá)式約有 300。https:/1.2SharpGL 實(shí)用庫SharpGL 動態(tài)鏈接庫 實(shí)用庫包含約 43 個(gè)可調(diào)用函數(shù),統(tǒng)一將函數(shù)名的前綴命名為 glu。SharpGL 提供了豐富的繪圖函數(shù)命令,但所有圖形繪制都由點(diǎn)、線、面元素組合而成。glu 函數(shù)通過調(diào)用核心庫函數(shù),為軟件開發(fā)提供
5、了相對簡單的用法,可實(shí)現(xiàn)較為復(fù)雜的操作1。1.3SharpGL 輔助庫SharpGL 動態(tài)鏈接庫 輔助庫包含約 31 個(gè)可調(diào)用函數(shù),統(tǒng)一將函數(shù)名的前綴命名為 aux。輔助庫函數(shù)提供面向?qū)ο蟮臄?shù)據(jù)輸入輸出處理、窗口操作以及繪制一些簡單的三維物體。1.4SharpGL 工具庫SharpGL 動態(tài)鏈接庫 工具庫包含約 30 個(gè)可調(diào)用函數(shù),統(tǒng)一將函數(shù)名的前綴命名為 glut。glut 是不依賴于任何操作系統(tǒng)平臺的 SharpGL 函數(shù)庫,用途是隱藏不同操作系統(tǒng)接口難題。工具庫函數(shù)以 glut 開頭,提供更為復(fù)雜的繪圖功能2。由于 glut 中的面向?qū)ο蟠翱诠芾砗瘮?shù)不依賴任何運(yùn)行環(huán)境,因此SharpGL
6、 中的工具庫可以在各種操作系統(tǒng)中執(zhí)行命令3。2SharpGL 建模環(huán)境創(chuàng)建2.1 添加 SharpGL 引用在 Visual Studio 2012 中建立 C#應(yīng)用程序過程很簡單:在 Visual Studio2012 編譯器環(huán)境中選擇新建項(xiàng)目 Visual C#-Windows 窗體應(yīng)用程序,輸入項(xiàng)目名稱與解決方案名稱,然后保存在適當(dāng)路徑位置,點(diǎn)擊確定,就成功創(chuàng)建了 WindowsForms 應(yīng)用程序。此時(shí) Visual Studio 2012 會根據(jù)上一步的輸入,自動創(chuàng)建一個(gè)程序命名空間、一個(gè)窗體組建 (Form1)以及程序的主入口函數(shù)Main(string args)。 到此,Visu
7、al Studio 2012 只是創(chuàng)建了應(yīng)用程序主體,即編譯環(huán)境,使用 SharpGL 還必須添加 SharpGL 的動態(tài)鏈接庫引用。在 C#中,引用是通過 using 關(guān)鍵字實(shí)現(xiàn)的,在編寫代碼窗口上部輸入代碼: usingSharpGL; 至此,SharpGL 的動態(tài)鏈接庫引用工作完成,下一步工作就可使用SharpGL 函數(shù)繪制三維物體模型了。2.2 創(chuàng)建 SharpGL 設(shè)備環(huán)境使用 SharpGL 相關(guān)代碼開發(fā)三維物體模型時(shí),必須先建立繪制設(shè)備環(huán)境。先拖拉一個(gè)可視化組件,用于顯示三維模型繪制。在 Visual Studio 2012 項(xiàng)目名稱中添加一個(gè)組件,命名為 SharpGLCont
8、rol,然后為創(chuàng)建的組件類進(jìn)行對象實(shí)例化,編寫如下代碼:/ Get the SharpGL object. SharpGL gl = SharpGLControl.SharpGL;為了在 SharpGLControl 對象組件上繪制三維物體模型,必須先進(jìn)行初始化https:/設(shè)置,這一點(diǎn)與其它程序語言不同。SharpGLControl 加載如下:/Clearthecoloranddepthbuffer.gl.Clear(SharpGL.GL_COLOR_BUFFER_BIT|SharpGL.GL_DEPTH_BUFFER_BIT ) ;/Loadtheidentitymatrix.gl.Loa
9、dIdentity();2.3 建立 SharpGL 繪制環(huán)境 由于 SharpGL 直接使用繪制環(huán)境,與設(shè)備環(huán)境沒有關(guān)聯(lián)。因此,還需要建立一個(gè) SharpGL 繪制環(huán)境,否則 SharpGL 函數(shù)不能調(diào)用。在 SharpGLControl_SharpGLDraw 中定義了繪制環(huán)境相關(guān)函數(shù),無需重寫這個(gè)函數(shù)就能直接調(diào)用。由于 SharpGLControl_SharpGLDraw 是由SharpGL 類派生出來的,因而它具有 Control 類的全部屬性和功能。 SharpGL具有多種函數(shù),繪制環(huán)境如下:/ Get the SharpGL object. SharpGL gl = SharpGL
10、Control.SharpGL ;/Set the projection matrix. gl.MatrixMode(SharpGL.GL_PROJECTION);/Load the identity. gl.LoadIdentity(); /Create a perspective transformation.gl.Perspective ( 60.0f , ( double ) Width / ( double ) Height , 0.01 ,100.0); /Use the look at helper function to position and aim the camera.
11、gl.LookAt(-5,5,-5,0,0,0,0,1,0); /Set the modelview matrix.gl.MatrixMode(SharpGL.GL_MODELVIEW);通過以上步驟操作,SharpGL 繪制環(huán)境創(chuàng)建工作就全部完成,在這個(gè)程序代碼環(huán)境中即可進(jìn)行三維建模。SharpGL 中創(chuàng)建的所有三維物體模型,如三維建筑物、家具、山峰等,都是用頂點(diǎn)描述的,因此三維物體模型繪制操作都可針對每個(gè)特征點(diǎn)進(jìn)行計(jì)算,然后通過內(nèi)核矩陣函數(shù)進(jìn)行光柵化形成二維像素。SharpGL 的另一個(gè)核心模塊是矩陣算法變換,就是把三維物體模型轉(zhuǎn)換為二維圖像。3 三維建模算法隨著計(jì)算機(jī)技術(shù)的不斷進(jìn)步,在圖
12、像、VR、游戲系統(tǒng)、醫(yī)療系統(tǒng)等領(lǐng)域構(gòu)造和使用的模型越來越復(fù)雜、越來越精細(xì)。這些復(fù)雜的物體模型,不但對計(jì)算機(jī)的處理速度以及存儲容量提出了更高要求,而且成為實(shí)時(shí)繪制物體模型、通信傳輸?shù)钠款i,因此物體模型簡化研究成為非常重要的科研課題。物體模型簡化指在保持原有模型基本不畸變的條件下,采用適當(dāng)?shù)暮瘮?shù)算法減少該物體模型的三角面數(shù)、邊數(shù)、頂點(diǎn)數(shù)3。 三維物體模型因其表面凹凸不平,呈現(xiàn)一種連續(xù)變化的曲面,這種曲面無法用平面地 D 確切表示。單元三角形是三維物體模型的基本組建單元圖,為真實(shí)表現(xiàn)三維物體模型,每個(gè)單元三角形需要包括 3個(gè)頂點(diǎn)和單元三角形的法向量,以此確定一個(gè)最小單位表面,不管多么復(fù)雜的三維物體模
13、型都可以化解成多個(gè)單元三角形組合。對于同一物體,三維物體模型上的單元三角形并非獨(dú)立存在,而是所有單元三角形都是相互關(guān)聯(lián)的,這些關(guān)聯(lián)信息主要體現(xiàn)在以下兩方面:鄰接關(guān)系即共邊與共頂點(diǎn);同一個(gè)單元三角形,法向量相等、法向量共面。通過上述單元三角形之間的聯(lián)系進(jìn)行分https:/類,即可組成不同的三維曲面模型。 三維物體模型三角網(wǎng)算法可通過兩個(gè)步驟實(shí)現(xiàn):在三維物體模型包含的所有點(diǎn)云數(shù)據(jù)中搜索符合單元三角形條件的點(diǎn),建立單元三角形;判斷搜索到的單元三角形是否有共邊關(guān)系,如果滿足條件,就將單元三角形添加到三維物體模型的表面,如果沒有則進(jìn)行其它搜索。 SharpGL 算法類定義如下:public class
14、Vertex public class Triangle . public class Mesh public voidCompute(List set)三維物體模型的噪點(diǎn)數(shù)據(jù),必須去除點(diǎn)云數(shù)據(jù)的離群孤立點(diǎn),編寫相關(guān)算法,設(shè)定除噪閾值。閾值參數(shù)為噪聲點(diǎn)閾值,小于這個(gè)值的點(diǎn)會刪除,否則就參與計(jì)算。 其它相關(guān)定義如下: 定義 1:三維物體模型中任意兩個(gè)單元三角形共邊,則稱這兩個(gè)單元三角形相鄰; 定義 2:三維物體模型中任意兩個(gè)單元三角形共頂點(diǎn),則稱這兩個(gè)單元三角形相接; 定義 3:如果存在一組單元三角形具有相接關(guān)系,且兩個(gè)單元三角形法向量相等,則這一組單元三角形在同一平面上; 定義 4:如果存在一
15、組單元三角形具有相接關(guān)系,且兩個(gè)單元三角形的法向量處于某個(gè)平面上,則這組單元三角形在同一個(gè)柱面上。4 建模關(guān)鍵環(huán)節(jié)4.1SharpGL 渲染流程在使用 SharpGL 繪制過程中,需要完成的加載任務(wù)有:設(shè)置各種緩存,如顏色、深度等,加載場景物體表面貼膜紋理,設(shè)置光照與陰影模式,建立景物顯示列表、圖像質(zhì)量和材料性質(zhì)等4。SharpGL 渲染步驟如下: 輸入三維物體模型要渲染的點(diǎn)的云數(shù)據(jù)等相關(guān)信息;設(shè)置攝像頭的位置和視角,調(diào)整視覺角度,把三維物體模型安置到三維場景合適的位置;設(shè)置投影光照位置、方向、顏色、類型等屬性; 設(shè)置三維物體模型顏色、紋理貼圖等材質(zhì)參數(shù);將上述三維信息轉(zhuǎn)化為二維圖像。 SharpGL 另一個(gè)重要模塊是三維矩陣模塊,據(jù)此進(jìn)行三維物體模型的移動、旋轉(zhuǎn)和縮放。4.2 紋理映射對三維物體模型進(jìn)行渲染,為了得到現(xiàn)實(shí)感效果,常用技術(shù)是模型表面貼圖。通過紋理貼圖,可使三維物體模型顏色不再是單一色彩,而是具有各種風(fēng)格。 三維物體模型貼圖原理:給每個(gè)三維物體模型頂點(diǎn)對應(yīng)一個(gè)二維圖形坐標(biāo),這樣在顯示三維物體模型頂點(diǎn)時(shí)可采用二維圖像上相應(yīng)像素的顏色值。三維物體模型位于三維空間,每個(gè)頂點(diǎn)的坐標(biāo)是(x,y,z)三個(gè)分量,而二維圖像位于二維空間,每個(gè)坐標(biāo)是(u,v
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 檢察文檔管理數(shù)字化資料
- 第二屆全國小動物臨床技能大賽參考試題庫(含答案)
- 《網(wǎng)絡(luò)安全法》知識考試題庫300題(含答案)
- 2025年新疆交通職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 專題06 語法填空 解題技巧
- 2025年春季學(xué)期學(xué)校德育工作計(jì)劃安排表(完整版)
- 實(shí)驗(yàn)室的租賃合同
- 范文汽車場地租賃合同
- 搭建冷庫及對設(shè)備的銷售安裝合同
- 建筑服務(wù)勞務(wù)合同范本
- 2025年有機(jī)肥行業(yè)發(fā)展趨勢分析報(bào)告
- 2023-2024年員工三級安全培訓(xùn)考試題及參考答案(綜合題)
- 對口升學(xué)語文模擬試卷(6)-江西?。ń馕霭妫?/a>
- 2025保安部年度工作計(jì)劃
- 2024年江蘇經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫
- 招標(biāo)采購基礎(chǔ)知識培訓(xùn)
- 電力系統(tǒng)分布式模型預(yù)測控制方法綜述與展望
- 2024年注冊建筑師-二級注冊建筑師考試近5年真題附答案
- 五年級口算題卡每天100題帶答案
- 2024年貴州省中考理科綜合試卷(含答案)
- 無人機(jī)技術(shù)與遙感
評論
0/150
提交評論