00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef TEX_COORD_4_H_
00026 #define TEX_COORD_4_H_
00027
00028 #include <Core/System/Math.h>
00029 #include <Core/Primitive/String.h>
00030
00031 namespace Lamp{
00032
00033
00034
00035
00036
00037
00038
00039 class TexCoord4{
00040 public:
00041
00042
00043
00044
00045 union{
00046
00047 struct{
00048
00049 float u;
00050
00051 float v;
00052
00053 float w;
00054
00055 float x;
00056 };
00057
00058
00059 float array[4];
00060 };
00061
00062
00063
00064
00065
00066 static const TexCoord4 zero;
00067
00068
00069 static const TexCoord4 unit;
00070
00071
00072 static const TexCoord4 unitU;
00073
00074
00075 static const TexCoord4 unitV;
00076
00077
00078 static const TexCoord4 unitW;
00079
00080
00081 static const TexCoord4 unitX;
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091 inline TexCoord4(){}
00092
00093
00094
00095
00096
00097
00098
00099
00100 inline TexCoord4(
00101 float sourceU, float sourceV, float sourceW, float sourceX) :
00102 u(sourceU), v(sourceV), w(sourceW), x(sourceX){
00103 }
00104
00105
00106
00107
00108
00109 inline explicit TexCoord4(const float* const source) :
00110 u(source[0]), v(source[1]), w(source[2]), x(source[3]){
00111 }
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123 inline void set(float sourceU, float sourceV, float sourceW, float sourceX){
00124 u = sourceU;
00125 v = sourceV;
00126 w = sourceW;
00127 x = sourceX;
00128 }
00129
00130
00131
00132
00133
00134 inline void set(const float* const source){
00135 u = source[0];
00136 v = source[1];
00137 w = source[2];
00138 x = source[3];
00139 }
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149 inline TexCoord4 operator +(const TexCoord4& addCoord) const{
00150 return TexCoord4(u + addCoord.u, v + addCoord.v,
00151 w + addCoord.w, x + addCoord.x);
00152 }
00153
00154
00155
00156
00157
00158
00159 inline TexCoord4 operator -(const TexCoord4& subCoord) const{
00160 return TexCoord4(u - subCoord.u, v - subCoord.v,
00161 w - subCoord.w, x - subCoord.x);
00162 }
00163
00164
00165
00166
00167
00168
00169 inline TexCoord4 operator *(float mulValue) const{
00170 return TexCoord4(u * mulValue, v * mulValue,
00171 w * mulValue, x * mulValue);
00172 }
00173
00174
00175
00176
00177
00178
00179
00180 inline friend TexCoord4 operator *(
00181 float mulValue, const TexCoord4& mulCoord){
00182 return TexCoord4(mulCoord.u * mulValue, mulCoord.v * mulValue,
00183 mulCoord.w * mulValue, mulCoord.x * mulValue);
00184 }
00185
00186
00187
00188
00189
00190 inline TexCoord4 operator +() const{ return *this; }
00191
00192
00193
00194
00195
00196 inline TexCoord4 operator -() const{ return TexCoord4(-u, -v, -w, -x); }
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206 inline TexCoord4& operator +=(const TexCoord4& addCoord){
00207 u += addCoord.u;
00208 v += addCoord.v;
00209 w += addCoord.w;
00210 x += addCoord.x;
00211 return *this;
00212 }
00213
00214
00215
00216
00217
00218
00219 inline TexCoord4& operator -=(const TexCoord4& subCoord){
00220 u -= subCoord.u;
00221 v -= subCoord.v;
00222 w -= subCoord.w;
00223 x -= subCoord.x;
00224 return *this;
00225 }
00226
00227
00228
00229
00230
00231
00232 inline TexCoord4& operator *=(float mulValue){
00233 u *= mulValue;
00234 v *= mulValue;
00235 w *= mulValue;
00236 x *= mulValue;
00237 return *this;
00238 }
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248 inline bool operator ==(const TexCoord4& target) const{
00249 return ((u == target.u) && (v == target.v) &&
00250 (w == target.w) && (x == target.x));
00251 }
00252
00253
00254
00255
00256
00257
00258
00259 inline bool epsilonEquals(
00260 const TexCoord4& target, float epsilon) const{
00261 Assert(epsilon >= 0.f);
00262 return (
00263 (Math::abs(u - target.u) <= epsilon) &&
00264 (Math::abs(v - target.v) <= epsilon) &&
00265 (Math::abs(w - target.w) <= epsilon) &&
00266 (Math::abs(x - target.x) <= epsilon));
00267 }
00268
00269
00270
00271
00272
00273
00274 inline bool operator !=(const TexCoord4& target) const{
00275 return ((u != target.u) || (v != target.v) ||
00276 (w != target.w) || (x != target.x));
00277 }
00278
00279
00280
00281
00282
00283
00284
00285 inline bool notEpsilonEquals(
00286 const TexCoord4& target, float epsilon) const{
00287 Assert(epsilon >= 0.f);
00288 return (
00289 (Math::abs(u - target.u) > epsilon) ||
00290 (Math::abs(v - target.v) > epsilon) ||
00291 (Math::abs(w - target.w) > epsilon) ||
00292 (Math::abs(x - target.x) > epsilon));
00293 }
00294
00295
00296
00297
00298
00299
00300
00301
00302 inline String toString() const{
00303 String returnString;
00304 returnString.format("( %.8f, %.8f, %.8f, %.8f )", u, v, w, x);
00305 return returnString;
00306 }
00307
00308
00309 private:
00310
00311 };
00312
00313
00314 }
00315 #endif // End of TEX_COORD_4_H_
00316