TransformMatrix.h

Go to the documentation of this file.
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

Generated on Thu Dec 6 19:33:11 2007 for Radiosity Renderer and Visualizer by  doxygen 1.5.2