三维画面锯齿处理本科毕业论文(编辑修改稿)内容摘要:

,它和物体表面的材料性质、表面向视线方向辐射的光能有关,计算复杂,计算量很大。 因此工业界投入很多力量来开发渲染技术。 由于本课题所研究的内容只是基于探计基于 OpenGL 的三维图形绘制,以及消锯齿处理 ,所以所要求的技能仅是一门熟练编程语言,如 C++,并且,能够使用 OpenGL 所提供的函数接口,进行简单的图形绘制,并完成反走样算法,实现消锯齿。 另外就是能使用一个开发工具,如本课题所采用的 VC++。 技能要求并不是太复杂,一般的初学者都能够完成。 6 课题开发环境介绍 环境需求 Visual C++是微软公司开发的一个 IDE(集成开发环境 ),换句话说 ,就是使用c++的一个开发平台,是微软公司在其 Windows 操作系统下进行应用程序开发的最重要的产品,是系统级应用开发工具,是运用面向对象思想进行软件项目开 发的得力工具。 它使得软件开发能够在源码级、类级、控件级等多个级别上重用,不仅加快了软件开发效率,而且提高了软件的可重用性和顽健性。 VC基于 C, C++语言,主要由是 MFC 组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说 VC 在 Windows 平台无所不能。 VC 作为一个主流的开发平台一直深受编程爱好者的喜爱,但是很多人却对它的入门感到难于上青天,究其原因主要是大家对他错误的认识造成的,严格的来说 VC++不是门语言,虽然它和 C++之间有密切的关系 ,如果形 象点比喻的话,可以把 C++看作为一种“工业标准”,而 VC++则是某种操作系统平台下的“厂商标准”,而“厂商标准”是在遵循“工业标准”的前提下扩展而来的。 VC++应用程序的开发主要有两种模式,一种是 WIN API 方式,另一种则是 MFC 方式,传统的 WIN API 开发方式比较繁琐,而 MFC 则是对 WIN API 再次封装,所以 MFC 相对于 WIN API 开发更具备效率优势。 系统在 Windows XP/7 系统下均可运行,计算机只需安装 VC++,并在相应文档中添加 OpenGL 函数库相关头文件及动态链接文件即可。 C++语言及其特点 C++它是一种使用非常广泛的计算机编程语言。 是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。 它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。 C++语言是一种优秀的面向对象程序设计语言,它在 C 语言的基础上发展而来,但它比 C语言更容易为人们学习和掌握。 C++语言既保留了 C 语言的有效性、灵活性、便于移植等全部精华和特点,又添加了面向对象编程的支持,具有强大的编程功能,可方便地构造出模拟现实问题的实体和操作;编写出的程序具有结构清 晰、易于扩充等优良特性,适合于各种应用软件、系统软件的程序设计。 用 C++编写的程序可读性好,生成的代码质量高,运行效率仅比汇编语言慢 10%~ 20%。 C++以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。 面向对象的设计思想是在原来结构化程序设计方法基础上的一个质的飞跃, C++完美地体现了面向对象的各种特性,主要有以下特点: 语句简练、语法结构清晰、紧凑,使用方便、灵活。 程序结构简单、书写格式自由。 7 数据类型丰富、齐全。 标准 C 供了整数、实数、字符、字符串等基本数据类型,还提供数组、指针 、结构体等构造数据类型。 C++还增加了类这一特殊数据类型的定义机制。 运算符丰富、齐全,运算能力强。 C 提供的运算符分为常规运算和与硬件有关的运算两部分:  常规运算符 —— 算术运算符、逻辑运算符、关系运算符等,这类运算符各种语言一般都具备;  与硬件有关的运算符 —— 位运算符、地址运算符等,这些运算符是 C所独有的,体现出汇编语言的某些特征。 语法限制不太严格,程序自由度大。 C编译系统生成的目标代码质量高,程序执行效率高。 程序可移植性强。 语言的通用性较强。 C++包含了整个 C,因此也继承了 C 的全部特征和 优点,同时添加了对 OOP 的完全支持。 C++语言引入了类与对象机制,包括类的定于,类的继承与派生,类的多态性等。 C++语言一方面自定义结构类型进行扩充,另一方面也支持新的类构造。 OpenGL 及其特点 OpenGL 是用于开发简捷的交互式二维和三维图形应用程序的最佳环境,任何高性能的图形应用程序,从 3D 动画、 CAD 辅助设计到可视化访真,都可以利用 OpenGL 高质量、高性能的特点。 OpenGL 自 1992 年出现以来,逐渐发展完善,已成为一个唯一开放的,独立于应用平台的图形标准,一个典型的 OpenGL 应用程序可以在任何平台上运行 只需要使用目标系统的 OpenGL 库重新编译一下。 OpenGL 非常接近硬件,是一个图形与硬件的接口,包括了 100 多个图形函数用来建立三维模型和进行三维实时交互。 OpenGL 强有力的图形函数不要求开发人员把三维物体模型的数据写成固定的数据格式,也不要求开发人员编写矩阵变换、外部设备访问等函数,大大地简化了编写三维图形的程序。 例如: OpenGL 提供一系列的三维图形单元(图元)供开发者调用。 OpenGL 提供一系列的图形变换函数。 OpenGL 提供一 系列的外部设备访问函数,使开发者可以方便地访问鼠标 键盘、空间球、数据手套等外部设备。 由于微软在 Windows 中包含了 OpenGL,所以 OpenGL 可以与 Visual C++紧密接合,简单快捷地实现有关计算和图形算法,并保证算法的正确性和可靠性。 简单地说, OpenGL 具有建模、变换、色彩处理、光线处理、纹理影射、图像处理、动画及物体运动模糊等功能: 建模: OpenGL 图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体,如球、锥、多面体、茶壶以及复杂曲线和曲面(例如Bezier、 Nurbs 等曲线或曲面)的绘制函数。 变换: OpenGL 图形库的变换包括基本变换和投影变换。 基本变换有平移、 8 旋转、变比、镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。 颜色模式设置: OpenGL 颜色模式有两种,即 RGBA 模式和颜色索引( Color Index)。 光照和材质设置: OpenGL 光有辐射光( Emitted Light)、环境光( Ambient Light)、漫反射光( Diffuse Light)和镜面光( Specular Light)。 材 质是用光反射率来表示。 客观世界中的物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。 纹理映射( Texture Mapping):利用 OpenGL 纹理映射功能可以十分逼真地表达物体表面细节。 位图显示和图象增强: OpenGL 的图象功能除了基本的拷贝和像素读写外,还提供融合( Blending)、反走样( Antialiasing)和雾( fog)的特殊图象效果处理。 以上三条可是被仿真物更具真实感,增强图形显示的效果。 双缓存动画( Double Buffering): OpenGL 使用了前台缓存和后台缓存交替显示场景( Scene)技术,简而言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。 特殊效果:利用 OpenGL 还能实现深度暗示( Depth Cue )、运动模糊( Motion Blur)等特殊效果。 运动模糊的绘图方式( motionblured),模拟物体运动时人眼观察所感觉的动感现象。 深度域效果( depthofeffects),类似于照相机镜头效果,模型在聚焦点处清晰,反之则模糊。 其工作流程如图 : 图 OpenGL 工作流程 根据这个流程,我们可以归纳出在 OpenGL 中进行主要的图形操作直至在计算机屏幕上渲染绘制出三维图形景观的基本步骤: 根据基本图形单元建立景物模型,并且对所建立的模型进行数学描述( OpenGL 中把:点、线、多边形、图像和位图都作为基本图形单元)。 把景物模型放在三维空间中的合适的位置,并且设置视点( viewpoint)以观察所感兴趣的景观。 计算模型中所有物体的色彩,其中的色彩根据应用要求来确定,同时确定光照条件、纹理粘贴方式等。 把景物模型的数学描述及其色彩信息转换至计算机屏幕上的象素,这个几何顶点数据 图像顶点数据 显示列表 运算器 逐个顶点操作 纹理映射 帧缓冲区 光栅化 逐个顶点操作和图元组装 图像操作 9 过程也就是光栅化( rasterization)。 软硬件需求  操作系统: Windows 7/Windows xp/ Windows 20xx。  集成开发环境 : VC++ Vistual Studio 20xx or Vistual Studio 20xx  开发语言: C++  分辨率:最佳效果 1280 1024 像素。 ( 1024 X 768 亦可)  CPU: M380  内存: 256MB 以上 10 2 OpenGL实现三维图像显示的基本理论 概要设计 因为 OpenGL 与 VC++是通过接口程序相连的,所以在实现三维图形的生成及显示时,需要一个应用程序入口;然后要注册窗口类,注册完成后需要创建OpenGL 显示窗口;之后便可以进行三维图形的绘制;绘制完成后销毁窗口、注册窗口,整个过程便结束。 程序的具体实现框架如图 所示 图 程序流程图 应用实例的实现包括以下几个步骤:程序 初始化,形体建模,色彩渲染,应是 否 开始 创建 opengl显示 CreateWindowGL() 注册窗口类 RegisterWindowcals() 初始化 opengl 绘制程序 initialize() 循环更新显示并等待消息 消息是否退出 退出前的扫尾工作 Deinitialize() 销毁窗口 DestroyWindowGL() 注销窗口 Unregister() WinMain() 应用程序入口 返回 0 结束 11 用动画。 图 工程实现流程图 基本设计概念和流程 创意说明 本软件系统的创意来自于互联网上时下流行的 3D 游戏环境。 在游戏场景的畅游过程中,发现各种场景皆可真实如斯,无论是现代城市中的房屋、车辆,还是森林场景中的树木、花草、山峰等皆可实现。 对它的细腻的真实感到惊讶,于是,决心实现其中的某些功能。 试图实现其三维物体的创造,因此,便产生了本系统。 系统初始化 在 InitializeOpenGL()中会创建一个设备上下文 (DC),为这个 DC 选择一个像素格式,创建和这个 DC相关的绘制上下文( RC) ,然后选择这个 会调用 SetupPixelFormat()来建立像素格式,调用 SetLogicalPalette()设置逻辑调色板。 BOOL CDifferentView::SetupPixelFormat() { PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), // pfd 结构的大小 1, // 版本号 PFD_DRAW_TO_WINDOW | // 支持在窗口中绘图 PFD_SUPPORT_OPENGL | // 支持 OpenGL PFD_DOUBLEBUFFER, // 双缓存模式 PFD_TYPE_RGBA, // RGBA 颜 色模式 程序初始化 形体建模 渲染色彩 动画的应用 12 24, // 24 位颜色深度 0, 0, 0, 0, 0, 0, // 忽略颜色位 0, // 没有非透明度缓存 0, // 忽略移位位 0, // 无累加缓存 0, 0, 0, 0, // 忽略累加位 32,。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。