Use f64 version of reciprocal_squareroot in quaternion::normalize for more precision.
The f32 version jumped around more on gcc/linux (didn't do so with VisualStudio, mabye sqrt on VS already uses double internally). git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6036 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
		| @@ -140,7 +140,7 @@ class quaternion | ||||
| 		quaternion& makeInverse(); | ||||
|  | ||||
| 		//! Set this quaternion to the linear interpolation between two quaternions | ||||
| 		/** NOTE: lerp result is *not* a normalized quaternion. In most cases  | ||||
| 		/** NOTE: lerp result is *not* a normalized quaternion. In most cases | ||||
| 		you will want to use lerpN instead as most other quaternion functions expect | ||||
| 		to work with a normalized quaternion. | ||||
| 		\param q1 First quaternion to be interpolated. | ||||
| @@ -152,7 +152,7 @@ class quaternion | ||||
| 		quaternion& lerp(quaternion q1, quaternion q2, f32 time); | ||||
|  | ||||
| 		//! Set this quaternion to the linear interpolation between two quaternions and normalize the result | ||||
| 		/**  | ||||
| 		/** | ||||
| 		\param q1 First quaternion to be interpolated. | ||||
| 		\param q2 Second quaternion to be interpolated. | ||||
| 		\param time Progress of interpolation. For time=0 the result is | ||||
| @@ -585,7 +585,7 @@ inline quaternion& quaternion::normalize() | ||||
| { | ||||
| 	// removed conditional branch since it may slow down and anyway the condition was | ||||
| 	// false even after normalization in some cases. | ||||
| 	return (*this *= reciprocal_squareroot ( X*X + Y*Y + Z*Z + W*W )); | ||||
| 	return (*this *= (f32)reciprocal_squareroot ( (f64)(X*X + Y*Y + Z*Z + W*W) )); | ||||
| } | ||||
|  | ||||
| // Set this quaternion to the result of the linear interpolation between two quaternions | ||||
|   | ||||
| @@ -18,7 +18,7 @@ inline bool compareQ(const core::vector3df& v, const core::vector3df& turn=core: | ||||
| 		logTestString("Inequality before quat.toEuler(): %f,%f,%f\n", v.X,v.Y,v.Z); | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
|  | ||||
| 	q.toEuler(v2); | ||||
| 	v2*=core::RADTODEG; | ||||
| 	v2=v2.rotationToDirection(turn); | ||||
| @@ -110,7 +110,7 @@ bool testQuatEulerMatrix() | ||||
| 	core::vector3df v6 = mat.getRotationDegrees()*core::DEGTORAD; | ||||
| 	// make sure comparison matrix is correct | ||||
| 	result &= v4.equals(v6); | ||||
|   | ||||
|  | ||||
| 	core::matrix4 mat2 = q1.getMatrix(); | ||||
| 	result &= mat.equals(mat2, 0.0005f); | ||||
|  | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| Tests finished. 72 tests of 72 passed. | ||||
| Compiled as DEBUG | ||||
| Test suite pass at GMT Fri Jan 03 14:40:24 2020 | ||||
|  | ||||
| Tests finished. 72 tests of 72 passed. | ||||
| Compiled as DEBUG | ||||
| Test suite pass at GMT Fri Jan  3 17:05:41 2020 | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user