2
0

Joint.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * Joint.cpp
  3. */
  4. #include "Base.h"
  5. #include "Joint.h"
  6. namespace gameplay
  7. {
  8. Joint::Joint(const char* id)
  9. : Node(id), _jointMatrixDirty(true)
  10. {
  11. }
  12. Joint::~Joint()
  13. {
  14. }
  15. Joint* Joint::create(const char* id)
  16. {
  17. return new Joint(id);
  18. }
  19. Node::Type Joint::getType() const
  20. {
  21. return Node::JOINT;
  22. }
  23. void Joint::transformChanged()
  24. {
  25. Node::transformChanged();
  26. //const char* id = _id.c_str();
  27. _jointMatrixDirty = true;
  28. }
  29. void Joint::updateJointMatrix(const Matrix& bindShape, Vector4* matrixPalette)
  30. {
  31. //const char* id = _id.c_str();
  32. if (_jointMatrixDirty)
  33. {
  34. _jointMatrixDirty = false;
  35. float r = (float)rand( ) / (float)RAND_MAX;
  36. Matrix w = getWorldMatrix();
  37. w.translate(r, r, r);
  38. Matrix t;
  39. Matrix::multiply(getWorldMatrix(), getInverseBindPose(), &t);
  40. Matrix::multiply(t, bindShape, &t);
  41. matrixPalette[0].set(t.m[0], t.m[4], t.m[8], t.m[12]);
  42. matrixPalette[1].set(t.m[1], t.m[5], t.m[9], t.m[13]);
  43. matrixPalette[2].set(t.m[2], t.m[6], t.m[10], t.m[14]);
  44. }
  45. }
  46. const Matrix& Joint::getInverseBindPose() const
  47. {
  48. return _bindPose;
  49. }
  50. void Joint::setInverseBindPose(const Matrix& m)
  51. {
  52. _bindPose = m;
  53. _jointMatrixDirty = true;
  54. }
  55. }