lod地形

2023-11-14

2014-05-17 23:29  1471人阅读  评论(0)  收藏  举报
  分类:
 

目录(?)[+]

http://blog.sina.com.cn/s/blog_5e3213f30100zxet.html
最近在看OGRE怎样载入地形的内容,因为terrain.cfg中涉及了很多的LOD(细节层次)的问题,看得我一把鼻涕一把眼泪的,所以就想说先看看LOD地形再去研究ogre本身地形实现的具体操作应该会好一些,主要资料参考的是曾凡喜,周炜,潘运亮等的《Direct3D
实时渲染技术》这本书,其对于用四叉树实现的LOD地形有比较详细的描述。

【LOD出现原因】

         由于大的地形绘制需要在短时间内处理上亿个三角形,其实时绘制要求仍然是飞行仿真、数字娱乐等虚拟现实应用中的一个难点。尽管近年来硬件技术飞速法阵,显卡的性能指标已经有很大的增长,但是仍旧不能满足大地形的实时绘制要求,比如在进行飞行模拟的时候,要穿越一个km为单位的地形,每个网格都用三角形绘制,则此时就算是再好的显卡在每秒至少24帧的要求下也不能进行实时的处理,所以多分辨率技术(Multi-resolution)就此诞生。

         多分辨率网格简化技术/细节层次模型技术(LOD技术),引入“分而治之”的思想,根据地形的不同复杂程度和人眼观察地形的特点,对地形的不同区域采取不同细节的描述和绘制。采用LOD技术绘制地形,在不降低表现效果的前提下,可以尽量减少三角形的数量,以提高图形绘制效率,实现地形的实时交互可视化,通俗具体讲就是将一块地形划分为无数小块区域,对于离视点越近的区域,或者该区域地形越复杂(起伏大,如山区),绘制的三角形数目越多,地形描述精度越高;对于离视点越远的区域,或者该区域越平坦,绘制的三角形数目越少,地形描述精度越低。

         LOD技术按照所生成的网格的形状可以分为不规则三角形网(TIN)和规则格网两类。这两类网格模型,在以同样的表达精度绘制同样的地形时候,基于TIN的多分辨率地形表示法所需要的三角形数量更少,而基于网格的多分辨率地形表示法构建网格的速度更快,实时性更好,算法更易于程序实现。

         Lindstrom等人于1996年提出了基于四叉树的连续细节层次模型(Continuous level of Detail)的构建算法,是基于规则格网类的具有代表性的研究成果之一。算法的“连续”特性包含了3个意思:

1)  帧更新时,地形表面保持连续性,即“时间的连续性”;

2)  不同分辨率的地形分块之间保持连续性,没有裂缝,即空间连续性;

3)  算法的实时构网能力很强,以保持较高的屏幕刷新率。

【基于四叉树的视相关LOD地形算法】

 地形的四叉树结构

为了更加清楚的描述算法的思想,对三维地形有如下的要求:

1)  地形必须是一块正方形区域;

2)  地形大小必须是(2^n+1)X(2^n+1)

如下图所示,我们将一块地形的高程数据用一个四叉树结构组织起来,其中每个正方形代表一个节点,每个节点包含9个高程点,其中有一个中心点、4个角点和4个位于4条边上的中点。一个大正方形里面包含4个小正方形(叶子节点除外),这四个小正方形所代表的节点就是大正方形节点的子节点。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

地形的四叉树结构
首先按照地形的大小把整个地形分割成一棵满四叉树,满四叉树的概念是从满二叉树引申过来的,它必须满足以下的条件:

1)  除了叶子节点,每个节点都有4个子节点,并且其所有子节点都位于同一层上;

2)  地形越大,四叉树的深度越大

LOD地形绘制

满四叉树
这样我们就可以看出来,每个节点表示一块地形,节点的层次越低(根节点的层次最低,为0),所代表的正方形的面积越大,该节点的细节程度(Level)也越低。显然,叶子节点的层次最高,它的Level也最高。

地形的高程数据保存在一个二维数组中,由于该算法是规则网格的,很容易找到每个节点的9个高程点在二维数组中的对应元素。

         用一个四叉树表示地形有很多优点:

1)  便于可视地形区域测试的节点裁剪;

2)  四叉树遍历的快捷性适合对网格进行实时更新

 如何绘制地形

一般采用三角形扇的方式来绘制细节已经满足要求的节点,这是一种很自然的方式,因为每个节点包括一个中心点和若干围绕中心点的点,刚好排成一个三角形扇(如图所示,这样排列的好处是便于将相邻的三角形合并(后面会讲到为了消除T型裂缝,我们有时需要将两个三角形合并。
用LOD算法来简化地形的过程就是自上而下(或者自下而上)遍历四叉树的过程。如果节点的细节程度(Level)已经满足某种简化准则,则绘制该节点,否则不绘制该节点,继续考察他的4个子节点,因此,必须建立一种能对节点进行评估的简化准则,以决定对某块地形简化到何种程度。

【节点简化准则】

节点简化准则是地形简化的核心,不论其采用何种节点误差计算方法,都要符合以下的规则:

1)  如某节点离视点很近,或者它代表的地形块很“粗糙”,则应该对该节点往下细化,即继续考察它的4个子节点

2)  如果某节点离视点很远,或者它代表的地形很“平滑”,则应该对该节点往上简化,即考察它的父节点

3)  如果某节点与视点的距离适中,或者不太粗糙也不太平滑,则应该独立地绘制该节点。

采用简化准则对节点进行评估的时候,应该考虑下面的3种因素:

1)  地形块的大小;

2)  地形块与视点之间的距离;

3)  地形块的粗糙度。

简化准则通常都是通过误差模型(Error Model)来实现的。除了Level最高的节点外,其他的节点相对于原始地形数据都有一定的误差,因此可以用误差的大小来决定节点的Level是否符合简化准则。

         Lindstrom在其文章中提出了基于顶点的简化准则(Veterx-based Simplification),但是这种方法计算量十分大,所以需要利用下面的简化方法来进行顶点的误差估计:

         LindStrom提出了基于块的简化准则(Block-basedSimplification),该准则用地形的整体粗糙度来确定节点的误差大小,而且适用于“自上而下”的遍历顺序。它假设块内的所有顶点是非常“紧密”的,即块内任意两点之间的举例远远小于节点到视点之间的距离d,根据一定的算法可以求出该及诶单的“粗糙度”u,如果u/d大于常数t,则应该对该节点往下细化,否则进行独立的绘制。于是问题就转化成为构造一种合适的能描述地形粗糙度的算法。

         在书中提出了一种简便的粗糙度求取算法——最小二乘法。用Zx,y表示地形块中的某顶点的高度,因为地形块为一个方形区域,满足条件Xmin<X<Xmax,Ymin<Y<Ymax.X和Y都取整数值

【裂缝处理】

         LOD算法“分而治之”的思想带来了地形“裂缝”这个难题。如图,当同事绘制两相邻的分辨率不同的节点的时候,就会产生T型裂缝:

LOD地形绘制

如图,裂缝产生的原因是左侧节点在交点B处的高度值来自原始准确数据,而右侧节点的Level比左侧的低,在交点B处的高度值是A和C的平均值。这样,同一点在相邻的两个节点之间的高度差便会产生三角形裂缝。

         有两种技术可以解决裂缝的初级问题:

1)  边删除技术

边删除技术在Level较高的节点T型裂缝处删除一条边这样把两个相邻的三角形合并成为了一个。如图中所示,要解决裂缝问题,共需要删除3条边,删除边之后的网格如图所示

LOD地形绘制
 2) 边插入技术,就是在Level较低的节点内部添加一条边,这样就把一个三角形分割成两个

LOD地形绘制
然而,要避免T型裂缝现象,仅仅依靠边删除或者边插入技术是不够的,地形网格还需要满足一个条件:相邻两个节点之间的Level差值不能大于或者等于2.这时候边删除是无能为力的,采用边插入技术将使得算法变得过于复杂,不易实现。

 解决办法

当两个相邻节点之间的Level之差大于1的时候,强制把Level较低的节点分裂成4个子节点。Rottger介绍了一种更加灵活的方法,它将四叉树中各个节点的状态用一个布尔矩阵表示,节点状态要么为‘1‘,要么为’0’,要么为‘?’。

Bool值1表示该节点Level较低,需要进一步向下细化,0表示该节点Level适中,应该对它进行独立绘制:‘?’表示该节点Level太高,应该对该节点向上简化,如果布尔矩阵同时满足以下条件:

1) 所有0节点的父节点状态为1;

2) 所有1节点的相邻同Level节点的状态不为‘?‘

则称该矩阵是完备的,使用完备矩阵方法再配合边删除或者边插入技术就可以很容易地构造一个无裂缝的多分辨率地形。

【突起现象】

         当视点移动的时候,地形网格不断更新,当节点Level发生变化的时候,地形中的某点会由一个高度突然跳变到另一个高度,这种称之为“突起”现象(Poping-up)。在地形漫游系统中,“突起”现象给人 一种不真实的感觉。为消除这种不自然的行为,引入了一种”形变“算法。形变的含义是,当节点从一个Level过渡到另一个Level的时候,其中某点平稳缓慢地从一个高度过渡到另一个高度。形变虽然没有本质上消除地形高度变化,但这种“缓变”往往肉眼难以察觉。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

lod地形 的相关文章

  • Ubuntu运行rviz报错:OGRE EXCEPTION(3:RenderingAPIException): Unable to create a suitable GLXContext

    写在前面 笔者的测试环境 xff1a Ubuntu20 04 xff0c ROS noteic 一 问题描述 运行rviz时出现报错 xff1a span class token punctuation span WARN span cla
  • Ubuntu运行rviz报错:OGRE EXCEPTION(3:RenderingAPIException): Unable to create a suitable GLXContext

    写在前面 笔者的测试环境 xff1a Ubuntu20 04 xff0c ROS noteic 一 问题描述 运行rviz时出现报错 xff1a span class token punctuation span WARN span cla
  • Ogre 界面(Overlay)

    Ogre 界面 Overlay 标签 border脚本buttontemplatesplugins引擎 2011 10 16 23 12 4725人阅读 评论 2 收藏 举报 分类 引擎技术 9 这里的界面是指菜单 HUD及提示信息框在内的
  • 纹理(Textures)

    纹理 Textures 原文 Textures 作者 JoeyDeVries 翻译 Django 校对 Geequlim BLumia 我们已经了解到 我们可以为每个顶点使用颜色来增加图形的细节 从而创建出有趣的图像 但是 如果想让图形看起
  • 可编程渲染管线与着色器语言

    可编程渲染管线与着色器语言 Programming pipeline shading language Sampler Direct3D 9 asm ps A sampler is a input pseudo register for a
  • 如果XML文件太大(10M),打开方式选择

    用UltraEdit打开 其他的例如Editplus和notepad 根本打不开上百M的文件 一打开就死了
  • ogre 1.7.0

    今天编译了orge 第一次安装编译orge挺麻烦的 现把编译和安装步骤总结一下 1 ogre 1 7 0的下载地址 https sourceforge net projects ogre files ogre 1 7 ogre v1 7 0
  • Ogre学习记录

    Ogre学习记录 Posted on 2008 07 09 15 36 RichardHe 阅读 839 评论 2 编辑 收藏 引用 所属分类 OGRE 1 设计初衷 它设计初衷是完全跨平台的 抽象的接口隐藏了平台相关的细节 它设计初衷是大
  • 地形平滑算法

    地形平滑算法 2013 06 20 18 33 2486人阅读 评论 0 收藏 举报 分类 OGRE 41 C C 10 版权声明 本文为博主原创文章 未经博主允许不得转载 拉出来的地下不平滑怎么办 笨办法就是美工一个顶点一个顶点的调整 而
  • Terrain Splatting

    Terrain Splatting 标签 网格优化2010 2011 05 16 16 17 1157人阅读 评论 0 收藏 举报 分类 OGRE 541 图形图像 746 游戏引擎 1651 图形引擎 1594 技术理论 1005 引擎开
  • 地形纹理Splatting技术(翻译)

    地形纹理Splatting技术 翻译 文章来源 http www gamedev net reference articles article2238 asp Texture Splatting in Direct3D Introducti
  • VC 运行时库 /MD、/MDd 和 /MT、/MTd

    VC 运行时库 MD MDd 和 MT MTd 2013 01 24 18 42 11058人阅读 评论 2 收藏 举报 分类 C C 19 有段时间在写cuda程序是出现过 error LNK2005 exit 已经在 MSVCRTD l
  • 转:Ogre TerrainGroup地形赏析

    转 Ogre TerrainGroup地形赏析 1 1 参考 http www ogre3d org tikiwiki tiki index php page Ogre Terrain System http www ogre3d org
  • DirectD3D-纹理映射

    DirectD3D 纹理映射 标签 Direct3Ddirectx游戏游戏开发 2014 11 12 14 03 321人阅读 评论 0 收藏 举报 分类 DirectX 8 版权声明 本文为博主原创文章 未经博主允许不得转载 纹理映射的概
  • lod地形

    lod地形 2014 05 17 23 29 1471人阅读 评论 0 收藏 举报 分类 图形学 17 OGRE相关 75 目录 http blog sina com cn s blog 5e3213f30100zxet html 最近在看
  • OGRE动画

    动画是由若干静态画面 快速交替显示而成 因人的眼睛会产生视角暂留 对上一个画面的感知还末消失 下一张画面又出现 就会有动的感觉 计算机图形学中的动画也同样遵循着这一本质的原理 只不过不同于传统动画的手绘和拍摄 Ogre图形引擎可以通过自动或
  • 学习笔记:多重纹理

    学习笔记 多重纹理 2009 09 01 14 20 52 转载 分类 学习笔记 多重纹理 多重纹理就是在渲染一个多边形的时候可以用到多张纹理图 把多张纹理图进行一些颜色的操作 可以达到一些效果 但是多重纹理必须是在显卡支持的情况下 但是还
  • 关于 Demo_Ocean 例子的分析

    关于 Demo Ocean 例子的分析 重要总结 1 该例主要类不再继承自ExampleApplication和ExampleFrameListener 重写驱动类和监听类 2 如何创建OIS的输入系统 1 创建OIS ParamList
  • 第十三章 公告板与粒子系统 标签: ogre公告板粒子系统ogre粒子系统

    Ogre编程入门与进阶 第十三章 公告板与粒子系统 标签 ogre公告板粒子系统ogre粒子系统 2015 07 05 14 41 1365人阅读 评论 1 收藏 举报 分类 Orge模块 16 版权声明 本文为博主原创文章 未经博主允许不
  • Ogre/Mogre:相机两点透视

    我正在显示一个场景 其中有一些立方体 相机采用的是透视法 一切都很好 但我希望垂直线是平行的 两点透视 http en wikipedia org wiki Perspective graphical 两点透视 从正面观察立方体时 我想要的

随机推荐

  • [Python从零到壹] 十.网络爬虫之Selenium爬取在线百科知识万字详解(NLP语料构造必备技能)

    欢迎大家来到 Python从零到壹 在这里我将分享约200篇Python系列文章 带大家一起去学习和玩耍 看看Python这个有趣的世界 所有文章都将结合案例 代码和作者的经验讲解 真心想把自己近十年的编程经验分享给大家 希望对您有所帮助
  • sql计算留存率

    SELECT first day sum case when by day 0 then 1 else 0 end day 0 sum case when by day 1 then 1 else 0 end day 1 sum case
  • 解决WebSocketClient.js?5586:16 WebSocket connection to ‘ws://192.168.1.102:8999/ws‘ failed:

    修改vue config js里的devServer配置 添加client 配置 client webSocketURL ws 0 0 0 0 8999 ws module exports 配置跨域请求 devServer 项目运行的端口号
  • frida辅助分析ollvm字符串加密

    frida辅助分析ollvm字符串加密 近期逆向任务繁重且艰巨 因此把工作期间得学习心得做下笔记还是十分得有必要得 防止后期遗忘 个人博客 http www zhuoyue360 com 文章目录 frida辅助分析ollvm字符串加密 一
  • JAVA解析纯真IP地址库

    前几天看了下Ruby的IPParse 觉得很过瘾 上网查了下貌似很多IP数据库都要收费的 就下了个纯真QQIP地址库 发现还可以在线升级的 很适合咱做点小玩意 具体解析的纯真版IP地址库请详见http lumaqq linuxsir org
  • Discuz!开发之主题高亮字段highlight解析

    Discuz 开发之主题高亮字段highlight解析 相关数据表pre forum thread 我们可以看到主题高亮信息存储于字段highlight 且为一个整型数据 那么discuz 如何将这个整型数解析为高亮 包括 字体颜色 背景颜
  • FPGA开发流程概述

    Lesson 3 FPGA开发流程概述 开始学习FPGA 想尽快上手FPGA开发 那么先来了解一下FPGA的开发流程 1 需求分析到模块划分 需求说明文档 器件选择 逻辑资源 功耗 IO数量 封装等等 配置电路考虑 开发工具选择 电路板的可
  • 数据结构与算法实验-实验一:线性表基本操作

    线性表基本操作 文章目录 线性表基本操作 题目1 题目2 题目3 题目1 线性表是最常见和常用的ADT 假设线性表的元素为整数 请基于顺序存储结构实现线性表ADT 基本功能包括 1 建立线性表 输入有两行 第一行是一个整数n 线性表的长度
  • SpringMVC自定义视图完成步骤 和 视图解析的源码剖析

    自定义视图完成步骤 7 2 1自定义视图完成步骤 1 自定义视图 创建一个 View 的 bean 该 bean 需要继承自 AbstractView 并实现 renderMergedOutputModel 方法 2 并把自定义 View
  • 【项目实战】在win10上安装配置Hadoop的环境变量

    一 说明 注意 该教程适用于 远程连接Linux上的Hadoop集群 因此本步骤是不需要在本地再下载hadoop的 在win10操作系统上 运行Hadoop以及其相关依赖包 比如Hbase依赖包 时 我遇到的情况是 我需要使用SpringB
  • 素数(埃式筛法、线性筛法)

    文章目录 素数判断方法 埃式筛法 线性筛法 区间筛法 质因数分解 例题 第一题 第二题 第三题 素数判断方法 最简单的就是从 2 n 1 都去与 n 取余 看是否能整除 bool prime int n for int i 2 i lt n
  • 使用linuxdeployqt在linux下进行Qt打包发布(超详细)

    首先 来说下 本教程实现的功能 在linux下对开发的Qt应用 进行拷贝依赖文件so等 并打成deb安装包 实现可安装 卸载 安装完毕自动在开始菜单下和桌面添加快捷方式 卸载后自动删除快捷方式 以及删除应用生成的log文件 测试环境 ubu
  • 自学Android资料大全

    学习级别 很多人都往往划分成入门 初级 中间 骨灰级等 这里就简单地划分为两级 基础篇和进阶篇 另外 本文涉及到的所有书籍都是在学习过程中所读过的比较经典的一些书籍 一 基础篇 看书的姿态 学习过程往往大家都需要看书 网上一搜 往往会有一大
  • 浪潮服务器更换硬盘_携手希捷,浪潮领先业界完成希捷银河(Exos)X18企业级硬盘评测...

    全球领先的数据存储解决方案提供商希捷科技 NASDAQ STX 宣布 携手浪潮完成对希捷银河 Exos X18企业级硬盘的评估 该硬盘拥有目前业界最高的18TB超大容量 性能卓越 用于承载大规模数据中心的海量数据 双方在实际工作负载环境中测
  • Python @函数装饰器及用法(超级详细)

    使用 符号引用已有的函数 比如 staticmethod classmethod 后 可用于修饰其他函数 装饰被修饰的函数 那么我们是否可以开发自定义的函数装饰器呢 答案是肯定的 当程序使用 函数 比如函数 A 装饰另一个函数 比如函数 B
  • AcWing 420. 火星人

    y总讲得很好 学到很多所以安利一下 转载自Acwing yxc 算法 贪心 全排列 O nm O nm 这道题目可以直接用next permutation函数来做 这里我们考虑一下next permutation函数的原理 然后手动实现一遍
  • c++ modbusTCP

    Modbus TCP是一种基于TCP IP协议的Modbus协议 它允许Modbus协议通过以太网进行通信 在C 中 可以使用第三方库来实现Modbus TCP通信 例如libmodbus和QModbus 使用libmodbus库实现Mod
  • 介绍一种巧妙的删除程序自己的方法

    介绍一种巧妙的删除程序自己的方法 vcbear 近日看到网友询问如何实现程序运行之后把自己删除的方法 不知大家对木马甚么的兴趣实在太浓 还是想要这样的效果 用户只要一运行程序 可执行文件就没有了 可是程序还是在跑 胆小的只怕要喊 鬼呀 老婆
  • Pytorch英文官方文档学习笔记(三、Torch.nn及torch.optim)

    一 nn Module的使用 Every module in PyTorch subclasses the nn Module 自己定义的每个module都一定是nn Module的子类 pytorch在nn Module中 实现了 cal
  • lod地形

    lod地形 2014 05 17 23 29 1471人阅读 评论 0 收藏 举报 分类 图形学 17 OGRE相关 75 目录 http blog sina com cn s blog 5e3213f30100zxet html 最近在看