mirror of
https://github.com/minetest/irrlicht.git
synced 2024-12-24 17:50:31 +01:00
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:
parent
34d09f7c63
commit
5d0b042a65
@ -140,7 +140,7 @@ class quaternion
|
|||||||
quaternion& makeInverse();
|
quaternion& makeInverse();
|
||||||
|
|
||||||
//! Set this quaternion to the linear interpolation between two quaternions
|
//! 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
|
you will want to use lerpN instead as most other quaternion functions expect
|
||||||
to work with a normalized quaternion.
|
to work with a normalized quaternion.
|
||||||
\param q1 First quaternion to be interpolated.
|
\param q1 First quaternion to be interpolated.
|
||||||
@ -152,7 +152,7 @@ class quaternion
|
|||||||
quaternion& lerp(quaternion q1, quaternion q2, f32 time);
|
quaternion& lerp(quaternion q1, quaternion q2, f32 time);
|
||||||
|
|
||||||
//! Set this quaternion to the linear interpolation between two quaternions and normalize the result
|
//! Set this quaternion to the linear interpolation between two quaternions and normalize the result
|
||||||
/**
|
/**
|
||||||
\param q1 First quaternion to be interpolated.
|
\param q1 First quaternion to be interpolated.
|
||||||
\param q2 Second quaternion to be interpolated.
|
\param q2 Second quaternion to be interpolated.
|
||||||
\param time Progress of interpolation. For time=0 the result is
|
\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
|
// removed conditional branch since it may slow down and anyway the condition was
|
||||||
// false even after normalization in some cases.
|
// 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
|
// 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);
|
logTestString("Inequality before quat.toEuler(): %f,%f,%f\n", v.X,v.Y,v.Z);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
q.toEuler(v2);
|
q.toEuler(v2);
|
||||||
v2*=core::RADTODEG;
|
v2*=core::RADTODEG;
|
||||||
v2=v2.rotationToDirection(turn);
|
v2=v2.rotationToDirection(turn);
|
||||||
@ -110,7 +110,7 @@ bool testQuatEulerMatrix()
|
|||||||
core::vector3df v6 = mat.getRotationDegrees()*core::DEGTORAD;
|
core::vector3df v6 = mat.getRotationDegrees()*core::DEGTORAD;
|
||||||
// make sure comparison matrix is correct
|
// make sure comparison matrix is correct
|
||||||
result &= v4.equals(v6);
|
result &= v4.equals(v6);
|
||||||
|
|
||||||
core::matrix4 mat2 = q1.getMatrix();
|
core::matrix4 mat2 = q1.getMatrix();
|
||||||
result &= mat.equals(mat2, 0.0005f);
|
result &= mat.equals(mat2, 0.0005f);
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
Tests finished. 72 tests of 72 passed.
|
Tests finished. 72 tests of 72 passed.
|
||||||
Compiled as DEBUG
|
Compiled as DEBUG
|
||||||
Test suite pass at GMT Fri Jan 03 14:40:24 2020
|
Test suite pass at GMT Fri Jan 3 17:05:41 2020
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user