Vector.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. #pragma once
  2. #include "Common.h"
  3. NS_BF_BEGIN;
  4. class Matrix4;
  5. class Quaternion;
  6. class TexCoords
  7. {
  8. public:
  9. float mU;
  10. float mV;
  11. public:
  12. TexCoords()
  13. {
  14. }
  15. TexCoords(float u, float v) : mU(u), mV(v)
  16. {
  17. }
  18. static TexCoords FlipV(const TexCoords& texCoords)
  19. {
  20. return TexCoords(texCoords.mU, 1.0f - texCoords.mV);
  21. }
  22. };
  23. class Vector3
  24. {
  25. public:
  26. float mX;
  27. float mY;
  28. float mZ;
  29. public:
  30. Vector3();
  31. Vector3(float x, float y, float z);
  32. float GetMagnitude() const;
  33. float GetMagnitudeSquare() const;
  34. static Vector3 Normalize(const Vector3& vec);
  35. static float Dot(const Vector3& vec1, const Vector3& vec2);
  36. static Vector3 CrossProduct(const Vector3& vec1, const Vector3& vec2);
  37. static float GetDistance(const Vector3& v0, const Vector3& v1)
  38. {
  39. return (v0 - v1).GetMagnitude();
  40. }
  41. static float GetDistanceSquare(const Vector3& v0, const Vector3& v1)
  42. {
  43. return (v0 - v1).GetMagnitudeSquare();
  44. }
  45. bool operator==(const Vector3& check) const
  46. {
  47. return (mX == check.mX) && (mY == check.mY) && (mZ == check.mZ);
  48. }
  49. bool operator!=(const Vector3& check) const
  50. {
  51. return (mX != check.mX) || (mY != check.mY) || (mZ != check.mZ);
  52. }
  53. static Vector3 Transform(const Vector3& vec, const Matrix4& matrix);
  54. static Vector3 TransformW(const Vector3& vec, const Matrix4& matrix);
  55. static Vector3 Transform(const Vector3& vec, const Quaternion& quat);
  56. static Vector3 Transform2(const Vector3& vec, const Quaternion& quat);
  57. static Vector3 Scale(const Vector3& vec, float scale)
  58. {
  59. return Vector3(vec.mX * scale, vec.mY * scale, vec.mZ * scale);
  60. }
  61. Vector3 operator +(const Vector3& v2) const
  62. {
  63. return Vector3(mX + v2.mX, mY + v2.mY, mZ + v2.mZ);
  64. }
  65. Vector3 operator *(const Vector3& v2) const
  66. {
  67. return Vector3(mX * v2.mX, mY * v2.mY, mZ * v2.mZ);
  68. }
  69. Vector3 operator *(float scale) const
  70. {
  71. return Vector3(mX * scale, mY * scale, mZ * scale);
  72. }
  73. Vector3 operator /(float scale) const
  74. {
  75. return Vector3(mX / scale, mY / scale, mZ / scale);
  76. }
  77. float operator^(const Vector3& v) // Angle between vectors
  78. {
  79. return acosf(Dot(*this / this->GetMagnitude(), v / v.GetMagnitude()));
  80. }
  81. inline Vector3& operator += (const Vector3& vec)
  82. {
  83. mX += vec.mX;
  84. mY += vec.mY;
  85. mZ += vec.mZ;
  86. return *this;
  87. }
  88. inline Vector3& operator -= (const Vector3& vec)
  89. {
  90. mX -= vec.mX;
  91. mY -= vec.mY;
  92. mZ -= vec.mZ;
  93. return *this;
  94. }
  95. inline Vector3& operator *= (float num)
  96. {
  97. mX *= num;
  98. mY *= num;
  99. mZ *= num;
  100. return *this;
  101. }
  102. inline Vector3& operator /= (float num)
  103. {
  104. mX /= num;
  105. mY /= num;
  106. mZ /= num;
  107. return *this;
  108. }
  109. inline Vector3 operator - (const Vector3& vec) const
  110. {
  111. Vector3 result;
  112. result.mX = mX - vec.mX;
  113. result.mY = mY - vec.mY;
  114. result.mZ = mZ - vec.mZ;
  115. return result;
  116. }
  117. inline Vector3 operator + (const Vector3& vec)
  118. {
  119. Vector3 result;
  120. result.mX = mX + vec.mX;
  121. result.mY = mY + vec.mY;
  122. result.mZ = mZ + vec.mZ;
  123. return result;
  124. }
  125. inline Vector3& operator *= (const Vector3& vec)
  126. {
  127. mX *= vec.mX;
  128. mY *= vec.mY;
  129. mZ *= vec.mZ;
  130. return *this;
  131. }
  132. };
  133. class Vector4
  134. {
  135. public:
  136. float mX;
  137. float mY;
  138. float mZ;
  139. float mW;
  140. public:
  141. Vector4(float x = 0, float y = 0, float z = 0, float w = 0);
  142. bool operator==(const Vector4& check) const
  143. {
  144. return (mX == check.mX) && (mY == check.mY) && (mZ == check.mZ);
  145. }
  146. bool operator!=(const Vector4& check) const
  147. {
  148. return (mX != check.mX) || (mY != check.mY) || (mZ != check.mZ);
  149. }
  150. static Vector4 Scale(const Vector4& vec, float scale)
  151. {
  152. return Vector4(vec.mX * scale, vec.mY * scale, vec.mZ * scale, vec.mW * scale);
  153. }
  154. Vector4 operator +(const Vector4& v2) const
  155. {
  156. return Vector4(mX + v2.mX, mY + v2.mY, mZ + v2.mZ, mW + v2.mW);
  157. }
  158. Vector4 operator *(const Vector4& v2) const
  159. {
  160. return Vector4(mX * v2.mX, mY * v2.mY, mZ * v2.mZ, mW * v2.mW);
  161. }
  162. Vector4 operator *(float scale) const
  163. {
  164. return Vector4(mX * scale, mY * scale, mZ * scale, mW * scale);
  165. }
  166. inline Vector4& operator -= (const Vector4& vec)
  167. {
  168. mX -= vec.mX;
  169. mY -= vec.mY;
  170. mZ -= vec.mZ;
  171. mW -= vec.mW;
  172. return *this;
  173. }
  174. inline Vector4& operator *= (const Vector4& vec)
  175. {
  176. mX *= vec.mX;
  177. mY *= vec.mY;
  178. mZ *= vec.mZ;
  179. mW *= vec.mW;
  180. return *this;
  181. }
  182. };
  183. NS_BF_END;