查看: 990|回复: 5

osg如何更改一个模型

[复制链接]

该用户从未签到

发表于 2015-12-7 21:26:28 | 显示全部楼层 |阅读模式
比如说我建立了一个圆柱,想最后实现圆柱尺寸变化的动画。想用更新回调来做,回调函数里该怎样写?

该用户从未签到

 楼主| 发表于 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;
}

该用户从未签到

 楼主| 发表于 2015-12-7 21:51:56 | 显示全部楼层
好吧,刚才的代码是造一个球体,那该怎么改变球的直接呢?

该用户从未签到

 楼主| 发表于 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;
};

该用户从未签到

 楼主| 发表于 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;
}

该用户从未签到

发表于 2015-12-8 22:05:43 | 显示全部楼层
你这个解决方式很奇特呀,如果是个简模软件创建的复杂模型,你也打算自己用程序写一遍吗?

注:去看下MatrixTransform吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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