ROAM地形渲染算法的核心
来源:互联网 发布:淘宝昵称是我店名吗 编辑:程序博客网 时间:2024/04/28 05:18
ROAM地形渲染算法的核心是:
1.二叉三角面树的构造。
这个构造过程即细化分割三角面的过程(Tessellation)。具体的讲,我们将自己的地形分成若干个菱形(Diamond),每个Diamond由2个三角面构成,这些根三角面就是每棵二叉三角面树的根结点。在Tuner的文章中(点击),二叉三角面树的节点生成不是动态分配内存的,而是由一个固定数组池分配的,这样虽然使程序运行更高效,但树节点个数就是有限的了,在这种限制下,可以引入TessellationQueue队列,这个队列的作用是:对进入渲染列表的所有Diamond,根据其距离摄像机的远近排序,这样使得确保离摄像机近的Diamond优先进行Tessellation,等到数组池用完的时候也是离摄像机相对较远的Diamond了,这时停止分割。
对当前细节等级的三角面是否细分的判断公式如下(来自《实时地形引擎》):
E是误差限度,即Variance,我们需要单独为每棵二叉三角树构造一棵Variance Tree,这也是ROAM算法的核心之一。
S是进一步控制细分操作的比例值,在崎岖的地形我们可以采用大的S值,而在平坦的地形采用小的。
D是三角面距离摄像机的距离。
L是容忍限度。
这个公式的意思是,当ES/D大于L时进行细分,可见S和D起的作用,当距离摄像机越近,细分的可能性越大。这就是ROAM的LOD控制。
2.Variance Tree的构造。
我们要给细分的次数做一个限制,比如最大细节层次为Level 4,那么根据这个二叉三角树的最大深度,我们能确定Variance Tree的节点个数。
Variance Tree是存储在一个静态连续数组中的。
3.三角面细分规则。
这幅图表示了细分时的2种情况:要细分的三角面与相邻三角面构成菱形(常规情况),没构成菱形(特殊情况)。
后一种情况不特殊处理的话会导致裂缝现象。
第一种情况这两个三角面都细分就行了,第二种情况要先细分相邻三角面,直到与要细分的三角面构成菱形,再进行与情况一相同的处理。
对ROAM算法的实现《实时地形引擎》第七章Demo源代码可以参考。
- ROAM地形渲染算法的核心
- ROAM实时动态LOD地形渲染
- ROAM实时动态LOD地形渲染
- ROAM算法的一段翻译
- WOW的地形渲染
- 新的地形渲染
- 地形渲染的动态LOD四叉树算法详细实现
- 地形渲染的动态LOD四叉树算法详细实现
- 地形渲染的动态LOD四叉树算法详细实现
- 地形渲染的动态LOD四叉树算法详细实现
- WOW魔兽的地形渲染
- 渲染地形
- 地形渲染
- ROAM
- Mesh View:简化的Clipmap地形渲染
- [译文] 如何高效渲染庞大的地形
- D3D11地形渲染教程十九之Foliage(植被的渲染)
- 3D地形渲染
- 股评人士的终极目标
- 收到了一张贺卡
- Solaris上CC编译器使用帮助
- MSDN Kernel-Mode Driver Architecture学习笔记(1)——Introduction to Windows Drivers(1)
- 加解密的一些概念
- ROAM地形渲染算法的核心
- ASP.NET图片验证码的实现
- 计数的好方法
- php页面跳转函数-重新定向到另一个页面
- Js掉用SilverLight方法
- NET2.0-WinFormControl-DataGridView编程36计(一)
- Apache2 httpd.conf 中文版
- IOCP 中WSARecvFrom返回10045的问题
- struts1中action参数