4.ch1.(消隐).

Download Report

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)
之间的关系
 NV0:θ<90 不可见
 NV<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