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

        ?

        基于OpenGL的三維模型交互控制研究

        2015-04-17 12:40:47游有鵬邢永彥
        機械設(shè)計與制造工程 2015年1期
        關(guān)鍵詞:坐標值視點鼠標

        葉 帥,游有鵬,邢永彥

        (南京航空航天大學(xué) 機電學(xué)院,江蘇 南京 210016)

        基于OpenGL的三維模型交互控制研究

        葉 帥,游有鵬,邢永彥

        (南京航空航天大學(xué) 機電學(xué)院,江蘇 南京 210016)

        OpenGL是圖形硬件的一種軟件接口,在深入了解OpenGL顯示機制的基礎(chǔ)上,討論了基于OpenGL實現(xiàn)三維模型的交互顯示變換方法。應(yīng)用OpenGL接口,通過對鼠標的二維位置的變換,得到世界坐標系中三維旋轉(zhuǎn)軸和旋轉(zhuǎn)角度,以及鼠標在世界坐標系中的三維位置,進而對三維模型進行平移、縮放、旋轉(zhuǎn)操作。算法經(jīng)實際編程應(yīng)用,證明能夠有效地實現(xiàn)三維模型的各種交互控制功能。

        三維模型;鼠標控制;OpenGL;交互式

        目前,相當多的優(yōu)秀三維圖形工具展現(xiàn)了精彩的虛擬現(xiàn)實場景[1]。隨著虛擬現(xiàn)實進入工程應(yīng)用,要求相關(guān)的圖形應(yīng)用軟件能夠使用戶與虛擬現(xiàn)實場景進行互動操作。為此,當進行圖形應(yīng)用軟件交互控制設(shè)計時,必須考慮三維模型的平移、縮放和旋轉(zhuǎn)等操作的實現(xiàn),其中最為困難的是旋轉(zhuǎn)操作。常用的方法是使用OpenGL提供的接口函數(shù)glRotate()來實現(xiàn)三維旋轉(zhuǎn)操作[2]、采用四元數(shù)法求旋轉(zhuǎn)變換矩陣[3]、構(gòu)造旋轉(zhuǎn)矩陣對模型進行變換[4],它們可以很好地實現(xiàn)三維模型的旋轉(zhuǎn),但會改變對象的坐標,并且計算量大。對于有坐標值要求的三維實體,這些方法并不適用。針對以上問題,本文提出了一種利用鼠標移動改變視點坐標系位置、保留原有三維模型的空間幾何信息、實現(xiàn)三維模型交互控制的方法。

        1 坐標系分類

        OpenGL中存在如下幾種坐標系:

        a.世界坐標系。世界坐標系是以屏幕中心為原點(0, 0, 0),在OpenGL中用來描述場景的坐標,是系統(tǒng)的絕對坐標系。在繪圖期間,原點和坐標軸保持不變。

        b.模型坐標系。繪制模型時使用的坐標系。當模型發(fā)生旋轉(zhuǎn)、平移等變化時,模型坐標系本身不會變化,變化的是模型在世界坐標系中的位置。

        c.視坐標系。以視點為原點,以視線方向為Z軸正方向的坐標系。OpenGL會將世界坐標系先變換為視坐標系,然后進行裁剪,只有在視景體內(nèi)的場景才會進行下一個階段的處理。

        2 實現(xiàn)方法和步驟

        2.1顯示變換分析

        在計算機圖形學(xué)中,三維圖形的旋轉(zhuǎn)變換需要指定一個旋轉(zhuǎn)軸和旋轉(zhuǎn)角度。通常,三維旋轉(zhuǎn)變換可圍繞空間任意直線軸進行,并規(guī)定圖形繞某軸逆時針方向的旋轉(zhuǎn)角度為正。旋轉(zhuǎn)變換前后三維圖形的大小和形狀不發(fā)生變化,只是空間位置發(fā)生了變化。繞坐標軸旋轉(zhuǎn)是最簡單的旋轉(zhuǎn)變換。當三維圖形繞某一坐標軸旋轉(zhuǎn)時,圖形上各點關(guān)于此軸的坐標值不變,而另兩個坐標軸的坐標值相當于在它們組成的坐標面上的一個二維旋轉(zhuǎn)變換,然后再投影到二維的屏幕上。當通過鼠標操作三維場景中某個物體的投影進行旋轉(zhuǎn)時,可以將鼠標位置的改變轉(zhuǎn)換成三維物體繞著空間某一垂直于投影方向軸的旋轉(zhuǎn)。

        基于以上分析,可對三維物體旋轉(zhuǎn)問題作如下轉(zhuǎn)化:鼠標在二維屏幕上的移動等價于三維物體繞空間某一條軸的旋轉(zhuǎn),該旋轉(zhuǎn)軸可定義為平行于屏幕、垂直于鼠標移動方向且通過原點,旋轉(zhuǎn)的角度由鼠標的移動距離來確定。三維物體的縮放,可通過改變視點里三維模型的距離來實現(xiàn),縮放比例由鼠標沿X軸移動的距離確定。這些變換都使用到同一函數(shù)gluLookAt()。對于三維物體平移問題,可直接調(diào)用glTranslate*()函數(shù),參數(shù)由鼠標在窗口中的移動量確定。

        2.2實現(xiàn)步驟

        在實際應(yīng)用中,用戶在完成場景建模后,往往需要選擇一個合適的視角或者不停地變換視角,以對場景作觀察,實用庫函數(shù)gluLookAt()就提供了這樣的功能,函數(shù)聲明如下:

        VoidgluLookAt(GLdoubleeyex,GLdoubleeyey,GLdoubleeyez,GLdoublecenterx,GLdoublecentery,GLdoublecenterz,GLdoubleupx,GLdoubleupy,GLdoubleupz);

        該函數(shù)定義一個視圖矩陣,并與當前矩陣相乘。其中,(eyex,eyey,eyez)為視點的位置;(centerx,centery,centerz)為參考點的位置;向量(upx,upy,upz)為視線向上的方向。

        2.2.1構(gòu)造UVN坐標系

        gluLookAt()函數(shù)提供了視圖模型變換(Model-ViewTransformation)功能,將模型坐標系轉(zhuǎn)換為世界坐標系后,進行世界坐標系到照相機坐標系的轉(zhuǎn)換。實際上,照相機的定位也是在世界坐標系下定義的,這里的轉(zhuǎn)換可以理解為從照相機的角度解釋世界坐標系中物體的坐標??梢酝ㄟ^構(gòu)造一個UVN相機坐標系來簡化這一轉(zhuǎn)換。圖1為正式定義的UVN相機坐標系。

        與UVN相關(guān)的概念包括:相機位置,或稱之為視點(Eyepoint),即觀察參考點 (ViewReferencePoint);相機鏡頭方向,即觀察平面法向量VPN(View Plane Normal),通過觀察平面的法向量指定;相機頂部正朝向VUV(View Up Vector)。

        gluLookAt()通過指定一個視點、表面場景中心的參考點以及向量Vup來構(gòu)造一個視變換矩陣。這個矩陣將視點映射成為原點,并指向Z軸負方向。當使用一個特定的投影矩陣時,場景的中心就映射到視口的中心。類似地,由向量Vup描述的方向投影到投影平面成為+Y軸,這樣它在視口中的指向向上。向量Vup不可與從視點到參考點的直線平行。

        各參數(shù)通過以下公式計算:

        VPN=target-eye

        式中:target是物體位置;eye是視點位置;u,v,n是UVN坐標系的3個基向量。

        需要注意的是,OpenGL中使用的相機坐標系是右手坐標系,UVN坐標系是左手坐標系。在構(gòu)造實際變換矩陣的過程中,OpenGL需要將-N軸翻轉(zhuǎn)為相機坐標系的+Z軸,U,V軸定為相機坐標系的+X和+Y軸。

        2.2.2構(gòu)造視變換矩陣

        視變換就是在相機坐標系中解釋世界坐標系中的點。這個變換矩陣的構(gòu)造,可以看作將相機坐標系變換到與原來的世界坐標系重合。而將世界坐標系變換到與相機坐標系重合,可以看作是這個所求變換的逆過程。

        將世界坐標系變換到與相機坐標系重合,實際上進行了兩個步驟:第一步將世界坐標系旋轉(zhuǎn)一定角度記作變換R,再將世界坐標系平移到視點位置記作T,那么這個變換矩陣記為M=TR。要將世界坐標系的點變換到照相機坐標系下,需要使用矩陣M的逆矩陣,即inverse(M)=inverse(R)·inverse(T)。

        平移矩陣的逆矩陣形式簡單,就是取平移量eyex,eyey,eyez的相反數(shù),即:

        2.2.3求出旋轉(zhuǎn)矩陣R

        上面構(gòu)造的UVN坐標系u-v-n3個基向量可以構(gòu)造成矩陣:

        這里對N軸進行了翻轉(zhuǎn),構(gòu)成右手照相機坐標系。從矩陣形式上可以看出,矩陣A實際上代表的就是一個旋轉(zhuǎn)矩陣。旋轉(zhuǎn)矩陣的一個特點就是它是正交矩陣,即有inverse(A)=transpose(A),(A-1=AT)。

        這里A矩陣可以看作是將世界坐標系轉(zhuǎn)換到與照相機坐標系重合時的旋轉(zhuǎn)矩陣。矩陣A的第4列為(0,0,0,1)T,可以看作是世界坐標系和照相機坐標系原點重合;矩陣前3列為變換后的基向量,那么這個基向量就是通過旋轉(zhuǎn)原來的世界坐標系的基向量來構(gòu)造的。因此,可以說矩陣A代表的就是將世界坐標系旋轉(zhuǎn)到與相機坐標系重合時的旋轉(zhuǎn)矩陣R,即R=A。

        則inverse(R)=inverse(A)=transpose(A) ,即:

        所以變換矩陣inverse(M)為:

        M-1=R-1T-1=

        2.2.4應(yīng)用

        通過以上幾個小節(jié)的討論,已經(jīng)求得變換矩陣,通過gluLookAt()函數(shù)即可將世界坐標系的點變換到照相機坐標系下。gluLookAt()函數(shù)所需的具體參數(shù)可通過以下步驟計算得出:

        CurrentAngleZ=(ep.x()-sp.x())*divAnale+LastAngleZ;//計算當前繞Z軸旋轉(zhuǎn)角度,ep為終止點,sp為起始點

        CurrentAngleY=(ep.y()-sp.y())*divAnale+LastAngleY; //計算當前繞Y軸旋轉(zhuǎn)角度

        eyex=sin(CurrentAngleY)*sin(CurrentAngleZ);

        eyey=cos(CurrentAngleY);

        eyez=sin(CurrentAngleY)*cos(CurrentAngleZ);

        Look=(targetx-eyex,targety-eyey,targetz-eyez)T;

        Look.normalized();//單位化Look向量

        Up.normalized();//單位化up向量;

        Right = Cross( Look, Up );//Look與up向量的叉積

        Up = Cross(Right, Look);//Right與Look向量的叉積

        最后將得到的新的觀察點位置和向量up應(yīng)用到gluLookAt()函數(shù)中,并在鼠標移動的響應(yīng)函數(shù)中實時跟蹤最新的鼠標位置值,就能夠?qū)崿F(xiàn)以世界坐標系原點為中心,按任意方向旋轉(zhuǎn)整個場景的功能。

        設(shè)定zoom=zoom+ (終止點X方向坐標值-起始點X方向坐標值)/8;

        moveX= (終止點X方向坐標值-起始點X方向坐標值)/10;

        moveY= (終止點Y方向坐標值-起始點Y方向坐標值)/10;

        在應(yīng)用gluLookAt()時,eyex,eyey,eyez分別乘以系數(shù)zoom即可實現(xiàn)以世界坐標系原點為中心的場景縮放功能,應(yīng)用glTranslatef(moveX,moveY,0)使得場景能夠平移。

        搭建的機床加工模型如圖2所示,旋轉(zhuǎn)、平移、縮放等功能均得到很好的實現(xiàn)。

        3 結(jié)束語

        本文在討論了OpenGL顯示機制的基礎(chǔ)上,分析了模型變換和視點變換,通過鼠標在二維屏幕上的移動轉(zhuǎn)化為三維場景繞空間某一軸的旋轉(zhuǎn),實現(xiàn)模型平移、縮放等功能,并能實時顯示交互過程。在此基礎(chǔ)上搭建的機床加工三維模型,具有較好的交互顯示效果,為接下來研究機床加工的虛擬仿真奠定了一個較好的基礎(chǔ)。

        [1]EdwardAngel.交互式計算機圖形學(xué):基于OpenGL的自頂向下方法[M].吳文國,譯.北京:清華大學(xué)出版社,2006.

        [2] 王映輝.3D建模與編程技術(shù)[J].計算機應(yīng)用研究,2004(1):37-43.

        [3] 王峰, 周江華, 孫國基.三維模型交互式瀏覽的簡捷算法[J].計算機工程與應(yīng)用, 2004,40(26): 101-103.

        [4] 徐元進, 胡光道, 葉菁,等.基于OpenGL的對應(yīng)分析因子載荷三維圖的繪制[J].計算機工程與應(yīng)用, 2004,40(10): 91-93.

        Study on the interactive control of three-dimensional models based on OpenGL

        YE Shuai, YOU Youpeng, XING Yongyan

        (Nanjing University of Aeronautics and Astronautics, Jiangsu Nanjing, 210016, China)

        OpenGL is a software interface to the graphics hardware. Bases on in-depth understanding of OpenGL display mechanism, it discusses the interactive OpenGL 3D model display transformation method. Applying OpenGL interface, it obtains the world coordinate of 3D rotation axis and angle of rotation through the two-dimensional position of the mouse transform, the 3D position of the mouse in world coordinates, the operation of translation, scaling and rotation of the 3D model. The actual programming application proves that the algorithm can realize the various 3Dmodel interactive control efficiently.

        three-dimensional models; mouse control; OpenGL; interactive

        10.3969/j.issn.2095-509X.2015.01.004

        2014-11-21

        葉帥(1991—),男,江蘇宿遷人,南京航空航天大學(xué)碩士研究生,主要研究方向為機電控制及自動化。

        TP391.72;TH16

        A

        2095-509X(2015)01-0015-04

        猜你喜歡
        坐標值視點鼠標
        麥弗遜懸架主銷軸線對半軸滑移的影響
        北京汽車(2023年1期)2023-03-03 00:50:38
        Progress in Neural NLP: Modeling, Learning, and Reasoning
        Engineering(2020年3期)2020-09-14 03:42:00
        基于二分法迭代的凸模數(shù)控銑削加工編程*
        視點
        河南電力(2016年5期)2016-02-06 02:11:24
        讓你每天一元錢,物超所值——《今日視點—2014精萃》序
        新聞前哨(2015年2期)2015-03-11 19:29:22
        兩會視點
        中國水利(2015年5期)2015-02-28 15:12:40
        利用CAD/CAM 軟件確定數(shù)控編程中 未知點的坐標
        物理坐標圖像的應(yīng)用賞析
        45歲的鼠標
        超能力鼠標
        IM家庭電子(2008年11期)2008-12-05 09:49:20
        人妻中文字幕不卡精品 | 99精品人妻少妇一区二区三区| 精品无码av无码专区| 欧美怡红院免费全部视频| 久久中文字幕无码一区二区| 在线看不卡的国产视频| 少妇连续高潮爽到抽搐| 无码国产福利av私拍| 亚洲аv天堂无码| 亚洲视频精品一区二区三区| 国产内射视频在线免费观看| 免费观看又色又爽又湿的视频| 一区二区三区日韩亚洲中文视频 | 成人免费无码大片a毛片| 国产95在线 | 欧美| 8090成人午夜精品无码| 国产丝袜美腿中文字幕| 国产乱妇无乱码大黄aa片| 国产偷国产偷亚洲清高| 青青草针对华人超碰在线| 性感女教师在线免费观看| 亚洲色成人网站www永久四虎| 精品国产亚洲一区二区在线3d | 精品国产亚洲第一区二区三区| 国产无吗一区二区三区在线欢| 99热在线精品播放| 玖玖资源网站最新网站| 国产人成视频在线视频| 少女高清影视在线观看动漫| 无码免费午夜福利片在线| 在线人妻va中文字幕| 国产精品∧v在线观看| 国产欧美一区二区成人影院| 亚洲视频观看一区二区| 人妻熟妇乱又伦精品hd| 亚洲中文字幕无码专区| 久草视频在线这里只有精品| 中文字幕乱码在线人妻| 少妇饥渴偷公乱a级无码| 韩国女主播一区二区在线观看| 白白色最新福利视频二|