Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2014
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. #include "skinning.h"
  2.  
  3. void skinnedObject::Update()
  4. {
  5. for(U32 bone=0;bone<sMatrices.size();bone++)
  6. {
  7. sMatrices[bone] = sPoseMatrices[bone] * (*sBones[bone]->GetWorldFull());
  8. }
  9.  
  10. for(U8 i=0;i<nulledBoneIDs.size();i++)
  11. {
  12. U32 bone = nulledBoneIDs[i];
  13. float4 scl = sBones[bone]->transform.GetScl();
  14. sBones[bone]->transform.SetScl(float4::Zero);
  15. sMatrices[bone] = sPoseMatrices[bone] * (*sBones[bone]->GetWorldFull());
  16. sBones[bone]->transform.SetScl(scl);
  17. }
  18. }
  19.  
  20. void skinnedObject::Create(const char* fname,entityCompound& e,FXShader* shd)
  21. {
  22. mfile f;
  23. IFS->Load(f,fname);
  24. U32 numBones = f.ReadElem<U32>();
  25. sMatrices.reserve(numBones);
  26. sPoseMatrices.reserve(numBones);
  27. sBones.reserve(numBones);
  28.  
  29. /*bool bMode = false;
  30. for(U32 i=0;i<e.GetNumEntities();i++)
  31. {
  32. if (e.GetNode(i)->GetName().c_str() == string("klev_src01")) bMode = true;
  33. }*/
  34.  
  35. for(U32 bone=0;bone<numBones;bone++)
  36. {
  37. sMatrices.push_back_empty();
  38. sPoseMatrices.push_back_empty();
  39. sBones.push_back_empty();
  40.  
  41. string name = f.ReadString();
  42. sBones[bone] = e.FindGeom(name.c_str());
  43.  
  44. sBones[bone]->GetWorldFull()->Inverse(sPoseMatrices[bone]);
  45. sPoseMatrices[bone] = (*e.FindGeom("base")->GetWorldFull()) * sPoseMatrices[bone];
  46. }
  47.  
  48. shd->Set("worldMatrixArray",&sMatrices[0],numBones);
  49.  
  50. nulledBoneIDs.reserve(1);
  51. }
  52.  
  53. void skinnedObject::NullBone(sceneNode* n)
  54. {
  55. for(U32 bone=0;bone<sMatrices.size();bone++)
  56. {
  57. if (sBones[bone]==n)
  58. {
  59. nulledBoneIDs.push_back(bone);
  60. }
  61. }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement