资源描述:
《MFC与OpenGL 编程入门》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、OpenGL作图非常方便,故日益流行,但对许多人来说,是在微机上进行的,首先碰到的问题是,如何适应微机环境。这往往是最关键的一步,虽然也是最初级的。下面介绍如何在VC++上进行OpenGL编程。其实相当简单明快,只因国内缺少这方面的资料与例子,致使许多小细节要一个一个地试,耗去大量时间。希望各位有什么心得体会,也公布出来,从而节省每个人都要试试的时间。言归正传,下面以画一条Bezier曲线为例,详细介绍VC++上OpenGL编程的方法。这里实际上也给出了个C++良好封装性编程的范例。文中给出了详细注释,以便给初学者明确的指引。一步一步地按所述去做,你将顺利地画出第一个OpenG
2、L平台上的图形来。一、产生程序框架Test.dsw NewProject
3、MFCApplicationWizard(EXE)
4、"Test"
5、OK *注*:加“”者指要手工敲入的字串二、导入Bezier曲线类的文件。用下面方法产生BezierCurve.h BezierCurve.cpp两个文件: WorkSpace
6、ClassView
7、TestClasses
8、<右击弹出>NewClass
9、GenericClass(不用MFC类)
10、"CBezierCurve"
11、OK三、编辑好Bezier曲线类的定义与实现。写好下面两个文件: BezierCurve.hBezierC
12、urve.cpp四、设置编译环境: 1.在BezierCurve.h和TestView.h内各加上: #include#include#include 2.在集成环境中,Project
13、Settings
14、Link
15、Object/librarymodule
16、"opengl32.libglu32.libglaux.lib"
17、OK五、设置OpenGL工作环境:(下面各个操作,均针对TestView.cpp) 1.处理PreCreateWindow():设置OpenGL绘图窗口的风格 cs.style
18、=WS_CLIPSIBLINGS
19、WS_CLIPCHILDREN
20、CS
21、_OWNDC; 2.处理OnCreate():创建OpenGL的绘图设备。OpenGL绘图的机制是:先用OpenGL的绘图上下文RenderingContext(简称为RC)把图画好,再把所绘结果通过SwapBuffer()函数传给Window的绘图上下文DeviceContext(简记为DC).要注意的是,程序运行过程中,可以有多个DC,但只能有一个RC。因此当一个DC画完图后,要立即释放RC,以便其它的DC也使用。在后面的代码中,将有详细注释。intCTestView::OnCreate(LPCREATESTRUCTlpCreateStruct){ if(CView
22、::OnCreate(lpCreateStruct)==-1) return-1; Init(); return0;}voidCTestView::Init(){ m_pDC=newCClientDC(this);//创建DC ASSERT(m_pDC!=NULL); if(!bSetupPixelFormat())//设定绘图的位图格式,函数下面列出 return; m_hRC=wglCreateContext(m_pDC->m_hDC);//创建RC wglMakeCurrent(m_pDC->m_hDC,m_h
23、RC);//RC与当前DC相关联}//CClient*m_pDC;HGLRCm_hRC;是CTestView的成员变量BOOLCTestView::bSetupPixelFormat(){ staticPIXELFORMATDESCRIPTORpfd={ sizeof(PIXELFORMATDESCRIPTOR),//sizeofthispfd 1,//versionnumberP FD_DRAW_TO_WINDOW
24、//supportwindow PFD_SUPPORT_OPENGL
25、//supportOpenGL PFD_DOUBLEBU
26、FFER,//doublebuffered PFD_TYPE_RGBA,//RGBAtype 24,//24-bitcolordepth 0,0,0,0,0,0,//colorbitsignored 0,//noalphabuffer 0,//shiftbitignored 0,//noaccumulationbuffer 0,0,0,0,//accumbitsignored 32,//32-bitz-buffer 0,//nostenc