查看: 2786|回复: 10

PagedLOD

[复制链接]

该用户从未签到

发表于 2009-6-5 15:52:16 | 显示全部楼层 |阅读模式
请教大家一个问题,自己试验了好多,还是搞不懂。
PagedLOD 中的center 与Radius 有什么关系啊? 还有setRange中的min与max指的是视点与模型中心的距离还是与PagedLOD 的center 的距离啊?如何在一个PagedLOD 下实现模型随视点动态调度啊?请高手指点啊!谢谢了!

该用户从未签到

发表于 2009-6-5 16:08:40 | 显示全部楼层
熟悉LOD技术的概念,以及阅读一下osg:: LOD类的源代码会对您的理解有很大帮助。
对于一个复杂模型,我们可以设置它有不同的细节层次;并且当视点与模型的距离在某个范围内的时候,显示某一细节层次的模型。针对每一细节层次所设置的min和max指的就是这个范围。

对于LOD来说,它的所有子节点(也就是各个细节层次)的中心点应当都是一样的,这在建模的时候应当就已经保证。因此“视点与模型中心的距离”和“视点与PagedLOD 的center 的距离”是一样的。而OSG的LOD类还允许用户自定义LOD的包围球(可以并非模型的实际包围球),以实现更灵活的控制,所需的定义参数就是setCenter和setRadius。

至于动态调度,一般我们会使用PagedLOD::setFileName来设置需要动态调度的子节点,并交由osg内部使用DatabasePager来实现调度。具体可以参看《最长的一帧》的相关内容

该用户从未签到

 楼主| 发表于 2009-6-5 17:09:15 | 显示全部楼层
谢谢Array老大了,那是不是osg:: LOD中的setFileName(0..),setFileName(1..),setFileName(2..)...只是将Lod中的各细节层次提取成单独的文件并实现动态加载删除的一种Lod效果,可以这样理解吗?看来我之前对osg:: LOD偏差很大啊!那如果setFileName(0..),setFileName(1..),setFileName(2..)...下加载的模型中心坐标不同,能否实现调度的效果啊?我中午做了个实验,就是想动态的根据视点去动态修改osg:: LOD的中心坐标,以便实现调度的效果,结果连lod的效果也没了,请问Array老大这样可行吗?

该用户从未签到

 楼主| 发表于 2009-6-5 17:12:16 | 显示全部楼层
麻烦老大帮忙分析分析吧,谢谢了!

该用户从未签到

 楼主| 发表于 2009-6-5 17:17:08 | 显示全部楼层
对了老大,您说的“使用PagedLOD::setFileName来设置需要动态调度的子节点,并交由osg内部使用DatabasePager来实现调度。”那就是说所有需要调度的对象都得加入到一个PagedLOD下,那对于大场景分块调度,需要调度的模型数目非常多的话,会不会非常影响调度效率和速度啊?

该用户从未签到

 楼主| 发表于 2009-6-5 17:20:44 | 显示全部楼层
谢谢simbaforrest,那么能否动态修改PagedLOD结点中的center,然后让它根据新的center去重新计算应该添加删除的模型文件啊?

该用户从未签到

 楼主| 发表于 2009-6-5 17:30:04 | 显示全部楼层
呵呵……不好意思啊,表达错了,我的意思就是要把每个需要调度的模型文件都得分别加到一个PagedLOD,但这样的话PagedLOD会非常的多。老大的《最长的一帧》里好像说PagedLOD太多会影响计算速度。simbaforrest兄有何高见啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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