CrossFramework Library
|
00001 00006 #if defined(XBASE_INCLUDED_VECTOR4_HPP) 00007 #else 00008 #define XBASE_INCLUDED_VECTOR4_HPP 00009 00010 //------------------------------------------------------------ 00011 #include <XBase/BuiltInTypes.hpp> 00012 #include <XBase/ShortString.hpp> 00013 00014 //------------------------------------------------------------ 00015 namespace XBase { 00016 struct Vector2POD; 00017 struct Vector3POD; 00018 } 00019 00020 //------------------------------------------------------------ 00021 namespace XBase { 00023 00024 00030 struct Vector4POD 00031 { 00032 //============================================================ 00034 00035 static const Vector4POD Zero(); 00036 static const Vector4POD One(); 00037 static const Vector4POD Min(); 00038 static const Vector4POD Max(); 00039 static const Vector4POD UnitX(); 00040 static const Vector4POD UnitY(); 00041 static const Vector4POD UnitZ(); 00042 static const Vector4POD UnitW(); 00043 static const Vector4POD NegUnitX(); 00044 static const Vector4POD NegUnitY(); 00045 static const Vector4POD NegUnitZ(); 00046 static const Vector4POD NegUnitW(); 00047 00048 //============================================================ 00050 00051 f32 x; 00052 f32 y; 00053 f32 z; 00054 f32 w; 00055 00056 00057 //============================================================ 00059 00060 const Vector2POD toXY()const; 00061 const Vector2POD toXX()const; 00062 const Vector2POD toYY()const; 00063 const Vector2POD toZZ()const; 00064 const Vector2POD toWW()const; 00065 const Vector3POD toXYZ()const; 00066 const Vector3POD toXXX()const; 00067 const Vector3POD toYYY()const; 00068 const Vector3POD toZZZ()const; 00069 const Vector3POD toWWW()const; 00070 const Vector4POD toXYZ0()const; 00071 const Vector4POD toXY0W()const; 00072 const Vector4POD toXY00()const; 00073 const Vector4POD toX0ZW()const; 00074 const Vector4POD toX0Z0()const; 00075 const Vector4POD toX00W()const; 00076 const Vector4POD toX000()const; 00077 const Vector4POD to0YZ0()const; 00078 const Vector4POD to0Y0W()const; 00079 const Vector4POD to0Y00()const; 00080 const Vector4POD to00ZW()const; 00081 const Vector4POD to00Z0()const; 00082 const Vector4POD to000W()const; 00083 const Vector4POD toXXXX()const; 00084 const Vector4POD toYYYY()const; 00085 const Vector4POD toZZZZ()const; 00086 const Vector4POD toWWWW()const; 00088 00089 //============================================================ 00091 00092 bool equals( const Vector4POD& )const; 00093 bool equalsStrict( const Vector4POD& )const; 00094 00095 00096 //============================================================ 00098 00099 const Vector4POD add( f32 )const; 00100 const Vector4POD sub( f32 )const; 00101 const Vector4POD mul( f32 )const; 00102 const Vector4POD div( f32 )const; 00103 const Vector4POD add( const Vector4POD& )const; 00104 const Vector4POD sub( const Vector4POD& )const; 00105 const Vector4POD mul( const Vector4POD& )const; 00106 const Vector4POD div( const Vector4POD& )const; 00107 void addAssign( f32 ); 00108 void subAssign( f32 ); 00109 void mulAssign( f32 ); 00110 void divAssign( f32 ); 00111 void addAssign( const Vector4POD& ); 00112 void subAssign( const Vector4POD& ); 00113 void mulAssign( const Vector4POD& ); 00114 void divAssign( const Vector4POD& ); 00115 00116 00117 //============================================================ 00119 00120 const Vector4POD operator+( f32 )const; 00121 const Vector4POD operator-( f32 )const; 00122 const Vector4POD operator*( f32 )const; 00123 const Vector4POD operator/( f32 )const; 00124 const Vector4POD operator+( const Vector4POD& )const; 00125 const Vector4POD operator-( const Vector4POD& )const; 00126 const Vector4POD operator*( const Vector4POD& )const; 00127 const Vector4POD operator/( const Vector4POD& )const; 00128 const Vector4POD operator-()const; 00129 Vector4POD& operator+=( f32 ); 00130 Vector4POD& operator-=( f32 ); 00131 Vector4POD& operator*=( f32 ); 00132 Vector4POD& operator/=( f32 ); 00133 Vector4POD& operator+=( const Vector4POD& ); 00134 Vector4POD& operator-=( const Vector4POD& ); 00135 Vector4POD& operator*=( const Vector4POD& ); 00136 Vector4POD& operator/=( const Vector4POD& ); 00137 00138 00139 //============================================================ 00141 00142 const Vector4POD min( const Vector4POD& )const; 00143 const Vector4POD max( const Vector4POD& )const; 00144 00145 00146 //============================================================ 00148 00149 const Vector4POD clamp( const Vector4POD& aMin , const Vector4POD& aMax )const; 00150 const Vector4POD clampPositive()const; 00151 const Vector4POD clampNegative()const; 00152 00153 00154 //============================================================ 00156 00157 const Vector4POD abs()const; 00158 const Vector4POD neg()const; 00159 00160 00161 //============================================================ 00163 00164 f32 squareLength()const; 00165 f32 length()const; 00166 f32 distance( const Vector4POD& )const; 00167 bool isZero()const; 00168 bool isZeroStrict()const; 00169 bool isUnit()const; 00170 const Vector4POD unit()const; 00171 void unitAssign(); 00172 00173 00174 //============================================================ 00176 00177 f32 dot( const Vector4POD& )const; 00178 00179 00180 //============================================================ 00182 00183 00184 const ShortString toShortString()const; 00186 }; 00187 00189 class Vector4 : public Vector4POD 00190 { 00191 public: 00192 //============================================================ 00194 00195 Vector4(); 00196 Vector4( const Vector4POD& aXYZW ); 00197 Vector4( f32 aV ); 00198 Vector4( const Vector2POD& aXY , f32 aZ , f32 aW ); 00199 Vector4( const Vector3POD& aXYZ , f32 aW ); 00200 Vector4( f32 aX , f32 aY , f32 aZ , f32 aW ); 00201 00202 }; 00203 00205 typedef Vector4POD Vec4; 00206 00208 typedef Vector4POD Vector4fPOD; 00209 00211 typedef Vec4 Vec4f; 00212 00214 typedef Vector4 Vector4f; 00216 } 00217 //------------------------------------------------------------ 00218 #endif 00219 // EOF