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

基于Open GL選擇機制的模型變換組件的實現*

2011-08-17 09:37:36高明向陳定方楊艷芳
關鍵詞:可視化模型

高明向 陳定方 楊艷芳

(武漢理工大學理學院1) 武漢 430063) (武漢理工大學智能制造與控制研究所2) 武漢 430063)

在開發和用戶交互的三維圖形處理程序[1-2]時,常常需要使用鼠標控制模型的平移、旋轉和縮放等模型變換操作.模型變換的具體形式是多種多樣的[3],許多變換結果可以通過幾個基本變換的連續作用而得到.如果將這些基本變換形式以菜單或者工具欄命令的形式進行定義[4],程序的菜單/工具欄將是非常臃腫的.如果以快捷鍵的形式進行定義,將會嚴重侵占應用程序的快捷鍵資源,導致定義程序使用的其它快捷鍵時出現困難,也不便于用戶操作.將模型變換命令進行可視化表示,建立模型變換組件,并使用鼠標對這些命令進行選擇與執行,既方便用戶操作又可節約應用程序資源.本文在基于Open GL的建模環境中實現了這項技術.

1 Open GL選擇機制

作為一種快速、高質量的3D圖形軟件接口,Open GL提供了一種進行交互式3D應用的選擇操作.通過Open GL的選擇機制[5],用戶能夠知道,在窗口中的某個特定區域中繪制的是哪個物體,用戶用鼠標選取了哪個物體等.

在使用Open GL的選擇機制時,首先將景物繪制到幀緩存中,然后進入選擇模式并重新繪制景物.進入選擇模式后,幀緩存的內容將不發生變化.在退出選擇模式時,Open GL返回一個與視圖體相交的圖元系列.系列中的每個圖元都會產生一個命中信息,并以圖元名稱及選中記錄數組的形式返回.在選擇模式中,當發送繪制圖元命令時,要為圖元命名.這樣,在返回名稱列表時,可以用它來確定用戶選中的圖元[6].

基于這種選擇機制,可以先將基本的模型變換命令用一定的圖元進行可視化表示,從而創建模型變換組件,然后使用鼠標對這些圖元進行選取,選取了特定的圖元相當于選擇了相應的模型變換命令.下面介紹實現這種模型變換組件的關鍵技術.

2 平移組件

3D環境中平移變換的基本操作有3種:分別沿著x,y和z 3個坐標軸方向的平移.為增強平移變換操作的便利性,可再增加3種變換形式:分別在xoy,yoz和xoz平面上的平移操作.

2.1 平移變換命令的可視化表示

如圖1所示,平移變換命令可使用三維直角坐標系統進行可視化表示:3條共點且相互垂直的有向線段構成該變換系統的坐標軸,分別表示沿著x,y和z方向的平移命令,任意兩個軸所在的平面上各繪制一個4邊形,分別表示在xoy,yoz和xoz平面上的平移命令.為描述方便,把這些軸或者四邊形稱為變換系統的部件.

圖1 平移變換組件

2.2 平移變換命令的解析與執行

用鼠標選取這些部件的過程可分為兩個階段:當鼠標處于一個部件的上方時,稱為命中(hit)部件,此時按下鼠標按鍵,部件才被選中(selected).在繪制變換系統時,給每個部件分別命名,當一個部件被選中時,由部件的名稱即可解析出相應的平移變換命令,并通知應用程序,準備執行.當按下并移動鼠標時,開始執行這個命令,進行相應的平移變換操作.

2.3 鼠標控制物體的移動

用鼠標平移物體的過程中,一般要求物體總是處于鼠標下方,與鼠標同步移動.實現這種要求的基本方法是,移動鼠標過程中,實時計算鼠標點的窗口坐標對應的三維空間坐標,然后將物體的位置坐標用它代替即可.

下面的算法給出一種將鼠標點的窗口坐標映射到三維空間坐標的方法.這種方法以被選中物體的位置為參考,先求出該點的屏幕深度,然后以這個屏幕深度為參考,把鼠標的窗口坐標映射為三維空間坐標:

void Win Pos To World(int pos X,int pos Y,float obj-Position[],floatworld Pos[])

double win Coordinate[]= {0,0,0};

//將物體位置坐標映射為窗口坐標,獲取該位置處對應的屏幕深度

World ToScreen(obj Position,win Coordinate);//將鼠標的窗口坐標映射為三維空間坐標

Screen To World(pos X,pos Y,win Coordinate[2],world Pos);

函數 Win Pos To World(*)有4個參數,pos X,pos Y是鼠標點的窗口坐標;obj Position[]是被選中物體的三維空間位置,當物體被選中時,使變換系統的原點移動到這個位置,因此物體的位置就是變換系統(局部坐標系)的原點對應的三維空間坐標(世界坐標系);worl d Pos[]是鼠標點對應的三維空間坐標.Worl d To Screen(*)方法封裝了Open GL實用庫中的gl u Project(*)函數,作用是把給定的三維空間坐標映射為窗口坐標,win Coor dinate[2]是該點對應的屏幕深度值.Screen To Worl d(*)方法封裝了gl u Un Pr oject(*)函數,作用是把窗口坐標映射為由win Coordinate[2]指定的屏幕深度處三維空間坐標.

使用這種方法移動物體會存在的這樣的問題:當選定了一種變換命令并開始移動物體時,變換系統的原點會突然跳到鼠標的下方,而且鼠標與變換系統原點間的屏幕距離越遠,這種跳躍越明顯.原因是,如圖2所示,設在按下鼠標按鍵時,鼠標位于P0,這點與變換系統的原點O間總會存在一定的屏幕距離,相應于三維空間中,此二點總是存在一定的向量差OP0,而將物體位置坐標用鼠標坐標代替時,并沒有將這個差值考慮進去.所以,確定物體平移后的位置時,只要將這個差值考慮進去,問題就解決了.

圖2 消除跳躍的方法

3 縮放組件

縮放組件的實現方法與平移組件非常相似,實現的效果見圖4b),不再贅述.

4 旋轉組件

最基本的旋轉變換有3種,即分別繞著x,y,z坐標軸的旋轉變換.下文提及的旋轉變換中,旋轉角度均可用鼠標移動的屏幕距離與窗口寬度、高度的相對大小確定.因而,下文僅說明如何確定旋轉軸.

4.1 基本旋轉變換的可視化表示

繞著3個坐標軸的旋轉操作命令,可以用xoy,yoz和xoz平面上的以變換系統原點為圓心的3個圓環(ring)進行可視化表示.當鼠標選中xoy面上的圓環時表示執行繞著z軸的旋轉命令,而選中xoz面上的圓環時表示執行繞著y軸的旋轉命令等等.

為了便于判斷哪個部件被命中或者選中,只要對處于命中/選中狀態的圓環使用不同的顏色繪制即可.為了看上去更具有立體感,這些圓環需要由兩部分構成:一是靠近視點的部分,用實線繪制,二是遠離視點的部分,則用虛線繪制.當變換系統處于場景中的不同位置或者視點位置發生變化時,這2個部分是不斷變化的,因而要動態更新這兩部分的數據.更新方法是:將構成圓環的每個點相對于圓心的位置矢量與由物體指向視點的矢量進行點乘運算,結果為正值的構成靠近視點的部分,反之則構成遠離視點的部分.

4.2 繞空間任意軸旋轉的可視化表示

繞空間任意軸旋轉亦是一種常用的變換方式.這種變換命令可直接使用以變換系統的原點為圓心的填充圓(filled circle)進行可視化表示.這個圓與基本變換中使用的圓環半徑相同.當鼠標位于填充圓內,且沒有命中4.1所述的部件時,通過改變填充圓的透明度,通知用戶即將執行繞任意軸旋轉的命令,按下并移動鼠標時就可通知程序執行該命令.

至于旋轉角度和旋轉軸的求解,比較典型的方法是Ne He Open GL編程指南中提供的旋轉球法[7].本文提出了一種更為簡單的求解旋轉軸的方法.

如圖3所示,設O點是旋轉變換系統(局部坐標系統)的原點,位于物體的位置坐標(世界坐標)處,^n是填充圓面的單位法線向量,其方向由O點指向視點(根據§4.4的方法,總可以保證圓面與視點正對).設當鼠標位于P0點時按下左鍵并移動,某時刻移動到了P1點.則此過程的旋轉軸用向量r表示,可由下式計算:

式中:OP0,OP1分別為從O 點到P0,P1點的向量.O點的世界坐標是已知的,等于欲進行旋轉變換物體位置的世界坐標.^n由視點和O點的世界坐標求出.P0點和P1點的世界坐標可使用2.3的方法由鼠標窗口坐標映射到世界坐標得到.

圖3 求解任意旋轉軸

4.3 以視線為轉軸的旋轉變換

三維計算機圖形學中,把視點與物體(位置)的連線稱為視線.繞著視線的旋轉變換也是較為常用的一種變換形式.這種變換的可視化表示方法較為簡單,可直接使用以變換系統的原點為圓心的圓環表示,但半徑必須比§4.2填充圓的半徑大.這種變換的旋轉軸即為視點的三維空間坐標(世界坐標)與物體的空間坐標(變換系統原點對應的世界坐標)的差值構成的空間向量.

4.4 調整變換組件的空間方位

對于4.2,4.3所使用的填充圓,必須隨著視點或者物體位置的不同對它們的空間方位進行調整,以使其始終正對視點,以免出現有時看起來呈正圓形,有時呈橢圓形,有時又呈一條線的情況.調整方法是:首先,計算視點與物體(位置)的連線與xoz面的夾角angle XZ以及該連線在xoz面的投影與z軸夾角angle Z.然后,使這些圓面繞著Y軸旋轉angle XZ.最后,使它們繞著X軸旋轉-angle Z.

5 結束語

本文在Visual C++編程環境下,將這些變換組件封裝在一起,構建CTransfor m類,這就使得這些變換組件能夠很容易地應用到圖形或應用系統中.只要在程序文件中包含該類的頭文件,并定義一個該類的實例(指針變量,或者聲明一個CTransfor m類型的普通變量),然后利用類所提供的用戶接口,執行必要的命令即可.

CTransfor m類提供了3種用戶接口.一種是變換組件的屬性接口,用于設置/獲取變換組件的位置、縮放量、旋轉軸、當前的變換類型及狀態等.另一種是組件的繪制接口,用根據當前變換的類型及狀態,顯示不同的變換組件.三種變換類型間的切換可以通過菜單或者工具欄實現,僅需要增加三個程序菜單項或工具欄按鈕.第三種是用于獲取3D場景視點信息的接口,該接口主要用于旋轉變換,能夠根據視點的位置自動調整旋轉組件的在場景中的姿態(參閱4.4).

圖4是三類模型變換組件的實現效果圖.當選中一個物體時,根據程序的當前變換要求顯示相應的變換組件,并將該組件定位到被選中的物體上,根據模型變換的實際需要,通過鼠標選擇相應的變換部件,按下并移動鼠標時,相應的變換命令得以執行.這項技術已經用于正在開發的虛擬物理環境的軟件平臺及“基于磁各向異性的Galfenol本征非線性模型及其應用研究(20090143110005)”的仿真軟件開發試驗中,使得應用程序的界面得到很大程度的簡化,同時也使得對場景中模型的控制變得簡單、方便,效果好.

圖4 模型變換組件效果圖

[1]劉鵬程,艾廷華,胡晉山.基于Open GL技術的隧道仿真系統的研究與開發[J].計算機工程,2008,34(6):240-242.

[2]朱志峰,余德義.利用OPENGL技術開發3D飛行仿真應用程序[J].計算機仿真,2005,21(3):194-196.

[3]王勝全,范燮昌,談士力.Open GL中的坐標變換分析[J].機械與電子,2004(2):65-67.

[4]王亞平,余 柯,羅 堃.在Open GL中一種新的拾取方法及其應用[J].工程圖學學報,2003(2):60-64.

[5]Woo M,Neider J,Davis T.OPENGL編程權威指南[M].北京:中國電力出版社,2001.

[6]楊 冬,王 琰,祁 燕.虛擬裝配環境中基于分層結構三維實體的拾取[J].沈陽理工大學學報,2007,26(1):17-20.

[7]Terence J.Open GL Tutorials:Lesson 48[CP/OL].[2011-02-26].htt p://nehe.gamedev.net/data/lessons/lesson.asp?lesson=48

猜你喜歡
可視化模型
一半模型
自然資源可視化決策系統
北京測繪(2022年6期)2022-08-01 09:19:06
思維可視化
師道·教研(2022年1期)2022-03-12 05:46:47
基于Power BI的油田注水運行動態分析與可視化展示
云南化工(2021年8期)2021-12-21 06:37:54
自然資源可視化決策系統
北京測繪(2021年7期)2021-07-28 07:01:18
重要模型『一線三等角』
基于CGAL和OpenGL的海底地形三維可視化
重尾非線性自回歸模型自加權M-估計的漸近分布
“融評”:黨媒評論的可視化創新
傳媒評論(2019年4期)2019-07-13 05:49:14
3D打印中的模型分割與打包
主站蜘蛛池模板: 综合色婷婷| 男女性色大片免费网站| 欧美天堂在线| 欧美成人A视频| 日本影院一区| 国产交换配偶在线视频| 夜色爽爽影院18禁妓女影院| 欧美一级在线看| 中文字幕有乳无码| 欧美乱妇高清无乱码免费| 国产一在线观看| 国产精品免费p区| 午夜福利免费视频| 国产超碰在线观看| 日本尹人综合香蕉在线观看| 无码日韩视频| 毛片免费高清免费| 国产经典免费播放视频| 亚洲人成影视在线观看| 国产视频只有无码精品| 国产精品美乳| 久久午夜夜伦鲁鲁片不卡| 成人永久免费A∨一级在线播放| 欧美日韩国产在线播放| 亚洲一区黄色| 国产区免费| 思思热精品在线8| 亚洲成肉网| 久视频免费精品6| 亚洲成人黄色网址| 欧美不卡视频在线| 福利姬国产精品一区在线| 午夜老司机永久免费看片| 91色在线视频| 色窝窝免费一区二区三区 | 蜜臀AV在线播放| 亚洲精品少妇熟女| 免费看美女毛片| 午夜精品久久久久久久无码软件| 伊人丁香五月天久久综合 | 精品视频福利| 亚洲午夜国产精品无卡| 午夜电影在线观看国产1区| 福利片91| 国产日产欧美精品| 国产精品污视频| 亚洲av无码久久无遮挡| 亚洲国产91人成在线| 国产区91| 久久久精品无码一二三区| 国产日韩av在线播放| 3p叠罗汉国产精品久久| 亚洲日韩高清在线亚洲专区| 91毛片网| 在线日韩一区二区| 国产免费久久精品99re不卡| 免费看av在线网站网址| 欧美国产综合视频| 欧美亚洲国产一区| 国产成人亚洲日韩欧美电影| 无码高潮喷水在线观看| 国产精品密蕾丝视频| 美女高潮全身流白浆福利区| 亚洲乱伦视频| 精品人妻无码区在线视频| 一级在线毛片| 91视频区| 中文字幕在线不卡视频| 亚洲午夜综合网| 国产精品观看视频免费完整版| 国产色伊人| 青青青国产视频手机| 亚洲AV无码乱码在线观看裸奔| 亚洲国产精品久久久久秋霞影院 | 日韩国产精品无码一区二区三区| 欧美 亚洲 日韩 国产| 制服丝袜国产精品| 亚洲综合片| 无码精油按摩潮喷在线播放| 一本大道无码日韩精品影视| 欧美午夜网| 欧美日韩专区|