计算机图形学大作业课程设计 实验报告消隐算法_第1页
计算机图形学大作业课程设计 实验报告消隐算法_第2页
计算机图形学大作业课程设计 实验报告消隐算法_第3页
计算机图形学大作业课程设计 实验报告消隐算法_第4页
计算机图形学大作业课程设计 实验报告消隐算法_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

安徽建筑工业学院安徽建筑工业学院 计算机图形学计算机图形学 大作业大作业 大作业名称 消隐算法 演示 院 系 名称 专 业 班 级 姓 名 学 号 指 导 老 师 2011 2012 年度第 一 学期 计算机图形学计算机图形学 消隐算法消隐算法 1 设计目的设计目的 通过检测可见面 消除隐藏线和隐藏面 以在二维平面上显示具有真实感 图形 消除隐藏线和隐藏面 是计算机图形学中比较因难但又是十分关键的一个 问题 消隐算法是决定相对于空间给定位置的观察者 哪些线 表面或物体 是可见的 哪些是不可见的 本章主要展示和计论一些最常用的隐藏线和隐 藏面的消隐方法及技术 2 设计思想 设计思想 投影变换失去了深度信息 往往导致图形的二义性 要消除二义性 就必 须在绘制时消除被遮挡的不可见的线或面 习惯上称作消除隐藏线和隐藏面 简称为消隐 经过消隐得到的投影图称为物体的真实图形 确定算法类 到目前为止 已经提出了很多有效的消隐算法 这些算法可以依据算法实 现时所在的坐标系或空间进行分类 一般可分成两大类 对象空间算法和图 像空间算法 本文采用的就是图像空间算法 image space methods 这种方法是对投影 平面或显示屏幕上的每一个像素位置逐点地检测其可见性 这种算法比较粗 糙 而且按图像空间算法得到的画面在放大后往往不能令人满意 但这种算 法计算效率比较高 因为在光栅扫描过程中可以充分利用画面的连贯性等性 质 确定集体的实现算法 1 消除隐藏线 对造型的要求 在线框显示模型中 要求造型系统中有面的信息 最好有体的信息 坐标变换 将视点变换到 Z 轴的正无穷大处 视线方向变为 Z 轴的负方向 最基本的运算 判断面对线的遮挡关系 反复地进行线线 线面之间的求交运算 2 面消隐 面消隐算法的分类 图像空间的消隐算法 物体空间的消隐算法 提高消隐算法效率的常见方法 利用连贯性 将透视投影转换成平行投影 包围盒技术 背面剔除 空间分割技术 物体分层表示 本文是利用 Z Buffer 算法的思想运用几何知识实现的 称为 Z Buffer 算法 的改进算法 3 设计过程 设计过程 Z Buffer 算法的思想 先将 Z 缓冲器中个单元的初始值置为最小值 当要 改变某个像素的颜色值时 首先检查当前多边形的深度值是否大于该像素原 来的深度值 保存在该像素所对应的 Z 缓冲器的单元中 如果大于 说明当 前多边形更靠近观察点 用它的颜色替换像素原来的颜色 否则说明在当前 像素处 当前多边形被前面所绘制的多边形遮挡了 是不可见的 像素的颜 色值不改变 改进法 通过记录投影与当前扫描线相交的多边形 求点的平行投影和透视投影坐标值 用三维点坐标直接从当前点画线到某点 三维坐标下直接将当前点移动到某点 表面三个顶点调用求该表面的法矢 求观察方向矢量与表面法矢的数量积 画出立体上的平面并绘出消隐立体图 4 设计总结 设计总结 选择不同的消隐算法 消隐问题有不同的算法 有些算法要求速度快 有些要求图形的真实度高 例如 快速消隐算法可用于实时模拟如飞行模拟等 具有高度真实感图形 的消隐算法可用于计算机动画等领域 所生成的图形一般具有连续色调 并能产生阴影 透明 表面纹理及反射 折射等视觉效果 不过这类算法 比较慢 产生一幅图可能需要几分钟甚至几小时 所以 在进行消隐算法 的设计时 应在计算速度和图形细节之间进行权衡 任何一种算法都不能 兼顾两者 消隐算法的实现空间 消隐算法可以在物体空间或图像空间中实现 物体空间算法是在定义物体的坐标系中实现的 而图像空间算法是在对象 显示的屏幕坐标系中实现的 物体空间算法以尽可能高的精度完成几何计算 所以可以把图像放大许多 倍而不致损害其准确性 但是图像空间算法只能以与显示屏的分辨率相适 应的精度来完成计算 所以其图像的放大效果较差 这两类算法的性能特性也是不同的 物体空间算法所需的计算时间随场量 中物体的个数而增加 而图像空间的计算时间则随图像中可见部分的复杂 程度而增加 5 设计平台 设计平台 Computer Windows xp VC 6 附件 附件 void CMyView Project float X float Y float Z 此函数求点的平行投影和透视投影坐标值 XObs X Aux1 Y Aux3 YObs X Aux5 Y Aux6 Z Aux4 求透视投影坐标值 ZObs X Aux7 Y Aux8 Z Aux2 Rol XProj DE XObs ZObs YProj DE YObs ZObs void CMyView WLineTo float X float Y float Z CDC pDC 用三维点坐标直接从当前点画线到一点 的函数 Project X Y Z 将三维点作投影 XScreen floor 0 5 XProj Scale 150 圆整 YScreen floor 0 5 100 YProj 圆整 pDC LineTo XScreen YScreen 画线到一点 void CMyView WMoveTo float X float Y float Z CDC pDC 三维坐标下直接将当前点移动到某点的 函数 Project X Y Z 将三维点作投影 XScreen floor 0 5 XProj Scale 150 圆整 YScreen floor 0 5 100 YProj 圆整 pDC MoveTo XScreen YScreen 移动到某点 void CMyView ReadVertics 此函数用来给数组St的元素赋顶点坐标值 St 1 1 40 St 1 2 154 St 1 3 20 St 2 1 40 St 2 2 154 St 2 3 0 St 3 1 40 St 3 2 46 St 3 3 0 St 4 1 40 St 4 2 46 St 4 3 20 St 5 1 40 St 5 2 46 St 5 3 20 St 6 1 40 St 6 2 154 St 6 3 20 St 7 1 40 St 7 2 154 St 7 3 0 St 8 1 0 St 8 2 134 St 8 3 40 St 9 1 0 St 9 2 66 St 9 3 40 St 10 1 40 St 10 2 46 St 10 3 0 void CMyView ReadFaces 此函数给数组Fc的元素赋表面有关的数据值 NF 9 Fc 1 0 4 Fc 1 1 1 Fc 1 2 2 Fc 1 3 3 Fc 1 4 4 Fc 2 0 4 Fc 2 1 1 Fc 2 2 6 Fc 2 3 7 Fc 2 4 2 Fc 3 0 3 Fc 3 1 2 Fc 3 2 7 Fc 3 3 8 Fc 4 0 4 Fc 4 1 2 Fc 4 2 8 Fc 4 3 9 Fc 4 4 3 Fc 5 0 4 Fc 5 1 1 Fc 5 2 4 Fc 5 3 5 Fc 5 4 6 Fc 6 0 4 Fc 6 1 7 Fc 6 2 10 Fc 6 3 9 Fc 6 4 8 Fc 7 0 3 Fc 7 1 3 Fc 7 2 9 Fc 7 3 10 Fc 8 0 4 Fc 8 1 10 Fc 8 2 5 Fc 8 3 4 Fc 8 4 3 Fc 9 0 4 Fc 9 1 5 Fc 9 2 10 Fc 9 3 7 Fc 9 4 6 void CMyView VisionVector int St1 该函数用于求观察方向矢量 St1 is the first point of a face v1 O1 St St1 1 v2 O2 St St1 2 v3 O3 St St1 3 void CMyView NormalVector int St1 int St2 int St3 此函数用表面三个顶点调用求该表面的法矢 float P1 P2 P3 Q1 Q2 Q3 P1 St St2 1 St St1 1 求一个向量 P2 St St2 2 St St1 2 P3 St St2 3 St St1 3 Q1 St St3 1 St St1 1 求另一个向量 Q2 St St3 2 St St1 2 Q3 St St3 3 St St1 3 n1 P2 Q3 Q2 P3 用向量积求法向量 n2 P3 Q1 Q3 P1 n3 P1 Q2 Q1 P2 float CMyView ScaleProduct float v1 float v2 float v3 float n1 float n2 float n3 此函数用于求观察方向矢量与表面法矢的数量积 float SProduct SProduct v1 n1 v2 n2 v3 n3 return SProduct void CMyView DrawFace CDC pDC 画出立体上的平面 int S NS No float X Y Z X0 Y0 Z0 NS Fc F 0 for S 1 SSelectObject for F 1 F 0 判断数量积正否 pDC SelectObject DrawFace pDC 数量积大于零 表面可见 画出此表面 else pDC SelectObject pOldPen ReleaseDC pDC void CMyView VisionPoint 此函数用于给出视点位置 投影时初始值即正弦值和余弦值及其乘积的计算 赋值 float Th Ph Th 3 1415926 Theta 180 Ph 3 1415926 Phi 180 Aux1 sin Th Aux2 sin Ph Aux3 cos Th Aux4 cos Ph Aux5 Aux3 Aux2 Aux6 Aux1 Aux2 Aux7 Aux3 Aux4 Aux8 Aux1 Aux4 O1 Rol Aux7 给出视点位置 O2 Rol Aux8 O3 Rol Aux2 void CMyView Mydraw RedrawWindow ReadVertics ReadFaces 绘出透视投影下的凸多面体图形 VisionPoint 给出视点位置 DrawObject 画出立体的图形 void CMyView OnKeyDown UINT nChar UINT nRepCnt UINT nFlags 此函数用来利用上下左右键移动视点角度位置 switch nChar case VK UP Phi Phi IncAng Mydraw break case VK DOWN Phi Phi IncAng Mydraw break case VK RIGHT Theta Theta IncAng Mydraw break case VK LEFT Theta Theta IncAng Mydraw break default break void CMyView OnTumianti 透视投影赋初值 Rol 1600 0 S 1 Theta 60 Phi 135 DE 1000 Mydraw CDC pDC GetDC pDC TextOut 200 200 按下键盘上的 上 下 左 右 键 可观看各方位图形 ReleaseDC pDC void CMyView OnYuanjin CClientDC pdc new CClientDC this CPen pen1 new CPen PS SOLID 1 RGB 0 0XFF 0 CPen pen2 new CPen PS SOLID 1 RGB 255 0 0 CPen OldPen pdc SelectObject pen1 CBrush brush brush CreateSolidBrush RGB 0 0 0 CBrush oldbrush CBrush pdc SelectObject int flag k1 k2 r1 r2 n d m p int xs1 xs2 xs3 xs4 ys1 ys2 ys3 ys4 i j lastp double x y z thx th1 th3 yw zw xw thy th2 double PI ed od eh zzw ppw double xs 50 17 zs 50 17 ys 50 17 zc 50 17 x1 y1 int zz 850 pp 850 r1 100 r2 40 k1 20 k2 16 ed 1500 eh 0 od 0 n 0 PI 3 14159 th3 1 thx 0 9 计算顶点坐标值 for d 1 d 1 d 2 for th1 0 th1 2 PI 0 1 th1 2 PI k1 n n 1 m 0 for th2 0 th2 2 PI 0 1 th2 2 PI k2 m m 1 x r1 r2 cos th2 y r2 sin th2 z 0 thy th1 zw z xw x x zw cos thy xw sin thy z zw sin thy xw cos thy x x r1 2 d if d 1 yw y zw z y yw cos PI 2 zw sin PI 2 z yw sin PI 2 zw cos PI 2 thy th3 zw z xw x x zw cos thy xw sin thy z zw sin thy xw cos thy yw y zw z y yw cos thx zw sin thx z yw sin thx zw cos thx x x ed ed od z y y ed eh od z ed od z xs n m x ys n m y zs n m z flag 0 Next th1 flag 0 Next d 计算center值 p 0 for n 1 n k1 n 1 for m 1 m k2 m 1 zc n m int zs n m zs n

温馨提示

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

评论

0/150

提交评论