David Adam : d3dx8: Implement D3DXTransformNormal.

Alexandre Julliard julliard at winehq.org
Mon Oct 29 08:35:00 CDT 2007


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

Author: David Adam <David.Adam at math.cnrs.fr>
Date:   Sat Oct 27 12:21:47 2007 +0200

d3dx8: Implement D3DXTransformNormal.

---

 dlls/d3dx8/d3dx8.spec   |    4 ++--
 dlls/d3dx8/math.c       |   16 ++++++++++++++++
 dlls/d3dx8/tests/math.c |   10 ++++++++++
 include/d3dx8math.h     |    2 ++
 4 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/dlls/d3dx8/d3dx8.spec b/dlls/d3dx8/d3dx8.spec
index 5daf16d..7607d10 100644
--- a/dlls/d3dx8/d3dx8.spec
+++ b/dlls/d3dx8/d3dx8.spec
@@ -4,14 +4,14 @@
 @ stdcall D3DXVec2BaryCentric(ptr ptr ptr ptr long long)
 @ stdcall D3DXVec2Transform(ptr ptr ptr)
 @ stdcall D3DXVec2TransformCoord(ptr ptr ptr)
-@ stub D3DXVec2TransformNormal
+@ stdcall D3DXVec2TransformNormal(ptr ptr ptr)
 @ stdcall D3DXVec3Normalize(ptr ptr)
 @ stdcall D3DXVec3Hermite(ptr ptr ptr ptr ptr long)
 @ stdcall D3DXVec3CatmullRom(ptr ptr ptr ptr long)
 @ stdcall D3DXVec3BaryCentric(ptr ptr ptr ptr long long)
 @ stdcall D3DXVec3Transform(ptr ptr ptr)
 @ stdcall D3DXVec3TransformCoord(ptr ptr ptr)
-@ stub D3DXVec3TransformNormal
+@ stdcall D3DXVec3TransformNormal(ptr ptr ptr)
 @ stub D3DXVec3Project
 @ stub D3DXVec3Unproject
 @ stub D3DXVec4Cross
diff --git a/dlls/d3dx8/math.c b/dlls/d3dx8/math.c
index 57adce0..98488c9 100644
--- a/dlls/d3dx8/math.c
+++ b/dlls/d3dx8/math.c
@@ -127,6 +127,13 @@ D3DXVECTOR2* WINAPI D3DXVec2TransformCoord(D3DXVECTOR2 *pout, CONST D3DXVECTOR2
     return pout;
 }
 
+D3DXVECTOR2* WINAPI D3DXVec2TransformNormal(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv, CONST D3DXMATRIX *pm)
+{
+    pout->x = pm->m[0][0] * pv->x + pm->m[1][0] * pv->y;
+    pout->y = pm->m[0][1] * pv->x + pm->m[1][1] * pv->y;
+    return pout;
+}
+
 /*_________________D3DXVec3_____________________*/
 
 D3DXVECTOR3* WINAPI D3DXVec3BaryCentric(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv1, CONST D3DXVECTOR3 *pv2, CONST D3DXVECTOR3 *pv3, FLOAT f, FLOAT g)
@@ -210,6 +217,15 @@ D3DXVECTOR3* WINAPI D3DXVec3TransformCoord(D3DXVECTOR3 *pout, CONST D3DXVECTOR3
     return pout;
 }
 
+D3DXVECTOR3* WINAPI D3DXVec3TransformNormal(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv, CONST D3DXMATRIX *pm)
+{
+    pout->x = pm->m[0][0] * pv->x + pm->m[1][0] * pv->y + pm->m[2][0] * pv->z;
+    pout->y = pm->m[0][1] * pv->x + pm->m[1][1] * pv->y + pm->m[2][1] * pv->z;
+    pout->z = pm->m[0][2] * pv->x + pm->m[1][2] * pv->y + pm->m[2][2] * pv->z;
+    return pout;
+
+}
+
 /*_________________D3DXVec4_____________________*/
 
 D3DXVECTOR4* WINAPI D3DXVec4BaryCentric(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv1, CONST D3DXVECTOR4 *pv2, CONST D3DXVECTOR4 *pv3, FLOAT f, FLOAT g)
diff --git a/dlls/d3dx8/tests/math.c b/dlls/d3dx8/tests/math.c
index ccddd89..0675c46 100644
--- a/dlls/d3dx8/tests/math.c
+++ b/dlls/d3dx8/tests/math.c
@@ -433,6 +433,11 @@ static void D3X8Vector2Test(void)
     expectedvec.x = 0.0f; expectedvec.y = 0.0f;
     D3DXVec2TransformCoord(&gotvec,&nulproj,&mat);
     expect_vec(expectedvec,gotvec);
+
+ /*_______________D3DXVec2TransformNormal______________________*/
+    expectedvec.x = 23.0f; expectedvec.y = 30.0f;
+    D3DXVec2TransformNormal(&gotvec,&u,&mat);
+    expect_vec(expectedvec,gotvec);
 }
 
 static void D3X8Vector3Test(void)
@@ -596,6 +601,11 @@ static void D3X8Vector3Test(void)
     expectedvec.x = 0.0f; expectedvec.y = 0.0f; expectedvec.z = 0.0f;
     D3DXVec3TransformCoord(&gotvec,&nulproj,&mat);
     expect_vec3(expectedvec,gotvec);
+
+/*_______________D3DXVec3TransformNormal______________________*/
+    expectedvec.x = 57.0f; expectedvec.y = 74.0f; expectedvec.z = 91.0f;
+    D3DXVec3TransformNormal(&gotvec,&u,&mat);
+    expect_vec3(expectedvec,gotvec);
 }
 
 static void D3X8Vector4Test(void)
diff --git a/include/d3dx8math.h b/include/d3dx8math.h
index 9e599b5..9a28a54 100644
--- a/include/d3dx8math.h
+++ b/include/d3dx8math.h
@@ -66,6 +66,7 @@ D3DXVECTOR2* WINAPI D3DXVec2Hermite(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv1, C
 D3DXVECTOR2* WINAPI D3DXVec2Normalize(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv);
 D3DXVECTOR4* WINAPI D3DXVec2Transform(D3DXVECTOR4 *pout, CONST D3DXVECTOR2 *pv, CONST D3DXMATRIX *pm);
 D3DXVECTOR2* WINAPI D3DXVec2TransformCoord(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv, CONST D3DXMATRIX *pm);
+D3DXVECTOR2* WINAPI D3DXVec2TransformNormal(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv, CONST D3DXMATRIX *pm);
 
 D3DXVECTOR3* WINAPI D3DXVec3BaryCentric(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv1, CONST D3DXVECTOR3 *pv2, CONST D3DXVECTOR3 *pv3, FLOAT f, FLOAT g);
 D3DXVECTOR3* WINAPI D3DXVec3CatmullRom( D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv0, CONST D3DXVECTOR3 *pv1, CONST D3DXVECTOR3 *pv2, CONST D3DXVECTOR3 *pv3, FLOAT s);
@@ -73,6 +74,7 @@ D3DXVECTOR3* WINAPI D3DXVec3Hermite(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv1, C
 D3DXVECTOR3* WINAPI D3DXVec3Normalize(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv);
 D3DXVECTOR4* WINAPI D3DXVec3Transform(D3DXVECTOR4 *pout, CONST D3DXVECTOR3 *pv, CONST D3DXMATRIX *pm);
 D3DXVECTOR3* WINAPI D3DXVec3TransformCoord(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv, CONST D3DXMATRIX *pm);
+D3DXVECTOR3* WINAPI D3DXVec3TransformNormal(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv, CONST D3DXMATRIX *pm);
 
 D3DXVECTOR4* WINAPI D3DXVec4BaryCentric(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv1, CONST D3DXVECTOR4 *pv2, CONST D3DXVECTOR4 *pv3, FLOAT f, FLOAT g);
 D3DXVECTOR4* WINAPI D3DXVec4CatmullRom(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv0, CONST D3DXVECTOR4 *pv1, CONST D3DXVECTOR4 *pv2, CONST D3DXVECTOR4 *pv3, FLOAT s);




More information about the wine-cvs mailing list