Ogre中的Terrain的Lod细节

 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

pic_1

图一.我理解的一种示例

图一示例,当地图的所需的各个参数定好后的大概地形四叉树的结构。图中所示,拥有顶点数据的树的层为第一层和第二层。可以得出第二层每个节点拥有的顶点个数,nSize = (mSize-1) / 2^(2-1), nBaseVer = nSize^2,且第二层所拥有的顶点信息被第三层和第四层共享,由于在OGRE中的地形使用skirt技术来避免Lod所带来的缝隙,所以顶点个数需要额外加上skirt的因素。nSkirtVer = (2^nOwnTree + 1)*nSize,其中(nOwnTree为共享顶点的层数 - 1,此处为2),由此,则可以得出第二层中的每个节点所拥有的顶点个数为nVertexNum =nBaseVer + nSkirtVer。

pic_2

图二.OGRE中的解释示例

OGRE中,在顶点数据节点中,会创建两种vertexbuffer

pic_3

图三.程序中创建两个顶点缓冲

不是很了解这个deltabuff的作用。暂时忽略这个吧。

 

 

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值