查看: 1632|回复: 3

由一张图讨论osg计算频率的方式

[复制链接]

该用户从未签到

发表于 2009-5-20 16:03:56 | 显示全部楼层 |阅读模式
从图中可以看出,更新、时间、筛选、绘制的时间都很短,但是瞬时频率却只有37.78,为什么呢?而且图中采用的是单线程,即默认的是但线程,如何能设置为多线程呢?(这已经找到方法
  1. myviewer.setThreadingModel(osgViewer::ViewerBase::CullDrawThreadPerContext);
复制代码
),采用了这种线程方式,帧频率并没有提高多少。当然我的电脑比较老土,还是单核的。

若采用背部筛选则能够显著提高帧频率。

对节点做如下处理后,又重现之前出现的问题,即帧频率逐渐由高到低下降:

1.帧频率比较高时的节点结构
                                       root(Group)
                                     /    ..............      \
                     pagedLod  ..............      pagedLod
                       /      ......  \  .............     /     ......    \
             child_1        child_n              child_1    child_n
这种情况下绘制的频率就会很高而且很稳定,在有背部剔除的情况下,帧频率能够接近120到170之间
--------------------------------------------------------------------------------------------------------
2.帧频率开始比较高但几秒后会降的非常快
                                       root(Switch)
                                   /    ..............      \
                     pagedLod  ..............      pagedLod
              /      ......  \       .............             / ......  \
             child_1        child_n              child_1    child_n
这种情况下,启示绘制的帧频率能够和情况1相近,但是几秒后,速度会明显下降,只能为情况1的1/2到1/3,但不会出现帧频率逐渐下降的情况
---------------------------------------------------------------------------------------------------------
3.开始帧频率就很低只有90左右,之后会出现逐渐下降的问题直到十几左右稳定
                                       root(Group)
                                   /    ..............      \                      \
                     pagedLod  ..............      pagedLod         Group
              /      ......  \  .............                    / ......  \            \
             child_1        child_n              child_1    child_n    osgText
这种情况的帧速率会出现逐渐下降的情况,同时会发现场景中绘制的顶点点逐渐增加,远远超过模型实际具有的顶点总数
---------------------------------------------------------------------------------------------------------

4.开始帧频率就很低只有90左右,之后会出现逐渐下降的问题直到十几左右稳定,帧频率下降速度比情况3快的多
                                       root(Group)
                                     /    ..............      \                    \
                     pagedLod  ..............      pagedLod         pagedLod
                       /      ......  \  .............      / ......  \                  \
             child_1        child_n              child_1    child_n    osgText
这种情况的帧速率会出现逐渐下降的情况,同时会发现场景中绘制的顶点点逐渐增加,远远超过模型实际具有的顶点总数
---------------------------------------------------------------------------------------------------------


通过上面四种情况,可以得出,若有pagedLod节点,则在(1)该层中不能有其他类型的节点如Group(情况3);(2)该层节点都为pagedLod时其子节点也要相同,如(情况4);(3)本层的父节点不能是Switch类型(情况1,2)。若出现这三种之一,则帧频率会很不稳定,甚至出现绘制顶点数比模型顶点多的多的情况,不知为何会出现这种情况?很诡异

对于要显示的文字 我觉得可以参照StatsHandler.cpp 的方法,而其他类型的节点 应该也可以借鉴这样的方式吧

[ 本帖最后由 ghczhaolei 于 2009-5-20 19:44 编辑 ]
频率.png

该用户从未签到

发表于 2009-5-20 20:43:13 | 显示全部楼层
我不太同意您上图中的各项分析结果。我个人的意见是程序开发不存在“诡异”的事情,万事皆有因;况且我在使用PagedLOD节点的过程中从未遇到过此类限制;从源代码级别去分析和考虑,也不应当存在这种情形(PagedLOD的动态调度由DatabasePager决定,与其它同级或父一级节点无关)。不知是否您的程序版本比较旧以致某些功能不够完善,不妨换用新的版本再看看效果?

该用户从未签到

 楼主| 发表于 2009-5-20 20:52:11 | 显示全部楼层

回复 2楼 的帖子

呵呵 我也觉得这不该是OSG该出现的问题,也许是其它方面的原因,争取早点找到

该用户从未签到

 楼主| 发表于 2009-5-20 22:31:40 | 显示全部楼层

回复 2楼 的帖子

array出现问题的原因终于找到了,罪魁祸首是文字显示,我发现每减少一种类型的文字显示,频率就能提高一些,当只有显示频率的文字时,帧频率可以达到190左右,而现实所有文字,则只能维持60多,如果再加上我自己的加上的文字则只能达到20多帧。感谢您这几天对我发帖子的关注,谢谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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