Бранимир Караџић 1 سال پیش
والد
کامیت
34d2948860
3فایلهای تغییر یافته به همراه7 افزوده شده و 5 حذف شده
  1. 4 4
      include/bx/inline/math.inl
  2. 1 1
      include/bx/math.h
  3. 2 0
      tests/math_test.cpp

+ 4 - 4
include/bx/inline/math.inl

@@ -896,7 +896,7 @@ namespace bx
 
 	inline BX_CONST_FUNC Vec3 normalize(const Vec3 _a)
 	{
-		const float invLen = 1.0f/length(_a);
+		const float invLen = rcpSafe(length(_a) );
 		const Vec3 result = mul(_a, invLen);
 		return result;
 	}
@@ -957,14 +957,14 @@ namespace bx
 
 		if (abs(nx) > abs(nz) )
 		{
-			float invLen = 1.0f / sqrt(nx*nx + nz*nz);
+			const float invLen = rcpSafe(sqrt(nx*nx + nz*nz) );
 			_outT.x = -nz * invLen;
 			_outT.y =  0.0f;
 			_outT.z =  nx * invLen;
 		}
 		else
 		{
-			float invLen = 1.0f / sqrt(ny*ny + nz*nz);
+			const float invLen = rcpSafe(sqrt(ny*ny + nz*nz) );
 			_outT.x =  0.0f;
 			_outT.y =  nz * invLen;
 			_outT.z = -ny * invLen;
@@ -1264,7 +1264,7 @@ namespace bx
 			return;
 		}
 
-		const float invSa = 1.0f/sa;
+		const float invSa = rcpSafe(sa);
 
 		_outAxis = { _a.x * invSa, _a.y * invSa, _a.z * invSa };
 	}

+ 1 - 1
include/bx/math.h

@@ -355,7 +355,7 @@ namespace bx
 	///
 	BX_CONSTEXPR_FUNC float rcp(float _a);
 
-	/// Returns reciprocal of _a.
+	/// Returns reciprocal of _a. Avoids divide by zero.
 	///
 	BX_CONSTEXPR_FUNC float rcpSafe(float _a);
 

+ 2 - 0
tests/math_test.cpp

@@ -670,6 +670,8 @@ void mtxCheck(const float* _a, const float* _b)
 
 TEST_CASE("vec3", "[math][vec3]")
 {
+	REQUIRE(bx::isEqual({0.0f, 0.0f, 0.0f}, bx::normalize({0.0f, 0.0f, 0.0f}), 0.0f) );
+
 	bx::Vec3 normalized = bx::normalize({0.0f, 1.0f, 0.0f});
 	REQUIRE(bx::isEqual(normalized, {0.0f, 1.0f, 0.0f}, 0.0f) );