00001 #ifndef TRANSFORMMATRIX_H 00002 #define TRANSFORMMATRIX_H 00003 00011 #include "Triangle.h" 00012 00013 #ifndef NDEBUG 00014 # ifndef BUILDING_DOX 00015 # include <iostream> 00016 # endif 00017 #endif 00018 00022 struct SpatialVector { 00023 float dx; 00024 float dy; 00025 float dz; 00026 00030 operator float() const; 00031 }; 00032 00039 inline SpatialVector& operator*= (SpatialVector &vect, float f) { 00040 vect.dx*= f; 00041 vect.dy*= f; 00042 vect.dz*= f; 00043 return vect; 00044 } 00045 00046 #ifndef NDEBUG 00047 00054 inline std::ostream& operator<< (std::ostream &out, const SpatialVector &vect) { 00055 out << "vect(" << 00056 vect.dx << ", " << 00057 vect.dy << ", " << 00058 vect.dz << ")"; 00059 return out; 00060 } 00061 #endif 00062 00066 class TransformMatrix { 00067 public: 00071 enum { MATRIX_DIM = 4 }; 00072 00076 typedef float TTransformMatrix[MATRIX_DIM][MATRIX_DIM]; 00077 00081 static void setIdentity( 00082 TTransformMatrix dest); 00083 00089 static void copyMatrix( 00090 TTransformMatrix dest, 00091 TTransformMatrix src); 00092 00099 static void mulMatrix( 00100 TTransformMatrix dest, 00101 TTransformMatrix a, 00102 TTransformMatrix b); 00103 00107 TransformMatrix(); 00108 00116 void rotate (float angle, SpatialVector vect ); 00117 00122 void translate (SpatialVector vect ); 00123 00128 void scale (SpatialVector vect ); 00129 00134 void shear (SpatialVector); 00135 00141 Vertex transform (Vertex vertex); 00142 00143 private: 00144 TTransformMatrix matrix_; 00145 00146 protected: 00147 #ifndef BUILDING_DOX 00148 void mulMatrixFromLeft(TTransformMatrix mm); 00149 void mulMatrixFromRight(TTransformMatrix mm); 00150 #endif 00151 }; 00152 00153 #endif // TRANSFORMMATRIX_H
1.5.2