資源描述:
《手把手教你搭建用MFC進行OpenGL編程的框架.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、手把手教你搭建用MFC進行OpenGL編程的框架第一步:創(chuàng)建項目文件File
2、
3、New
4、
5、Project
6、
7、MFCAppWizard(exe)
8、
9、輸入ProjectName
10、
11、創(chuàng)建一個基于SDI,View類基于CView的工程文件;第二步:向項目文件中添加OpenGL的繪圖函數(shù)Project
12、
13、Settings
14、
15、在Object/librarymodules:中輸入opengl32.lib,glu32.lib,glaux.lib,三者之間用空格隔開,逗號不用輸入;第三步:添加一些代碼1)在項目工作區(qū)的FileView中找到StdAfx.h,添加
16、下面的代碼:#include#include#include2)在項目工作區(qū)的ClassView中找到CView類,右擊CView類,選擇AddMemberVairable,添加一個成員變量HGLRCm_hRC;選擇AddMemberFounction,添加一個成員函數(shù)voidDrawScene();3)在項目工作區(qū)的ClassView中找到CView類,右擊CView類,選擇AddWindowsMessageHandler,為CView類添加WM_CREATE,WM_DESTORY
17、(方法:在左邊的Newwindowsmessage/events中選中并雙擊,然后點擊OK)。在項目工作區(qū)的ClassView中找到CView類,找到函數(shù)OnCreate(),在該函數(shù)中添加如下代碼://定義像素存儲格式PIXELFORMATDESCRIPTORpfd={sizeof(PIXELFORMATDESCRIPTOR),1,PFD_DRAW_TO_WINDOW
18、PFD_SUPPORT_OPENGL,PFD_TYPE_RGBA,24,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,PFD_MAIN_PLANE,0,0,
19、0,0,};CClientDCdc(this);intpixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd);BOOLsuccess=SetPixelFormat(dc.m_hDC,pixelFormat,&pfd);m_hRC=wglCreateContext(dc.m_hDC);同理找到函數(shù)OnDestory(),在該函數(shù)中添加下面的代碼:wglDeleteContext(m_hRC);4)在類CView中的函數(shù)PreCreateWindows()中添加下面的代碼:cs.style
20、=(WS_CLIPSIB
21、LINGS
22、WS_CLIPCHILDREN);5)在類CView中的函數(shù)OnDraw()中添加下面的代碼:wglMakeCurrent(pDC->m_hDC,m_hRC);DrawScene();//用戶自定義的場景繪制函數(shù)wglMakeCurrent(pDC->m_hDC,NULL);這樣,一個基于OpenGl標(biāo)準的程序框架已經(jīng)構(gòu)造好了,用戶只需在DrawScene()函數(shù)中添加程序代碼即可。為了驗證程序框架的是否正確,請在DrawScene()函數(shù)中添加下面的代碼:glBegin(GL_TRIANGLE_STRIP);glColor3f(1
23、.0,0.0,0.0);glVertex3f(0.0,0.0,0.0);glColor3f(0.0,1.0,0.0);glVertex3f(-0.5,0.0,0.0);glColor3f(0.0,0.0,1.0);glVertex3f(0.0,0.5,0.0);glEnd();glFlush();然后編譯執(zhí)行直至在MFC窗口中繪制出了一個頂點顏色不同的三角形即可。//MeshView.cpp:implementationoftheCMeshViewclass//#include"stdafx.h"#include"Mesh.h"#include
24、"MeshDoc.h"#include"MeshView.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CMeshViewIMPLEMENT_DYNCREATE(CMeshView,CView)BEGIN_MESSAGE_MAP(CMeshView,CView)//{
25、{AFX_MSG_MAP(CMeshView)ON_WM_PAINT()ON_WM_DESTROY()ON_WM_SIZE()ON_WM_LBUTTO