|
从图中可以看出,更新、时间、筛选、绘制的时间都很短,但是瞬时频率却只有37.78,为什么呢?而且图中采用的是单线程,即默认的是但线程,如何能设置为多线程呢?(这已经找到方法- 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 编辑 ] |
-
|