基于四叉树的LOD算法实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Page 12
如下图为透视变换中各参数间的关系示意 , 设视点的张角和投影平面的边长分别为 α和 L , 被投影线段的长度为 l , 视点与该线段中心的距离为 d , 设该线段与投影平面平行 ,显然 ,此时 线段在投影平面上的长度最长 ,则屏幕投影误差公式为
其中 , k 为一可变系数 , 可以通过它对系统性能进行调整 , L 为结点覆盖区域的边长 , λ为
地形四叉树表示
Page 3
• 在进行四叉树分层的过程中需要注意以下几点: 首先,由于四叉树分层是针对(2ⁿ+1)×(2ⁿ+1)的规则网格而言的,所以我们所采用的 数据格式应尽量满足(2ⁿ+1)×(2ⁿ+1)的规则网格的要求,即网格数据必须是一间隔 均匀的正方形区域。如果网格数据的大小不满足该条件,则需要扩展其几何图形,让 其大小尽可能接近(2ⁿ+1)×(2ⁿ+1),扩展部分的像素用空值填充。 其次,四叉树中相邻的两个节点的层次最大不能相差1,否则在LOD模型连续拼接的 地方就会出现裂缝。 其基本思路是: 先把地形一分为四,用递归的方法对每个网格渲染。对每个网格,如果 达到最高精度,则退出; 如果不在视野内,也退出。再对符合条件的网格递归下去。
Page 15
综合考虑视距和地形粗糙度两者的影响,得出节点分割最终的评价函数为
d f e r
d为视点到节点的距离,e为四叉树结点单元精度变化时产生的误差,λ为物体空间 中的单位长度在投影平面上的像素数,η是高度分辨率 ,当f< 1 时,节点需要进一 步分割,否则不分割。
因此实际编程时 , 采用如下公式评估视距误差。设细化后边点及中心点产生的误差 最大值为e ,则在实时漫游时,网格细化的条件为 emax ×λ > d 其中, d为视点到该四叉树结点的距离,λ为一与投影方式相关的常数, 一般取λ =ω/φ,ω为视锥角φ范围内投影面上的像素个数;最后按照递归的方式遍历四叉树,当 四叉树孩子结点满足细化条件且该结点不是四叉树的叶子结点时,则该结点被细化, 否则该结点不再细化,并设置标志位 = false。
一种基于自适应动态四叉树的实时连续 LOD模型生成算法
所谓的LOD建模,其实质就是采用一定的算法思想将原有的网格地形数据进行重组, 得到一种更加便于实时绘制使用的数据结构。 Lindstrom提出的基于四叉树的实时连续LOD动态生成算法就是一种典型的实时LOD 生成算法。 在利用四叉树方法进行LOD建模的过程中, 其关键就在于怎样对原有的网格数据进 行四叉树分层。
Page 4
• 所以针对以上基于四叉树构建LOD模型算法,具有可以改进优化的方面主要集中在 以下几点: 1.在对地形节点进行分析判断是否需要进一步细化划分方面(节点评价机制); 2.将地形节点往四叉树结构存储和高效访问方面; 3.为了实现当视点较远时, 分辨率较低, 当视点较近时, 分辨率较高这个特性而产生的 动态误差问题; 4.消除由于相邻的网格因分割的程度不同而产生的裂缝问题; 综上问题我提出了:一种基于自适应动态四叉树的实时连续LOD模型生成算法
传统的四叉树分层结构
Page 6
四叉树存储和访问机制 快速访问四叉树结点的基本思想是将存储DEM (数字高程模型,是用一组有序数值 阵列形式表示地面高程的一种实体地面模型)数据的四叉树结点用 一维数组来表 示 。主要用两种方法来提高四叉树结点的访问效率 , 其中一种是四叉树结点数据在 一维数组中的存储方式 ,另外一种则是访问四叉树结点数组的方式 。
Page 14
地形粗糙度标准 第二个需要考虑的是,地形本身粗糙程度的影响,在“崎岖”的地带,使用较细的层级分割 节点“平坦”的地带,则粗略些,同样可以节省分割渲染时间。 如图(a)所示是某一节点在某种状态下的剖分情形,首先考虑 4 个边点因分割而产生的 高度。其次应考虑图 (b)所示的 4 个子节点中心所产生的高度变化,这样总共需考虑 9 个 高度变化值(△0,…,△8)。取这 9 个点处的高度最大值 Max(0,…,8)和最小值 Min(0 ,…,8),构造 diff=Max(0,…,8)-Min(0,…,8),再构造 r=e /diff 。于是,当 diff< e×η,即 1/r<η时,边长较大需进一步分割。此处,η是一个可调节的常数,称为高度分辨率。
Page 17
拼接缝消除
常用的办法有两种:一种是在两个不同分辨率节点之间加上一条边,如图1所示;另一种方法是 在不同分辨率格网之间减去一条边,如图2所示。从理论上来说,第一种方法更加全面,因为相邻 两个节点层次可以是任意级别,但是这样实现起来比较复杂,绘制效率较低。第二种方法比较简 单,只要满足相邻节点层次差别不超过1就可以。这里采用第二种方法来进行裂缝消除。
分割缓冲区
Page 19
为了保证相邻节点分辨率不超过1,制定分割规则为如果当前节点的上下左右4个节点都 已经参 与分割,并且当前节点满足分割公式要求,则本节点 才可参与分割否则,直接绘制本节点。对于 每个分块地形,初始节点都认为是可分割节点。对于分割过程中的任意节点,其上下左右节点坐 标如以下公式所示,
其中nRow,nCol 分别是当前节点在分块地形中的行、列 坐标,d是当前格网大小。对于初始 节点d=nRow=nCol=16,以后每分割一级节点,d减半。逐级判断,发现裂缝进行修补。
Page 20
这个算法的改进之处就在于使用填充曲线提高了节点的存储速度,避免了节点 的重复存储;再一个使用视点相关分割评测方法,改进了 LOD 模型“ 裂缝” 效应 消除方法。下一步重点就是算法应用实现,以及检测是否在实际应用中真正提高地
Байду номын сангаас
Page 8
我这里采用著名的希尔伯特空间填充曲线来组织四叉树结点 ,因为希尔伯特值的排序能很 好地反映空间邻近性 ,如图给出了用希尔伯特空间填充曲线组织 DEM数据的初始几步网格顶点 的索引号 。
DEM数据经过希尔伯特空间填充曲线组织后 , 它自顶向下 ,由粗到细地将各个分辨率的 四叉树结点存储到了一个一维数组中 , 这种方法实际上是把单一分辨率的数据变换到多分辨率 数据后再进行排序 , 这在3维地形数据的可视化中是一种十分有效的数据组织方式 ,其使用户能 够方便地访问四叉树结点数据
加边策略
不同分辨率节点
减边策略
Page 18
由于采用了地形分块技术,除了考虑同一块地形内部的接边问题外,还必须考虑相邻分块地 形之间的接边问题。为此每个分块地形节点定义了一个分割标志区,大小与地形节点相同,记录 该节点是否被分割,如图所示。图中,黑点表示需要继续分割节点,空心点表示不需要分割节点。
Page 10
为了保证空间数据的邻接性 , 每一层的数据都需要保存 。 这样就使得在空间位 置上相近的顶点在内存里面的存储位置也相近 。 然后就可以通过如下公式求解结 点的存储位置 , 如父结点 p的第 k 个孩子的存储顺序为 C(p,k)= 4 p + k + m , k = 0, 1, 2, 3 其中 , m 是一个常数 , 其取值取决于根结点的位置以及相邻两层的距离 。使用 这种方法 , 可以使同一层所有顶点数据都放在一块 。 如下图所示为隔层四叉树头几 层结点访问顺序的示意图 。
物体空间中的单位长度在投影平面上的像素数 , d 为视点到地形结点中心点的距离 , α为视角 , ε 为用户容许像素误差 ,e为四叉树结点单元精度变化时产生误差 。 从公式中可知 , 由于e和 d 随着视点的变化会随时改变 , 而在特定的屏幕投影误差下 , 其他参数则可以视为常量 ,
Page 13
形的渲染效率。
Page 21
谢谢
Page 22
Page 9
四叉树结点的访问方式 四叉树结点访问有隔层四叉树和嵌入四叉树两种常用的方式 。 我在这里利用隔层四叉树 来快速访问四叉树结点数据的实现方法 。 隔层四叉树是指在地形网格由粗往细的剖分过程中 , 把地形网格按层次分为白色四叉树和 黑色四叉树两种 , 而且每种均为一棵完全的四叉树 。 这种黑白隔层表示顶点的方式是利用四 叉树的编码 ,并根据父子结点关系推导出顶点索引号 ,再按照自上而下 、 由粗到细的方式存储 结点 ,这样就可以很容易地读取所需的数据信息 。
Page 2
四叉树分层方法是: 从整个完整的地形出发,递归的把地形不断的分割( Sub-divide)成 相等的四个区域,分割的深度越大,则得到的分辨率越高。如图所示是一个地形的四
叉树表示,图中每一个正方形为四叉树的一个节点。每个节点保存了一定区域的信息
包括: 经纬度,中心点的高度,边节点的高度等。
Page 5
把整个地形作为根结点,然后从根结点出发判断其是否满足某种分割条件,若不满足则不 分割并作为叶子结点保存;否则把根结点递归地不断分成相等的4个子结点区域,直到不能再 分割为止,最后将所有叶子结点绘制渲染形成简化结果。 分割的深度越大,得到的分辨率就越高,分割时使用结点评价函数对每个行结点进行评价, 如果该点精度已经符合结点评价函数的要求,则不再进行分割,否则继续分割直到该结点符合 结点评价函数的要求为止。
Page 11
节点评价系统 在建立节点评价系统时,一般需要考虑两个因素:一是视距的影响;二是地形本身粗糙程度的 影响。 视距标准 在实际的视觉效果中,模型的粗细程度不仅与视点位置有关系,跟视线方向也有关系。也 就是距视点距离相等的节点,对着视点的节点细节层次应该比其他节点的细节层次高。
Page 7
四叉树结点的存储方式 首先将二维的DEM转化为一维方式组织,其基本原理是 : 先将数据空间划分成大小相同的网格 ,再根据一定的方法将这些网格编码 , 使得每 一个网格的标号是唯一识别的 ,并能在一定程度上保持空间邻近性 ,即相邻网格的标 号也相邻 ,以便使一个空间对象由一组网格组成 。 再次,考虑到四叉树结点的存储顺序通常用 二维空间填充曲线的方法来确定 , 因为 二维空间填充曲线不仅可以保证遍历空间中的每个数据点 , 而且填充曲线局部区段 内的数据点在空间分布上也是相邻的 。
Page 16
拼接缝消除 拼接缝的形成 在运用树数据结构 对地形进 行多分辨 率表示时 , 会出现天然的“裂缝” 现象 , 如图所 示 . 结点 c2具有较高的分辨率 , 而与之相邻的结点 c1和c3 具有较低的分辨率 , 使得 结点c1 ,c3与 c2, c3 连接处出现了未被覆盖的区域 , 从而在地形绘制时就产生了“裂 缝” .