预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共18页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

标题:MFC+OpenGL编程入门 发信人:qhchen(老道),信区:VR_3D 发信站:BBS水木清华站(MonAug917:55:551999) MFC+OpenGL编程入门 1998-09-08 中国科技大学数学系计算专业老道 E-mail:qhchen@263.net OpenGL作图非常方便,故日益流行,但对许多人来说,是在微机上 进行的,首先碰到的问题是,如何适应微机环境。这往往是最关键的一步, 虽然也是最初级的。 下面介绍如何在VC++上进行OpenGL编程。其实相当简单明快,只 因国内缺少这方面的资料与例子,致使许多小细节要一个一个地试,耗去 大量时间。希望各位有什么心得体会,也公布出来,从而节省每个人都要 试试的时间。 言归正传,下面以画一条Bezier曲线为例,详细介绍VC++上OpenGL 编程的方法。这里实际上也给出了个C++良好封装性编程的范例。文中给 出了详细注释,以便给初学者明确的指引。一步一步地按所述去做,你将顺 利地画出第一个OpenGL平台上的图形来。(本文例子以VC++5.0为背景) 一、产生程序框架Test.dsw NewProject|MFCApplicationWizard(EXE)|"Test"|OK *注*:加“”者指要手工敲入的字串 二、导入Bezier曲线类的文件。用下面方法产生BezierCurve.h BezierCurve.cpp两个文件: WorkSpace|ClassView|TestClasses|<右击弹出>NewClass |GenericClass(不用MFC类)|"CBezierCurve"|OK 三、编辑好Bezier曲线类的定义与实现。写好下面两个文件: BezierCurve.h BezierCurve.cpp 四、设置编译环境: 1.在BezierCurve.h和TestView.h内各加上: #include<GL/gl.h> #include<GL/glu.h> #include<GL/glaux.h> 2.在集成环境中,Project|Settings|Link|Object/librarymodule |"opengl32.libglu32.libglaux.lib"|OK 五、设置OpenGL工作环境:(下面各个操作,均针对TestView.cpp) 1.处理PreCreateWindow():设置OpenGL绘图窗口的风格 cs.style|=WS_CLIPSIBLINGS|WS_CLIPCHILDREN|CS_OWNDC; 2.处理OnCreate():创建OpenGL的绘图设备。OpenGL绘图的机制 是:先用OpenGL的绘图上下文RenderingContext(简称为RC) 把图画好,再把所绘结果通过SwapBuffer()函数传给Window的 绘图上下文DeviceContext(简记为DC).要注意的是,程序运行 过程中,可以有多个DC,但只能有一个RC。因此当一个DC画完图 后,要立即释放RC,以便其它的DC也使用。在后面的代码中,将有 详细注释。 intCTestView::OnCreate(LPCREATESTRUCTlpCreateStruct) { if(CView::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_hRC);//RC与当前DC相关联 }//CClient*m_pDC;HGLRCm_hRC;是CTestView的成员变量 BOOLCTestView::bSetupPixelFormat() { staticPIXELFORMATDESCRIPTORpfd= { sizeof(PIXELFORMATDESCRIPTOR),//sizeofthispfd 1,//versionnumber PFD_DRAW_TO_WINDOW|//supportwindow PFD_SUPPORT_OPENGL|//su