Ogre中的Terrain的Lod细节
来源:互联网 发布:淘宝情趣用品好卖吗 编辑:程序博客网 时间:2024/04/28 23:14
Ogre中的Terrain的Lod细节
在OGRE中,Terrain是地形组中的一个区块。
Terrain的一些规则定义,
一个Terrain必须是个正方形的且边的长度必须是
mSize=2^n+1
maxBatch =2^n+1且maxBatch <= 129
minBatch =2^n+1且minBatch<=maxBatch
名称解释:
mSize就是地形矩形的边的顶点数。
maxBatch就是地形四叉树节点中,最大的渲染区域的边长。
minBatch就是地形四叉树节点中,最小的渲染区域的边长。(注意,边长不是指真的边的长度,而是边的顶点个数)
在地形中,有mSize,maxBatch,minBatch这三个值,就能够计算出地形四叉树的深度,地形的Lod等级。
LodLevels = log2(mSize-1)– log2(minBatch) + 1
LodLevelsPerLeafNode = log2(maxBatch-1) –log2(minBatch) + 1
TreeDepth = LodLevels –LodLevelsPerLeafNode + 1
并且:
assert(TreeDepth == log2(mSize-1) –log2(manBatch) + 1)
在构建四叉树时,每一层节点都拥有该节点对应的Lod信息,且叶子节点包含>=1个Lod信息。
为了节省空间存储顶点信息,不是每一层都拥有顶点数据。部分子节点共享父节点的顶点数据。在相应的四叉树层创建顶点数据的规则为:
while (depth -- )
split = 1 << depth;
if split == (size-1)/128 then
size = (size-1) / 2
// 对应在depth+1创建顶点数据>depth的,且没有顶点数据的层共享此depth对应的顶点数据
end
end
图一.我理解的一种示例
图一示例,当地图的所需的各个参数定好后的大概地形四叉树的结构。图中所示,拥有顶点数据的树的层为第一层和第二层。可以得出第二层每个节点拥有的顶点个数,nSize = (mSize-1) / 2^(2-1), nBaseVer = nSize^2,且第二层所拥有的顶点信息被第三层和第四层共享,由于在OGRE中的地形使用skirt技术来避免Lod所带来的缝隙,所以顶点个数需要额外加上skirt的因素。nSkirtVer = (2^nOwnTree + 1)*nSize,其中(nOwnTree为共享顶点的层数 - 1,此处为2),由此,则可以得出第二层中的每个节点所拥有的顶点个数为nVertexNum =nBaseVer + nSkirtVer。
图二.OGRE中的解释示例
OGRE中,在顶点数据节点中,会创建两种vertexbuffer
图三.程序中创建两个顶点缓冲
不是很了解这个deltabuff的作用。暂时忽略这个吧。
- Ogre中的Terrain的Lod细节
- LOD Terrain
- Terrain LOD ---QuadTree
- OGRE 手动LOD(Levels of Detail)多层次细节
- 转载+原创 OGRE lod 技术的使用,LOD模型生成
- 【笔记】OGRE改变LOD的函数
- Ogre Lod的一个bug及其修改
- OGRE lod 技术的使用,LOD模型生成及手动设置LOD级别
- OGRE - Terrain Shadow ,整合OGRE的地形和PSSM+LiSPSM阴影算法
- Ogre代码学习之1——Ogre中地形lod的基础:deltaHeight的计算
- LOD层次细节算法-大规模实时地形的绘制
- LOD层次细节算法-大规模实时地形的绘制
- Unity关于层级细节(LOD)的使用
- Unity关于层级细节(LOD)的使用
- Unity关于层级细节(LOD)的使用
- ogre实现加入物理效果terrain
- ogre实现加入物理效果terrain
- OGRE高度图创建Terrain地形流程
- dom总结
- C# 16进制转换10进制相关函数详解
- 拍照必备-POCO相机
- Ruby 之简介
- CentOS安装中文汉字输入法ibus
- Ogre中的Terrain的Lod细节
- ”USB Device not Recognized" 问题
- 使用WebSphereMQ
- 利用堆栈解决大数相加问题
- Web框架之Struts1
- pmon makefile分析
- Apache Modules Book 阅读笔记 (一)
- C#对数据库各种操作
- [Linux] 刚学习shell,碰到问题.执行时总出错:unexpected operator(转载)