VC++下的OpenGL编程
生活随笔
收集整理的這篇文章主要介紹了
VC++下的OpenGL编程
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.值得記住的約定
一般情況下,VC++下進行OpenGL應(yīng)用程序開發(fā)步驟如下: 1.通過PIXELFORMATDESCRIPTOR結(jié)構(gòu)設(shè)置備注描述表DC的像素格式屬性。 2.創(chuàng)建渲染描述表RC,并與設(shè)備描述表DC建立聯(lián)系。 3.使用OpenGL作圖 4.釋放所占用的資源,包括解除DC和RC的聯(lián)系、刪除RC及其關(guān)聯(lián)的DC。 在這里,應(yīng)該先為應(yīng)用程序添加所需的變量和函數(shù),對相關(guān)變量進行初始化,然后在相應(yīng)函數(shù)中實現(xiàn)DC像素格式設(shè)置、RC的創(chuàng)建及其和DC的關(guān)聯(lián)、圖形繪制以及資源釋放等功能。2.一個典型實例
2.1 添加成員變量和成員函數(shù)
CClientDC* pDrawDC; // 用于指向當前DC的指針BOOL PixelformatSetting(void); // 用于設(shè)置像素格式 void GLSetting(void); // 用于創(chuàng)建渲染描述表RC 并關(guān)聯(lián)RC/DC void DrawGraphics(void); //OpenGL作圖2.2 添加消息響應(yīng)函數(shù)
WM_CREATE ?--- OnCreate(); //該消息響應(yīng)函數(shù)在建立一個窗體前被調(diào)用。 WM_DESTROY --- OnDestroy(); //窗口撤銷時響應(yīng)此函數(shù),因此在該函數(shù)中釋放所有被占用的資源。 WM_SIZE ? ?--- OnSize(); ? ?//改變窗口大小時響應(yīng)此函數(shù),可以調(diào)整視場。 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnDestroy(); afx_msg void OnSize(UINT nType, int cx, int cy);2.3 成員函數(shù)和消息響應(yīng)函數(shù)添加代碼
- 設(shè)置像素格式
- 創(chuàng)建渲染描述表,調(diào)用PixelFormatSetting()設(shè)置像素格式,創(chuàng)建和DC關(guān)聯(lián)的RC
- 在消息響應(yīng)函數(shù)OnCreate()中調(diào)用函數(shù)GLSetting(),使得GL環(huán)境生效
- 繪制幾何拓撲
- OnDraw函數(shù)中,圖像顯示
- 刪除渲染描述表RC及其綁定的設(shè)備描述表DC
2.4 添加人機交互(旋轉(zhuǎn)功能)
采用鼠標左鍵控制開關(guān),定時旋轉(zhuǎn)方案。 WM_BUTTONDOWN ?--- ?OnLButtonDown(); WM_TIMER ? ? ? --- ?OnTimer(); 添加變量: BOOL bRotate; float RotateAngle;void CtestGLView::OnLButtonDown(UINT nFlags, CPoint point) {if (bRotate){SetTimer(1,100,NULL);} else{KillTimer(1);}bRotate = !bRotate;CView::OnLButtonDown(nFlags, point); }void CtestGLView::OnTimer(UINT_PTR nIDEvent) {//定時器計時達到預(yù)定時刻 則旋轉(zhuǎn)角度增加10if( nIDEvent == 1){RotateAngle += 10;Invalidate(FALSE); //重新繪制}CView::OnTimer(nIDEvent); }3.輸出結(jié)果
總結(jié)
以上是生活随笔為你收集整理的VC++下的OpenGL编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 飞鸽
- 下一篇: 程序设计C++使大家容易陷入重复劳动