27 #ifndef _ShaderExDualQuaternionSkinning_
28 #define _ShaderExDualQuaternionSkinning_
32 #ifdef RTSHADER_SYSTEM_BUILD_EXT_SHADERS
48 #define SGX_LIB_DUAL_QUATERNION "SGXLib_DualQuaternion"
49 #define SGX_FUNC_BLEND_WEIGHT "SGX_BlendWeight"
50 #define SGX_FUNC_ANTIPODALITY_ADJUSTMENT "SGX_AntipodalityAdjustment"
51 #define SGX_FUNC_CALCULATE_BLEND_POSITION "SGX_CalculateBlendPosition"
52 #define SGX_FUNC_CALCULATE_BLEND_NORMAL "SGX_CalculateBlendNormal"
53 #define SGX_FUNC_NORMALIZE_DUAL_QUATERNION "SGX_NormalizeDualQuaternion"
54 #define SGX_FUNC_ADJOINT_TRANSPOSE_MATRIX "SGX_AdjointTransposeMatrix"
55 #define SGX_FUNC_BUILD_DUAL_QUATERNION_MATRIX "SGX_BuildDualQuaternionMatrix"
61 class _OgreRTSSExport DualQuaternionSkinning :
public HardwareSkinningTechnique
66 DualQuaternionSkinning();
71 virtual bool resolveParameters(ProgramSet* programSet);
76 virtual bool resolveDependencies(ProgramSet* programSet);
81 virtual bool addFunctionInvocations(ProgramSet* programSet);
86 void addPositionCalculations(Function* vsMain,
int& funcCounter);
89 void adjustForCorrectAntipodality(Function* vsMain,
int index,
int& funcCounter,
const ParameterPtr& pTempWorldMatrix);
95 void addIndexedPositionWeight(Function* vsMain,
int index,
ParameterPtr& pWorldMatrix,
99 void addNormalRelatedCalculations(Function* vsMain,
124 #endif // RTSHADER_SYSTEM_BUILD_EXT_SHADERS
125 #endif // _ShaderExDualQuaternionSkinning_