第五章 3真实感图形技术.ppt_第1页
第五章 3真实感图形技术.ppt_第2页
第五章 3真实感图形技术.ppt_第3页
第五章 3真实感图形技术.ppt_第4页
第五章 3真实感图形技术.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

7图形技术基础 真实感图形技术 7 4隐藏线和隐藏面的消除 在三维图形显示算法中 物体所有部分 包括可见与不可见部分均被投影到投影平面上并被显示出来 这样画出的线框图往往具有多义性 7 4隐藏线和隐藏面的消除 7 4 1隐藏线和隐藏面问题 要使物体更具有真实感 必须在显示时消去由于物体自身遮挡或物体间相互遮挡而无法看见的棱线 即隐藏线 影响三维真实感图形的因素主要是如下几个问题 1 消去图形中的不可见部分 既 消隐 2 光照效应问题 3 材质问题 解决上述问题的关键是算法和数据结构问题 而且主要是算法问题 消隐算法分为两大类 物空间消隐算法是利用物体间的几何关系来判断这些物体的隐藏与可见部分 这种算法利用计算机硬件的浮点精度来完成几何计算 如相交 因此这种方法精度高 不受显示器分辨率的影响 像空间消隐算法则把注意力集中在最终的图像上 对光栅扫描显示器而言 即对每一像素进行判断 确定哪些是可见部分 这种算法只能以与显示器分辨率相适应的精度来完成 使得这种方法不够精确 7 4 2消隐算法中的基本测试方法 投影变换最小最大测试包含性测试深度测试可见性测试 最小最大测试 这种测试也叫重叠测试或边界盒测试 用来检查两个多边形是否重叠 或 或 能够快速判断两个多边形不相交 包含性测试 包含性测试是检查一个给定的点是否位于给定的多边形或多面体内 夹角求和算法 计算从测试点方向看的每条有向边所对的角度 如果角度和等于0 则点在多边形外 如果角度和为 则该点在多边形内 深度测试 深度测试是用来测定一个物体遮挡另外物体的基本方法 优先级测试 可见性测试 可见性测试用来确定景物中潜在的可见部分 对于凸多面体 可以利用平面的法矢来判断平面的可见性 平面外法矢有正分量指向观察者方向的面是可见的 否则是不可见的 平面的外法矢在Z方向有正分量的面是可见的 而有负分量的面是不可见的 消隐算法有 Z向深度缓冲区算法扫描线算法循环细分算法 Z向深度缓冲区算法 对景物中的每个多边形找到当多边形投影到屏幕时位于多边形内或边界上的所有像素 x y 对每一个像素 在 x y 处计算多边形的深度z 并与z缓冲区相应单元的当前值相比较 如果z大于z缓冲区中的当前值 则该多边形比其他早已存在于像素中的多边形更靠近观察者 在这种情况下 用z值更新z缓冲区的对应单元 同时 将 x y 处的多边形的明暗值写入缓冲区中对应于该屏幕像素的单元之中 当所有的多边形被处理完后 缓冲区中保留的是已消隐的最终结果 帧缓冲器 保存各像素颜色值Z缓冲器 保存各像素处物体深度值Z缓冲器中的单元与帧缓冲器中的单元一一对应 Z缓冲器算法是所有图像空间算法中最简单的一种隐藏面消除算法 在象素级上以近物取代远物 优点 1 简单稳定 利于硬件实现2 不需要整个场景的几何数据缺点 1 需要一个额外的Z缓冲器2 在每个多边形占据的每个像素处都要计算深度值 计算量大 7 5图形标准 为了能够让交互式图形系统在不同的计算机和图形设备之间进行移植 制定图形软件的标准是非常必要的 可移植性包括 应用程序在不同系统之间的可移植性应用程序与图形设备的无关性图形数据的可移植性程序员的可移植性 交互式图形系统中有三个接口必须要实现标准化 第一个接口 应用程序与图形软件的接口图形核心系统GKS graphicskernelsystem 第二个接口 图形软件与图形输入输出设备之间的接口计算机图形接口CGI ComputerGraphicsInterface 第三个接口 数据接口 它规定了记录图形信息的数据文件的格式初始图形交换规范IGES产品模型数据交换标准STEP 图形标准是一组由基本图元 点 线 面 和属性 线型 颜色等 构成的标准通用图形系统 它们以子程序的形式支持应用图形系统 应用程序通过调用这些图形标准子程序 即可生成图形和图像 并通过交互显示设备实现图形的输入输出 标准图形系统有 二维图形核心系统GKS graphicskernelsystem 三维图形核心系统GKS 3D graphicskernelsystem 3D 程序员级层次交互式图形系统PHIGS programmerhiberarchyinterfacegraphicssystem 3 5图形标准 图形程序库OpenGL作为标准图形软件接口 是由几百个指令或函数组成 OpenGL功能有 绘制三维物体观察物体指定颜色模式光照增强图像效果管理位图和图像纹理映射制作动画交互技术 OpenGL编程 三维变换真实感显示图形显示 正平行投影 实例 编写程序 编写OpenGL程序 新建工程文件 在VC界面上 从菜单File New 建立MFC应用程序 选择工程文件类型 并填写工程文件名称 配置工程文件 FileView窗格 添加OpenGL库 增加OpenGL库 增加成员变量COpenGLPlatView m hRC 增加成员变量COpenGLPlatView m hRC 增加变量 记录OpenGL渲染句柄ahandletoanOpenGLrenderingcontext 增加成员函数COpenGLPlatView OnCreate 通过菜单View ClassWizard进入此对话框 修改COpenGLPlatView OnCreate代码 intCOpenGLPlatView OnCreate LPCREATESTRUCTlpCreateStruct if CView OnCreate lpCreateStruct 1 return 1 TODO Addyourspecializedcreationcodehere Newcodesbegin 修改COpenGLPlatView OnCreate代码 ThePIXELFORMATDESCRIPTORstructuredescribes thepixelformatofadrawingsurface PIXELFORMATDESCRIPTORpfd sizeof PIXELFORMATDESCRIPTOR sizeofthispfd1 versionnumberPFD DRAW TO WINDOW supportwindowPFD SUPPORT OPENGL supportOpenGLPFD DOUBLEBUFFER doublebufferedPFD TYPE RGBA 24 24 bitcolordepth0 0 0 0 0 0 colorbitsignored0 noalphabuffer0 shiftbitignored0 noaccumulationbuffer0 0 0 0 accumbitsignored32 32 bitz buffer depth 0 nostencilbuffer0 noauxiliarybufferPFD MAIN PLANE mainlayer0 reserved0 0 0 layermasksignored 修改COpenGLPlatView OnCreate代码 HDChDC GetDC GetSafeHdc Getthebestavailablematchofpixelformatforthedevicecontext Inotherwords ifthiscomputerdoesn tsupportfeaturesthatI askedfor trytogetthenextbestthing i e 16 bitcolormode insteadof24 bitcolormode intpixelFormat ChoosePixelFormat hDC 修改COpenGLPlatView OnCreate代码 CreatesanOpenGLrenderingcontextsothatOpenGLknowshowtodraw tothisview Youcan tuseOpenGLinMFCwithoutusingthehandle thatthisfunctionreturnsm hRC wglCreateContext hDC Newcodesend return0 增加成员函数COpenGLPlatView OnDestroy 通过菜单View ClassWizard进入此对话框 修改COpenGLPlatView OnDestroy代码 voidCOpenGLPlatView OnDestroy CView OnDestroy TODO Addyourmessagehandlercodehere Newcodesbegin Set aspecifiedOpenGLrenderingcontext NULL Set currentrenderingcontext NULLwglMakeCurrent NULL NULL DeletethehandletoanOpenGLrenderingcontextwglDeleteContext m hRC Newcodesend 增加成员函数COpenGLPlatView OnSize 通过菜单View ClassWizard进入此对话框 修改COpenGLPlatView OnSize代码 voidCOpenGLPlatView OnSize UINTnType intcx intcy CView OnSize nType cx cy TODO Addyourmessagehandlercodehere Newcodesbegin HDChDC GetDC GetSafeHdc wglMakeCurrent hDC m hRC glMatrixMode GL PROJECTION glLoadIdentity doubled 10 doublen 100 glOrtho cx n cx n cy n cy n d d glMatrixMode GL MODELVIEW glViewport 0 0 cx cy glShadeModel GL FLAT SetshadingmodewglMakeCurrent NULL NULL Newcodesend 修改COpenGLPlatView OnDraw代码 voidCOpenGLPlatView OnDraw CDC pDC COpenGLPlatDoc pDoc GetDocument ASSERT VALID pDoc TODO adddrawcodefornativedatahere Newcodesbegin HDChDC GetDC GetSafeHdc wglMakeCurrent hDC m hRC glClearColor 0 1 1 1 glClear GL COLOR BUFFER BIT glLoadIdentity glColor3f 1 0 0 0 0 0 auxWireTeapot 2 0 SwapBuffers GetDC GetSafeHdc wglMakeCurrent NULL NULL Newcodesend 修改文件OpenGLPlatView cpp OpenGLPlatView cpp implementationoftheCOpenGLPlatViewclass include stdafx h include OpenGLPlat h include OpenGLPlatDoc h include OpenGLPlatView h Newcodesbegin include GL GLAUX H include GL GL H include GL GLU H Newcodesend 运行结果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论