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_3_H_
00026 #define TEX_COORD_3_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 TexCoord3{
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
00056
00057 float array[3];
00058 };
00059
00060
00061
00062
00063
00064 static const TexCoord3 zero;
00065
00066
00067 static const TexCoord3 unit;
00068
00069
00070 static const TexCoord3 unitU;
00071
00072
00073 static const TexCoord3 unitV;
00074
00075
00076 static const TexCoord3 unitW;
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 inline TexCoord3(){}
00087
00088
00089
00090
00091
00092
00093
00094 inline TexCoord3(float sourceU, float sourceV, float sourceW) :
00095 u(sourceU), v(sourceV), w(sourceW){
00096 }
00097
00098
00099
00100
00101
00102 inline explicit TexCoord3(const float* const source) :
00103 u(source[0]), v(source[1]), w(source[2]){
00104 }
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 inline void set(float sourceU, float sourceV, float sourceW){
00116 u = sourceU;
00117 v = sourceV;
00118 w = sourceW;
00119 }
00120
00121
00122
00123
00124
00125 inline void set(const float* const source){
00126 u = source[0];
00127 v = source[1];
00128 w = source[2];
00129 }
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139 inline TexCoord3 operator +(const TexCoord3& addCoord) const{
00140 return TexCoord3(u + addCoord.u, v + addCoord.v, w + addCoord.w);
00141 }
00142
00143
00144
00145
00146
00147
00148 inline TexCoord3 operator -(const TexCoord3& subCoord) const{
00149 return TexCoord3(u - subCoord.u, v - subCoord.v, w - subCoord.w);
00150 }
00151
00152
00153
00154
00155
00156
00157 inline TexCoord3 operator *(float mulValue) const{
00158 return TexCoord3(u * mulValue, v * mulValue, w * mulValue);
00159 }
00160
00161
00162
00163
00164
00165
00166
00167 inline friend TexCoord3 operator *(
00168 float mulValue, const TexCoord3& mulCoord){
00169 return TexCoord3(mulCoord.u * mulValue, mulCoord.v * mulValue,
00170 mulCoord.w * mulValue);
00171 }
00172
00173
00174
00175
00176
00177 inline TexCoord3 operator +() const{ return *this; }
00178
00179
00180
00181
00182
00183 inline TexCoord3 operator -() const{ return TexCoord3(-u, -v, -w); }
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193 inline TexCoord3& operator +=(const TexCoord3& addCoord){
00194 u += addCoord.u;
00195 v += addCoord.v;
00196 w += addCoord.w;
00197 return *this;
00198 }
00199
00200
00201
00202
00203
00204
00205 inline TexCoord3& operator -=(const TexCoord3& subCoord){
00206 u -= subCoord.u;
00207 v -= subCoord.v;
00208 w -= subCoord.w;
00209 return *this;
00210 }
00211
00212
00213
00214
00215
00216
00217 inline TexCoord3& operator *=(float mulValue){
00218 u *= mulValue;
00219 v *= mulValue;
00220 w *= mulValue;
00221 return *this;
00222 }
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232 inline bool operator ==(const TexCoord3& target) const{
00233 return ((u == target.u) && (v == target.v) && (w == target.w));
00234 }
00235
00236
00237
00238
00239
00240
00241
00242 inline bool epsilonEquals(
00243 const TexCoord3& target, float epsilon) const{
00244 Assert(epsilon >= 0.f);
00245 return (
00246 (Math::abs(u - target.u) <= epsilon) &&
00247 (Math::abs(v - target.v) <= epsilon) &&
00248 (Math::abs(w - target.w) <= epsilon));
00249 }
00250
00251
00252
00253
00254
00255
00256 inline bool operator !=(const TexCoord3& target) const{
00257 return ((u != target.u) || (v != target.v) || (w != target.w));
00258 }
00259
00260
00261
00262
00263
00264
00265
00266 inline bool notEpsilonEquals(
00267 const TexCoord3& target, float epsilon) const{
00268 Assert(epsilon >= 0.f);
00269 return (
00270 (Math::abs(u - target.u) > epsilon) ||
00271 (Math::abs(v - target.v) > epsilon) ||
00272 (Math::abs(w - target.w) > epsilon));
00273 }
00274
00275
00276
00277
00278
00279
00280
00281
00282 inline String toString() const{
00283 String returnString;
00284 returnString.format("( %.8f, %.8f, %.8f )", u, v, w);
00285 return returnString;
00286 }
00287
00288
00289 private:
00290
00291 };
00292
00293
00294 }
00295 #endif // End of TEX_COORD_3_H_
00296