虚拟现实与系统仿真实验指导书

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档