David Adam : d3dx9: Fix D3DXQuaternionToAxisAngle to make tests pass in Windows.

Alexandre Julliard julliard at winehq.org
Thu Jul 16 11:58:26 CDT 2009


Module: wine
Branch: master
Commit: a3634e2ca32df3f2f284f086e241ed8b78dfeed1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a3634e2ca32df3f2f284f086e241ed8b78dfeed1

Author: David Adam <david.adam.cnrs at 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);




More information about the wine-cvs mailing list