Lumino.Math
|
00001 00002 #ifndef LUMINO_MATH_VECTOR3_H 00003 #define LUMINO_MATH_VECTOR3_H 00004 00005 #include <stdio.h> 00006 #include "Common.h" 00007 00008 namespace Lumino 00009 { 00010 class Vector2; 00011 class Vector4; 00012 class Quaternion; 00013 class Matrix; 00014 00018 class LUMINO_EXPORT Vector3 00019 { 00020 public: 00021 00022 float X; 00023 float Y; 00024 float Z; 00025 00026 public: 00027 00028 static const Vector3 Zero; 00029 static const Vector3 UnitX; 00030 static const Vector3 UnitY; 00031 static const Vector3 UnitZ; 00032 static const Vector3 One; 00033 00034 public: 00035 00039 Vector3(); 00040 00044 Vector3(float x, float y, float z); 00045 00049 Vector3(const Vector2& vec, float z); 00050 00051 public: 00052 00056 void Set(float x, float y, float z); 00057 00061 const Vector2& GetXY() const; 00062 00066 float GetLength() const; 00067 00071 float GetLengthSquared() const; 00072 00077 void Normalize(); 00078 00084 void Clamp(const Vector3& minVec, const Vector3& maxVec); 00085 00091 void TransformCoord(const Matrix& mat); 00092 00096 bool IsNaNOrInf() const; 00097 00104 void Print(const char* format = NULL, FILE* stream = NULL) const; 00105 00106 public: 00107 00115 static Vector3 Normalize(float x, float y, float z); 00116 00122 static Vector3 Normalize(const Vector3& vec); 00123 00130 static float Dot(const Vector3& vec1, const Vector3& vec2); 00131 00138 static Vector3 Cross(const Vector3& vec1, const Vector3& vec2); 00139 00146 static Vector3 Min(const Vector3& vec1, const Vector3& vec2); 00147 00154 static Vector3 Max(const Vector3& vec1, const Vector3& vec2); 00155 00162 static Vector3 Reflect(const Vector3& vec, const Vector3& normal); 00163 00170 static Vector3 Slide(const Vector3& vec, const Vector3& normal); 00171 00178 static Vector3 Transform(const Vector3& vec, const Quaternion& qua); 00179 00186 static Vector4 Transform(const Vector3& vec, const Matrix& mat); 00187 00195 static Vector3 TransformCoord(const Vector3& vec, const Matrix& mat); 00196 00205 static Vector3 Lerp(const Vector3& start, const Vector3& end, float t); 00206 00217 static Vector3 Hermite(const Vector3& v1, const Vector3& a1, const Vector3& v2, const Vector3& a2, float t); 00218 00229 static Vector3 CatmullRom(const Vector3& vec1, const Vector3& vec2, const Vector3& vec3, const Vector3& vec4, float t); 00230 00242 static Vector3 Project(const Vector3& point, const Matrix& worldViewProj, float x, float y, float width, float height, float minZ = 0.0f, float maxZ = 1.0f); 00243 00255 static Vector3 Unproject(const Vector3& point, const Matrix& worldViewProj, float x, float y, float width, float height, float minZ = 0.0f, float maxZ = 1.0f); 00256 00257 public: 00258 00259 Vector3& operator += (const Vector3& v); 00260 Vector3& operator += (float v); 00261 Vector3& operator -= (const Vector3& v); 00262 Vector3& operator -= (float v); 00263 Vector3& operator *= (const Vector3& v); 00264 Vector3& operator *= (float v); 00265 Vector3& operator /= (const Vector3& v); 00266 Vector3& operator /= (float v); 00267 00268 friend Vector3 operator + (const Vector3& v1, const Vector3& v2); 00269 friend Vector3 operator + (const Vector3& v1, float v2); 00270 friend Vector3 operator + (float v1, const Vector3& v2); 00271 friend Vector3 operator - (const Vector3& v1, const Vector3& v2); 00272 friend Vector3 operator - (const Vector3& v1, float v2); 00273 friend Vector3 operator - (float v1, const Vector3& v2); 00274 friend Vector3 operator * (const Vector3& v1, const Vector3& v2); 00275 friend Vector3 operator * (const Vector3& v1, float v2); 00276 friend Vector3 operator * (float v1, const Vector3& v2); 00277 friend Vector3 operator / (const Vector3& v1, const Vector3& v2); 00278 friend Vector3 operator / (const Vector3& v1, float v2); 00279 friend Vector3 operator / (float v1, const Vector3& v2); 00280 00281 friend Vector3 operator - (const Vector3& v1); 00282 00283 bool operator == (const Vector3& v) const; 00284 bool operator != (const Vector3& v) const; 00285 00286 #ifdef LN_MATH_VECTOR3_EXTENSION 00287 LN_MATH_VECTOR3_EXTENSION 00288 #endif 00289 }; 00290 00291 } // namespace Lumino 00292 00293 #include "Vector3.inl" 00294 00295 #endif // LUMINO_MATH_VECTOR3_H