《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 一種OpenGL局部縮放算法及應用
一種OpenGL局部縮放算法及應用
來源:微型機與應用2013年第19期
張立成1,張 鴿2
(1.長安大學 信息工程學院,陜西 西安 710064;2.西安中交土木科技有限公司,陜西 西安 7
摘要: 縮放是OpenGL三維模型展示的基本操作之一,一般縮放時由于整個場景圍繞視景體中心縮放,感興趣區(qū)域在視圖窗口中的位置會不斷變化甚至離開視景體,需要不斷地執(zhí)行平移操作,不斷地修正感興趣區(qū)域在視圖窗口中的位置,無法集中精力觀察工程計算中模型的變化細節(jié)。為了解決該問題,從圖形學角度提出了一種改進的局部縮放算法,實現(xiàn)了用鼠標滾輪縮放模型時,鼠標選擇處的模型不離開視景體而相對視圖窗口的位置保持不變,省去了傳統(tǒng)算法中用戶進行縮放操作時需要不斷進行平移的操作,改進了用戶體驗。該算法在多個可視化項目中得到實際應用,取得了很好的操作體驗。
Abstract:
Key words :

摘  要: 縮放是OpenGL三維模型展示的基本操作之一,一般縮放時由于整個場景圍繞視景體中心縮放,感興趣區(qū)域在視圖窗口中的位置會不斷變化甚至離開視景體,需要不斷地執(zhí)行平移操作,不斷地修正感興趣區(qū)域在視圖窗口中的位置,無法集中精力觀察工程計算中模型的變化細節(jié)。為了解決該問題,從圖形學角度提出了一種改進的局部縮放算法,實現(xiàn)了用鼠標滾輪縮放模型時,鼠標選擇處的模型不離開視景體而相對視圖窗口的位置保持不變,省去了傳統(tǒng)算法中用戶進行縮放操作時需要不斷進行平移的操作,改進了用戶體驗。該算法在多個可視化項目中得到實際應用,取得了很好的操作體驗。
關鍵詞: 計算機應用坐標變換; 局部縮放;可視化;視景體

 OpenGL是一個與硬件平臺無關、與系統(tǒng)平臺無關的三維圖形庫,其在三維真實感圖形制作中具有優(yōu)秀的性能,已經(jīng)成為高性能的圖形和交互視景處理的標準。OpenGL API由200多個函數(shù)組成,主要提供圖形繪制、變換操作、顏色模式、光照、圖像效果增強、位圖和圖像、紋理映射、交互與動畫8個方面的功能。一些跨平臺的三維庫(如OSG)也是建立在OpenGL之上的,對OpenGL的API進行了封裝,利用這些三維庫,開發(fā)人員可以開發(fā)豐富的交互式應用程序[1-3]。GPU高性能計算的支持,使得OpenGL開發(fā)的三維程序運行更加流暢、場景更加逼真[4]。
 OpenGL具有強大的圖形處理功能,包括圖形的平移、旋轉(zhuǎn)、縮放等。靈活運用OpenGL的這些功能,可以實現(xiàn)很多更復雜的操作。但在一般情況下,當利用OpenGL進行圖形的縮放時,往往是以視景體的中心為縮放中心進行整體縮放[5],該算法雖然在整體上實現(xiàn)了一定的縮放功能,但縮放的過程中,用戶期望的縮放區(qū)域會在Windows視圖窗口中不斷變化甚至離開視景體。以放大為例,為了觀察感興趣區(qū)域的細節(jié),如模型在外力作用下的變化過程,往往需要借助平移將目標區(qū)域移到合適位置后才能繼續(xù)放大,在放大達到一定系數(shù)時,放大-平移的操作非常頻繁,嚴重影響了操作體驗。參考文獻[6]提出了一種拉框放大算法,計算鼠標框選區(qū)域在視景體中的位置,然后將這個位置重新投影到視口上,該算法雖然能夠?qū)崿F(xiàn)放大,但是不能夠局部縮小,且放大與縮小操作的切換不連貫。本文提出的算法不僅能夠?qū)崿F(xiàn)局部縮放的效果,而且在操作方法上也作了改進,用戶滾動鼠標的滾輪,默認以光標處的模型為感興趣區(qū)域中心,縮放將圍繞該中心進行,而且用戶期望的縮放區(qū)域在視景體中原地縮放,縮小和放大操作切換流暢。
1 OpenGL變換的基本原理
 三維模型顯示到二維屏幕的過程分為造型變換、取景變換、投影變換和視口變換4個階段[7],如圖1所示。

 其中,方框中為坐標變換名稱,箭頭上為坐標系名稱。
 造型變換將各個處于自身局部坐標系中的模型變換到世界坐標系中組成整個場景;取景變換將定義在世界坐標系下的場景變換到視點坐標系中;投影變換將視點坐標系中的場景投影到二維視窗區(qū)域;視口變換將視窗中的投影結果轉(zhuǎn)換到屏幕坐標系中[8]。
 本文討論的相關算法涉及變換序列中的投影變換和視口變換,為了使物體在屏幕上的顯示尺寸不受所處距離遠近的影響,本文采用正投影。正投影將裁剪后的視景體投影到二維投影平面上,映射到以像素為單位的屏幕坐標系的過程這里簡化為式(1),因為Windows視圖窗口所在坐標系的默認形式為:視圖窗口左上角為原點,向右為X正方向,向下為Y正方向(不考慮普通二維變換和光柵化等步驟)。

 由于放大后的視景體的長度和寬度都小于放大前的視景體的長度和寬度,在視圖顯示窗口尺寸不變的前提下,模型只顯示虛線中的部分,從而達到放大的效果。

3 程序?qū)崿F(xiàn)與應用
 以VC 8.0為開發(fā)工具,OpenGL最小系統(tǒng)的搭建過程省略,本文算法的主要實現(xiàn)過程及代碼如下。
3.1 定義變量
 在應用程序的頭文件里定義變量如下,這里變量的名稱和算法中描述的一致。
//鼠標當前點坐標
    CPoint m_MousePos;
    //鼠標當前點距離視景體左邊緣和下邊緣的距離
    double Xpv1,Ypv1;
3.2 分別為應用程序添加WM_MOUSEMOVE和WM_MOUSEWHEEL消息
 在WM_MOUSEMOVE消息的響應函數(shù)中為定義的變量賦值,部分代碼如下。
//獲取視圖窗口的尺寸
CRect rect;
GetClientRect(&rect);
//計算Xpv1和Ypv1
m_MousePos=CPoint(point.x,rect.Height()-point.y);
double w,h;
m_Camera.get_view_rect(w,h);
Xpv1=w*m_MousePos.x*1.0/rect.Width();
Ypv1=h*m_MousePos.y*1.0/rect.Height();
WM_MOUSEWHEEL消息響應函數(shù)核心代碼為:
//縮放系數(shù)
double a;
//視景體寬度和高度
double w,h;
//平移量
double t_x=0.0,t_y=0.0;
if(zDelta<0)
{
    //縮小系數(shù)
    a=1.1;
}
if(zDelta>0)
{
    //放大系數(shù)
    a=0.9;
}    
//獲取視景體寬度和高度
m_Camera.get_view_rect(w,h);
//根據(jù)算法計算平移量
t_x=(1-a)*(0.5*w-Xpv1);
t_y=(1-a)*(0.5*h-Ypv1);
//累計平移量
m_Camera.set_move_view(t_x,t_y);
//縮放
m_Camera.zoom(a);
//計算新Xpv1,Ypv1
m_Camera.get_view_rect(w,h);
CRect rect;
GetClientRect(&rect);
Xpv1=w*m_MousePos.x*1.0/rect.Width();
Ypv1=h*m_MousePos.y*1.0/rect.Height();
InvalidateRect(NULL,F(xiàn)ALSE);//刷新視圖
3.3 算法在工程計算可視化項目中的應用

 


 算法在多個可視化項目中得到應用,圖3為“風、地震、隨機車流與橋梁交互動力分析軟件”截圖。一方面它能更真實地揭示出橋梁結構在汽車車輛荷載作用下的動態(tài)受力與變形本質(zhì),另一方面又能描述出橋梁結構在地震作用下的系統(tǒng)影響。因為數(shù)據(jù)計算量大,單純用VC++ 8.0程序計算耗時過多,容易造成計算中斷,所以本軟件采用Fortran語言作為數(shù)值計算程序主體,采用VC++ 8.0作為人機界面設計平臺,通過混合編程實現(xiàn)3種程序設計語言的組合、相互調(diào)用、參數(shù)傳遞、數(shù)據(jù)結構與信息共享,從而形成統(tǒng)一的橋梁動力學分析可視化軟件。
 該項目充分發(fā)揮Fortran語言在科學計算方面的優(yōu)勢及OpenGL在三維可視化渲染方面的優(yōu)勢,將工程人員多年積累的代碼資源及計算結果以圖形化展示,實現(xiàn)了橋梁結構在風、地震及隨機車流作用下的動態(tài)受力與變形的可視化。
 縮放是該軟件的重要功能之一,工程可視化軟件與一般的三維模型渲染軟件的區(qū)別是:一般三維模型軟件的點元、線元是基本不變的,而工程可視化軟件中渲染的模型是變化的,重點是將模型在外力(車輛負荷、風力、地震等)作用下的變化展示出來,即點元、線元的相對位置是變化的。為了將精力集中在觀察橋梁的結構在風、地震及隨機車流作用下的動態(tài)受力與變形,在對模型進行瀏覽時就不能不停地執(zhí)行平移放大操作。假設圖3(a)中標記的點為感興趣點,縮放應圍繞該目標點進行。圖3(b)為一般算法放大后的模型效果圖,此時的目標點已經(jīng)離開Windows視圖窗口,需要不斷平移再放大才能找到。圖3(c)為本文算法放大后的模型效果圖,目標點依然在視圖窗口內(nèi),在對模型進行瀏覽時不需要不停地平移即可看到模型的細節(jié),很好地改善了用戶的操作體驗,讓工程人員能夠?qū)W⒂跇蛄航Y構在風、地震及隨機車流作用下的影響。

 計算機圖形學給人們提供了一種直觀的信息交流工具,計算機圖形學已被廣泛地應用于各個不同的領域,尤其是在計算機輔助設計、計算機輔助制造和科學計算可視化等應用領域。利用本文介紹的算法,用戶可以方便地以某一點為中心進行自由縮放,及時捕捉工程計算的效果,減少冗余操作,改善用戶操作體驗,對開發(fā)圖形圖像應用軟件有一定的幫助。
參考文獻
[1] 梅章明,張秀山.基于MFC和OpenGL的噴泉模擬實現(xiàn)[J].微型機與應用,2012,31(14):41-43.
[2] 何煦佳,楊榮騫,黃毅洲,等.基于OpenGL的醫(yī)學圖像實時交互處理技術[J].計算機應用與軟件,2013,30(4):48-50,64.
[3] 胡平平,劉建明,王晶杰.OpenGL顯示3DS模型若干問題的研究[J].工程圖學學報,2010(4):189-193.
[4] 張舒,褚艷利.GPU高性能運算之CUDA[M].北京:中國水利水電出版社,2009.
[5] SHREINER D, WOO M, NEIDER J,等.OpenGL編程指南(第4版)[M].鄧鄭祥,譯.北京:人民郵電出版社,2005.
[6] 崔洪斌,秦國海,常瑋.利用OpenGL實現(xiàn)圖形的局部放大[J].工程圖學學報,2005(6):58-61.
[7] 姜衛(wèi)東.基于OpenGL的三維函數(shù)圖象繪制[D].長春:吉林大學,2007.
[8] 彭群生,金小剛,萬華根,等.計算機圖形學應用基礎(第1版)[M].北京:科學出版社,2009.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美在线视频免费观看| 一区二区三区欧美亚洲| 亚洲精品一区二区网址| 国产综合视频在线观看| 国产精品视频yy9299一区| 欧美日韩精品免费观看视频| 欧美激情在线| 欧美福利在线| 欧美v亚洲v综合ⅴ国产v| 老色鬼精品视频在线观看播放| 欧美在线中文字幕| 欧美中文字幕不卡| 欧美在线一级va免费观看| 欧美一区二区三区男人的天堂| 午夜精品一区二区三区四区 | 欧美一区二区三区视频在线| 亚洲一区成人| 亚洲欧美精品中文字幕在线| 亚洲欧美在线一区二区| 性欧美长视频| 久久精品国产免费观看| 久久久噜噜噜久久中文字免| 久久人人看视频| 久色成人在线| 欧美国产日本高清在线| 欧美区一区二区三区| 欧美天天视频| 国产伦精品一区二区三区| 国产欧美日韩亚洲一区二区三区| 国产日韩欧美视频在线| 好吊一区二区三区| 在线日韩av片| 日韩亚洲在线| 亚洲伊人观看| 久久精品1区| 亚洲精品在线看| 亚洲午夜在线| 久久久99久久精品女同性| 理论片一区二区在线| 欧美精品精品一区| 国产精品高潮久久| 国产在线欧美| 亚洲欧洲视频| 亚洲在线一区二区| 亚洲国产精品久久人人爱蜜臀 | 亚洲一区激情| 欧美在线网站| 日韩午夜免费视频| 亚洲免费视频在线观看| 久久久免费精品视频| 欧美成人中文字幕在线| 欧美丝袜一区二区| 国产亚洲精品福利| 亚洲国产高清自拍| 91久久久久久久久久久久久| 久久噜噜亚洲综合| 欧美高清视频| 国产精品久久激情| 好看的av在线不卡观看| 99视频一区二区| 欧美在线视频免费观看| 一区二区三区国产| 久久国产精品一区二区三区| 欧美大片在线看免费观看| 国产精品高潮呻吟久久av无限| 国外视频精品毛片| 日韩午夜电影在线观看| 欧美中文字幕视频| 一本色道久久综合一区 | 免费成人av| 国产精品乱码人人做人人爱| 在线播放豆国产99亚洲| 亚洲视频一区在线| 91久久精品国产| 亚洲欧美日韩另类| 欧美国产在线电影| 国产亚洲电影| 一区二区三区日韩| 亚洲精品中文字幕女同| 久久久99爱| 欧美视频日韩视频| 亚洲国产成人在线视频| 欧美一区2区三区4区公司二百 | 午夜精品视频一区| 欧美精品一区二区三区久久久竹菊| 国产欧美日韩综合一区在线观看| 亚洲人www| 亚洲第一网站| 性欧美18~19sex高清播放| 欧美激情综合色综合啪啪| 海角社区69精品视频| 亚洲制服欧美中文字幕中文字幕| 亚洲免费av电影| 久久中文字幕一区| 国产亚洲福利| 午夜日韩电影| 午夜精品网站| 国产精品久久久久国产a级| 亚洲人成绝费网站色www| 久久精品亚洲国产奇米99| 欧美一级二级三级蜜桃| 欧美色图麻豆| 日韩视频一区二区三区| 亚洲精品欧美激情| 欧美va天堂| 亚洲高清在线观看| 久久国产视频网站| 欧美一级日韩一级| 国产精品老牛| 国产精品99久久久久久宅男| 亚洲视频精选在线| 欧美日韩高清区| 亚洲激情网址| 日韩视频不卡| 欧美激情欧美激情在线五月| 亚洲高清网站| 亚洲美女色禁图| 欧美精品九九| 亚洲精品在线观看视频| 日韩亚洲精品视频| 欧美激情影院| 99re这里只有精品6| 99天天综合性| 欧美日韩国产在线| 夜夜嗨av一区二区三区四区 | 欧美午夜片在线观看| 亚洲激情视频| 另类综合日韩欧美亚洲| 精品二区视频| 亚洲激情电影在线| 免费美女久久99| 亚洲福利视频二区| 亚洲人成小说网站色在线| 欧美激情中文字幕一区二区| 亚洲精品社区| 一区二区三区精品在线| 欧美日韩亚洲视频一区| 亚洲视频一区| 久久av资源网站| 国外成人在线视频网站| 亚洲国产精品日韩| 欧美日韩1区2区| 日韩一区二区电影网| 亚洲一区在线播放| 国产美女精品在线| 久久精品123| 欧美黄污视频| 99视频+国产日韩欧美| 香蕉免费一区二区三区在线观看| 国产日韩精品一区观看| 亚洲风情在线资源站| 欧美大片在线观看| 一区二区三区av| 久久精品一区二区三区四区 | 亚洲香蕉视频| 国产欧美大片| 91久久在线| 欧美日韩中文在线观看| 午夜激情一区| 男人的天堂亚洲| 正在播放日韩| 久久久久国色av免费看影院| 在线视频国内自拍亚洲视频| 一区二区激情| 国产欧美日韩不卡免费| 亚洲欧洲日韩综合二区| 国产精品高潮呻吟久久av无限| 欧美在线一区二区| 欧美精品久久久久久久| 亚洲制服av| 欧美激情一区二区三区蜜桃视频| 欧美日韩国产一区二区| 国产乱码精品一区二区三区五月婷| 亚洲第一成人在线| 亚洲天堂久久| 久久gogo国模啪啪人体图| 亚洲成人资源| 亚洲欧美影院| ●精品国产综合乱码久久久久| 亚洲在线观看| 在线观看成人av电影| 亚洲欧美在线另类| 亚洲国产精品99久久久久久久久| 亚洲欧美国产精品va在线观看 | 麻豆av福利av久久av| 一本久久综合亚洲鲁鲁五月天| 久久久成人精品| 亚洲最新合集| 久久影院亚洲| 亚洲午夜在线| 欧美激情成人在线| 欧美一区二区三区的| 欧美日韩精品一区视频| 亚洲福利视频网| 国产精品日韩一区| 99综合电影在线视频| 狠狠色丁香久久综合频道| 亚洲免费网站| 91久久国产自产拍夜夜嗨| 久久不见久久见免费视频1|