vc環(huán)境下opengl多視圖窗口的實現(xiàn)

vc環(huán)境下opengl多視圖窗口的實現(xiàn)

ID:5264093

大?。?86.15 KB

頁數(shù):5頁

時間:2017-12-07

vc環(huán)境下opengl多視圖窗口的實現(xiàn)_第1頁
vc環(huán)境下opengl多視圖窗口的實現(xiàn)_第2頁
vc環(huán)境下opengl多視圖窗口的實現(xiàn)_第3頁
vc環(huán)境下opengl多視圖窗口的實現(xiàn)_第4頁
vc環(huán)境下opengl多視圖窗口的實現(xiàn)_第5頁
資源描述:

《vc環(huán)境下opengl多視圖窗口的實現(xiàn)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、軟件報/2006年/10月/23日/第019版開發(fā)編程應(yīng)用實例VC環(huán)境下OpenGL多視圖窗口的實現(xiàn)編程語言:VisualC++6.0重慶龔勛摘要:本文在VisualC++環(huán)境下,以4個OpenGL窗口為例,介紹多個OpenGL窗口的實現(xiàn),在此框架的基礎(chǔ)上,可以實現(xiàn)類似3DSMax多視角3D軟件編程。關(guān)鍵字:OpenGL;三維;多視角;多視圖;OpenGL是在SGI等多家世界聞名的計算機公司的倡導下,以SGI的GL三維圖形庫為基礎(chǔ)制定的一個通用共享的開放式三維圖形標準。很多著名的產(chǎn)品包括動畫制作軟件SoftImage和3DS

2、tudioMAX等都是在它的基礎(chǔ)上實現(xiàn)的。從本質(zhì)上說,OpenGL是一個完全可移植并且速度很快的3D圖形和建模庫。在Windows平臺上,OpenGL可以方便地與VisualC++(在下文中簡稱VC)結(jié)合,創(chuàng)建精致漂亮的3D圖形。通常在VC環(huán)境下編寫OpenGL程序都是單視圖的模式,本文介紹如何把單個視圖拆分為多個,如何在各個視圖上進行切換繪圖。1.OpenGL繪圖1.1.OpenGL繪圖簡介具有Windows編程經(jīng)驗的人都知道,在Windows下用GDI繪圖必須通過設(shè)備上下文(DeviceContext簡稱DC)調(diào)用相應(yīng)的

3、繪圖函數(shù);用OpenGL繪圖也是類似,OpenGL函數(shù)也通過“渲染上下文”(RenderingContext簡稱RC)完成三維圖形的繪制。正如設(shè)備上下文DC要存儲GDI的繪制環(huán)境信息如筆、刷和字體等,渲染上下文RC也必須存儲OpenGL所需的渲染信息如像素格式等。DC調(diào)用每個GDI函數(shù)都需要一個DC句柄,而RC不同,所有的OpenGL函數(shù)都是在當前RC(當前RC概念見1.2節(jié))下進行的,故不需要傳入RC句柄。Windows系統(tǒng)支持OpenGL渲染,Win32庫提供了用于初始化像素格式、控制渲染和使用OpenGL擴展的函數(shù)(w

4、gl打頭的函數(shù))。下面對幾個常用的wgl函數(shù)的功能進行簡單介紹。(1)HGLRCwglCreateContext(HDChdc)該函數(shù)用來創(chuàng)建一個OpenGL可用的渲染上下文RC。(2)BOOLwglDeleteContext(HGLRChglrc)該函數(shù)刪除一個RC。(3)HGLRCwglGetCurrentContext(void)該函數(shù)返回線程的現(xiàn)行RC,如果線程無現(xiàn)行RC則返回NULL。(4)HDCwglGetCurrentDC(void)該函數(shù)返回與線程現(xiàn)行RC關(guān)聯(lián)的DC,如果線程無現(xiàn)行RC則返回NULL。(5)B

5、OOLwglMakeCurrent(HDChdc,HGLRChglrc)該函數(shù)把hdc和hglrc關(guān)聯(lián)起來,并使hglrc成為調(diào)用線程的當前RC。1.2.OpenGL多視圖渲染的原理上文提到,用OpenGL繪圖首先必須創(chuàng)建一個RC,在創(chuàng)建RC時與一個DC建立聯(lián)系(RC也只能通過DC來創(chuàng)建),然后再將其設(shè)置為當前RC,這樣,OpenGL的函數(shù)就可以通過RC對應(yīng)的DC畫到相應(yīng)的顯示設(shè)備上。一個RC是否是當前RC,這是針對調(diào)用線程而言的,一個線程在擁有現(xiàn)行RC進行繪圖時,第1頁共5頁別的線程將無法同時繪圖。一個線程一次只能擁有一個

6、現(xiàn)行RC,但是可以擁有多個RC;一個RC也可以由多個線程共享,但是它每次只能在一個線程中是現(xiàn)行RC;一個RC可以對應(yīng)多個DC,但在繪圖時,只能同時與一個DC掛鉤。本文實現(xiàn)多視圖采用多個RC和多個DC的模式,其中每個視圖對應(yīng)一個DC,每個DC對應(yīng)一個RC,故4個視圖就有4個DC,4個RC,當需要在某個視圖上繪圖時,就將該RC切換為當前RC。下文將結(jié)合作者的工作經(jīng)驗,以實例的方式介紹如何在VC6.0下創(chuàng)建多個(以4個窗口為例)OpenGL繪圖窗口的程序。2.實現(xiàn)窗口的拆分首先用VC6.0AppWizard創(chuàng)建一個SDI的MFC應(yīng)

7、用程序MultiWindow,然后通過一個CSplitterWnd對象將窗口用靜態(tài)拆分的方式劃分為4部分,如圖1。實現(xiàn)拆分過程如下:(1)為CMainFrame添加一個CSplitter-Wnd類型的對象m_wndSplitter;(2)添加3個視圖類:CTopLeftView,CBottomLeftView,CBottomRightView,這樣,加上CMutiWindowView,一共有4個視圖類;(3)為CMainFrame重載OnCreate-Client()函數(shù),在函數(shù)體添加代碼為4個子窗口關(guān)聯(lián)相應(yīng)的視圖,如下:m

8、_wndSplitter.CreateStatic(this,2,2);//為每個窗口生成視圖m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CTopLeftView),CSize(100,100),pContext);m_wndSplitter.Cr

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。