osgAnimation.TemplateSphericalLinearInterpolator
是OpenSceneGraph的osgAnimation库中的一个类,用于在曲面上进行线性插值。
通常情况下,如果在曲面上插值两点之间的路径,那么是需要走曲面上的正常方向的。在某些场景中,为了让插值路径更加自然,我们需要保持一个恒定的方向,这个时候我们就需要使用 TemplateSphericalLinearInterpolator
。
TemplateSphericalLinearInterpolator();
TemplateSphericalLinearInterpolator(const TemplateSphericalLinearInterpolator& interpolator,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
TemplateSphericalLinearInterpolator(const osg::Vec3d& base, const osg::Vec3d& startDir,const osg::Vec3d& target,const osg::Vec3d& targetDir);
template<class T> void interpolate(double t, T& value)
通过传入的参数t来进行插值计算,最终结果会返回给value中。
inline void setBase(const osg::Vec3d& b)
设置起点 base 坐标。
inline const osg::Vec3d& getBase() const
获取起点 base 坐标。
inline void setStartDirection(const osg::Vec3d& startDir)
设置起点方向。
inline const osg::Vec3d& getStartDirection() const
获取起点方向。
inline void setTarget(const osg::Vec3d& target)
设置终点坐标。
inline const osg::Vec3d& getTarget() const
获取终点坐标。
inline void setTargetDirection(const osg::Vec3d& targetDir)
设置终点方向。
inline const osg::Vec3d& getTargetDirection() const
获取终点方向。
osg::ref_ptr<osgAnimation::TemplateSphericalLinearInterpolator> inter =
new osgAnimation::TemplateSphericalLinearInterpolator();
inter->setBase( osg::Vec3d( 100, 100, 0 ) ); // 设置起点
inter->setStartDirection( osg::Vec3d( 0, 0, 1 ) ); // 设置起点方向
inter->setTarget( osg::Vec3d( 100, 150, 0 ) ); // 设置终点
inter->setTargetDirection( osg::Vec3d( 0, 0, 1 ) ); // 设置终点方向
osg::Vec3d value;
inter->interpolate( 0.5, value ); // 在曲面上进行线性插值