1 #ifndef COMPONENTS_NIFOSG_CONTROLLER_H
2 #define COMPONENTS_NIFOSG_CONTROLLER_H
15 #include <osg/Texture2D>
16 #include <osg/ref_ptr>
18 #include <osg/StateSet>
19 #include <osg/NodeCallback>
20 #include <osg/Drawable>
38 template <
typename MapT,
typename InterpolationFunc>
42 typedef typename MapT::ValueType
ValueT;
65 const typename MapT::MapType & keys =
mKeys->mKeys;
67 if(time <= keys.begin()->first)
68 return keys.begin()->second.mValue;
72 typename MapT::MapType::const_iterator it =
mLastHighKey;
83 it = keys.lower_bound(time);
86 it = keys.lower_bound(time);
91 float aTime = it->first;
92 const typename MapT::KeyType* aKey = &it->second;
97 typename MapT::MapType::const_iterator last = --it;
99 float aLastTime = last->first;
100 const typename MapT::KeyType* aLastKey = &last->second;
102 float a = (time - aLastTime) / (aTime - aLastTime);
104 return InterpolationFunc()(aLastKey->mValue, aKey->mValue, a);
107 return keys.rbegin()->second.mValue;
126 template <
typename ValueType>
127 inline ValueType
operator()(
const ValueType& a,
const ValueType& b,
float fraction)
129 return a + ((b - a) * fraction);
135 inline osg::Quat
operator()(
const osg::Quat& a,
const osg::Quat& b,
float fraction)
138 result.slerp(fraction, a, b);
180 virtual
void update(osg::NodeVisitor* nv, osg::Drawable* drawable);
195 virtual osg::Vec3f getTranslation(
float time)
const;
197 virtual void operator() (osg::Node*, osg::NodeVisitor*);
209 osg::Quat getXYZRotation(
float time)
const;
221 virtual void setDefaults(osg::StateSet* stateset);
222 virtual void apply(osg::StateSet *stateset, osg::NodeVisitor *nv);
235 std::vector<Nif::NiVisData::VisData>
mData;
237 bool calculate(
float time)
const;
246 virtual
void operator() (osg::Node* node, osg::NodeVisitor* nv);
259 virtual void setDefaults(osg::StateSet* stateset);
261 virtual void apply(osg::StateSet* stateset, osg::NodeVisitor* nv);
278 virtual
void setDefaults(osg::StateSet* stateset);
280 virtual
void apply(osg::StateSet* stateset, osg::NodeVisitor* nv);
292 FlipController(
int texSlot,
float delta,
const std::vector<osg::ref_ptr<osg::Texture2D> >& textures);
298 std::vector<osg::ref_ptr<osg::Texture2D> >& getTextures() {
return mTextures; }
300 virtual void apply(osg::StateSet *stateset, osg::NodeVisitor *nv);
312 virtual
void operator() (osg::Node* node, osg::NodeVisitor* nv);
ExtrapolationMode mExtrapolationMode
Definition: controller.hpp:160
FloatInterpolator mYRotations
Definition: controller.hpp:203
void copy(const btTransform &src, Nif::Transformation &dst)
Definition: testbulletnifloader.cpp:269
GeomMorpherController()
Definition: controller.cpp:171
META_Object(NifOsg, FlipController) std
Definition: controller.hpp:296
float mPhase
Definition: controller.hpp:151
Definition: controller.hpp:303
ValueInterpolator()
Definition: controller.hpp:44
ControllerFunction(const Nif::Controller *ctrl)
Definition: controller.cpp:19
Implements efficient per-frame updating of StateSets.
Definition: statesetupdater.hpp:19
Definition: controller.hpp:158
Definition: controller.hpp:156
Definition: controller.hpp:32
float mFrequency
Definition: controller.hpp:150
MapT::ValueType ValueT
Definition: controller.hpp:42
ValueInterpolator< Nif::FloatKeyMap, LerpFunc > FloatInterpolator
Definition: controller.hpp:144
bool empty() const
Definition: controller.hpp:110
float mDelta
Definition: controller.hpp:287
Definition: controller.hpp:124
Definition: controller.hpp:147
Definition: controller.hpp:283
Definition: controller.hpp:232
MapT::MapType::const_iterator mLastLowKey
Definition: controller.hpp:116
std::vector< Nif::NiVisData::VisData > mData
Definition: controller.hpp:235
FloatInterpolator mUScale
Definition: controller.hpp:227
Vec3Interpolator mData
Definition: controller.hpp:269
ValueInterpolator(std::shared_ptr< const MapT > keys, ValueT defaultVal=ValueT())
Definition: controller.hpp:49
Controller()
Definition: controller.cpp:16
ValueT mDefaultVal
Definition: controller.hpp:121
std::shared_ptr< const MapT > mKeys
Definition: controller.hpp:119
Definition: controller.hpp:37
FloatInterpolator mScales
Definition: controller.hpp:207
Definition: controller.hpp:186
FloatInterpolator mData
Definition: controller.hpp:252
std::vector< FloatInterpolator > mKeyFrames
Definition: controller.hpp:178
Definition: controller.hpp:39
FloatInterpolator mXRotations
Definition: controller.hpp:202
Definition: controller.hpp:249
Definition: controller.hpp:212
osg::Quat operator()(const osg::Quat &a, const osg::Quat &b, float fraction)
Definition: controller.hpp:135
std::vector< osg::ref_ptr< osg::Texture2D > > mTextures
Definition: controller.hpp:288
FloatInterpolator mVScale
Definition: controller.hpp:228
int mTexSlot
Definition: controller.hpp:286
ExtrapolationMode
Definition: controller.hpp:154
Definition: controller.hpp:133
Vec3Interpolator mTranslations
Definition: controller.hpp:206
Definition: controller.hpp:157
ValueInterpolator< Nif::Vector3KeyMap, LerpFunc > Vec3Interpolator
Definition: controller.hpp:145
FloatInterpolator mZRotations
Definition: controller.hpp:204
ValueType operator()(const ValueType &a, const ValueType &b, float fraction)
Definition: controller.hpp:127
FloatInterpolator mUTrans
Definition: controller.hpp:225
Definition: controller.hpp:25
float mStartTime
Definition: controller.hpp:152
ValueT interpKey(float time) const
Definition: controller.hpp:60
QuaternionInterpolator mRotations
Definition: controller.hpp:200
FloatInterpolator mVTrans
Definition: controller.hpp:226
float mStopTime
Definition: controller.hpp:153
virtual float getMaximum() const
Definition: controller.cpp:65
std::set< int > mTextureUnits
Definition: controller.hpp:229
Must be set on a SceneUtil::MorphGeometry.
Definition: controller.hpp:171
Definition: controller.hpp:156
float calculate(float value) const
Definition: controller.cpp:28
Definition: controller.hpp:266
MapT::MapType::const_iterator mLastHighKey
Definition: controller.hpp:117
ValueInterpolator< Nif::QuaternionKeyMap, QuaternionSlerpFunc > QuaternionInterpolator
Definition: controller.hpp:143