虚拟现实与系统仿真实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
虚拟现实与系统仿真实验指导书
2013.2
实验一基于MFC的基本OpenGL应用程序生成
一:实验目的
1. 熟悉VC++2005集成开发环境;
2. 熟悉基本MFC应用程序的生成;
3. 掌握基于MFC的基本OpenGL应用程序生成。
二:实验内容
1. 建立基于MFC的基本OpenGL应用程序;
2. 配置应用程序,添加OpenGL链接库文件;
3. 建立OpenGL的基本环境。
三:实验背景知识
OpenGL是一种图形显示软件工具包,它为图形硬件提供软件接口。OpenGL为计算机动画提供由图形生成图像帧的工具。MFC提供的图形用户界面程序设计技术可以编写人机交互程序,OpenGL技术可以进行各种图形绘制。
四:实验步骤
1.文件->新建->项目选择MFC应用程序输入名称OpenGLPlat
2.右击项目名,选择属性,再选择链接器中的输入选项,附加依赖项:opengl32.lib;
glu32.lib ;glaux.lib
3.选择类视图模式,右击View,再添加变量和头文件
或直接在View头文件中添加变量:
protected:
HGLRC m_hRC;
添加包含OpenGL头文件的语句:
在COpenGLPlatView.cpp中添加代码
#include
#include
#include
4.右击属性消息按钮选择WM_CREATE 添加
在int COpenGLPlatView::OnCreate(LPCREATESTRUCT lpCreateStruct)函数中添加代码//添加新的代码开始
CClientDC dc(this);
PIXELFORMATDESCRIPTOR pfd;
memset(&pfd,0,sizeof(PIXELFORMATDESCRIPTOR));
pfd.nSize=sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion=1;
pfd.dwFlags=PFD_DRAW_TO_WINDOW|
PFD_SUPPORT_OPENGL|
PFD_DOUBLEBUFFER;
pfd.iPixelType=PFD_TYPE_RGBA;
olorBits=24;
pfd.cDepthBits=32;
int pixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd);
SetPixelFormat(dc.m_hDC,pixelFormat,&pfd);
m_hRC=wglCreateContext(dc.m_hDC);
return 0;
右击属性消息按钮选择WM_DESTROY 添加
void COpenGLPlatView::OnDestroy()函数中添加代码
//添加新的代码开始
wglMakeCurrent(NULL,NULL);
wglDeleteContext(m_hRC);
m_hRC=NULL;
右击属性消息按钮选择WM_SIZE 添加
void COpenGLPlatView::OnSize(UINT nType, int cx, int cy)函数中添加代码
//添加新的代码开始
CClientDC dc(this);
wglMakeCurrent(dc.m_hDC,m_hRC);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
double d=10;
double n=100;
glOrtho(-cx/n,cx/n,-cy/n,cy/n,-d,d);
glMatrixMode(GL_MODELVIEW);
glViewport(0,0,cx,cy);
wglMakeCurrent(NULL,NULL);
5.在OpenGLPlatView.cpp中OnDraw函数中添加以下代码:void CMy1View::OnDraw(CDC* pDC) // 把”/*pDC*/”改成 pDC {
COpenGLPlatDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
wglMakeCurrent(pDC->m_hDC,m_hRC);
glClearColor(1.0f,1.0f,1.0f,1.0f);
glClearDepth(1.0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3f(1.0f,0.0f,0.0f);
glRotated(60.0,1.0,1.0,1.0); //茶壶
auxWireTeapot(3.0);
SwapBuffers(pDC->m_hDC);
wglMakeCurrent(NULL,NULL);