Browse Source

Math: Add some functionality

Panagiotis Christopoulos Charitos 8 years ago
parent
commit
1bf474deb2
2 changed files with 40 additions and 15 deletions
  1. 38 10
      src/anki/math/Vec.h
  2. 2 5
      src/anki/scene/ParticleEmitter.cpp

+ 38 - 10
src/anki/math/Vec.h

@@ -2174,39 +2174,67 @@ public:
 	/// Clamp between two values.
 	void clamp(const T& minv, const T& maxv)
 	{
+		*this = max(TV(minv)).min(TV(maxv));
+	}
+
+	/// Get clamped between two values.
+	TV getClamped(const T& minv, const T& maxv) const
+	{
+		return max(TV(minv)).min(TV(maxv));
+	}
+
+	/// Clamp between two vectors.
+	void clamp(const TV& minv, const TV& maxv)
+	{
+		*this = max(minv).min(maxv);
+	}
+
+	/// Get clamped between two vectors.
+	TV getClamped(const TV& minv, const TV& maxv) const
+	{
+		return max(minv).min(maxv);
+	}
+
+	/// Get the min of all components.
+	TV min(const T& b) const
+	{
+		TV out;
 		for(U i = 0; i < N; ++i)
 		{
-			m_arr[i] = min<T>(max<T>(minv, m_arr[i]), maxv);
+			out[i] = anki::min<T>(m_arr[i], b);
 		}
+		return out;
 	}
 
-	/// Get clamped between two values.
-	TV getClamped(const T& minv, const T& maxv) const
+	/// Get the min of all components.
+	TV min(const TV& b) const
 	{
 		TV out;
 		for(U i = 0; i < N; ++i)
 		{
-			out[i] = min<T>(max<T>(minv, m_arr[i]), maxv);
+			out[i] = anki::min<T>(m_arr[i], b[i]);
 		}
 		return out;
 	}
 
-	/// Clamp between two vectors.
-	void clamp(const TV& minv, const TV& maxv)
+	/// Get the max of all components.
+	TV max(const TV& b) const
 	{
+		TV out;
 		for(U i = 0; i < N; ++i)
 		{
-			m_arr[i] = min<T>(max<T>(minv[i], m_arr[i]), maxv[i]);
+			out[i] = anki::max<T>(m_arr[i], b[i]);
 		}
+		return out;
 	}
 
-	/// Get clamped between two vectors.
-	TV getClamped(const TV& minv, const TV& maxv) const
+	/// Get the max of all components.
+	TV max(const T& b) const
 	{
 		TV out;
 		for(U i = 0; i < N; ++i)
 		{
-			out[i] = min<T>(max<T>(minv[i], m_arr[i]), maxv[i]);
+			out[i] = anki::max<T>(m_arr[i], b);
 		}
 		return out;
 	}

+ 2 - 5
src/anki/scene/ParticleEmitter.cpp

@@ -401,11 +401,8 @@ Error ParticleEmitter::frameUpdate(F32 prevUpdateTime, F32 crntTime)
 
 			const Vec4& origin = p->getPosition();
 
-			for(U i = 0; i < 3; i++)
-			{
-				aabbmin[i] = std::min(aabbmin[i], origin[i]);
-				aabbmax[i] = std::max(aabbmax[i], origin[i]);
-			}
+			aabbmin = aabbmin.min(origin);
+			aabbmax = aabbmax.max(origin);
 
 			F32 lifePercent = (crntTime - p->getTimeOfBirth()) / (p->getTimeOfDeath() - p->getTimeOfBirth());