osg如何更改一个模型
比如说我建立了一个圆柱,想最后实现圆柱尺寸变化的动画。想用更新回调来做,回调函数里该怎样写? 附上我的代码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;
} 好吧,刚才的代码是造一个球体,那该怎么改变球的直接呢? 这是我写的代码,为什么得不到想要的结果?
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;
}; 出了想要的结果,附上源码
#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;
} 你这个解决方式很奇特呀,如果是个简模软件创建的复杂模型,你也打算自己用程序写一遍吗?
注:去看下MatrixTransform吧
页:
[1]