LOD地形绘制
来源:互联网 发布:学会plc编程工资高吗 编辑:程序博客网 时间:2024/05/17 04:25
实时渲染技术》这本书,其对于用四叉树实现的LOD地形有比较详细的描述。
【LOD出现原因】
1)
2)
3)
【基于四叉树的视相关LOD地形算法】
l
为了更加清楚的描述算法的思想,对三维地形有如下的要求:
1)
2)
如下图所示,我们将一块地形的高程数据用一个四叉树结构组织起来,其中每个正方形代表一个节点,每个节点包含9个高程点,其中有一个中心点、4个角点和4个位于4条边上的中点。一个大正方形里面包含4个小正方形(叶子节点除外),这四个小正方形所代表的节点就是大正方形节点的子节点。
地形的四叉树结构
首先按照地形的大小把整个地形分割成一棵满四叉树,满四叉树的概念是从满二叉树引申过来的,它必须满足以下的条件:
1)
2)
满四叉树
这样我们就可以看出来,每个节点表示一块地形,节点的层次越低(根节点的层次最低,为0),所代表的正方形的面积越大,该节点的细节程度(Level)也越低。显然,叶子节点的层次最高,它的Level也最高。
地形的高程数据保存在一个二维数组中,由于该算法是规则网格的,很容易找到每个节点的9个高程点在二维数组中的对应元素。
1)
2)
l
一般采用三角形扇的方式来绘制细节已经满足要求的节点,这是一种很自然的方式,因为每个节点包括一个中心点和若干围绕中心点的点,刚好排成一个三角形扇(如图所示,这样排列的好处是便于将相邻的三角形合并(后面会讲到为了消除T型裂缝,我们有时需要将两个三角形合并。
用LOD算法来简化地形的过程就是自上而下(或者自下而上)遍历四叉树的过程。如果节点的细节程度(Level)已经满足某种简化准则,则绘制该节点,否则不绘制该节点,继续考察他的4个子节点,因此,必须建立一种能对节点进行评估的简化准则,以决定对某块地形简化到何种程度。
【节点简化准则】
节点简化准则是地形简化的核心,不论其采用何种节点误差计算方法,都要符合以下的规则:
1)
2)
3)
采用简化准则对节点进行评估的时候,应该考虑下面的3种因素:
1)
2)
3)
简化准则通常都是通过误差模型(ErrorModel)来实现的。除了Level最高的节点外,其他的节点相对于原始地形数据都有一定的误差,因此可以用误差的大小来决定节点的Level是否符合简化准则。
【裂缝处理】
如图,裂缝产生的原因是左侧节点在交点B处的高度值来自原始准确数据,而右侧节点的Level比左侧的低,在交点B处的高度值是A和C的平均值。这样,同一点在相邻的两个节点之间的高度差便会产生三角形裂缝。
1)
边删除技术在Level较高的节点T型裂缝处删除一条边这样把两个相邻的三角形合并成为了一个。如图中所示,要解决裂缝问题,共需要删除3条边,删除边之后的网格如图所示
然而,要避免T型裂缝现象,仅仅依靠边删除或者边插入技术是不够的,地形网格还需要满足一个条件:相邻两个节点之间的Level差值不能大于或者等于2.这时候边删除是无能为力的,采用边插入技术将使得算法变得过于复杂,不易实现。
l
当两个相邻节点之间的Level之差大于1的时候,强制把Level较低的节点分裂成4个子节点。Rottger介绍了一种更加灵活的方法,它将四叉树中各个节点的状态用一个布尔矩阵表示,节点状态要么为‘1‘,要么为’0’,要么为‘?’。
Bool值1表示该节点Level较低,需要进一步向下细化,0表示该节点Level适中,应该对它进行独立绘制:‘?’表示该节点Level太高,应该对该节点向上简化,如果布尔矩阵同时满足以下条件:
1)所有0节点的父节点状态为1;
2)所有1节点的相邻同Level节点的状态不为‘?‘
则称该矩阵是完备的,使用完备矩阵方法再配合边删除或者边插入技术就可以很容易地构造一个无裂缝的多分辨率地形。
【突起现象】
- LOD地形绘制
- LOD地形绘制
- 地形LOD
- lod地形
- LOD地形
- lod地形
- 庆贺,绘制出World Wind的LOD地形网格
- 实时绘制基于LOD的地形相关技术
- 庆贺,绘制出World Wind的LOD地形网格 .
- LOD层次细节算法-大规模实时地形的绘制
- LOD层次细节算法-大规模实时地形的绘制
- LOD地形设计
- 地形LOD(转)
- LOD地形设计
- LOD地形演示
- 四叉树LOD地形
- cocos2dx LOD地形剖析
- LOD地形设计(一)
- OGRE+vs2010编译CEGUI SDK
- Ogre wizard standard Application…
- OGRE中使用CEGUI【1】
- OGRE内部渲染循环
- OGRE地形初步
- LOD地形绘制
- 我的博客今天3岁240天了,我领取了…
- OpenCV学习笔记(一) OpenCV的概…
- OpenCV学习 (二) OpenCV基本操…
- 各种希腊字母念法
- DCM,PLL和MMCM的区别
- C#域与属性
- 负熵(看了好久,竟然这么简单,哎!…
- 傅里叶变换与数字图像处理