• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于OpenGL的STL文件三維模型真實感圖形可視化研究

      2011-07-10 06:57:00任清海
      制造業(yè)自動化 2011年16期
      關(guān)鍵詞:面片二進制字節(jié)

      耿 鐵,任清海

      (河南工業(yè)大學 機電工程學院,鄭州 450007)

      0 引言

      STL(Stereo lithographic)文件格式是美國3D SYSTEMS公司提出的一種采用三角形面片離散地近似表示三維模型的接口標準,由于其接口格式規(guī)范、對三維實體描述的解釋唯一,目前已成為CAD/CAM/CAE系統(tǒng)接口的工業(yè)標準之一。因而STL文件在三維CAD設計、逆向工程、有限元分析、醫(yī)學成像系統(tǒng)、文物保護等方面有廣泛的應用[1]。

      OpenGL(Open Graphic Library)是一個三維真實感圖形模型庫,被廣泛地運用于科學計算可視化、計算機動畫和虛擬現(xiàn)實等領(lǐng)域,利用OpenGL開發(fā)圖形軟件已成為當今業(yè)界的時尚[2]。

      為了獲得STL文件三維模型的真實感顯示,以更好地進行氣體輔助注塑成型數(shù)值模擬后置處理的研究與開發(fā),本文在深入研究STL文件特點的基礎上,運用VC++6.0環(huán)境下的MFC的串行化文件I/O操作機制和OpenGL強大的圖形繪制渲染功能,對STL文件三維模型真實感圖形可視化進行了研究與實現(xiàn)。

      1 STL文件的數(shù)據(jù)組織格式

      STL 文件是由若干空間無序排列組合的、并沒有反映拓撲關(guān)系的小三角形面片組成的集合,是一種用許多空間小三角形面片逼近三維實體表面的數(shù)據(jù)模型,每個三角形面片由三角形的三個頂點坐標和指向模型外部的三角形面片的法向量組成[3]。目前的STL文件格式包括二進制文件(BINARY)和文本文件(ASCII)兩種[4]。

      1.1 STL的二進制格式

      二進制STL文件用固定的字節(jié)數(shù)來給出三角形面片的幾何信息[4]。文件起始的80個字節(jié)是文件頭,用于存貯零件名等文字信息,接著用4個字節(jié)的整數(shù)來描述模型的三角形面片個數(shù), 后面逐個給出每個三角形面片的幾何信息。每個三角形面片占用固定的50個字節(jié),依次是3個4字節(jié)浮點數(shù),用來描述三角形面片的法矢量;3個4字節(jié)浮點數(shù),用來描述第1個頂點的坐標;3個4字節(jié)浮點數(shù),用來描述第2個頂點的坐標;3個4字節(jié)浮點數(shù),用來描述第3個頂點的坐標,每個三角形面片的最后2個字節(jié)用來描述三角形面片的屬性信息(包括顏色屬性等),暫時沒有用。一個二進制STL文件的大小為三角形面片數(shù)乘以50再加上84個字節(jié)。

      1.2 STL的ASCII文件格式

      ASCII碼格式的文件逐行給出三角形面片的幾何信息,每一行以1個或2個關(guān)鍵字開頭。在STL文件中的三角形面片的信息單元facet是一個帶矢量方向的三角形面片,STL三維模型就是由一系列這樣的三角形面片構(gòu)成。STL文件的首行給出了文件路徑及文件名。在一個STL文件中,每一個facet由7行數(shù)據(jù)組成,第一行是三角形面片指向?qū)嶓w外部的法矢量坐標,由facet normal開頭,第二行為outer loop關(guān)鍵字,隨后的第3、4、5行數(shù)據(jù)分別是三角形面片的個頂點坐標,分別以vertex關(guān)鍵字開頭,3頂點沿指向?qū)嶓w外部的法矢量方向逆時針排列[5],第六行為end loop關(guān)鍵字,第七行為endfacet關(guān)鍵字,表示一個三角形面片信息描述完畢。

      通過對STL兩種文件格式的分析可知,其中二進制的文件格式較小,節(jié)省文件存儲空間,而ASCII碼格式的文件可讀性較強,故把這種格式作為可視化研究對象。

      2 STL文件的讀取和顯示

      2.1 定義STL文件相關(guān)數(shù)據(jù)結(jié)構(gòu)

      STL文件型由一系列三角形面片構(gòu)成,即三角形面片是構(gòu)成STL文件的基本單位。每個三角形面片又由三維空間中對應的三個頂點坐標及其構(gòu)成的平面的法向矢量組成。所以采用結(jié)構(gòu)型變量分別定義構(gòu)成三角形面片的頂點數(shù)據(jù)和法向量,并采用基類CObject的派生類CTriangleClass定義的m_TriangleList數(shù)組來實現(xiàn)動態(tài)存儲構(gòu)成STL文件的三角形面片。

      2.2 讀取STL文件數(shù)據(jù)

      MFC提供了一種串行化方式(Serialize)存取文檔機制,可以方便地把對象的不同數(shù)據(jù)信息存儲到指定的二進制文件中,也可以方便地以同樣順序從該二進制文件中讀出數(shù)據(jù)并創(chuàng)建對象[6]。具體算法如下:

      2.3 STL文件的真實感圖形可視化顯示

      在OpenGL中,光照模型由環(huán)境反射光、漫反射光、鏡面反射光等組成,通過函數(shù)glLight對光源特性進行設置,可以模擬真實的光照效果;材質(zhì)屬性是通過對光線中的紅、綠、藍三原色的反射率來近似定義的,可以采用函數(shù)glMaterial實現(xiàn)材質(zhì)的設置;OpenGL提供的Gouraud著色模式,實現(xiàn)了在頂點顏色之間進行雙線性差值,使不同頂點之間的顏色光滑連續(xù),可以改進顯示效果;在OpenGL中,還可以采用融合技術(shù),實現(xiàn)三維模型的透明處理;另外OpenGL還可以啟動深度檢測功能,進行消隱處理,提高三維模型的立體感[7]。通過使用光照模型、材質(zhì)屬性、著色模式、深度檢測、融合以及反走樣等技術(shù)可以實現(xiàn)三維模型的真實感顯示效果。具體算法如下:

      3 結(jié)束語

      在Visual C++6.0環(huán)境下,運用MFC的串行化文件I/O操作機制和OpenGL函數(shù)庫對STL文件的三維模型的真實感圖形可視化進行了研究,并且詳細介紹了STL文件的讀取和顯示方法,為后續(xù)的氣體輔助注塑成型數(shù)值模擬后置處理的研程序結(jié)果如圖1所示。究與開發(fā)提供了條件,具有一定的使用價值和應用前景。

      [1] 衛(wèi)煒, 周來水, 張麗艷.海量STL文件的快速讀取與顯示[J].機械科學與技術(shù), 2006, 25(8): 935-938.

      [2] 程小茁, 劉金義, 吳濤.基于OpenGL的STL格式實真實感圖形顯示工具的實現(xiàn)[J].撫順石油學院學報, 1999,19(3): 53-55.

      [3] 胡海鷗, 王素.基于OpenGL的STL文件可視化研究[OL].中國科技論文在線, 2010, 3(4): 371-376.http://highlights.paper.edu.cn/page_detail.php? id=910

      [4] 嚴桔銘, 鐘艷如.基于VC++和OpenGL的STL文件讀取顯示[J].計算機體系應用, 2009, 3: 172-175.

      [5] 紀峰, 陳荔, 李占利.基于STL文件的模型及應用[J].長安大學學報, 2006, 26(1): 104-107.

      [6] 王清輝, 王彪.Visual C++ CAD應用程序開發(fā)技術(shù)[M].北京: 機械工業(yè)出版社.2003.

      [7] 和克智, 等.OpenGL編程技術(shù)詳解[M].北京: 化學工業(yè)出版社.2010.

      [8] 郭兆榮.Visual C++ OpenGL 應用程序開發(fā)[M].北京: 人民郵電出版社, 2006.

      猜你喜歡
      面片二進制字節(jié)
      用二進制解一道高中數(shù)學聯(lián)賽數(shù)論題
      No.8 字節(jié)跳動將推出獨立出口電商APP
      有趣的進度
      初次來壓期間不同頂板對工作面片幫影響研究
      二進制在競賽題中的應用
      No.10 “字節(jié)跳動手機”要來了?
      簡談MC7字節(jié)碼
      甜面片里的人生
      幸福家庭(2016年3期)2016-04-05 03:47:08
      青海尕面片
      飲食科學(2014年10期)2014-10-29 16:58:38
      老伴逼我搟面片
      塔河县| 韶山市| 安阳县| 垣曲县| 出国| 应城市| 张北县| 夏河县| 乐清市| 龙胜| 嘉峪关市| 黑龙江省| 西乌| 微山县| 贵定县| 文成县| 无棣县| 绵阳市| 额尔古纳市| 遂昌县| 青田县| 广安市| 和田市| 呼图壁县| 革吉县| 西乡县| 噶尔县| 兴宁市| 南丰县| 明水县| 司法| 宣城市| 潞西市| 巫溪县| 云和县| 武宁县| 荃湾区| 当雄县| 聊城市| 同德县| 伊宁县|