Advertisement
xerpi

Wii MatrixStack class

Jul 15th, 2013
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. #ifndef _MATRIX_STACK_H_
  2. #define _MATRIX_STACK_H_
  3.  
  4. #include <stack>
  5. #include <cstring>
  6. #include <gccore.h>
  7.  
  8. struct Mtx_s {
  9.     Mtx data;
  10. }__attribute__ ((packed));
  11.  
  12. class MatrixStack
  13. {
  14. public:
  15.     MatrixStack() {Identity();}
  16.  
  17.     void Identity()
  18.     {
  19.         guMtxIdentity(current_matrix.data);
  20.     }
  21.  
  22.     void Translate(const guVector &v)
  23.     {
  24.         Mtx tmp;
  25.         guMtxTrans(tmp, v.x, v.y, v.z);
  26.         guMtxConcat(current_matrix.data, tmp, current_matrix.data);
  27.     }
  28.  
  29.     void Rotate(guVector &v, float angle)
  30.     {
  31.         guMtxRotAxisRad(current_matrix.data, &v, angle);
  32.     }
  33.  
  34.     void Rotate_X(float angle)
  35.     {
  36.         Mtx tmp;
  37.         guMtxRotRad(tmp, 'x', angle);
  38.         guMtxConcat(current_matrix.data, tmp, current_matrix.data);
  39.     }
  40.  
  41.     void Rotate_Y(float angle)
  42.     {
  43.         Mtx tmp;
  44.         guMtxRotRad(tmp, 'y', angle);
  45.         guMtxConcat(current_matrix.data, tmp, current_matrix.data);
  46.     }
  47.  
  48.     void Rotate_Z(float angle)
  49.     {
  50.         Mtx tmp;
  51.         guMtxRotRad(tmp, 'z', angle);
  52.         guMtxConcat(current_matrix.data, tmp, current_matrix.data);
  53.     }
  54.  
  55.     void Scale(const guVector &v)
  56.     {
  57.         guMtxScale(current_matrix.data, v.x, v.y, v.z);
  58.     }
  59.  
  60.     struct Mtx_s Top()
  61.     {
  62.         return current_matrix;
  63.     }
  64.  
  65.     void copyMatrix(Mtx m)
  66.     {
  67.         memcpy(current_matrix.data, m, sizeof(Mtx));
  68.     }
  69.  
  70.     void Push()
  71.     {
  72.         stack_matrix.push(current_matrix);
  73.     }
  74.  
  75.     void Pop()
  76.     {
  77.         current_matrix = stack_matrix.top();
  78.         stack_matrix.pop();
  79.     }
  80.  
  81.     void setMatrix(u32 pnidx)
  82.     {
  83.         GX_LoadPosMtxImm(current_matrix.data, pnidx);
  84.     }
  85.  
  86.     MtxP const value_ptr()
  87.     {
  88.         return (MtxP)current_matrix.data;
  89.     }
  90.  
  91. private:
  92.     struct Mtx_s current_matrix;
  93.     std::stack<struct Mtx_s> stack_matrix;
  94. };
  95.  
  96.  
  97.  
  98. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement