查看: 2048|回复: 10

PagedLOD如何使用setFileName()函数?

[复制链接]

该用户从未签到

发表于 2013-5-21 22:54:03 | 显示全部楼层 |阅读模式
最近在研究osgEarth2.4的代码,发现其使用了如下代码实现地形数据的动态调度:
PagedLOD* plod = new PagedLOD;
plod->addChild(0, pTileNode);
plod->setFileName(1, "..........");

说明:这里pTileNode并不是真正可见的图元,只有setFileName(1, "........") 中的数据才是真正需要读取并绘制的刺出使用这种做法是什么用意呢?

该用户从未签到

发表于 2013-5-22 07:50:57 | 显示全部楼层
addChild 是要直接显示的那个 看一下PageLod的src 就可以知道了

该用户从未签到

发表于 2013-5-22 16:15:07 | 显示全部楼层
pTileNode是0级的节点,对于LOD而言就是远处时才可见的粗糙层级;精细级别则是1级,加载时读取一个文件
动态加卸载意味着当对象脱离视野后会被剔除出场景,然后再次进入视野会重新加载它。那么这里设置的文件名就是要重新加载的数据文件

该用户从未签到

 楼主| 发表于 2013-6-8 22:55:43 | 显示全部楼层
那为什么又设置了plod->setRange(0, minRange, FLT_MAX)? 为什么使用FLT_MAX作为最大可见距离?难道说粗糙级别得字节点始终可见吗?

该用户从未签到

发表于 2013-6-9 08:50:27 | 显示全部楼层
plod->setRange(0, minRange, FLT_MAX)
这句话的意思是在minRange和FLT_MAX之间显示第零级的模型  

该用户从未签到

 楼主| 发表于 2013-6-9 10:38:13 | 显示全部楼层
谢谢楼上这位,这个函数的意思我明白,我的问题是难道要在无穷远处就开始显示第0级模型吗?这可是地形数据呀!而且每个LOD级别的地形块都是如此设置,晕!

该用户从未签到

发表于 2013-6-9 11:40:29 | 显示全部楼层
并不是这样  你可以看下pagedlod的源码
假设第0级别的模型调用第1级别的模型  第1级别的模型调用第2级别的模型
pagelod0->setRange(0,range0,max);
pagelod0->setRange(1,0,range0);
pagelod0->setfilename(1,filename1);

pagelod1->setRange(0,range1,max);
pagelod1->setRange(1,0,range1);
pagelod1->setfilename(1,filename2);
在视距大于range0的时候  只会渲染pagelod0第0级别的模型  只有在视距小于range0的时候  才会去请求filename1的文件   进而才会先渲染filename1中第0级别的模型  在无穷远的地方只会渲染顶级的第0级别的模型   

该用户从未签到

发表于 2013-6-9 14:00:34 | 显示全部楼层
无穷远处 就可以忽略了 随便一个简单的几何体就可以了

该用户从未签到

 楼主| 发表于 2013-6-9 21:11:39 | 显示全部楼层
感谢zhufu0208的耐心解答!还有一点不太明白,“在视距大于range0的时候 ,只会渲染pagelod0第0级别的模型“,您的这句应该也适用于pagedlod1呀,为什么它不参与渲染呢?因为它的Range也满足视距条件呀!

该用户从未签到

发表于 2013-6-13 21:51:50 | 显示全部楼层
先判断是否满足range1,如果是则渲染level1;否则再看是否满足range0,如果是则渲染level0
这个逻辑没有什么难理解的吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表