osgPresentation.AnimationMaterial
是OpenSceneGraph中的一个类,它继承自osg::Material并添加了动画功能。它可以在场景中应用材质,并使材质具有动画效果。
osg::Object->osg::StateAttribute->osg::Material->osgPresentation.AnimationMaterial
osgPresentation::AnimationMaterial
包含的常用成员函数如下:
AnimationMaterial();
AnimationMaterial(const AnimationMaterial& mat,
const CopyOp& copyop = CopyOp::SHALLOW_COPY);
virtual ~AnimationMaterial();
virtual void setAnimationUpdateCallback(AnimationUpdateCallback* cb);
virtual void setAnimationDuration(double duration);
virtual double getAnimationDuration() const;
virtual void setShaderSource(const std::string& source);
virtual const std::string& getShaderSource() const;
virtual osg::ProgramPtr getOrCreateShaderProgram(osg::State& state);
AnimationMaterial();
AnimationMaterial
的构造函数。
AnimationMaterial(const AnimationMaterial& mat,
const CopyOp& copyop = CopyOp::SHALLOW_COPY);
AnimationMaterial
的拷贝构造函数。
virtual ~AnimationMaterial();
AnimationMaterial
的析构函数。
virtual void setAnimationUpdateCallback(AnimationUpdateCallback* cb);
设置材质的动画更新回调函数。
参数:
cb
:AnimationUpdateCallback
类型的指针,动画更新回调函数。virtual void setAnimationDuration(double duration);
设置材质动画的持续时间。
参数:
duration
:double
类型,动画持续时间。virtual double getAnimationDuration() const;
获取材质动画的持续时间。
返回值:double
类型,动画持续时间。
virtual void setShaderSource(const std::string& source);
设置材质的着色器源代码。
参数:
source
:std::string
类型,着色器源代码。virtual const std::string& getShaderSource() const;
获取材质的着色器源代码。
返回值:std::string
类型,着色器源代码。
virtual osg::ProgramPtr getOrCreateShaderProgram(osg::State& state);
获取或创建材质的着色器程序。
参数:
state
:osg::State
类型,场景状态。返回值:osg::ProgramPtr
类型,着色器程序的指针。
osg::ref_ptr<osgPresentation::AnimationMaterial> mat = new osgPresentation::AnimationMaterial;
mat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f));
mat->setAnimationDuration(2.0);
mat->setShaderSource("#version 330\n\
uniform float time;\n\
void main(){\n\
gl_FragColor = vec4(sin(2.0*time),cos(2.0*time),0.0,1.0);\n\
}");
osg::StateSet* stateset = new osg::StateSet();
stateset->setAttribute(mat);
osg::Node* node = osgDB::readNodeFile("model.ive");
node->setStateSet(stateset);