00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef freecloth_geom_geMatrix4_h
00020 #define freecloth_geom_geMatrix4_h
00021
00022 #ifndef freecloth_geom_package_h
00023 #include <freecloth/geom/package.h>
00024 #endif
00025
00026 FREECLOTH_NAMESPACE_START
00027
00028
00029
00030
00031 class GeVector;
00032 class GePoint;
00033 class GeMatrix3;
00034
00035
00036
00037
00038
00039
00040 class GeMatrix4
00041 {
00042 public:
00043
00044
00045
00046 static GeMatrix4 colMajor( const Float data[ 16 ] );
00047
00048 static GeMatrix4 rowMajor( const Float data[ 16 ] );
00049
00050
00051 static GeMatrix4 rotation( const GeMatrix3& );
00052
00053
00054 static GeMatrix4 rotation( const GeVector& axis, Float theta );
00055
00056
00057 static GeMatrix4 translation( const GeVector& );
00058
00059
00060 static GeMatrix4 scaling( Float sx, Float sy, Float sz );
00061
00062 static GeMatrix4 outerProduct( const GeVector& a, const GeVector& b );
00063
00064
00065 static GeMatrix4 from3x3( const GeMatrix3& );
00066
00067
00068
00069 GeMatrix4();
00070 GeMatrix4(
00071 Float entry00, Float entry01, Float entry02, Float entry03,
00072 Float entry10, Float entry11, Float entry12, Float entry13,
00073 Float entry20, Float entry21, Float entry22, Float entry23,
00074 Float entry30, Float entry31, Float entry32, Float entry33
00075 );
00076
00077
00078
00079
00080 Float operator()( UInt32 row, UInt32 col ) const;
00081 Float& operator()( UInt32 row, UInt32 col );
00082 GeMatrix4& operator*=( const GeMatrix4& );
00083 GeMatrix4& operator*=( Float );
00084 GeMatrix4& operator+=( const GeMatrix4& );
00085 GeMatrix4& operator-=( const GeMatrix4& );
00086 GeMatrix4 operator*( const GeMatrix4& ) const;
00087
00088
00089 GeVector operator*( const GeVector& ) const;
00090
00091
00092 GePoint operator*( const GePoint& ) const;
00093 GeMatrix4 operator*( Float ) const;
00094 GeMatrix4 operator+( const GeMatrix4& ) const;
00095 GeMatrix4 operator-( const GeMatrix4& ) const;
00096 bool operator==( const GeMatrix4& ) const;
00097 bool operator!=( const GeMatrix4& ) const;
00098
00099
00100 Float getTrace() const;
00101 const Float* asColMajor() const;
00102 GeMatrix4 getTranspose() const;
00103
00104
00105 static const GeMatrix4 ZERO;
00106 static const GeMatrix4 IDENTITY;
00107
00108 private:
00109
00110
00111
00112 Float _data[ 16 ];
00113 };
00114
00115
00116
00117
00118
00119
00120 std::ostream& operator<<( std::ostream&, const GeMatrix4& );
00121
00122 GeMatrix4 operator*( Float, const GeMatrix4& );
00123
00124 FREECLOTH_NAMESPACE_END
00125
00126 #include <freecloth/geom/geMatrix4.inline.h>
00127
00128 #endif