afTransform.cpp
上传用户:kaiguan
上传日期:2007-10-28
资源大小:1074k
文件大小:1k
源码类别:

其他游戏

开发平台:

Visual C++

  1. #include "afTransform.h"
  2. afTransform& afTransform::operator=(const afTransform& nT)
  3. {
  4. pos   = nT.pos;
  5. rot   = nT.rot;
  6. scale = nT.scale;
  7. dirty=true;
  8. return *this;
  9. }
  10. afTransform& afTransform::operator*=(const afTransform& nT)
  11. {
  12. pos   += nT.pos;
  13. rot   *= nT.rot;
  14. scale.x *= nT.scale.x;
  15. scale.y *= nT.scale.y;
  16. scale.z *= nT.scale.z;
  17. dirty=true;
  18. return *this;
  19. }
  20. afTransform& afTransform::operator>=(const afTransform& nT)
  21. {
  22. pos   += nT.pos;
  23. rot   >= nT.rot; //rot = t.rot * rot
  24. scale.x *= nT.scale.x;
  25. scale.y *= nT.scale.y;
  26. scale.z *= nT.scale.z;
  27. dirty=true;
  28. return *this;
  29. }
  30. const afMatrix&
  31. afTransform::getMatrix()
  32. {
  33. updateMatrix();
  34. return matrix;
  35. }
  36. void
  37. afTransform::updateMatrix()
  38. {
  39. if(!dirty)
  40. return;
  41. afMatrix mrot;
  42. rot.setMatrix(mrot);
  43. matrix.m00 = mrot.m00*scale.x;
  44. matrix.m10 = mrot.m10*scale.y;
  45. matrix.m20 = mrot.m20*scale.z;
  46. matrix.m30 = pos.x;
  47. matrix.m01 = mrot.m01*scale.x;
  48. matrix.m11 = mrot.m11*scale.y;
  49. matrix.m21 = mrot.m21*scale.z;
  50. matrix.m31 = pos.y;
  51. matrix.m02 = mrot.m02*scale.x;
  52. matrix.m12 = mrot.m12*scale.y;
  53. matrix.m22 = mrot.m22*scale.z;
  54. matrix.m32 = pos.z;
  55. matrix.m03 = 0.0f;
  56. matrix.m13 = 0.0f;
  57. matrix.m23 = 0.0f;
  58. matrix.m33 = 1.0f;
  59. }