资源描述:
《OPenGL与MFC的接口》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、OPenGL与MFC的接口2009-12-0723:23一、概述 OPenGL是一个与硬件和窗口系统无关的图形库,在其标准库里提供了核心的3-D图形指令,包括物体形状的描述、矩阵转换、光照、颜色、纹理、剪裁、位图等的处理函数。常见的材料比如红宝书里边为了使得讨论集中于图形学的概念,因而使用了辅助库glut处理与操作系统的交互(比如创建窗口、键盘消息、客户区重绘)。这样做使得读者可以将注意力集中于图形学的概念、原理理解以及OpenGL模型学习,同时也隐藏了OpenGL与窗口系统的接口部分。
2、当需要开发一个有用的应用程序的时候,glut中简化了的窗口系统难以胜任。另一方面专业的窗口系统则专注于窗口与操作系统以及用户的交互。因而将二者的长处结和起来的应用程序结构式比较合理的,比如使用MSwindows窗口系统处理界面工作,使用OpenGL处理图形渲染工作。本文假设读者具有MFC的基本知识。二、OpenGL指令的通道——渲染环境 事实证明处理复杂任务时采用分治与抽象的策略是科学的选择。把任务的划分为功能明确、相互关联的子任务,当各个子任务完成的时候总的任务就随之解决。这里功能明确意味
3、着各个子任务的功能并集组成了整体的任务;相互关联意味着子任务之间需要一定的接口来进行信息传输。一般而言,子模块定义了信息的处理,而接口定义了信息的流动。这样站在功能模块内部来看,其他部分只剩下一个抽象的接口。 设置好OpenGL跟MFC的接口以后,程序员就可以专注于图形的绘制,而将窗口维护以及用户交互的任务留给MFC来做。具体地说是渲染环境和设备环境起到了这个作用。三、具体操作例子用一个多视图的MFC程序为例来演示如何进行环境的搭建。(1) 创建一个多视图的MFC应用程序框架。比如命名为M
4、FC_OpenGL_exp。则正确创建以后,程序具有6个类分别是: CAboutDlg, CChildFrame, CMainFrame, CMFC_OpenGL_expApp, CMFC_OpenGL_expDoc, CMFC_OpenGL_View, 运行结果如下图所示: 图一。多文档MFC程
5、序框架的运行结果(1) 创建像素描述格式 对这个框架而言,视图类是展现输出的载体。因而我们将对这个类进行改造。在视图类被创建的时候创建像素描述格式,并且设置到设备环境中的。 对CMFC_OpenGL_expView类的WM_CREATE消息进行响应,添加消息响应函数OnCreate。在该函数里边添加如下的代码://TODO:Addyourspecializedcreationcodehere //Step1,Setthepixelformatdescriptor
6、PIXELFORMATDESCRIPTORpfd={ sizeof(PIXELFORMATDESCRIPTOR), 1,//versionPFD_DRAW_TO_WINDOW
7、PFD_SUPPORT_OPENGL
8、PFD_DOUBLEBUFFER
9、PFD_STER EO_DONTCARE, PFD_TYPE_RGBA, 24, 0,0,0,0,0,0, 0,//opalphabuffer, 0,//shiftbitignored 0,//n
10、oaccumulationbuffer 0,0,0,0, 32,//32bitzbuffer 0, 0, PFD_MAIN_PLANE, 0, 0,0,0 }; HDChDC=::GetDC(this->GetSafeHwnd()); intindxPfd=ChoosePixelFormat(hDC,&pfd); if(!SetPixe
11、lFormat(hDC,indxPfd,&pfd)){ MessageBox(TEXT("Failtosetpixelformat")); }-------------------------------------------------------------------------------- 这一步通过SetPixelFormat函数设置需要的像素格式描述。像素描述是设备环境的一个包含部分,但是该函数的输入