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(
00052 Float entry00, Float entry01, Float entry02,
00053 Float entry10, Float entry11, Float entry12,
00054 Float entry20, Float entry21, Float entry22
00055 );
00056
00057
00058 static GeMatrix4 translation( const GeVector& );
00059
00060
00061 static GeMatrix4 scaling( Float sx, Float sy, Float sz );
00062
00063 static GeMatrix4 outerProduct( const GeVector& a, const GeVector& b );
00064
00065
00066 static GeMatrix4 from3x3( const GeMatrix3& );
00067
00068
00069
00070 GeMatrix4();
00071 GeMatrix4(
00072 Float entry00, Float entry01, Float entry02, Float entry03,
00073 Float entry10, Float entry11, Float entry12, Float entry13,
00074 Float entry20, Float entry21, Float entry22, Float entry23,
00075 Float entry30, Float entry31, Float entry32, Float entry33
00076 );
00077
00078
00079
00080
00081 Float operator()( UInt32 row, UInt32 col ) const;
00082 Float& operator()( UInt32 row, UInt32 col );
00083 GeMatrix4& operator*=( const GeMatrix4& );
00084 GeMatrix4& operator*=( Float );
00085 GeMatrix4& operator+=( const GeMatrix4& );
00086 GeMatrix4& operator-=( const GeMatrix4& );
00087 GeMatrix4 operator*( const GeMatrix4& ) const;
00088
00089
00090 GeVector operator*( const GeVector& ) const;
00091
00092
00093 GePoint operator*( const GePoint& ) const;
00094 GeMatrix4 operator*( Float ) const;
00095 GeMatrix4 operator+( const GeMatrix4& ) const;
00096 GeMatrix4 operator-( const GeMatrix4& ) const;
00097 bool operator==( const GeMatrix4& ) const;
00098 bool operator!=( const GeMatrix4& ) const;
00099
00100
00101 Float getTrace() const;
00102 const Float* asColMajor() const;
00103 GeMatrix4 getTranspose() const;
00104
00105
00106 static const GeMatrix4 ZERO;
00107 static const GeMatrix4 IDENTITY;
00108
00109 private:
00110
00111
00112
00113 Float _data[ 16 ];
00114 };
00115
00116
00117
00118
00119
00120
00121 std::ostream& operator<<( std::ostream&, const GeMatrix4& );
00122
00123 GeMatrix4 operator*( Float, const GeMatrix4& );
00124
00125 FREECLOTH_NAMESPACE_END
00126
00127 #include <freecloth/geom/geMatrix4.inline.h>
00128
00129 #endif