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

其他游戏

开发平台:

Visual C++

  1. #ifndef AF_MATRIX
  2. #define AF_MATRIX
  3. class afVec2;
  4. class afVec3;
  5. class afVec3n;
  6. class afVec4;
  7. struct D3DXMATRIX;
  8. #pragma warning (push)
  9. #pragma warning (disable: 4201) // disable warning about nameless struct/union
  10. class afMatrix
  11. {
  12. public:
  13. afMatrix();
  14. afMatrix(const float* nElements);
  15. afMatrix(const D3DXMATRIX& nMat);
  16. const D3DXMATRIX* getD3DMatrix() const  {  return reinterpret_cast<const D3DXMATRIX*>(this);  }
  17. D3DXMATRIX* getD3DMatrix()  {  return reinterpret_cast<D3DXMATRIX*>(this);  }
  18. void makeIdent();
  19. void makeRotZXY(float nHead, float nPitch, float nRoll);
  20. void makeTrans(const afVec3& nTrans);
  21. bool makeLookat(const afVec3n& nDir, const afVec3n& nUp);
  22. void makeScale(const afVec3& scale);
  23. void makeScale(float s);
  24. void makeProjection(float nFovY, float nAspect, float nNear, float nFar);
  25. bool invert();
  26.     void preMult(const afMatrix& lf);
  27.     void postMult(const afMatrix& rt);
  28. void multVector(afVec4& dst, const afVec4& src) const;
  29. void multVector(afVec4& dst, const afVec3& src) const;
  30. void multVector(afVec3& dst, const afVec3& src) const;
  31. //accessing functions
  32.     typedef float float4[4];
  33.     const float4&
  34. operator[](unsigned nIndex) const  {  return reinterpret_cast<const float4*>(&m00)[nIndex];  }
  35.     float4&
  36. operator[](unsigned nIndex)  {  return reinterpret_cast<float4*>(&m00)[nIndex];  }
  37.     const afVec4& 
  38. rowVec4(unsigned nIndex) const  {  return reinterpret_cast<const afVec4&>((&m00)[nIndex*4]);  }
  39.     afVec4& 
  40. rowVec4(unsigned nIndex)  {  return reinterpret_cast<afVec4&>((&m00)[nIndex*4]);  }
  41.     const afVec3& 
  42. rowVec3(unsigned nIndex)  const  {  return reinterpret_cast<const afVec3&>((&m00)[nIndex*4]);  }
  43.     afVec3& 
  44. rowVec3(unsigned nIndex)  {  return reinterpret_cast<afVec3&>((&m00)[nIndex*4]);  }
  45. afMatrix&
  46. operator=(const D3DXMATRIX& nMat);
  47. bool
  48. operator==(const afMatrix& nMat) const;
  49. protected:
  50.     union
  51. {
  52.         struct
  53. {
  54.             float m00, m01, m02, m03;
  55.             float m10, m11, m12, m13;
  56.             float m20, m21, m22, m23;
  57.             float m30, m31, m32, m33;
  58.         };
  59.         float m[4][4];
  60.     };
  61.     friend class afVec2;
  62.     friend class afVec3;
  63.     friend class afVec4;
  64. friend class afQuat;
  65. friend class afTransform;
  66. };
  67. #pragma warning (pop)
  68. #endif