00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#ifndef FXMAT3F_H
00025
#define FXMAT3F_H
00026
00027
00028
namespace FX {
00029
00030
00031
class FXQuatf;
00032
00033
00034
00035 class FXAPI FXMat3f {
00036
protected:
00037
FXVec3f m[3];
00038
public:
00039
00040
00041 FXMat3f(){}
00042
00043
00044 FXMat3f(
const FXMat3f& other);
00045
00046
00047 FXMat3f(FXfloat w);
00048
00049
00050 FXMat3f(FXfloat a00,FXfloat a01,FXfloat a02,
00051 FXfloat a10,FXfloat a11,FXfloat a12,
00052 FXfloat a20,FXfloat a21,FXfloat a22);
00053
00054
00055 FXMat3f(
const FXVec3f& a,
const FXVec3f& b,
const FXVec3f& c);
00056
00057
00058 FXMat3f(
const FXQuatf& quat);
00059
00060
00061 FXMat3f& operator=(
const FXMat3f& other);
00062 FXMat3f& operator=(FXfloat w);
00063 FXMat3f& operator+=(
const FXMat3f& w);
00064 FXMat3f& operator-=(
const FXMat3f& w);
00065 FXMat3f& operator*=(FXfloat w);
00066 FXMat3f& operator*=(
const FXMat3f& w);
00067 FXMat3f& operator/=(FXfloat w);
00068
00069
00070
FXVec3f& operator[](FXint i){
return m[i];}
00071
const FXVec3f& operator[](FXint i)
const {
return m[i];}
00072
00073
00074 operator FXfloat*(){
return m[0];}
00075 operator const FXfloat*()
const {
return m[0];}
00076
00077
00078
friend FXAPI FXMat3f operator+(
const FXMat3f& a,
const FXMat3f& b);
00079
friend FXAPI FXMat3f operator-(
const FXMat3f& a,
const FXMat3f& b);
00080
friend FXAPI FXMat3f operator-(
const FXMat3f& a);
00081
friend FXAPI FXMat3f operator*(
const FXMat3f& a,
const FXMat3f& b);
00082
friend FXAPI FXMat3f operator*(FXfloat x,
const FXMat3f& a);
00083
friend FXAPI FXMat3f operator*(
const FXMat3f& a,FXfloat x);
00084
friend FXAPI FXMat3f operator/(
const FXMat3f& a,FXfloat x);
00085
friend FXAPI FXMat3f operator/(FXfloat x,
const FXMat3f& a);
00086
00087
00088
friend FXAPI FXVec3f operator*(
const FXVec3f& v,
const FXMat3f& m);
00089
friend FXAPI FXVec3f operator*(
const FXMat3f& a,
const FXVec3f& v);
00090
00091
00092
friend FXAPI FXVec2f operator*(
const FXVec2f& v,
const FXMat3f& m);
00093
friend FXAPI FXVec2f operator*(
const FXMat3f& a,
const FXVec2f& v);
00094
00095
00096 FXMat3f& eye();
00097
00098
00099 FXMat3f& rot(FXfloat c,FXfloat s);
00100 FXMat3f& rot(FXfloat phi);
00101
00102
00103 FXMat3f& trans(FXfloat tx,FXfloat ty);
00104
00105
00106 FXMat3f& scale(FXfloat sx,FXfloat sy);
00107 FXMat3f& scale(FXfloat s);
00108
00109
00110
friend FXAPI FXfloat det(
const FXMat3f& m);
00111
00112
00113
friend FXAPI FXMat3f transpose(
const FXMat3f& m);
00114
00115
00116
friend FXAPI FXMat3f invert(
const FXMat3f& m);
00117
00118
00119
friend FXAPI FXStream& operator<<(FXStream& store,
const FXMat3f& m);
00120
00121
00122
friend FXAPI FXStream& operator>>(FXStream& store,FXMat3f& m);
00123 };
00124
00125 }
00126
00127
#endif