fkd916 发表于 2015-12-7 21:26:28

osg如何更改一个模型

比如说我建立了一个圆柱,想最后实现圆柱尺寸变化的动画。想用更新回调来做,回调函数里该怎样写?

fkd916 发表于 2015-12-7 21:45:44

附上我的代码
class mycallback:public osg::NodeCallback
{
public:
        mycallback(){};
        ~mycallback(){};
        virtual void operator()(osg::Node*node,osg::NodeVisitor* nv)
        {
                //这里该写什么
        }
};
int main()
{
        osg::Group* root=new osg::Group;
        osgViewer::Viewer viewer;
        osg::Geode* geode=new osg::Geode;
        geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0.0f,0.0f,0.0f),3)));
        viewer.setSceneData(root);
        root->addChild(geode);
        viewer.realize();
        viewer.run();
        return 0;
}

fkd916 发表于 2015-12-7 21:51:56

好吧,刚才的代码是造一个球体,那该怎么改变球的直接呢?

fkd916 发表于 2015-12-7 22:19:11

这是我写的代码,为什么得不到想要的结果?
class mycallback:public osg::NodeCallback
{
public:
        mycallback()
        {
                i=1;
        };
        ~mycallback(){};
        virtual void operator()(osg::Node*node,osg::NodeVisitor* nv)
        {
                osg::Geode* g1=dynamic_cast<osg::Geode*>(node);
                g1->setDrawable(0,new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0.0f,0.0f,0.0f),i)));
                i=i*2;
        }
protected:
        float i;
};

fkd916 发表于 2015-12-7 22:25:31

出了想要的结果,附上源码
#include "osg/Node"
#include "osg/Drawable"
#include "osgViewer/Viewer"
#include "osgDB/ReadFile"
#include "osg/Geode"
#include "osg/Group"
#include "osg/ShapeDrawable"
#include <stdio.h>
class mycallback:public osg::NodeCallback
{
public:
        mycallback()
        {
                i=1;
        };
        ~mycallback(){};
        virtual void operator()(osg::Node*node,osg::NodeVisitor* nv)
        {
                osg::Geode* g1=dynamic_cast<osg::Geode*>(node);
                g1->setDrawable(0,new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0.0f,0.0f,0.0f),i)));
                i=i+0.01;
        }
protected:
        float i;
};
int main()
{
        osg::Group* root1=new osg::Group;
        osgViewer::Viewer viewer;
        osg::Geode* geode=new osg::Geode;
        geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0.0f,0.0f,0.0f),3)));
        viewer.setSceneData(root1);
        root1->addChild(geode);
        mycallback* cb=new mycallback;
        geode->setUpdateCallback(cb);
        viewer.realize();
        viewer.run();
        //cout<<
        return 0;
}

不痛o就一下 发表于 2015-12-8 22:05:43

你这个解决方式很奇特呀,如果是个简模软件创建的复杂模型,你也打算自己用程序写一遍吗?

注:去看下MatrixTransform吧
页: [1]
查看完整版本: osg如何更改一个模型