亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Open GL選擇機制的模型變換組件的實現(xiàn)*

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

        高明向 陳定方 楊艷芳

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

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

        1 Open GL選擇機制

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

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

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

        2 平移組件

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

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

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

        圖1 平移變換組件

        2.2 平移變換命令的解析與執(zhí)行

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

        2.3 鼠標控制物體的移動

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

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

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

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

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

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

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

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

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

        圖2 消除跳躍的方法

        3 縮放組件

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

        4 旋轉(zhuǎn)組件

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

        4.1 基本旋轉(zhuǎn)變換的可視化表示

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

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

        4.2 繞空間任意軸旋轉(zhuǎn)的可視化表示

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

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

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

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

        圖3 求解任意旋轉(zhuǎn)軸

        4.3 以視線為轉(zhuǎn)軸的旋轉(zhuǎn)變換

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

        4.4 調(diào)整變換組件的空間方位

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

        5 結(jié)束語

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

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

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

        圖4 模型變換組件效果圖

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

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

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

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

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

        [6]楊 冬,王 琰,祁 燕.虛擬裝配環(huán)境中基于分層結(jié)構(gòu)三維實體的拾?。跩].沈陽理工大學(xué)學(xué)報,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

        猜你喜歡
        可視化模型
        一半模型
        自然資源可視化決策系統(tǒng)
        北京測繪(2022年6期)2022-08-01 09:19:06
        思維可視化
        師道·教研(2022年1期)2022-03-12 05:46:47
        基于Power BI的油田注水運行動態(tài)分析與可視化展示
        云南化工(2021年8期)2021-12-21 06:37:54
        自然資源可視化決策系統(tǒng)
        北京測繪(2021年7期)2021-07-28 07:01:18
        重要模型『一線三等角』
        基于CGAL和OpenGL的海底地形三維可視化
        重尾非線性自回歸模型自加權(quán)M-估計的漸近分布
        “融評”:黨媒評論的可視化創(chuàng)新
        傳媒評論(2019年4期)2019-07-13 05:49:14
        3D打印中的模型分割與打包
        亚洲女人被黑人巨大进入| 亚洲av久播在线一区二区| 国产精品久久久久久福利| 国产成人精品日本亚洲| 免费一区二区三区视频狠狠| 国产成人高清亚洲一区二区| 久久久精品视频网站在线观看| 国产三级精品三级在线观看| 手机看片福利盒子久久青| 国产一区二区三区蜜桃av| av网站在线观看大全| 亚洲国产精品va在线看黑人| 99久久久久国产| 亚洲视频中文字幕更新| 久久精品国产亚洲av不卡国产| 亚洲精品无码久久久| 国产喷水在线观看| 蜜桃在线一区二区三区| 免费人成视网站在线剧情| 国产激情电影综合在线看| 99ri国产在线观看| 日本久久黄色高清视频| 老熟女富婆激情刺激对白| 久久精品国产亚洲av大全| 精品国产一区二区三区香蕉| 天堂网av在线免费看| 中文字幕日韩三级片| 精品高潮呻吟99av无码视频| 久久精品国产亚洲av热九九热 | 精品一区二区三区老熟女少妇| 亚洲av福利天堂一区二区三| 精品午夜福利无人区乱码一区 | 中文字幕一区二区三在线| 日本在线一区二区三区不卡| 日日摸日日碰夜夜爽无码| 国产在线精品福利大全| 日本不卡不二三区在线看 | 亚洲一区爱区精品无码| 综合久久青青草免费观看视频| 中文字幕亚洲精品久久| 真人与拘做受免费视频|