- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MFC框架下OpenGL程序的实现步骤
MFC框架下OpenGL程序的实现步骤
2008-01-08 10:39 636人阅读 评论(0) 收藏 举报
???本文主要介绍如何在MFC框架下编写OpenGL程序。现有的OpenGL参考书多是介绍基于AUX库,或是基于GLUT库的Win32 OpenGL程序。这类程序结构非常简单,主要目的是让读者熟悉OpenGL语言的用法及功能。然而不得不承认,编写可视化程序MFC框架有其独到的优势,本文就是针对这种需求,详细介绍MFC框架下OpenGL程序的实现步骤。
编译器:Microsoft Visual Studio.NET 2003(中文版)
准备工作:下载OpenGL非标准额外GLUT库文件/download/download.htm(包括glut.h, glut32.lib, glut32.dll)。将glut.h放到目录VC2003.NET/Vc7/PlatformSDK/Include/gl下,glut32.lib放到目录VC2003.NET/Vc7/PlatformSDK/Lib下,再将glut32.dll放进WINDOWS/system32中,最后设置编译器的链接:【项目】-【属性页】-【链接器】-【输入】-【附加依赖项】-glut32.lib。
具体实现步骤:
1.?????? 新建MFC多文档应用程序,项目名取为Render。
2.?????? 新建两个文件WSDView.h和WSDView.cpp,并将这两个文件放入项目文件夹内。具体代码见附录。两文件的功能:创建类CWSDView,它继承自CView,成员函数包括设置像素格式,创建渲染描述表,各类鼠标消息相应函数如鼠标左键拖动,右键拖动及滚轴转动等。
3.?????? 【文件】-【添加现有项】,选取WSDView.h, WSDView.cpp文件。
4.?????? 在RenderView.h文件中添加代码 #include WSDView.h,
将class CRenderView : public CView修改为class CRenderView : public CWSDView
在RenderView.cpp文件中修改IMPLEMENT_DYNCREATE(CRenderView, CView)为IMPLEMENT_DYNCREATE(CRenderView, CWSDView);修改? BEGIN_MESSAGE_MAP(CRenderView, CView)为BEGIN_MESSAGE_MAP(CRenderView, CWSDView)
5.?????? 在CRenderView类中添加虚拟函数virtual void RenderScene(void)。实际上它是继承自父类CWSDView。
6.?????? 在CRenderView::OnDraw(CDC* /*pDC*/)内添加代码:
// TODO: 在此处为本机数据添加绘制代码
//双缓存应用
static BOOL bBusy = FALSE;
if(bBusy) return;
bBusy = TRUE;
//背景色
glClearColor(0.0f, 0.0f, 0.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清缓存
glMatrixMode(GL_MODELVIEW);//启动模型矩阵
glLoadIdentity();//初始化模型矩阵
// 绘制动作
glTranslatef(0.0, 0.0, -8.0); //将场景移至可视区
RenderScene();//绘制场景
glFinish();//完成绘制
SwapBuffers(wglGetCurrentDC());//双缓存应用:更新缓存
bBusy = FALSE;
7.?????? 在CRenderView::RenderScene(void)内添加代码:
?????? glPushMatrix();
//控制操作如下,与鼠标消息相应函数相关:
glTranslatef(m_translateX, m_translateY, 0.0);
glRotatef(rotate_x, 1.0, 0.0, 0.0);
glRotatef(rotate_y, 0.0, 1.0, 0.0);
glScalef(m_scale, m_scale, m_scale);
//绘制实体 例如茶壶
glPushMatrix();
glColor3f(0.5, 0.5, 0.5);
glutSolidTeapot(0.3);
glPopMatr
文档评论(0)