Vec4.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #pragma once
  2. #include "Vec3.h"
  3. namespace Framework
  4. {
  5. template< typename T >
  6. class Vec4
  7. {
  8. public:
  9. T x;
  10. T y;
  11. T z;
  12. T w;
  13. // Konstruktor
  14. inline Vec4()
  15. {}
  16. inline Vec4( T x, T y, T z, T w )
  17. : x( x ),
  18. y( y ),
  19. z( z ),
  20. w( w )
  21. {}
  22. inline Vec4( const Vec4 &vect )
  23. : Vec4( vect.x, vect.y, vect.z, vect.w )
  24. {}
  25. // nicht constant
  26. inline Vec4 &normalize()
  27. {
  28. const T länge = län();
  29. x /= länge;
  30. y /= länge;
  31. z /= länge;
  32. w /= länge;
  33. return *this;
  34. }
  35. inline Vec4 &Swap( Vec4 &vect )
  36. {
  37. const Vec4 tmp = vect;
  38. vect = *this;
  39. *this = tmp;
  40. return *this;
  41. }
  42. inline Vec4 operator=( const Vec4 &r )
  43. {
  44. x = r.x;
  45. y = r.y;
  46. z = r.z;
  47. w = r.w;
  48. return *this;
  49. }
  50. inline Vec4 operator+=( const Vec4 &r )
  51. {
  52. x += r.x;
  53. y += r.y;
  54. z += r.z;
  55. w += r.w;
  56. return *this;
  57. }
  58. inline Vec4 operator-=( const Vec4 &r )
  59. {
  60. x -= r.x;
  61. y -= r.y;
  62. z -= r.z;
  63. w -= r.w;
  64. return *this;
  65. }
  66. inline Vec4 operator*=( const T &r )
  67. {
  68. x *= r;
  69. y *= r;
  70. z *= r;
  71. w *= r;
  72. return *this;
  73. }
  74. inline Vec4 operator/=( const T &r )
  75. {
  76. x /= r;
  77. y /= r;
  78. z /= r;
  79. w /= r;
  80. return *this;
  81. }
  82. // constant
  83. inline Vec4 operator-() const
  84. {
  85. return{ -x, -y, -z, -w };
  86. }
  87. template< typename T2 >
  88. inline operator Vec4< T2 >() const
  89. {
  90. return{ (T2)x, (T2)y, (T2)z, (T2)w };
  91. }
  92. inline T länSq() const
  93. {
  94. return *this * *this;
  95. }
  96. inline T län() const
  97. {
  98. return sqrt( länSq() );
  99. }
  100. inline T operator*( const Vec4 &r ) const
  101. {
  102. return x * r.x + y * r.y + z * r.z;// +w * r.w;
  103. }
  104. inline T operator*( const Vec3< T > &r ) const
  105. {
  106. return x * r.x + y * r.y + z * r.z + w;
  107. }
  108. inline Vec4 operator+( const Vec4 &r ) const
  109. {
  110. return Vec4( *this ) += r;
  111. }
  112. inline Vec4 operator-( const Vec4 &r ) const
  113. {
  114. return Vec4( *this ) -= r;
  115. }
  116. inline Vec4 operator*( const T &r ) const
  117. {
  118. return Vec4( *this ) *= r;
  119. }
  120. inline Vec4 operator/( const T &r ) const
  121. {
  122. return Vec4( *this ) /= r;
  123. }
  124. inline bool operator==( const Vec4 &r ) const
  125. {
  126. return x == r.x && y == r.y && z == r.z && w == r.w;
  127. }
  128. inline bool operator!=( const Vec4 &r ) const
  129. {
  130. return !( *this == r );
  131. }
  132. };
  133. }