三維模型的顯示
目前對三維圖形程序的開發大多是基于OpenGL來實現的,OpenGL實際上是一個獨立于窗口系統和操作系統的開放式三維圖形標準,得到了眾多計算機廠商的支持。作為一個優秀的三維圖形接口,OpenGL提供了豐富的繪圖命令,利用這些命令能夠開發出高性能、交互式的三維圖形應用程序。它與VC有著緊密的開發接口,但由于VC對于一般非計算機專業的工程技術人員來說難以掌握,因而給工程領域的仿真程序設計帶來了很大的不便。但目前支持VB等開發工具的OpenGL開發庫也開始出現。本文就是基于VBOpenGL(vbogl.tlb)庫來實現的,這是一個可免費使用的第三方庫,它封裝了大量的底層OpenGL庫函數,很大程度上簡化了開發工作。
在VB中建立三維圖形環境之前,首先要在“工程”菜單下通過“引用”子菜單下加入VBOpenGL庫,然后在窗體上加入一個PictureBox控件作為三維模型的顯示和操作區域。
作為工程應用的虛擬設計或仿真程序,其三維模型可通過一般的三維造型軟件如Solidworks來設計,然后通過軟件提供的圖形接口輸出為中性文件。目前主流的三維造型軟件都支持多種標準文件格式,其中STL 文件是一種可讀性較強的文件格式,適合在工程仿真程序中使用。STL 文件格式最早是作為快速成型領域中的接口標準,已被廣泛應用于各種三維軟件中,很多主流的商用三維軟件都支持STL 文件的輸入輸出。STL模型是以三角形集合來表示物體外輪廓形狀的幾何模型,其中每個三角形面片有四個數據項表示,即三角形的三個頂點坐標和三角形面片的外法線矢量,STL 文件即為多個三角形面片的集合。
因此在VB環境中可通過讀入STL 文件并在繪圖空間中重現的方法來顯示三維模型。首先對讀入的STL 文件按行分解,從中解析出每個面元,并存儲到結構體數組中,接下來的工作就是通過VBOpenGL中的glColor3d函數對每個面元進行渲染和著色,并把渲染的結果以圖形的形式填充到PictureBox控件的繪圖區中,最終實現整個模型的顯示。需要說明的是在顯示三維模型之前,必須對VBOpenGL中的初始環境進行定義。
三維模型的操作方法
。1)放大和縮小操作 對三維模型的操作一般包括放大、縮小、旋轉和平移等操作,其中放大、縮小操作可通過同一個鼠標事件來驅動,例如當光標向上移動時使模型縮小,而光標向下移動時則使模型放大。這可以通過調整Opengl環境中的景深來實現。其中SVposY是光標移動過程中的上一個位置的縱坐標,而Y為當前光標的縱坐標,Zoom為模型的景深,step_zoom為光標移動一個基本單位時景深的變化值,它可通過程序的實際需要來設定。以下是放大縮小操作的程序代碼。
If Y < SposY Then Zoom = Zoom - step_zoom ‘縮小 Else Zoom = Zoom + step_zoom ‘放大 End If If Zoom < 0 Then Zoom = 0.0001 |
。2)旋轉操作 旋轉操作是通過對模型場景視角的法向量按照一定的步幅來調整實現的。下面的代碼是鼠標事件中模型旋轉操作的調整過程,當光標左右移動時,模型向左或向右反轉,而當光標上下移動時,模型向上或向下反轉,其旋轉的速度可通過改變步幅來實現。這里取步幅為0.005,它是以弧度為單位的一個角度值,首先要通過光標的當前位置和上次位置差的絕對值來判斷光標的移動方向,然后根據判斷出的光標方向給視角法向量的分量ym和xm增加或者減去一個步幅,從而實現模型在三維空間中的旋轉操作,其中法向量的分量zm保持初始值不變。
diffx = Abs(SposX - X) diffy = Abs(SposY - Y) If diffx > diffy Then If X > SposX Then ym = ym - X * 0.005 ‘向右旋轉 Else ym = ym + X * 0.005 ‘向左旋轉 End If Else If Y > SposY Then xm = xm - Y * 0.005 ‘向下旋轉 Else xm = xm + Y * 0.005 ‘向上旋轉 End If End If End If |
。3)平移操作 平移操作的原理和旋轉操作類似,它是通過對模型場景的各個位置分量的調整來實現的。和旋轉操作一樣,首相是通過光標的當前位置和上次位置差的絕對值來判斷光標的移動方向,然后根據判斷結果對相應的位置分量PosX和PosY增加或減去一個指定的步幅。下面是平移操作的VB代碼。
If diffx > diffy Then If X > SposX Then PosY = PosY + 0.005 ‘上移 Else PosY = PosY - 0.005 ‘下移 End If Else If Y > SposY Then PosX = PosX - 0.005 ‘左移 Else PosX = PosX + 0.005 ‘右移 End If End If End If |
按照以上的方法,我們實現了一個如圖1所示的工業機器人仿真程序,可通過STL文件導入機器人的三維模型,并按照規定的動作進行三維空間內的運動仿真。
![]() 圖1 機器人仿真工具 |
結束語
用VB來設計三維模型的操作程序相對來說要簡單、直觀,而且容易掌握。通過第三方庫函數VBOpenGL,可省去大量的底層編程工作,在一般工程應用的程序設計中能起到事半功倍的效果。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/
領測軟件測試網最新更新
關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月