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 00028 struct Vector4POD 00029 { 00030 //============================================================ 00032 00033 static const Vector4POD Zero(); 00034 static const Vector4POD One(); 00035 static const Vector4POD Min(); 00036 static const Vector4POD Max(); 00037 static const Vector4POD UnitX(); 00038 static const Vector4POD UnitY(); 00039 static const Vector4POD UnitZ(); 00040 static const Vector4POD UnitW(); 00041 static const Vector4POD NegUnitX(); 00042 static const Vector4POD NegUnitY(); 00043 static const Vector4POD NegUnitZ(); 00044 static const Vector4POD NegUnitW(); 00045 00046 //============================================================ 00048 00049 f32 x; 00050 f32 y; 00051 f32 z; 00052 f32 w; 00053 00054 00055 //============================================================ 00057 00058 const Vector2POD toXY()const; 00059 const Vector2POD toXX()const; 00060 const Vector2POD toYY()const; 00061 const Vector2POD toZZ()const; 00062 const Vector2POD toWW()const; 00063 const Vector3POD toXYZ()const; 00064 const Vector3POD toXXX()const; 00065 const Vector3POD toYYY()const; 00066 const Vector3POD toZZZ()const; 00067 const Vector3POD toWWW()const; 00068 const Vector4POD toXYZ0()const; 00069 const Vector4POD toXY0W()const; 00070 const Vector4POD toXY00()const; 00071 const Vector4POD toX0ZW()const; 00072 const Vector4POD toX0Z0()const; 00073 const Vector4POD toX00W()const; 00074 const Vector4POD toX000()const; 00075 const Vector4POD to0YZ0()const; 00076 const Vector4POD to0Y0W()const; 00077 const Vector4POD to0Y00()const; 00078 const Vector4POD to00ZW()const; 00079 const Vector4POD to00Z0()const; 00080 const Vector4POD to000W()const; 00081 const Vector4POD toXXXX()const; 00082 const Vector4POD toYYYY()const; 00083 const Vector4POD toZZZZ()const; 00084 const Vector4POD toWWWW()const; 00086 00087 //============================================================ 00089 00090 bool equals( const Vector4POD& )const; 00091 bool equalsStrict( const Vector4POD& )const; 00092 00093 00094 //============================================================ 00096 00097 const Vector4POD add( f32 )const; 00098 const Vector4POD sub( f32 )const; 00099 const Vector4POD mul( f32 )const; 00100 const Vector4POD div( f32 )const; 00101 const Vector4POD add( const Vector4POD& )const; 00102 const Vector4POD sub( const Vector4POD& )const; 00103 const Vector4POD mul( const Vector4POD& )const; 00104 const Vector4POD div( const Vector4POD& )const; 00105 void addAssign( f32 ); 00106 void subAssign( f32 ); 00107 void mulAssign( f32 ); 00108 void divAssign( f32 ); 00109 void addAssign( const Vector4POD& ); 00110 void subAssign( const Vector4POD& ); 00111 void mulAssign( const Vector4POD& ); 00112 void divAssign( const Vector4POD& ); 00113 00114 00115 //============================================================ 00117 00118 const Vector4POD operator+( f32 )const; 00119 const Vector4POD operator-( f32 )const; 00120 const Vector4POD operator*( f32 )const; 00121 const Vector4POD operator/( f32 )const; 00122 const Vector4POD operator+( const Vector4POD& )const; 00123 const Vector4POD operator-( const Vector4POD& )const; 00124 const Vector4POD operator*( const Vector4POD& )const; 00125 const Vector4POD operator/( const Vector4POD& )const; 00126 const Vector4POD operator-()const; 00127 Vector4POD& operator+=( f32 ); 00128 Vector4POD& operator-=( f32 ); 00129 Vector4POD& operator*=( f32 ); 00130 Vector4POD& operator/=( f32 ); 00131 Vector4POD& operator+=( const Vector4POD& ); 00132 Vector4POD& operator-=( const Vector4POD& ); 00133 Vector4POD& operator*=( const Vector4POD& ); 00134 Vector4POD& operator/=( const Vector4POD& ); 00135 00136 00137 //============================================================ 00139 00140 const Vector4POD min( const Vector4POD& )const; 00141 const Vector4POD max( const Vector4POD& )const; 00142 00143 00144 //============================================================ 00146 00147 const Vector4POD clamp( const Vector4POD& aMin , const Vector4POD& aMax )const; 00148 const Vector4POD clampPositive()const; 00149 const Vector4POD clampNegative()const; 00150 00151 00152 //============================================================ 00154 00155 const Vector4POD abs()const; 00156 const Vector4POD neg()const; 00157 00158 00159 //============================================================ 00161 00162 f32 squareLength()const; 00163 f32 length()const; 00164 f32 distance( const Vector4POD& )const; 00165 bool isZero()const; 00166 bool isZeroStrict()const; 00167 bool isUnit()const; 00168 const Vector4POD unit()const; 00169 void unitAssign(); 00170 00171 00172 //============================================================ 00174 00175 f32 dot( const Vector4POD& )const; 00176 00177 00178 //============================================================ 00180 00181 00182 const ShortString toShortString()const; 00184 }; 00185 00187 class Vector4 : public Vector4POD 00188 { 00189 public: 00190 //============================================================ 00192 00193 Vector4(); 00194 Vector4( const Vector4POD& aXYZW ); 00195 Vector4( f32 aX , f32 aY , f32 aZ , f32 aW ); 00196 00197 }; 00198 00200 typedef Vector4POD Vector4fPOD; 00201 00203 typedef Vector4 Vector4f; 00205 } 00206 //------------------------------------------------------------ 00207 #endif 00208 // EOF