|
本帖最后由 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) 也会影响孩子节点。
部分代码如下:
- osg::ref_ptr<osg::Geode> genode = new osg::Geode;
- //depth-range
- osgText::Font* fontHei= osgText::readFontFile("Fonts/simhei.ttf");
- osg::ref_ptr<osgText::Text> depthText = new osgText::Text;
- //setupTextProperties(*depthText,fontHei,size, color,position,osgText::Text::XZ_PLANE);
- depthText->setFont(fontHei);
- depthText->setCharacterSize(size);
- depthText->setColor(color);
- double depthRangeStart = (this->m_startDepth+this->m_endDepth)/2.0-this->clipDistance;
- double depthRangeEnd = (this->m_startDepth+this->m_endDepth)/2.0+this->clipDistance;
- std::ostringstream ss; // 将数值类型转换为string
- ss << "Depth Range:"<<depthRangeStart<< "--"<<depthRangeEnd <<endl
- <<"Total Depth:" <<this->m_startDepth<< "--"<<this->m_endDepth ;
- std::string stringT(ss.str());
- depthText->setText(stringT.c_str());
- genode->addDrawable(depthText.get());
- depthText->setDataVariance(osg::Object::DYNAMIC); //必须设置成动态的
- depthText->setUpdateCallback(new DepthInfoCallback(this)); //文字信息随漫游
复制代码 |
|