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 FXVEC4F_H
00025
#define FXVEC4F_H
00026
00027
00028
namespace FX {
00029
00030
00031
00032 class FXAPI FXVec4f {
00033
public:
00034 FXfloat x;
00035 FXfloat y;
00036 FXfloat z;
00037 FXfloat w;
00038
public:
00039
00040
00041 FXVec4f(){}
00042
00043
00044 FXVec4f(
const FXVec4f& v){x=v.
x;y=v.
y;z=v.
z;w=v.
w;}
00045
00046
00047 FXVec4f(
const FXVec3f& v){x=v.
x;y=v.
y;z=v.
z;w=1.0f;}
00048
00049
00050 FXVec4f(
const FXfloat v[]){x=v[0];y=v[1];z=v[2];w=v[3];}
00051
00052
00053 FXVec4f(FXfloat xx,FXfloat yy,FXfloat zz,FXfloat ww=1.0f){x=xx;y=yy;z=zz;w=ww;}
00054
00055
00056 FXVec4f(FXColor color);
00057
00058
00059 FXfloat& operator[](FXint i){
return (&x)[i];}
00060
00061
00062 const FXfloat& operator[](FXint i)
const {
return (&x)[i];}
00063
00064
00065 FXVec4f& operator=(FXColor color);
00066
00067
00068 FXVec4f& operator=(
const FXVec3f& v){x=v.
x;y=v.
y;z=v.
z;w=1.0f;
return *
this;}
00069 FXVec4f& operator=(
const FXVec4f& v){x=v.
x;y=v.
y;z=v.
z;w=v.
w;
return *
this;}
00070
00071
00072 FXVec4f& operator=(
const FXfloat v[]){x=v[0];y=v[1];z=v[2];w=v[3];
return *
this;}
00073
00074
00075 FXVec4f& operator*=(FXfloat n){x*=n;y*=n;z*=n;w*=n;
return *
this;}
00076 FXVec4f& operator/=(FXfloat n){x/=n;y/=n;z/=n;w/=n;
return *
this;}
00077 FXVec4f& operator+=(
const FXVec4f& v){x+=v.x;y+=v.y;z+=v.z;w+=v.w;
return *
this;}
00078 FXVec4f& operator-=(
const FXVec4f& v){x-=v.x;y-=v.y;z-=v.z;w-=v.w;
return *
this;}
00079
00080
00081 operator FXfloat*(){
return &x;}
00082 operator const FXfloat*()
const {
return &x;}
00083 operator FXVec3f&(){
return *reinterpret_cast<FXVec3f*>(
this);}
00084 operator const FXVec3f&()
const {
return *reinterpret_cast<const FXVec3f*>(
this);}
00085
00086
00087 operator FXColor() const;
00088
00089
00090 friend FXAPI FXVec4f operator+(const FXVec4f& v){
return v;}
00091
friend FXAPI FXVec4f operator-(
const FXVec4f& v){
return FXVec4f(-v.
x,-v.
y,-v.
z,-v.
w);}
00092
00093
00094 friend FXAPI FXVec4f operator+(
const FXVec4f& a,
const FXVec4f& b){
return FXVec4f(a.
x+b.
x,a.
y+b.
y,a.
z+b.
z,a.
w+b.
w);}
00095
00096
00097 friend FXAPI FXVec4f operator-(
const FXVec4f& a,
const FXVec4f& b){
return FXVec4f(a.
x-b.
x,a.
y-b.
y,a.
z-b.
z,a.
w-b.
w);}
00098
00099
00100 friend FXAPI FXVec4f operator*(
const FXVec4f& a,FXfloat n){
return FXVec4f(a.
x*n,a.
y*n,a.
z*n,a.
w*n);}
00101
friend FXAPI FXVec4f operator*(FXfloat n,
const FXVec4f& a){
return FXVec4f(n*a.
x,n*a.
y,n*a.
z,n*a.
w);}
00102
friend FXAPI FXVec4f operator/(
const FXVec4f& a,FXfloat n){
return FXVec4f(a.x/n,a.y/n,a.z/n,a.w/n);}
00103
friend FXAPI FXVec4f operator/(FXfloat n,
const FXVec4f& a){
return FXVec4f(n/a.x,n/a.y,n/a.z,n/a.w);}
00104
00105
00106 friend FXAPI FXfloat operator*(
const FXVec4f& a,
const FXVec4f& b){
return a.
x*b.
x+a.
y*b.
y+a.
z*b.
z+a.
w*b.
w;}
00107
00108
00109 friend FXAPI
int operator!(
const FXVec4f& a){
return a.
x==0.0f && a.
y==0.0f && a.
z==0.0f && a.
w==0.0f;}
00110
00111
00112 friend FXAPI
int operator==(
const FXVec4f& a,
const FXVec4f& b){
return a.
x==b.
x && a.
y==b.
y && a.
z==b.
z && a.
w==b.
w;}
00113
friend FXAPI
int operator!=(
const FXVec4f& a,
const FXVec4f& b){
return a.
x!=b.
x || a.
y!=b.
y || a.
z!=b.
z || a.
w!=b.
w;}
00114
00115
friend FXAPI
int operator==(
const FXVec4f& a,FXfloat n){
return a.x==n && a.y==n && a.z==n && a.w==n;}
00116
friend FXAPI
int operator!=(
const FXVec4f& a,FXfloat n){
return a.x!=n || a.y!=n || a.z!=n || a.w!=n;}
00117
00118
friend FXAPI
int operator==(FXfloat n,
const FXVec4f& a){
return n==a.x && n==a.y && n==a.z && n==a.w;}
00119
friend FXAPI
int operator!=(FXfloat n,
const FXVec4f& a){
return n!=a.x || n!=a.y || n!=a.z || n!=a.w;}
00120
00121
00122 friend FXAPI
int operator<(
const FXVec4f& a,
const FXVec4f& b){
return a.
x<b.
x && a.
y<b.
y && a.
z<b.
z && a.
w<b.
w;}
00123
friend FXAPI
int operator<=(
const FXVec4f& a,
const FXVec4f& b){
return a.
x<=b.
x && a.
y<=b.
y && a.
z<=b.
z && a.
w<=b.
w;}
00124
friend FXAPI
int operator>(
const FXVec4f& a,
const FXVec4f& b){
return a.x>b.x && a.y>b.y && a.z>b.z && a.w>b.w;}
00125
friend FXAPI
int operator>=(
const FXVec4f& a,
const FXVec4f& b){
return a.x>=b.x && a.y>=b.y && a.z>=b.z && a.w>=b.w;}
00126
00127
friend FXAPI
int operator<(
const FXVec4f& a,FXfloat n){
return a.x<n && a.y<n && a.z<n && a.w<n;}
00128
friend FXAPI
int operator<=(
const FXVec4f& a,FXfloat n){
return a.x<=n && a.y<=n && a.z<=n && a.w<=n;}
00129
friend FXAPI
int operator>(
const FXVec4f& a,FXfloat n){
return a.x>n && a.y>n && a.z>n && a.w>n;}
00130
friend FXAPI
int operator>=(
const FXVec4f& a,FXfloat n){
return a.x>=n && a.y>=n && a.z>=n && a.w>=n;}
00131
00132
friend FXAPI
int operator<(FXfloat n,
const FXVec4f& a){
return n<a.x && n<a.y && n<a.z && n<a.w;}
00133
friend FXAPI
int operator<=(FXfloat n,
const FXVec4f& a){
return n<=a.x && n<=a.y && n<=a.z && n<=a.w;}
00134
friend FXAPI
int operator>(FXfloat n,
const FXVec4f& a){
return n>a.x && n>a.y && n>a.z && n>a.w;}
00135
friend FXAPI
int operator>=(FXfloat n,
const FXVec4f& a){
return n>=a.x && n>=a.y && n>=a.z && n>=a.w;}
00136
00137
00138 friend FXAPI FXfloat len2(
const FXVec4f& a){
return a.
x*a.
x+a.
y*a.
y+a.
z*a.
z+a.
w*a.
w; }
00139
friend FXAPI FXfloat len(
const FXVec4f& a){
return sqrtf(len2(a)); }
00140
00141
00142
friend FXAPI FXVec4f normalize(
const FXVec4f& a);
00143
00144
00145 friend FXAPI FXVec4f lo(
const FXVec4f& a,
const FXVec4f& b){
return FXVec4f(FXMIN(a.
x,b.
x),FXMIN(a.
y,b.
y),FXMIN(a.
z,b.
z),FXMIN(a.
w,b.
w));}
00146
friend FXAPI FXVec4f hi(
const FXVec4f& a,
const FXVec4f& b){
return FXVec4f(FXMAX(a.
x,b.
x),FXMAX(a.
y,b.
y),FXMAX(a.
z,b.
z),FXMAX(a.
w,b.
w));}
00147
00148
00149
friend FXAPI FXStream& operator<<(FXStream& store,
const FXVec4f& v);
00150
00151
00152
friend FXAPI FXStream& operator>>(FXStream& store,FXVec4f& v);
00153 };
00154
00155 }
00156
00157
#endif