Module: wine Branch: master Commit: a3634e2ca32df3f2f284f086e241ed8b78dfeed1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a3634e2ca32df3f2f284f086e2...
Author: David Adam david.adam.cnrs@gmail.com Date: Wed Jul 15 21:04:01 2009 +0200
d3dx9: Fix D3DXQuaternionToAxisAngle to make tests pass in Windows.
---
dlls/d3dx9_36/math.c | 21 ++++----------------- dlls/d3dx9_36/tests/math.c | 9 ++++----- 2 files changed, 8 insertions(+), 22 deletions(-)
diff --git a/dlls/d3dx9_36/math.c b/dlls/d3dx9_36/math.c index b3f7906..f80a5db 100644 --- a/dlls/d3dx9_36/math.c +++ b/dlls/d3dx9_36/math.c @@ -1373,23 +1373,10 @@ D3DXQUATERNION* WINAPI D3DXQuaternionSquad(D3DXQUATERNION *pout, CONST D3DXQUATE
void WINAPI D3DXQuaternionToAxisAngle(CONST D3DXQUATERNION *pq, D3DXVECTOR3 *paxis, FLOAT *pangle) { - FLOAT norm; - - *pangle = 0.0f; - norm = D3DXQuaternionLength(pq); - if ( norm ) - { - paxis->x = pq->x / norm; - paxis->y = pq->y / norm; - paxis->z = pq->z / norm; - if ( fabs( pq->w ) <= 1.0f ) *pangle = 2.0f * acos(pq->w); - } - else - { - paxis->x = 1.0f; - paxis->y = 0.0f; - paxis->z = 0.0f; - } + paxis->x = pq->x; + paxis->y = pq->y; + paxis->z = pq->z; + *pangle = 2.0f * acos(pq->w); }
/*_________________D3DXVec2_____________________*/ diff --git a/dlls/d3dx9_36/tests/math.c b/dlls/d3dx9_36/tests/math.c index 1fe12c7..d55a0d4 100644 --- a/dlls/d3dx9_36/tests/math.c +++ b/dlls/d3dx9_36/tests/math.c @@ -938,20 +938,19 @@ static void D3DXQuaternionTest(void)
/*_______________D3DXQuaternionToAxisAngle__________________*/ Nq.x = 1.0f/22.0f; Nq.y = 2.0f/22.0f; Nq.z = 4.0f/22.0f; Nq.w = 10.0f/22.0f; - expectedvec.x = 1.0f/11.0f; expectedvec.y = 2.0f/11.0f; expectedvec.z = 4.0f/11.0f; + expectedvec.x = 1.0f/22.0f; expectedvec.y = 2.0f/22.0f; expectedvec.z = 4.0f/22.0f; expected = 2.197869f; D3DXQuaternionToAxisAngle(&Nq,&axis,&angle); expect_vec3(expectedvec,axis); ok(fabs( angle - expected ) < admitted_error, "Expected: %f, Got: %f\n", expected, angle); /* Test if |w|>1.0f */ - expectedvec.x = 1.0f/11.0f; expectedvec.y = 2.0f/11.0f; expectedvec.z = 4.0f/11.0f; + expectedvec.x = 1.0f; expectedvec.y = 2.0f; expectedvec.z = 4.0f; expected = 0.0f; D3DXQuaternionToAxisAngle(&q,&axis,&angle); expect_vec3(expectedvec,axis); - ok(fabs( angle - expected ) < admitted_error, "Expected: %f, Got: %f\n", expected, angle); /* Test the null quaternion */ - expectedvec.x = 1.0f; expectedvec.y = 0.0f; expectedvec.z = 0.0f; - expected = 0.0f; + expectedvec.x = 0.0f; expectedvec.y = 0.0f; expectedvec.z = 0.0f; + expected = 3.141593f; D3DXQuaternionToAxisAngle(&nul,&axis,&angle); expect_vec3(expectedvec,axis); ok(fabs( angle - expected ) < admitted_error, "Expected: %f, Got: %f\n", expected, angle);