Transcript 4.ch1.(消隐).
下述OpenGL函数的功能? gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0); gluPerspective(60.0, (float)w/(float)h, 1.0, 300.0); glOrtho(left, right, bottom, top, zNear, zFar ); (主视图,俯视图,左视图三个基本视图) 为三视图 1 消隐算法 2 主要内容 消隐的基本概念 背面剔除算法 油画家算法 z缓冲器(z-buffer)算法 3 消隐的基本概念 消隐的基本概念(隐藏面消除):相对于观察 者,确定场景中哪些物体是可见或部分可见 的,哪些物体是不可见的 消隐可以增加图形的真实感 投影:三维二维 二维平面:通过确定物体的前后关系,可以获 得更多信息 消隐是图形学中非常重要的一个基本问题 4 消隐的基本概念 5 消隐的基本概念 消隐问题本身的复杂性导致许多不同的算法, 其中很多算法是对于特定问题设计的 在实时模拟过程中,要求消隐算法速度快,生 成的图形质量一般 在真实感图形生成过程中,要求生成高质量的 图形,此时消隐算法速度较慢 在算法设计时,往往需要在消隐效率和图形 质量之间进行权衡 6 消隐的分类方法 算法实现时所在的坐标系(空间)进行分类 : 景物空间消隐 特点:算法精度高,与显示器的分辨率无关,适合于精 密的CAD工程领域 算法复杂度为O(n2):场景中每一个物体都要和场景 中其他的物体进行排序比较,n为物体个数 代表方法:背面剔除,油画家算法 图像空间消隐 特点:在屏幕坐标系中进行,生成的图像受限于显示器 的分辨率 算法复杂度为O(nN):场景中每一个物体要和屏幕中 每一个像素排序比较, n为物体个数,N为像素个数 代表方法:z缓冲器算法 7 背面剔除算法 原理:利用观察方向(V)和物体表面法向(N) 之间的关系 NV0:θ<90 不可见 NV<0:θ>90 可见 8 背面剔除算法 背面剔除算法:适用于凸多面体,不适用于 凹多面体或其它复杂物体 9 背面剔除算法 背面剔除算法适用于场景消隐的预处理:消 除一些显然不可见的表面,从而提高其他消 隐算法的效率。 10 油画家算法算法 3 1 6 z 11 深度排序算法 深度排序算法适合于固定视点的消隐 在一些视点频繁变化的场合中,例如飞行模拟,上 述算法的效率就不能满足实时性的要求。 12 z缓冲器算法 z (深度)缓冲器算法属于图像空间算法 z缓冲器GL_DEPTH_BUFFER_BIT是帧缓冲器的推广 帧缓冲器:存储的是像素的颜色属性 z缓冲器:存储的是对应像素的z值 假设在视点坐标系(oxyz)中,投影平面为 z=0,视线方向沿-z轴方向 深度值就是物体沿视线方向、与视点的距离 离视点近的物体遮挡离视点远的物体: z值越大,离视点越近 13 z缓冲器算法 屏幕 帧缓冲器 每个单元存放对应 象素的颜色值 Z缓冲器 每个单元存放对应 象素的深度值 14 z缓冲器算法分析 z缓冲器需要占用大量的存储单元 一个大规模复杂场景中:深度范围可能为106, 一个像素需要24bit来存储其深度信息。如果 显示分辨率为500×500,那么深度缓冲器需 要1MB的额外存储空间! 解决方法:分区域z缓冲器算法 Z缓冲器的单元数 逐个区域地进行z缓冲器消隐,这样z缓冲 只要等于一条扫描 器的大小就仅为一个子区域的大小 线内像素的个数 子区域为扫描线时: 扫描线z缓冲器算法+连贯性 15 活化边表 两个空间多边形在oxy 平面上的投影 16 预习 lianxi1.12.4.c 中display()函数中设置 不同视点的方法 17