




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
宁夏师范学院数学与计算机科学学院计算机图形学实验报告实验序号: 2 实验项目名称:MFC下基于OpenGL绘图程序的开发步骤和框架 学号姓名专业、班实验地点指导教师时 间一、实验要求:1、环境要求:Microsoft Visual C+ 6.0二、实验内容与步骤(一)1、创建MFC应用程序工程用VC AppWizard产生一个基于MFC的应用程序工程EXE文件,选择工程目录,并在工程名字中输入工程名,假设为OpenGL,保持其他的不变;第一步、选单文档(SDI);按Finish结束,工程创建完毕。2、在工程中加入OpenGL所需库文件在工程菜单中,选择Project下的Settings项。单击Link标签,选择General目录,在Object/Library Modules的编辑框中输入OpenGL32.lib glu32.lib glaux.lib(注意,输入双引号中的内容,各个库文件用空格分开;否则会出现链接错误),选择OK结束:3、在工程中加入OpenGL所需头文件打开工程中的头文件stdafx.h,将下列头文件包含语句插入到该文件中。:#include #include #include 4、改写视类的PreCreateWindow函数,并在视类中添加成员函数和成员变量OpenGL绘图窗口需要加上WS_CLIPCHILDREN和 WS_CLIPSIBLINGS风格,便于窗口重绘。而修改视图窗口风格则需要在视类的PreCreateWindow函数中进行:5、定义OpenGL的绘图上下文RC 产生一个RC的第一步是定义窗口的像素格式。像素格式决定窗口所显示的图形在内存中是如何表示的。由像素格式控制的参数包括:颜色深度、缓冲模式和所支持的绘画接口。在下面将对这些参数的设置。(1)先在视类(COpenGLView)中添加一个私有型的成员函数BOOL SetWindowPixelFormat(HDC hDC),并在其中进行视区窗口像素格式的定义,具体如下。BOOL COpenGLView:SetWindowPixelFormat(HDC hDC)PIXELFORMATDESCRIPTOR pixelDesc;pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);pixelDesc.nVersion = 1;pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW |PFD_DRAW_TO_BITMAP |PFD_SUPPORT_OPENGL |PFD_SUPPORT_GDI |PFD_STEREO_DONTCARE;pixelDesc.iPixelType = PFD_TYPE_RGBA;pixelDesc.cColorBits = 32;pixelDesc.cRedBits = 8;pixelDesc.cRedShift = 16;pixelDesc.cGreenBits = 8;pixelDesc.cGreenShift = 8;pixelDesc.cBlueBits = 8;pixelDesc.cBlueShift = 0;pixelDesc.cAlphaBits = 0;pixelDesc.cAlphaShift = 0;pixelDesc.cAccumBits = 64;pixelDesc.cAccumRedBits = 16;pixelDesc.cAccumGreenBits = 16;pixelDesc.cAccumBlueBits = 16;pixelDesc.cAccumAlphaBits = 0;pixelDesc.cDepthBits = 32;pixelDesc.cStencilBits = 8;pixelDesc.cAuxBuffers = 0;pixelDesc.iLayerType = PFD_MAIN_PLANE;pixelDesc.bReserved = 0;pixelDesc.dwLayerMask = 0;pixelDesc.dwVisibleMask = 0;pixelDesc.dwDamageMask = 0;m_GLPixelIndex = ChoosePixelFormat( hDC, &pixelDesc);if (m_GLPixelIndex=0) / Lets choose a default index.m_GLPixelIndex = 1;if (DescribePixelFormat(hDC, m_GLPixelIndex, sizeof(PIXELFORMATDESCRIPTOR),&pixelDesc) = 0 )return FALSE;if (SetPixelFormat( hDC, m_GLPixelIndex, &pixelDesc) = FALSE)return FALSE;return TRUE;其中,m_GLPixelIndex为在视类中添加的一私有型的成员变量:int m_GLPixelIndex; 其它具体函数及其参数含义,大家可以通过OpenGL手册或者MSDN查询。这里不作累述。(2)现在绘制窗口像素格式已经定义好,下一步工作是产生绘制上下文(RC)并使之成为当前绘制上下文。在视类中加入一个私有型成员函数BOOL CreateViewGLContext(HDC hDC)。 其中,m_hGLContext为在视类中添加的一私有型的成员变量:HGLRC m_hGLContext;HGLRC是一个指向rendering context的句柄。(3)最后,在视类的OnCreate函数(OnCreate函数相应Window消息WM_CREATE,可以通过VC的类向导Class Wizard Ctrl+W进行添加,如图)中实现上述两个函数的调用,实现RC的定义、产生以及和当前视区窗口DC的通讯。6、添加绘图函数视类函数OnDraw主要负责视区的绘图工作。为了在视区窗口利用OpenGL绘制图形,我们自定义一个绘图函数DrawScene(),并OnDraw函数中调用该函数,从而实现在视区窗口绘图。7、修改视类OnSize函数当视区绘图窗口大小变化时,应及时将新的窗口大小通知OpenGL,才能在绘图窗口以正确的比例显示图形。当视区窗口大小变化时,WM_SIZE消息被触发,所以可以通过VC的类向导Class Wizard Ctrl+W添加WM_SIZE的消息映射函数OnSize。然后对OnSize函数做修改。8、修改视类OnEraseBkgnd函数仿造第7步的方法通过类向导Class Wizard添加视类对消息WM_ERASEBKGND的映射函数OnEraseBkgnd,并对该函数进行修改。修改该函数的主要原因是:OpenGL自身具有重绘能力,通过修改该函数屏蔽Window的重绘操作,从而可以防止窗口频繁刷新时产生的闪烁现象。9、回收RC所占用的资源通过VC的类向导Class Wizard Ctrl+W添加Window消息WM_DESTROY的映射函数OnDestroy函数。在该函数中调用OpenGL函数wglDeleteContext对RC所占资源进行回收。注意,回收之前需要先使用OpenGL函数wglMakeCurrent断开RC与DC的连接。10、初始化绘图数据编辑视类构造函数,初始化绘图数据。至此,我们已构造好了框架,使该工程可以利用OpenGL进行绘图了。假设现在绘制一个三角形,只需要在第6步添加的DrawScene函数中添加绘制三角形的函数,(二)生成三维物体1) 首先,在OnSize()中,把gluOrtho2D(0.0, 500.0*as
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省南海中学等七校联合体2026届化学高二第一学期期末预测试题含答案
- 2025关于移动应用开发与维护的合同
- 云南省邵通市水富县云天化中学2026届化学高一上期中质量跟踪监视试题含解析
- 2025年电动汽车充电桩合作协议书
- 供应室管理的课件
- 供应室岗位培训课件
- 供应室包装课件
- 人物动态速写考级课件
- 人流科普课件
- 护理专业面试实战模拟题:护理理论知识掌握
- 温硝化制硝基苯装置的改进
- 保教知识与能力幼儿园课件
- 财务部半年度述职汇报PPT模板
- 药品种类清单
- 公共基础知识(社区工作者基础知识)试题(附答案)
- GB/T 37915-2019社区商业设施设置与功能要求
- GB/T 31298-2014TC4钛合金厚板
- 《电业安全工作规程》
- 卡西欧gw5600说明书
- 中兴NGN培训教材 MSG9000结构原理介绍课件
- 穿湖隧道施工组织设计
评论
0/150
提交评论