MFC搭建OpenGL框架示例

2021-07-05 18:54:13 字數 2698 閱讀 7873

本文以sdi文件結構為例,列出繪製opengl圖形的關鍵步驟;

(1)在單文件視窗的建立過程中設定好顯示的畫素格式,並按opengl的要求設定好視窗的屬性和風格

(2)獲得windows裝置描述表cdc的成員變數,然後將其與opengl的繪製描述表rc聯絡起來

(3)呼叫opengl命令進行圖形繪製

(4)退出opengl圖形視窗時,釋放opengl的繪製描述表rc和windows裝置描述表dc

手動新增的**用magenta表示。這裡先敘述一下建立步驟:

1.新建乙個mfc嚮導程式,命名為glframe,單文件,去除列印支援,其餘預設,生成乙個opengl框架.

2.得到簡單的視窗風格.

在cmianframe中新增precreatewindow的**:

bool cmainframe::precreatewindow(createstruct& cs)

3.新增opengl支援:

在cglframeview.h中新增標頭檔案如下:

#include "gl\gl.h"

#include "gl\glu.h"

#include "gl\glaux.h"

在工程->設定->project settings對話方塊話中選擇link選項卡,在物件模組庫中加入glaux.lib  glu32.lib opengl32.lib .

(tip:當然,你也可以選擇工程->新增到工程->新增檔案命令,彈出的insert files into project對話方塊中,轉換到vc98\lib目錄下面,選中glaux.lib , glu32.lib, opengl32.lib 這幾個檔案,按下ok,把它們新增到專案檔案.)

以下操作均在cglframeview中進行

4.給檢視新增乙個rc控制代碼和dc控制代碼,乙個protected的變數

class cglframeview:public cview

5.給檢視新增訊息處理:

新增wm_create,wm_destroy,wm_size,wm_paint,wm_erasebkgnd 這5個訊息的處理函式.

6.修改cgframeview的precreatewindow() 函式如下:

bool cglframeview::precreatewindow(createstruct& cs)

7.修改cgframeview的oncreate()函式如下:  ------------作用是設定rc的畫素格式

int cglframeview::oncreate(lpcreatestruct lpcreatestruct) 

;if ( (pixelformat = choosepixelformat(m_pdc->getsafehdc(), &pfd)) == 0 ) //測試硬體是否支援該pdf

if (setpixelformat(m_pdc->getsafehdc(), pixelformat, &pfd) == false)//測試硬體是否支援該pdf

m_hrc = wglcreatecontext(m_pdc->getsafehdc());//將rc與dc聯絡起來

wglmakecurrent(m_pdc->getsafehdc(), m_hrc);

glcleardepth(1.0f);

glenable(gl_depth_test);

glmatrixmode(gl_projection);

glloadidentity();

glmatrixmode(gl_modelview);

return 0; //opengl視窗構造成功 }

8.修改cgframeview的ondestroy()函式如下:

void cglframeview::ondestroy() 

9.修改cgframeview的onsize()函式如下:

void cglframeview::onsize(uint ntype, int cx, int cy)  }

10.修改cgframeview的onpaint()函式如下

void cglframeview::onpaint() ;

// todo: add your message handler code here

glclearcolor(0.0f, 0.0f, 0.0f, 1.0f);

glclear(gl_color_buffer_bit | gl_depth_buffer_bit);

glpushmatrix();

gltranslatef(0.0f, 0.0f, -2.0f);

gllightfv(gl_light0,gl_position,light_position);

glenable(gl_lighting);

glenable(gl_light0);

gldepthfunc(gl_less);

glenable(gl_depth_test);

auxsolidsphere(1.0);

glpopmatrix();

glfinish();

// do not call cview::onpaint() for painting messages

}11.修改cgframeview的onerasebkgnd()函式如下

bool cglframeview::onerasebkgnd(cdc* pdc) 

以上是用opengl程式設計所必須做好的基本工作^_*,希望對大家有幫助!

MFC單文件程式中搭建OpenGL框架

本部落格計算機圖形學系列文章索引 windows gdi是通過裝置控制代碼 device context 裝置描述表 以下簡稱 dc 來繪圖,而opengl則需要繪製環境 rendering context 著色描述表 以下簡稱 rc 每乙個gdi命令需要傳給它乙個dc,但與gdi不同,opengl...

MFC下OpenGL環境搭建

過載mfc中的wm crate訊息響應函式int oncreate lpcreatestruct lpcreatestruct 顯示呼叫init函式,如下 int c3dstereoview oncreate lpcreatestruct lpcreatestruct 在init函式 自定義的 中完...

Nehe的OpenGL框架 MFC版

nehe的幾個opengl框架都是win32 sdk版本的,我現在需要在mfc下學習opengl,今天看了他寫的第乙個opengl框架,就在mfc中實現了下。為了簡單起見,把全屏那部分就拋棄掉了,畢竟重點不在這上面,而且mfc要實現這個全屏的功能也不像sdk那麼容易。protected boolse...