查看: 831|回复: 1

怎么实现节点见同步渲染问题

[复制链接]

该用户从未签到

发表于 2010-12-6 16:44:59 | 显示全部楼层 |阅读模式
class TextCallBack: public osg::NodeCallback {
public:
        TextCallBack(osgText::Text *text)
        {
                    ..................................
                }
        virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
        {       
                             ..............................................
                traverse(node,nv);
        }
protected:
        .......................
};

class ImageCallBack : public osg::NodeCallback
{
public:
        ImageCallBack(osg::Image* image):{
                ..............        }
        virtual void operator()(osg::Node* node,osg::NodeVisitor* nv){
                .....................................
                traverse(node,nv);
        }
protected:
        ......................
};
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
        osg::ref_ptr <osg::Group> root = new osg::Group;
        //#################
        osg::ref_ptr <osg::Image> image = new osg::Image;
        osg::ref_ptr <osg::Geode> geode_image = new osg::Geode;
        osg::ref_ptr <osg::StateSet> stateset = new osg::StateSet();
        osg::ref_ptr <osg::Texture2D> texture = new osg::Texture2D;
        texture->setImage(image.get());
        texture->setDataVariance(osg::Object:YNAMIC);
        stateset->setTextureAttributeAndModes(0, texture.get(), osg::StateAttribute::ON);
        geode_image->addDrawable(osg::createTexturedQuadGeometry(osg::Vec3(0.0f,0.0f,0.0), osg::Vec3(1.0f,0.0f,0.0), osg::Vec3(0.0f,0.0f,1.0f)));
        geode_image->setStateSet(stateset.get());
        geode_image->setUpdateCallback(new ImageCallBack(image));
        //################
        osg::ref_ptr<osg::Geode> geode_text = new osg::Geode;
        osg::ref_ptr<osgText::Text> text = new osgText::Text;
        osg::ref_ptr<osgText::Font> font = osgText::readFontFile("fonts/times.ttf");
        text->setFont(font.get());
        text->setText("http://www.OsgChina.org");
        text->setPosition(osg::Vec3(1.0f,6.0f,0.0f));
        text->setCharacterSize(1.0f);
        text->setColor(osg::Vec4(1.0f,0.0f,0.0f,1.0f));
        text->setLayout(osgText::Text:EFT_TO_RIGHT);
        text->setDataVariance(osg::Object::DYNAMIC);
        geode_text->addDrawable(text);
               osg::ref_ptr<osg::MatrixTransform> matrixtran = new osg::MatrixTransform;
              osg::Matrix matrix;
              matrix.makeRotate(1.0,osg::Vec3(1.0f,0.0f,0.0f));
               matrixtran->setMatrix(matrix);
               matrixtran->addChild(geode_text);
               geode_text->setUpdateCallback(new TextCallBack(text));
    //###############
        root->addChild(matrixtran);
        root->addChild(geode_image.get());
        viewer->setSceneData(root.get());
        viewer->setUpViewInWindow(0, 0, 800, 800);
        viewer->realize();
        viewer->run();
        return 0;
}
我是想实现文字和图片同步更新 文字和图片的数量是相同 但是文字总是先完成更新 怎么让它们同步更新

该用户从未签到

 楼主| 发表于 2010-12-6 17:36:57 | 显示全部楼层
自己回复下 是代码的写错了 在回调中多++了一次
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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