00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #ifndef _FBXSDK_SCENE_ANIMATION_EVALUATOR_CLASSIC_H_
00014 #define _FBXSDK_SCENE_ANIMATION_EVALUATOR_CLASSIC_H_
00015
00016 #include <fbxsdk/fbxsdk_def.h>
00017
00018 #include <fbxsdk/core/fbxobject.h>
00019 #include <fbxsdk/scene/animation/fbxanimevaluator.h>
00020 #include <fbxsdk/scene/animation/fbxanimlayer.h>
00021
00022 #include <fbxsdk/fbxsdk_nsbegin.h>
00023
00032 class FBXSDK_DLL FbxAnimEvalClassic : public FbxAnimEvaluator
00033 {
00034 FBXSDK_OBJECT_DECLARE(FbxAnimEvalClassic, FbxAnimEvaluator);
00035
00036 public:
00038
00039
00040
00041
00042
00043
00045 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00046 protected:
00047 virtual void EvaluateNodeTransform(FbxNodeEvalState* pResult, FbxNode* pNode, FbxTime pTime, FbxAnimStack* pStack, FbxNode::EPivotSet pPivotSet, bool pApplyTarget);
00048 virtual void EvaluatePropertyValue(FbxAnimCurveNode* pResult, FbxProperty& pProperty, FbxTime pTime, FbxAnimStack* pStack);
00049
00050 private:
00051 FbxAnimEvalClassic(FbxManager& pManager, char const* pName);
00052 virtual void Destruct(bool pRecursive, bool pDependents);
00053
00054 enum EBlendType {eSimple, eRotation, eScaling};
00055
00066 void ComputeTRSLocal(FbxNodeEvalState* pResult, FbxNode* pNode, FbxTime pTime, FbxAnimStack* pStack);
00067
00081 void ComputeGlobalTransform(FbxNodeEvalState* pResult, FbxNode* pNode, FbxTime pTime, FbxAnimStack* pStack, FbxNode::EPivotSet pPivotSet, bool pApplyTarget);
00082
00096 void ComputeLocalTransform(FbxNodeEvalState* pResult, FbxNode* pNode, FbxTime pTime, FbxAnimStack* pStack, FbxNode::EPivotSet pPivotSet, bool pApplyTarget);
00097
00103 bool HasAnimationCurveNode(FbxProperty& pProperty, FbxAnimLayer* pAnimLayer);
00104
00118 void ComputeTRSAnimationLayer(FbxNodeEvalState* pResult, FbxNode* pNode, FbxVector4& pLT, FbxVector4& pLR, FbxVector4& pLS, FbxTime pTime, FbxAnimLayer* pLayer, bool pBlend);
00119
00130 void BlendPropertyEvalWithLayer(double* pResult, int pResultSize, FbxProperty& pProperty, FbxNodeEvalState* pEvalState, FbxTime pTime, FbxAnimLayer* pLayer, EBlendType pType);
00131
00142 void BlendSimple(double* pResult, int pResultSize, double* pApply, int pApplySize, double pWeight, FbxAnimLayer::EBlendMode pBlendMode);
00143
00156 void BlendRotation(double* pResult, int pResultSize, double* pApply, int pApplySize, double pWeight, FbxAnimLayer::EBlendMode pBlendMode, FbxAnimLayer::ERotationAccumulationMode pRotAccuMode, int pRotationOrder);
00157
00169 void BlendScaling(double* pResult, int pResultSize, double* pApply, int pApplySize, double pWeight, FbxAnimLayer::EBlendMode pBlendMode, FbxAnimLayer::EScaleAccumulationMode pScaleAccuMode);
00170
00171 double* mPropertyValues;
00172 int mPropertySize;
00173
00174 double* mCurveNodeEvalValues;
00175 int mCurveNodeEvalSize;
00176
00177 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00178 };
00179
00180 #include <fbxsdk/fbxsdk_nsend.h>
00181
00182 #endif