diff options
| author | Loren Shih <seraph@lindenlab.com> | 2011-04-04 10:42:52 -0400 | 
|---|---|---|
| committer | Loren Shih <seraph@lindenlab.com> | 2011-04-04 10:42:52 -0400 | 
| commit | 47781184fc50f6e9e0842c2d7fa7632038a279df (patch) | |
| tree | 83522faadf17895565c38d89064aff6da51a1006 /indra/llmath | |
| parent | 0dd0758ab9114c53a274ff707d626c8fe5e7afb0 (diff) | |
| parent | 3c6a09372da395a621fb35db4934af2c7c21e910 (diff) | |
Automated merge up from viewer-development into mesh-development
Diffstat (limited to 'indra/llmath')
| -rw-r--r-- | indra/llmath/tests/m3math_test.cpp | 26 | ||||
| -rw-r--r-- | indra/llmath/v3math.cpp | 15 | ||||
| -rw-r--r-- | indra/llmath/v3math.h | 1 | 
3 files changed, 35 insertions, 7 deletions
| diff --git a/indra/llmath/tests/m3math_test.cpp b/indra/llmath/tests/m3math_test.cpp index e4d31996a3..1ca2b005d9 100644 --- a/indra/llmath/tests/m3math_test.cpp +++ b/indra/llmath/tests/m3math_test.cpp @@ -37,6 +37,16 @@  #include "../test/lltut.h" +#if LL_WINDOWS +// disable unreachable code warnings caused by usage of skip. +#pragma warning(disable: 4702) +#endif + +#if LL_WINDOWS +// disable unreachable code warnings caused by usage of skip. +#pragma warning(disable: 4702) +#endif +  namespace tut  {  	struct m3math_test @@ -277,19 +287,21 @@ namespace tut  		LLVector3 llvec2(1, 2, 0);  		LLVector3 llvec3(2, 4, 2); +        skip("This test fails depending on architecture. Need to fix comparison operation, is_approx_equal, to work on more than one platform."); +  		llmat_obj.setRows(llvec1, llvec2, llvec3);  		llmat_obj.orthogonalize();  		ensure("LLMatrix3::orthogonalize failed ", -		       is_approx_equal(0.19611613f, llmat_obj.mMatrix[0][0]) && +		       is_approx_equal(0.19611614f, llmat_obj.mMatrix[0][0]) &&  		       is_approx_equal(0.78446454f, llmat_obj.mMatrix[0][1]) && -		       is_approx_equal(0.58834839f, llmat_obj.mMatrix[0][2]) && -		       is_approx_equal(0.47628206f, llmat_obj.mMatrix[1][0]) && -		       is_approx_equal(0.44826555f, llmat_obj.mMatrix[1][1]) && -		       is_approx_equal(-0.75644791f, llmat_obj.mMatrix[1][2]) && -		       is_approx_equal(-0.85714287f, llmat_obj.mMatrix[2][0]) && +		       is_approx_equal(0.58834841f, llmat_obj.mMatrix[0][2]) && +		       is_approx_equal(0.47628204f, llmat_obj.mMatrix[1][0]) && +		       is_approx_equal(0.44826545f, llmat_obj.mMatrix[1][1]) && +		       is_approx_equal(-0.75644795f, llmat_obj.mMatrix[1][2]) && +		       is_approx_equal(-0.85714286f, llmat_obj.mMatrix[2][0]) &&  		       is_approx_equal(0.42857143f, llmat_obj.mMatrix[2][1]) && -		       is_approx_equal(-0.28571427f, llmat_obj.mMatrix[2][2])); +		       is_approx_equal(-0.28571429f, llmat_obj.mMatrix[2][2]));  	}  	//test case for adjointTranspose() fn. diff --git a/indra/llmath/v3math.cpp b/indra/llmath/v3math.cpp index e88b34f8d6..e7107dee16 100644 --- a/indra/llmath/v3math.cpp +++ b/indra/llmath/v3math.cpp @@ -134,6 +134,21 @@ BOOL LLVector3::clampLength( F32 length_limit )  	return changed;  } +BOOL LLVector3::clamp(const LLVector3 &min_vec, const LLVector3 &max_vec) +{ +	BOOL ret = FALSE; + +	if (mV[0] < min_vec[0]) { mV[0] = min_vec[0]; ret = TRUE; } +	if (mV[1] < min_vec[1]) { mV[1] = min_vec[1]; ret = TRUE; } +	if (mV[2] < min_vec[2]) { mV[2] = min_vec[2]; ret = TRUE; } + +	if (mV[0] > max_vec[0]) { mV[0] = max_vec[0]; ret = TRUE; } +	if (mV[1] > max_vec[1]) { mV[1] = max_vec[1]; ret = TRUE; } +	if (mV[2] > max_vec[2]) { mV[2] = max_vec[2]; ret = TRUE; } + +	return ret; +} +  // Sets all values to absolute value of their original values  // Returns TRUE if data changed diff --git a/indra/llmath/v3math.h b/indra/llmath/v3math.h index acb2240075..0432aeba4c 100644 --- a/indra/llmath/v3math.h +++ b/indra/llmath/v3math.h @@ -70,6 +70,7 @@ class LLVector3  		inline BOOL isFinite() const;									// checks to see if all values of LLVector3 are finite  		BOOL		clamp(F32 min, F32 max);		// Clamps all values to (min,max), returns TRUE if data changed +		BOOL		clamp(const LLVector3 &min_vec, const LLVector3 &max_vec); // Scales vector by another vector  		BOOL		clampLength( F32 length_limit );					// Scales vector to limit length to a value  		void		quantize16(F32 lowerxy, F32 upperxy, F32 lowerz, F32 upperz);	// changes the vector to reflect quatization | 
