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:
cutealien 2020-01-03 17:09:39 +00:00
parent 34d09f7c63
commit 5d0b042a65
3 changed files with 9 additions and 9 deletions

View File

@ -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

View File

@ -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);

View File

@ -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