999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

SharpGL三維建模技術實現

2017-06-20 22:57:17王曉松徐妍田董煒劉志強胡夢濤
軟件導刊 2017年4期

王曉松+徐妍+田董煒+劉志強+胡夢濤

摘要:目前沒有在C#中開發OpenGL的標準,在.NET Framework中也沒有OpenGL API接口。為此,研究了在C#中聯合SharpGL編寫三維建模算法,闡述了三維建模關鍵步驟,并且實例化例子。相比較C++,在動態鏈接庫SharpGL.dll支持下,在C#中進行SharpGL三維建模代碼可讀性強,開發變得更簡潔,程序可移植性佳。

關鍵詞:SharpGL;C#;動態鏈接庫;三維建模

中圖分類號:TP317.4

文獻標識碼:A

文章編號:16727800(2017)004020503

0引言

SharpGL是進行三維顯示的函數庫,其運行環境與平臺無關,能在Windows、Linux及Mac OS等操作系統上運行,故其在硬件、窗口及操作系統方面是相互獨立的,SharpGL能不依賴于任何硬件或操作系統即可運行。SharpGL本身只定義了一個標準,因此只要符合定義標準的函數庫,都可以稱為SharpGL標準函數庫。ATT、UNIX軟件實驗室、IBM等著名企業都采用OpenGL標準。SharpGL標準定義的函數庫分為4個部分:SharpGL核心庫、SharpGL實用庫、SharpGL輔助庫、SharpGL工具庫。SharpGL函數庫是一個實時渲染函數庫,能夠在短時間進行實時交互繪制。DirectX與其相似,但只能在Windows操作系統上執行。 C#是微軟公司早在2000年就開始推出的一種高級編程語言,這種高級編程語言運行在.NET CLR環境上,并基于.NET Framework框架創作。C#是從C與C++語言派生出的,吸收了C與C++的優點,并彌補了C與C++的缺點,從而產生功能強大、類型安全、更簡單的面向對象語言。C#代碼框架具有面向對象、引用類等概念,幾乎囊括所有軟件開發與工程研究的最新成果。相比較C與C++而言,C#具有語法簡單易學、配置與調制簡單、程序開發周期短等優點,廣泛應用于當今工程開發。本文將C#和SharpGL聯合,開發三維物體模型程序以提高效率。

1SharpGL函數庫

1.1SharpGL核心庫

SharpGL動態鏈接庫——核心庫包含約115個可以被調用的函數,統一將函數名的前綴命名為gl。核心庫函數用于常規圖形處理,應用范圍較廣。同一個功能函數輸入不同類型的參數,從基本的115個函數中派生出來的函數表達式約有300個。

1.2SharpGL實用庫

SharpGL動態鏈接庫——實用庫包含約43個可調用函數,統一將函數名的前綴命名為glu。SharpGL提供了豐富的繪圖函數命令,但所有圖形繪制都由點、線、面元素組合而成。glu函數通過調用核心庫函數,為軟件開發提供了相對簡單的用法,可實現較為復雜的操作[1]。

1.3SharpGL輔助庫

SharpGL動態鏈接庫——輔助庫包含約31個可調用函數,統一將函數名的前綴命名為aux。輔助庫函數提供面向對象的數據輸入輸出處理、窗口操作以及繪制一些簡單的三維物體。

〗1.4SharpGL工具庫

SharpGL動態鏈接庫——工具庫包含約30個可調用函數,統一將函數名的前綴命名為glut。glut是不依賴于任何操作系統平臺的SharpGL函數庫,用途是隱藏不同操作系統接口難題。工具庫函數以glut開頭,提供更為復雜的繪圖功能[2]。由于glut中的面向對象窗口管理函數不依賴任何運行環境,因此SharpGL中的工具庫可以在各種操作系統中執行命令[3]。

2SharpGL建模環境創建

2.1添加SharpGL引用

在Visual Studio 2012中建立C#應用程序過程很簡單:在Visual Studio 2012編譯器環境中選擇新建項目——Visual C#--Windows窗體應用程序,輸入項目名稱與解決方案名稱,然后保存在適當路徑位置,點擊確定,就成功創建了WindowsForms應用程序。此時Visual Studio 2012會根據上一步的輸入,自動創建一個程序命名空間、一個窗體組建 (Form1)以及程序的主入口函數 Main(string[] args)。 到此,Visual Studio 2012只是創建了應用程序主體,即編譯環境,使用SharpGL還必須添加SharpGL的動態鏈接庫引用。在C#中,引用是通過using關鍵字實現的,在編寫代碼窗口上部輸入代碼: using SharpGL; 至此,SharpGL的動態鏈接庫引用工作完成,下一步工作就可使用SharpGL函數繪制三維物體模型了。

2.2創建SharpGL設備環境

使用SharpGL相關代碼開發三維物體模型時,必須先建立繪制設備環境。先拖拉一個可視化組件,用于顯示三維模型繪制。在Visual Studio 2012項目名稱中添加一個組件,命名為SharpGLControl,然后為創建的組件類進行對象實例化,編寫如下代碼:

// Get the SharpGL object. SharpGL gl = SharpGLControl.SharpGL;

為了在SharpGLControl對象組件上繪制三維物體模型,必須先進行初始化設置,這一點與其它程序語言不同。SharpGLControl加載如下:

//Clear the color and depth buffer. gl.Clear(SharpGL.GL_COLOR_BUFFER_BIT | SharpGL.GL_DEPTH_BUFFER_BIT); //Load the identity matrix. gl.LoadIdentity();

2.3建立SharpGL繪制環境

由于SharpGL直接使用繪制環境,與設備環境沒有關聯。因此,還需要建立一個SharpGL繪制環境,否則SharpGL函數不能調用。在SharpGLControl_SharpGLDraw中定義了繪制環境相關函數,無需重寫這個函數就能直接調用。由于SharpGLControl_SharpGLDraw是由SharpGL類派生出來的,因而它具有Control類的全部屬性和功能。 SharpGL具有多種函數,繪制環境如下:

// Get the SharpGL object. SharpGL gl = SharpGLControl.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. gl.LookAt(-5,5,-5,0,0,0,0,1,0); //Set the modelview matrix. gl.MatrixMode(SharpGL.GL_MODELVIEW);

通過以上步驟操作,SharpGL繪制環境創建工作就全部完成,在這個程序代碼環境中即可進行三維建模。SharpGL中創建的所有三維物體模型,如三維建筑物、家具、山峰等,都是用頂點描述的,因此三維物體模型繪制操作都可針對每個特征點進行計算,然后通過內核矩陣函數進行光柵化形成二維像素。SharpGL的另一個核心模塊是矩陣算法變換,就是把三維物體模型轉換為二維圖像。

3三維建模算法

隨著計算機技術的不斷進步,在圖像、VR、游戲系統、醫療系統等領域構造和使用的模型越來越復雜、越來越精細。這些復雜的物體模型,不但對計算機的處理速度以及存儲容量提出了更高要求,而且成為實時繪制物體模型、通信傳輸的瓶頸,因此物體模型簡化研究成為非常重要的科研課題。物體模型簡化指在保持原有模型基本不畸變的條件下,采用適當的函數算法減少該物體模型的三角面數、邊數、頂點數[3]。 三維物體模型因其表面凹凸不平,呈現一種連續變化的曲面,這種曲面無法用平面地圖確切表示。單元三角形是三維物體模型的基本組建單元圖,為真實表現三維物體模型,每個單元三角形需要包括3個頂點和單元三角形的法向量,以此確定一個最小單位表面,不管多么復雜的三維物體模型都可以化解成多個單元三角形組合。對于同一物體,三維物體模型上的單元三角形并非獨立存在,而是所有單元三角形都是相互關聯的,這些關聯信息主要體現在以下兩方面:①鄰接關系即共邊與共頂點;②同一個單元三角形,法向量相等、法向量共面。通過上述單元三角形之間的聯系進行分類,即可組成不同的三維曲面模型。 三維物體模型三角網算法可通過兩個步驟實現:①在三維物體模型包含的所有點云數據中搜索符合單元三角形條件的點,建立單元三角形;②判斷搜索到的單元三角形是否有共邊關系,如果滿足條件,就將單元三角形添加到三維物體模型的表面,如果沒有則進行其它搜索。 SharpGL算法類定義如下:

public class Vertex public class Triangle ...... public class Mesh public void Compute(List set)

三維物體模型的噪點數據,必須去除點云數據的離群孤立點,編寫相關算法,設定除噪閾值。閾值參數為噪聲點閾值,小于這個值的點會刪除,否則就參與計算。 其它相關定義如下: 定義1:三維物體模型中任意兩個單元三角形共邊,則稱這兩個單元三角形相鄰; 定義2:三維物體模型中任意兩個單元三角形共頂點,則稱這兩個單元三角形相接; 定義3:如果存在一組單元三角形具有相接關系,且兩個單元三角形法向量相等,則這一組單元三角形在同一平面上; 定義4:如果存在一組單元三角形具有相接關系,且兩個單元三角形的法向量處于某個平面上,則這組單元三角形在同一個柱面上。

4建模關鍵環節

4.1SharpGL渲染流程

在使用SharpGL繪制過程中,需要完成的加載任務有:設置各種緩存,如顏色、深度等,加載場景物體表面貼膜紋理,設置光照與陰影模式,建立景物顯示列表、圖像質量和材料性質等[4]。SharpGL渲染步驟如下: ①輸入三維物體模型要渲染的點的云數據等相關信息;②設置攝像頭的位置和視角,調整視覺角度,把三維物體模型安置到三維場景合適的位置;③設置投影光照位置、方向、顏色、類型等屬性; ④設置三維物體模型顏色、紋理貼圖等材質參數; ⑤將上述三維信息轉化為二維圖像。 SharpGL另一個重要模塊是三維矩陣模塊,據此進行三維物體模型的移動、旋轉和縮放。

4.2紋理映射

對三維物體模型進行渲染,為了得到現實感效果,常用技術是模型表面貼圖。通過紋理貼圖,可使三維物體模型顏色不再是單一色彩,而是具有各種風格。 三維物體模型貼圖原理:給每個三維物體模型頂點對應一個二維圖形坐標,這樣在顯示三維物體模型頂點時可采用二維圖像上相應像素的顏色值。三維物體模型位于三維空間,每個頂點的坐標是(x,y,z)三個分量,而二維圖像位于二維空間,每個坐標是(u,v)兩個分量,每個坐標稱為頂點的紋理坐標[5]。三維物體模型制作時是沒有紋理坐標的,需要經過專門的參數化過程來生成紋理坐標。如果一個三維物體模型沒有紋理坐標就無法使用紋理貼圖技術來渲染物體模型表面,因此,不是每個三維物體模型都可以顯示紋理貼圖,必須先生成紋理坐標才可進行貼圖渲染。三維物體模型的紋理坐標對應的是二維空間像素位置,而不是像素的具體顏色,因此同一個三維物體模型只要更換貼圖圖像,就可顯示不同的渲染效果。

4.3SharpGL三維坐標變換

SharpGL三維物體模型變換和二維變換類似,其實質就是在二維變換的基礎上增加z坐標值得到。三維物體模型基本變換有模型平移、旋轉、比例縮放、切錯、對稱等。對于三維空間坐標系,需要采用齊次坐標系,其數學變換矩陣是4×4階矩陣。三維物體模型平移變換,指物體模型在空間坐標系中沿著指定方向移動一段距離而形狀和大小保持不變的過程。平移變換作用在點上,向量沒有位置屬性變化,因此向量的平移對變換沒有意義。已知三維坐標系中一個點的坐標是P(x,y,z),沿X軸、Y軸、Z軸方向分別平移tx、ty、tz后,得到新的坐標P'(x',y',z')的函數表達式為:

三維物體模型空間旋轉變換是個復雜的數學矩陣模型變化,通常認為物體模型繞某軸逆時針方向旋轉時角度為正,順時針方向旋轉時角度為負。三維物體模型作旋轉變換時,需要兩個必不可少的條件,即旋轉軸和旋轉角度。旋轉前后三維物體模型的大小和形狀沒有變化,變化的只是空間點的位置坐標。其中繞坐標軸旋轉變換是最簡單的變換,當三維物體模型繞某一坐標軸旋轉時,物體模型上各點在此軸的坐標值不變,而在另兩個坐標軸組成的坐標面上的坐標相當于一個二維的旋轉變換[6]。筆者使用三維數據,最終形成三維物體模型顯示結果如圖1所示。5結語

本文闡述了在C#中實現SharpGL三維物體建模的幾個關鍵步驟。從最終成型結果可知,在動態鏈接庫SharpGL.dll支持下,使用C#進行SharpGL三維物體建模可操作性強、代碼簡潔易讀。與C++比較,C#省去了很多工作,譬如像素格式設置、設備環境、繪制環境的激活與去活、前后臺緩存交換等,本文方法僅僅需要考慮的是如何在三維建模關鍵步驟中組織好SharpGL函數調用命令。

參考文獻:

[1]蔡振鋒,密長林,王榮華,等.基于OpenGL的地下管線三維緩沖分析算法研究及應用[J].山東國土資源,2016(9):6064.[2]高士娟,毛先成,張寶一,等.基于平面地質圖的地質體三維建模[J].地質找礦論叢,2015(5):594601.

[3]閔芳,張志先,楊功廷.基于OpenGL的三維建筑可視化研究與仿真[J].現代電子技術,2016(2):7881.

[4]李春林,曹宇,朱德華,等.激光加工工藝軟件的三維圖形層次化拾取方法[J].激光,2016(7):5861.

[5]田明銀,蘭一麟濤.基于分形算法的三維地形可視化應用[J].電子設計工程,2016(14):2026.

[6]董鴻鵬,姜本清,方偉.基于OpenGL的三維模型渲染技術研究[J].艦船電子工程,2015(10):114128.

[7]劉韜.基于OpenGL噴泉粒子系統設計與實現[J].科技視界,2016(11):287288.

[8]梁春艷,李志雄,蘇清茂.六自由度機器人3D建模仿真研究[J].西南科技大學學報,2016(2):8186.

(責任編輯:杜能鋼)

主站蜘蛛池模板: 尤物在线观看乱码| 国产成在线观看免费视频 | 精品91视频| 精品久久久久无码| 国产第八页| 91破解版在线亚洲| 黄片一区二区三区| 性视频一区| 欧美日本在线观看| 四虎精品黑人视频| 亚洲区一区| 伊人AV天堂| 呦女亚洲一区精品| 欧美、日韩、国产综合一区| 午夜不卡福利| 国产毛片不卡| 国产乱子精品一区二区在线观看| 国产福利一区二区在线观看| 青青国产视频| 久久精品这里只有国产中文精品| 亚洲成a人片7777| 国产极品粉嫩小泬免费看| 天天综合网亚洲网站| 天天爽免费视频| 国产无码性爱一区二区三区| 四虎成人精品在永久免费| 国产在线观看成人91| 成人韩免费网站| 久久免费精品琪琪| 亚洲青涩在线| 精品国产91爱| 亚洲区欧美区| 91视频国产高清| 日本久久网站| 曰韩人妻一区二区三区| 国产情侣一区| 欧美日韩在线亚洲国产人| 亚洲欧美人成人让影院| 亚洲日韩欧美在线观看| 在线播放91| 国产色爱av资源综合区| 国产亚洲精品91| 高清不卡毛片| 波多野结衣一区二区三区AV| 好吊色国产欧美日韩免费观看| 青草免费在线观看| 天天色综合4| 熟妇无码人妻| 在线观看欧美精品二区| 国产欧美视频综合二区| 欧美精品一区在线看| 制服丝袜亚洲| 日本一本正道综合久久dvd| 国产成人成人一区二区| 欧美亚洲激情| 国产精品女主播| 亚洲一级无毛片无码在线免费视频| 一级毛片在线播放免费| 亚洲日韩Av中文字幕无码 | 国产欧美高清| 网友自拍视频精品区| 亚洲成人播放| 国产自在自线午夜精品视频| 亚洲欧美色中文字幕| 日本久久免费| 国产成人精品亚洲日本对白优播| 国内精品小视频在线| 日本一区二区三区精品视频| 在线观看免费人成视频色快速| 91麻豆精品视频| 免费在线看黄网址| 欧美成人一级| 成人91在线| 亚洲美女一级毛片| 欧美无专区| 国产女人综合久久精品视| 亚洲人成网站在线观看播放不卡| 狂欢视频在线观看不卡| 亚洲成人免费在线| 又爽又大又黄a级毛片在线视频| 少妇露出福利视频| 欧美精品亚洲精品日韩专区|