查看: 1373|回复: 4

updateCallback 与osg::Object::DYNAMIC

[复制链接]

该用户从未签到

发表于 2014-8-19 09:55:09 | 显示全部楼层 |阅读模式
本帖最后由 rubby 于 2014-8-19 10:40 编辑

各位大哥:

我创建的一个HUD,它里面显示的文字可以动态变化。
如果我在callback中变化文字,还需要 setDataVariance(osg::Object:YNAMIC)吗?

也即下面两行代码中第一行是必须的吗?
        depthText->setDataVariance(osg::Object::DYNAMIC);                        //必须设置成动态的
        depthText->setUpdateCallback(new DepthInfoCallback(this));        //文字信息随漫游

多谢诸位。

另外:如果不需要第一行,是因为updatecallback中会将depthText设置为dynamic?
还是这两行是不同的更新方法?使用其一即可。
因为我发现 setDataVariance(osg::Object::DYNAMIC);导致绘制效率降低了。

那么,将depthText->setDataVariance(osg::Object::DYNAMIC);        这行代码移除,仅仅保留depthText->setUpdateCallback(new DepthInfoCallback(this));,程序的绘制效率会提高吗? 还是无论是否移除第一行,代码执行效率都一样。

setDataVariance(osg::Object::DYNAMIC) 也会影响孩子节点。


部分代码如下:


  1.         osg::ref_ptr<osg::Geode> genode = new osg::Geode;

  2.         //depth-range
  3.         osgText::Font* fontHei= osgText::readFontFile("Fonts/simhei.ttf");
  4.         osg::ref_ptr<osgText::Text> depthText = new osgText::Text;
  5.         //setupTextProperties(*depthText,fontHei,size, color,position,osgText::Text::XZ_PLANE);
  6.         depthText->setFont(fontHei);
  7.         depthText->setCharacterSize(size);       
  8.         depthText->setColor(color);
  9.         double depthRangeStart = (this->m_startDepth+this->m_endDepth)/2.0-this->clipDistance;
  10.         double depthRangeEnd = (this->m_startDepth+this->m_endDepth)/2.0+this->clipDistance;

  11.         std::ostringstream ss;        // 将数值类型转换为string
  12.         ss << "Depth Range:"<<depthRangeStart<< "--"<<depthRangeEnd <<endl
  13.                 <<"Total Depth:" <<this->m_startDepth<< "--"<<this->m_endDepth ;       
  14.         std::string stringT(ss.str());

  15.         depthText->setText(stringT.c_str());
  16.         genode->addDrawable(depthText.get());       
  17.         depthText->setDataVariance(osg::Object::DYNAMIC);                        //必须设置成动态的
  18.         depthText->setUpdateCallback(new DepthInfoCallback(this));        //文字信息随漫游
复制代码

该用户从未签到

发表于 2014-8-20 10:26:39 | 显示全部楼层
这和硬件绘制相关,dynamic会放置在更新数据存在的区域,效率降低是必然的,但只要数据量不是过于庞大,相信这个设置不会对对效率起到根本性影响

该用户从未签到

发表于 2014-8-20 17:47:36 | 显示全部楼层
真正的含义看最长的一帧吧,这个与线程模式有关,用于防止当前绘制过程和下一帧的刷新过程更改问题而设置的标志

该用户从未签到

 楼主| 发表于 2014-8-20 22:08:38 | 显示全部楼层
gis_wudi 发表于 2014-8-20 10:26
这和硬件绘制相关,dynamic会放置在更新数据存在的区域,效率降低是必然的,但只要数据量不是过于庞大,相信这 ...

多谢~

该用户从未签到

 楼主| 发表于 2014-8-20 22:08:49 | 显示全部楼层
fenma3422 发表于 2014-8-20 17:47
真正的含义看最长的一帧吧,这个与线程模式有关,用于防止当前绘制过程和下一帧的刷新过程更改问题而设置的 ...

多谢你~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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