2008-03-21 11:04:46 +01:00
/*
2008-11-12 19:16:30 +01:00
* Copyright 2008 David Adam
2009-07-20 16:20:03 +02:00
* Copyright 2008 Luis Busquets
2008-03-21 11:04:46 +01:00
* Copyright 2008 Philip Nilsson
2009-07-20 16:20:03 +02:00
* Copyright 2008 Henri Verbeet
2008-03-21 11:04:46 +01:00
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ; either
* version 2.1 of the License , or ( at your option ) any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 , USA
*/
# include "wine/test.h"
2008-11-12 18:54:50 +01:00
# include "d3dx9.h"
2011-06-29 17:16:29 +02:00
# include <math.h>
2008-03-21 11:04:46 +01:00
2017-05-05 13:40:30 +02:00
# define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
2008-03-21 11:04:46 +01:00
2017-04-24 23:31:32 +02:00
static BOOL compare_float ( float f , float g , unsigned int ulps )
2008-11-12 18:54:50 +01:00
{
2017-04-24 23:31:32 +02:00
int x = * ( int * ) & f ;
int y = * ( int * ) & g ;
if ( x < 0 )
x = INT_MIN - x ;
if ( y < 0 )
y = INT_MIN - y ;
if ( abs ( x - y ) > ulps )
return FALSE ;
return TRUE ;
}
2017-04-26 00:11:01 +02:00
static BOOL compare_vec2 ( const D3DXVECTOR2 * v1 , const D3DXVECTOR2 * v2 , unsigned int ulps )
{
return compare_float ( v1 - > x , v2 - > x , ulps ) & & compare_float ( v1 - > y , v2 - > y , ulps ) ;
}
2017-04-26 20:23:19 +02:00
static BOOL compare_vec3 ( const D3DXVECTOR3 * v1 , const D3DXVECTOR3 * v2 , unsigned int ulps )
{
return compare_float ( v1 - > x , v2 - > x , ulps )
& & compare_float ( v1 - > y , v2 - > y , ulps )
& & compare_float ( v1 - > z , v2 - > z , ulps ) ;
}
2017-04-26 00:11:03 +02:00
static BOOL compare_vec4 ( const D3DXVECTOR4 * v1 , const D3DXVECTOR4 * v2 , unsigned int ulps )
{
return compare_float ( v1 - > x , v2 - > x , ulps )
& & compare_float ( v1 - > y , v2 - > y , ulps )
& & compare_float ( v1 - > z , v2 - > z , ulps )
& & compare_float ( v1 - > w , v2 - > w , ulps ) ;
}
2017-04-24 23:31:33 +02:00
static BOOL compare_color ( const D3DXCOLOR * c1 , const D3DXCOLOR * c2 , unsigned int ulps )
{
return compare_float ( c1 - > r , c2 - > r , ulps )
& & compare_float ( c1 - > g , c2 - > g , ulps )
& & compare_float ( c1 - > b , c2 - > b , ulps )
& & compare_float ( c1 - > a , c2 - > a , ulps ) ;
}
2017-04-26 00:10:59 +02:00
static BOOL compare_plane ( const D3DXPLANE * p1 , const D3DXPLANE * p2 , unsigned int ulps )
{
return compare_float ( p1 - > a , p2 - > a , ulps )
& & compare_float ( p1 - > b , p2 - > b , ulps )
& & compare_float ( p1 - > c , p2 - > c , ulps )
& & compare_float ( p1 - > d , p2 - > d , ulps ) ;
}
2017-04-26 00:11:00 +02:00
static BOOL compare_quaternion ( const D3DXQUATERNION * q1 , const D3DXQUATERNION * q2 , unsigned int ulps )
{
return compare_float ( q1 - > x , q2 - > x , ulps )
& & compare_float ( q1 - > y , q2 - > y , ulps )
& & compare_float ( q1 - > z , q2 - > z , ulps )
& & compare_float ( q1 - > w , q2 - > w , ulps ) ;
}
2017-04-24 23:31:32 +02:00
static BOOL compare_matrix ( const D3DXMATRIX * m1 , const D3DXMATRIX * m2 , unsigned int ulps )
{
unsigned int i , j ;
2008-11-12 18:54:50 +01:00
for ( i = 0 ; i < 4 ; + + i )
{
for ( j = 0 ; j < 4 ; + + j )
{
2017-04-24 23:31:32 +02:00
if ( ! compare_float ( U ( * m1 ) . m [ i ] [ j ] , U ( * m2 ) . m [ i ] [ j ] , ulps ) )
2008-11-12 18:54:50 +01:00
return FALSE ;
}
}
return TRUE ;
}
2017-04-26 00:11:01 +02:00
# define expect_vec2(expected, vector, ulps) expect_vec2_(__LINE__, expected, vector, ulps)
static void expect_vec2_ ( unsigned int line , const D3DXVECTOR2 * expected , const D3DXVECTOR2 * vector , unsigned int ulps )
{
BOOL equal = compare_vec2 ( expected , vector , ulps ) ;
ok_ ( __FILE__ , line ) ( equal ,
" Got unexpected vector {%.8e, %.8e}, expected {%.8e, %.8e}. \n " ,
vector - > x , vector - > y , expected - > x , expected - > y ) ;
}
2017-04-26 20:23:19 +02:00
# define expect_vec3(expected, vector, ulps) expect_vec3_(__LINE__, expected, vector, ulps)
static void expect_vec3_ ( unsigned int line , const D3DXVECTOR3 * expected , const D3DXVECTOR3 * vector , unsigned int ulps )
{
BOOL equal = compare_vec3 ( expected , vector , ulps ) ;
ok_ ( __FILE__ , line ) ( equal ,
" Got unexpected vector {%.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e}. \n " ,
vector - > x , vector - > y , vector - > z , expected - > x , expected - > y , expected - > z ) ;
}
2017-04-26 00:11:03 +02:00
# define expect_vec4(expected, vector, ulps) expect_vec4_(__LINE__, expected, vector, ulps)
static void expect_vec4_ ( unsigned int line , const D3DXVECTOR4 * expected , const D3DXVECTOR4 * vector , unsigned int ulps )
{
BOOL equal = compare_vec4 ( expected , vector , ulps ) ;
ok_ ( __FILE__ , line ) ( equal ,
" Got unexpected vector {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e}. \n " ,
vector - > x , vector - > y , vector - > z , vector - > w , expected - > x , expected - > y , expected - > z , expected - > w ) ;
}
2017-04-24 23:31:33 +02:00
# define expect_color(expected, color, ulps) expect_color_(__LINE__, expected, color, ulps)
static void expect_color_ ( unsigned int line , const D3DXCOLOR * expected , const D3DXCOLOR * color , unsigned int ulps )
{
BOOL equal = compare_color ( expected , color , ulps ) ;
ok_ ( __FILE__ , line ) ( equal ,
" Got unexpected color {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e}. \n " ,
color - > r , color - > g , color - > b , color - > a , expected - > r , expected - > g , expected - > b , expected - > a ) ;
}
2017-04-26 00:10:59 +02:00
# define expect_plane(expected, plane, ulps) expect_plane_(__LINE__, expected, plane, ulps)
static void expect_plane_ ( unsigned int line , const D3DXPLANE * expected , const D3DXPLANE * plane , unsigned int ulps )
{
BOOL equal = compare_plane ( expected , plane , ulps ) ;
ok_ ( __FILE__ , line ) ( equal ,
" Got unexpected plane {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e}. \n " ,
plane - > a , plane - > b , plane - > c , plane - > d , expected - > a , expected - > b , expected - > c , expected - > d ) ;
}
2017-04-26 00:11:00 +02:00
# define expect_quaternion(expected, quaternion, ulps) expect_quaternion_(__LINE__, expected, quaternion, ulps)
static void expect_quaternion_ ( unsigned int line , const D3DXQUATERNION * expected ,
const D3DXQUATERNION * quaternion , unsigned int ulps )
{
BOOL equal = compare_quaternion ( expected , quaternion , ulps ) ;
ok_ ( __FILE__ , line ) ( equal ,
" Got unexpected quaternion {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e}. \n " ,
quaternion - > x , quaternion - > y , quaternion - > z , quaternion - > w ,
expected - > x , expected - > y , expected - > z , expected - > w ) ;
}
2017-04-24 23:31:32 +02:00
# define expect_matrix(expected, matrix, ulps) expect_matrix_(__LINE__, expected, matrix, ulps)
static void expect_matrix_ ( unsigned int line , const D3DXMATRIX * expected , const D3DXMATRIX * matrix , unsigned int ulps )
{
BOOL equal = compare_matrix ( expected , matrix , ulps ) ;
ok_ ( __FILE__ , line ) ( equal ,
" Got unexpected matrix {%.8e, %.8e, %.8e, %.8e, %.8e, %.8e, %.8e, %.8e, "
" %.8e, %.8e, %.8e, %.8e, %.8e, %.8e, %.8e, %.8e}, "
" expected {%.8e, %.8e, %.8e, %.8e, %.8e, %.8e, %.8e, %.8e, "
" %.8e, %.8e, %.8e, %.8e, %.8e, %.8e, %.8e, %.8e}. \n " ,
U ( * matrix ) . m [ 0 ] [ 0 ] , U ( * matrix ) . m [ 0 ] [ 1 ] , U ( * matrix ) . m [ 0 ] [ 2 ] , U ( * matrix ) . m [ 0 ] [ 3 ] ,
U ( * matrix ) . m [ 1 ] [ 0 ] , U ( * matrix ) . m [ 1 ] [ 1 ] , U ( * matrix ) . m [ 1 ] [ 2 ] , U ( * matrix ) . m [ 1 ] [ 3 ] ,
U ( * matrix ) . m [ 2 ] [ 0 ] , U ( * matrix ) . m [ 2 ] [ 1 ] , U ( * matrix ) . m [ 2 ] [ 2 ] , U ( * matrix ) . m [ 2 ] [ 3 ] ,
U ( * matrix ) . m [ 3 ] [ 0 ] , U ( * matrix ) . m [ 3 ] [ 1 ] , U ( * matrix ) . m [ 3 ] [ 2 ] , U ( * matrix ) . m [ 3 ] [ 3 ] ,
U ( * expected ) . m [ 0 ] [ 0 ] , U ( * expected ) . m [ 0 ] [ 1 ] , U ( * expected ) . m [ 0 ] [ 2 ] , U ( * expected ) . m [ 0 ] [ 3 ] ,
U ( * expected ) . m [ 1 ] [ 0 ] , U ( * expected ) . m [ 1 ] [ 1 ] , U ( * expected ) . m [ 1 ] [ 2 ] , U ( * expected ) . m [ 1 ] [ 3 ] ,
U ( * expected ) . m [ 2 ] [ 0 ] , U ( * expected ) . m [ 2 ] [ 1 ] , U ( * expected ) . m [ 2 ] [ 2 ] , U ( * expected ) . m [ 2 ] [ 3 ] ,
U ( * expected ) . m [ 3 ] [ 0 ] , U ( * expected ) . m [ 3 ] [ 1 ] , U ( * expected ) . m [ 3 ] [ 2 ] , U ( * expected ) . m [ 3 ] [ 3 ] ) ;
}
2008-11-12 18:54:50 +01:00
2017-04-27 23:52:43 +02:00
# define expect_vec4_array(count, expected, vector, ulps) expect_vec4_array_(__LINE__, count, expected, vector, ulps)
static void expect_vec4_array_ ( unsigned int line , SIZE_T count , const D3DXVECTOR4 * expected ,
const D3DXVECTOR4 * vector , unsigned int ulps )
{
BOOL equal ;
SIZE_T i ;
for ( i = 0 ; i < count ; + + i )
{
equal = compare_vec4 ( & expected [ i ] , & vector [ i ] , ulps ) ;
ok_ ( __FILE__ , line ) ( equal ,
" Got unexpected vector {%.8e, %.8e, %.8e, %.8e} at index %lu, expected {%.8e, %.8e, %.8e, %.8e}. \n " ,
vector [ i ] . x , vector [ i ] . y , vector [ i ] . z , vector [ i ] . w , i ,
expected [ i ] . x , expected [ i ] . y , expected [ i ] . z , expected [ i ] . w ) ;
if ( ! equal )
break ;
2008-03-21 11:04:46 +01:00
}
2017-04-27 23:52:43 +02:00
}
2008-09-11 20:11:53 +02:00
2009-07-11 18:08:31 +02:00
static void D3DXColorTest ( void )
{
D3DXCOLOR color , color1 , color2 , expected , got ;
LPD3DXCOLOR funcpointer ;
FLOAT scale ;
color . r = 0.2f ; color . g = 0.75f ; color . b = 0.41f ; color . a = 0.93f ;
color1 . r = 0.6f ; color1 . g = 0.55f ; color1 . b = 0.23f ; color1 . a = 0.82f ;
color2 . r = 0.3f ; color2 . g = 0.5f ; color2 . b = 0.76f ; color2 . a = 0.11f ;
scale = 0.3f ;
/*_______________D3DXColorAdd________________*/
expected . r = 0.9f ; expected . g = 1.05f ; expected . b = 0.99f , expected . a = 0.93f ;
D3DXColorAdd ( & got , & color1 , & color2 ) ;
2017-04-24 23:31:33 +02:00
expect_color ( & expected , & got , 1 ) ;
2009-07-11 18:08:31 +02:00
/* Test the NULL case */
funcpointer = D3DXColorAdd ( & got , NULL , & color2 ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXColorAdd ( NULL , NULL , & color2 ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXColorAdd ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXColorAdjustContrast______*/
expected . r = 0.41f ; expected . g = 0.575f ; expected . b = 0.473f , expected . a = 0.93f ;
D3DXColorAdjustContrast ( & got , & color , scale ) ;
2017-04-24 23:31:33 +02:00
expect_color ( & expected , & got , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXColorAdjustSaturation______*/
expected . r = 0.486028f ; expected . g = 0.651028f ; expected . b = 0.549028f , expected . a = 0.93f ;
D3DXColorAdjustSaturation ( & got , & color , scale ) ;
2017-04-24 23:31:33 +02:00
expect_color ( & expected , & got , 16 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXColorLerp________________*/
expected . r = 0.32f ; expected . g = 0.69f ; expected . b = 0.356f ; expected . a = 0.897f ;
D3DXColorLerp ( & got , & color , & color1 , scale ) ;
2017-04-24 23:31:33 +02:00
expect_color ( & expected , & got , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Test the NULL case */
funcpointer = D3DXColorLerp ( & got , NULL , & color1 , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXColorLerp ( NULL , NULL , & color1 , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXColorLerp ( NULL , NULL , NULL , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXColorModulate________________*/
expected . r = 0.18f ; expected . g = 0.275f ; expected . b = 0.1748f ; expected . a = 0.0902f ;
D3DXColorModulate ( & got , & color1 , & color2 ) ;
2017-04-24 23:31:33 +02:00
expect_color ( & expected , & got , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Test the NULL case */
funcpointer = D3DXColorModulate ( & got , NULL , & color2 ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXColorModulate ( NULL , NULL , & color2 ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXColorModulate ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXColorNegative________________*/
expected . r = 0.8f ; expected . g = 0.25f ; expected . b = 0.59f ; expected . a = 0.93f ;
D3DXColorNegative ( & got , & color ) ;
2017-04-24 23:31:33 +02:00
expect_color ( & expected , & got , 1 ) ;
2009-07-11 18:08:31 +02:00
/* Test the greater than 1 case */
color1 . r = 0.2f ; color1 . g = 1.75f ; color1 . b = 0.41f ; color1 . a = 0.93f ;
expected . r = 0.8f ; expected . g = - 0.75f ; expected . b = 0.59f ; expected . a = 0.93f ;
D3DXColorNegative ( & got , & color1 ) ;
2017-04-24 23:31:33 +02:00
expect_color ( & expected , & got , 1 ) ;
2009-07-11 18:08:31 +02:00
/* Test the negative case */
color1 . r = 0.2f ; color1 . g = - 0.75f ; color1 . b = 0.41f ; color1 . a = 0.93f ;
expected . r = 0.8f ; expected . g = 1.75f ; expected . b = 0.59f ; expected . a = 0.93f ;
D3DXColorNegative ( & got , & color1 ) ;
2017-04-24 23:31:33 +02:00
expect_color ( & expected , & got , 1 ) ;
2009-07-11 18:08:31 +02:00
/* Test the NULL case */
funcpointer = D3DXColorNegative ( & got , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXColorNegative ( NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXColorScale________________*/
expected . r = 0.06f ; expected . g = 0.225f ; expected . b = 0.123f ; expected . a = 0.279f ;
D3DXColorScale ( & got , & color , scale ) ;
2017-04-24 23:31:33 +02:00
expect_color ( & expected , & got , 1 ) ;
2009-07-11 18:08:31 +02:00
/* Test the NULL case */
funcpointer = D3DXColorScale ( & got , NULL , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXColorScale ( NULL , NULL , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXColorSubtract_______________*/
expected . r = - 0.1f ; expected . g = 0.25f ; expected . b = - 0.35f , expected . a = 0.82f ;
D3DXColorSubtract ( & got , & color , & color2 ) ;
2017-04-24 23:31:33 +02:00
expect_color ( & expected , & got , 1 ) ;
2009-07-11 18:08:31 +02:00
/* Test the NULL case */
funcpointer = D3DXColorSubtract ( & got , NULL , & color2 ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXColorSubtract ( NULL , NULL , & color2 ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXColorSubtract ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
}
static void D3DXFresnelTest ( void )
{
2017-04-28 23:49:08 +02:00
float fresnel ;
BOOL equal ;
2009-07-11 18:08:31 +02:00
2017-04-28 23:49:08 +02:00
fresnel = D3DXFresnelTerm ( 0.5f , 1.5f ) ;
equal = compare_float ( fresnel , 8.91867056e-02 f , 1 ) ;
ok ( equal , " Got unexpected Fresnel term %.8e. \n " , fresnel ) ;
2009-07-11 18:08:31 +02:00
}
static void D3DXMatrixTest ( void )
{
D3DXMATRIX expectedmat , gotmat , mat , mat2 , mat3 ;
2017-04-28 23:49:09 +02:00
BOOL expected , got , equal ;
float angle , determinant ;
2013-08-21 08:29:30 +02:00
D3DXMATRIX * funcpointer ;
2009-07-11 18:08:31 +02:00
D3DXPLANE plane ;
D3DXQUATERNION q , r ;
2010-05-08 01:06:30 +02:00
D3DXVECTOR3 at , axis , eye , last ;
2009-07-11 18:08:31 +02:00
D3DXVECTOR4 light ;
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 20.0f ; U ( mat ) . m [ 2 ] [ 2 ] = 30.0f ;
U ( mat ) . m [ 3 ] [ 3 ] = - 40.0f ;
U ( mat2 ) . m [ 0 ] [ 0 ] = 1.0f ; U ( mat2 ) . m [ 1 ] [ 0 ] = 2.0f ; U ( mat2 ) . m [ 2 ] [ 0 ] = 3.0f ;
U ( mat2 ) . m [ 3 ] [ 0 ] = 4.0f ; U ( mat2 ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat2 ) . m [ 1 ] [ 1 ] = 6.0f ;
U ( mat2 ) . m [ 2 ] [ 1 ] = 7.0f ; U ( mat2 ) . m [ 3 ] [ 1 ] = 8.0f ; U ( mat2 ) . m [ 0 ] [ 2 ] = - 8.0f ;
U ( mat2 ) . m [ 1 ] [ 2 ] = - 7.0f ; U ( mat2 ) . m [ 2 ] [ 2 ] = - 6.0f ; U ( mat2 ) . m [ 3 ] [ 2 ] = - 5.0f ;
U ( mat2 ) . m [ 0 ] [ 3 ] = - 4.0f ; U ( mat2 ) . m [ 1 ] [ 3 ] = - 3.0f ; U ( mat2 ) . m [ 2 ] [ 3 ] = - 2.0f ;
U ( mat2 ) . m [ 3 ] [ 3 ] = - 1.0f ;
plane . a = - 3.0f ; plane . b = - 1.0f ; plane . c = 4.0f ; plane . d = 7.0f ;
q . x = 1.0f ; q . y = - 4.0f ; q . z = 7.0f ; q . w = - 11.0f ;
r . x = 0.87f ; r . y = 0.65f ; r . z = 0.43f ; r . w = 0.21f ;
at . x = - 2.0f ; at . y = 13.0f ; at . z = - 9.0f ;
axis . x = 1.0f ; axis . y = - 3.0f ; axis . z = 7.0f ;
eye . x = 8.0f ; eye . y = - 5.0f ; eye . z = 5.75f ;
last . x = 9.7f ; last . y = - 8.6 ; last . z = 1.3f ;
light . x = 9.6f ; light . y = 8.5f ; light . z = 7.4 ; light . w = 6.3 ;
angle = D3DX_PI / 3.0f ;
/*____________D3DXMatrixAffineTransformation______*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = - 459.239990f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = - 576.719971f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = - 263.440002f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 519.760010f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = - 352.440002f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = - 277.679993f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 363.119995f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = - 121.040001f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = - 117.479996f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = - 1239.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 667.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 567.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
2012-10-01 12:40:51 +02:00
D3DXMatrixAffineTransformation ( & gotmat , 3.56f , & at , & q , & axis ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 0 ) ;
2012-10-01 12:40:51 +02:00
/* Test the NULL case */
U ( expectedmat ) . m [ 3 ] [ 0 ] = 1.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = - 3.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 7.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixAffineTransformation ( & gotmat , 3.56f , NULL , & q , & axis ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 0 ) ;
2012-10-01 12:40:51 +02:00
U ( expectedmat ) . m [ 3 ] [ 0 ] = - 1240.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 670.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 560.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixAffineTransformation ( & gotmat , 3.56f , & at , & q , NULL ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 0 ) ;
2012-10-01 12:40:51 +02:00
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixAffineTransformation ( & gotmat , 3.56f , NULL , & q , NULL ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 0 ) ;
2012-10-01 12:40:51 +02:00
U ( expectedmat ) . m [ 0 ] [ 0 ] = 3.56f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 3.56f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 3.56f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
2009-07-11 18:08:31 +02:00
U ( expectedmat ) . m [ 3 ] [ 0 ] = 1.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = - 3.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 7.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
2012-10-01 12:40:51 +02:00
D3DXMatrixAffineTransformation ( & gotmat , 3.56f , NULL , NULL , & axis ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 0 ) ;
2012-10-01 12:40:51 +02:00
D3DXMatrixAffineTransformation ( & gotmat , 3.56f , & at , NULL , & axis ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 0 ) ;
2012-10-01 12:40:51 +02:00
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixAffineTransformation ( & gotmat , 3.56f , & at , NULL , NULL ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 0 ) ;
2012-10-01 12:40:51 +02:00
D3DXMatrixAffineTransformation ( & gotmat , 3.56f , NULL , NULL , NULL ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 0 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixfDeterminant_____________*/
2017-04-28 23:49:09 +02:00
determinant = D3DXMatrixDeterminant ( & mat ) ;
equal = compare_float ( determinant , - 147888.0f , 0 ) ;
ok ( equal , " Got unexpected determinant %.8e. \n " , determinant ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixInverse______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 16067.0f / 73944.0f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = - 10165.0f / 147888.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = - 2729.0f / 147888.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = - 1631.0f / 49296.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = - 565.0f / 36972.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 2723.0f / 73944.0f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = - 1073.0f / 73944.0f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 289.0f / 24648.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = - 389.0f / 2054.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 337.0f / 4108.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 181.0f / 4108.0f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 317.0f / 4108.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 163.0f / 5688.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = - 101.0f / 11376.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = - 73.0f / 11376.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = - 127.0f / 3792.0f ;
D3DXMatrixInverse ( & gotmat , & determinant , & mat ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 1 ) ;
2017-04-28 23:49:09 +02:00
equal = compare_float ( determinant , - 147888.0f , 0 ) ;
ok ( equal , " Got unexpected determinant %.8e. \n " , determinant ) ;
2009-07-11 18:08:31 +02:00
funcpointer = D3DXMatrixInverse ( & gotmat , NULL , & mat2 ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*____________D3DXMatrixIsIdentity______________*/
expected = FALSE ;
memset ( & mat3 , 0 , sizeof ( mat3 ) ) ;
got = D3DXMatrixIsIdentity ( & mat3 ) ;
ok ( expected = = got , " Expected : %d, Got : %d \n " , expected , got ) ;
D3DXMatrixIdentity ( & mat3 ) ;
expected = TRUE ;
got = D3DXMatrixIsIdentity ( & mat3 ) ;
ok ( expected = = got , " Expected : %d, Got : %d \n " , expected , got ) ;
U ( mat3 ) . m [ 0 ] [ 0 ] = 0.000009f ;
expected = FALSE ;
got = D3DXMatrixIsIdentity ( & mat3 ) ;
ok ( expected = = got , " Expected : %d, Got : %d \n " , expected , got ) ;
/* Test the NULL case */
expected = FALSE ;
got = D3DXMatrixIsIdentity ( NULL ) ;
ok ( expected = = got , " Expected : %d, Got : %d \n " , expected , got ) ;
/*____________D3DXMatrixLookatLH_______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = - 0.822465f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = - 0.409489f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = - 0.394803f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = - 0.555856f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 0.431286f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.710645f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = - 0.120729f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.803935f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = - 0.582335f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 4.494634f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.809719f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 10.060076f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixLookAtLH ( & gotmat , & eye , & at , & axis ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 32 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixLookatRH_______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 0.822465f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = - 0.409489f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.394803f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.555856f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 0.431286f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = - 0.710645f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.120729f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.803935f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 0.582335f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = - 4.494634f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.809719f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = - 10.060076f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixLookAtRH ( & gotmat , & eye , & at , & axis ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 32 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixMultiply______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 73.0f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 193.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = - 197.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = - 77.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 231.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 551.0f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = - 489.0f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = - 169.0 ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 239.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 523.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = - 400.0f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = - 116.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = - 164.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = - 320.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 187.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 31.0f ;
D3DXMatrixMultiply ( & gotmat , & mat , & mat2 ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 0 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixMultiplyTranspose____*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 73.0f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 231.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 239.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = - 164.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 193.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 551.0f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 523.0f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = - 320.0 ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = - 197.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = - 489.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = - 400.0f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 187.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = - 77.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = - 169.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = - 116.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 31.0f ;
D3DXMatrixMultiplyTranspose ( & gotmat , & mat , & mat2 ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 0 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixOrthoLH_______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 0.8f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 0.270270f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = - 0.151515f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = - 0.484848f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixOrthoLH ( & gotmat , 2.5f , 7.4f , - 3.2f , - 9.8f ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 16 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixOrthoOffCenterLH_______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 3.636364f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 0.180180f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0 ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = - 0.045662f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = - 1.727272f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = - 0.567568f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 0.424658f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixOrthoOffCenterLH ( & gotmat , 0.2f , 0.75f , - 2.4f , 8.7f , 9.3 , - 12.6 ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 32 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixOrthoOffCenterRH_______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 3.636364f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 0.180180f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0 ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 0.045662f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = - 1.727272f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = - 0.567568f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 0.424658f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixOrthoOffCenterRH ( & gotmat , 0.2f , 0.75f , - 2.4f , 8.7f , 9.3 , - 12.6 ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 32 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixOrthoRH_______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 0.8f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 0.270270f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 0.151515f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = - 0.484848f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixOrthoRH ( & gotmat , 2.5f , 7.4f , - 3.2f , - 9.8f ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 16 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixPerspectiveFovLH_______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 13.288858f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 9.966644f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0 ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 0.783784f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 1.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 1.881081f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 0.0f ;
D3DXMatrixPerspectiveFovLH ( & gotmat , 0.2f , 0.75f , - 2.4f , 8.7f ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 4 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixPerspectiveFovRH_______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 13.288858f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 9.966644f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0 ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = - 0.783784f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = - 1.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 1.881081f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 0.0f ;
D3DXMatrixPerspectiveFovRH ( & gotmat , 0.2f , 0.75f , - 2.4f , 8.7f ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 4 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixPerspectiveLH_______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = - 24.0f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = - 6.4f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0 ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 0.783784f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 1.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 1.881081f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 0.0f ;
D3DXMatrixPerspectiveLH ( & gotmat , 0.2f , 0.75f , - 2.4f , 8.7f ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 4 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixPerspectiveOffCenterLH_______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 11.636364f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 0.576577f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0 ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = - 1.727273f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = - 0.567568f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 0.840796f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 1.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = - 2.690547f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 0.0f ;
D3DXMatrixPerspectiveOffCenterLH ( & gotmat , 0.2f , 0.75f , - 2.4f , 8.7f , 3.2f , - 16.9f ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 8 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixPerspectiveOffCenterRH_______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 11.636364f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 0.576577f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0 ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 1.727273f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.567568f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = - 0.840796f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = - 1.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = - 2.690547f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 0.0f ;
D3DXMatrixPerspectiveOffCenterRH ( & gotmat , 0.2f , 0.75f , - 2.4f , 8.7f , 3.2f , - 16.9f ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 8 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixPerspectiveRH_______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = - 24.0f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = - 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = - 6.4f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0 ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = - 0.783784f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = - 1.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 1.881081f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 0.0f ;
D3DXMatrixPerspectiveRH ( & gotmat , 0.2f , 0.75f , - 2.4f , 8.7f ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 4 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixReflect______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 0.307692f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = - 0.230769f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.923077f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = - 0.230769 ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 0.923077f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.307693f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.923077f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.307693f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = - 0.230769f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 1.615385f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.538462f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = - 2.153846f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixReflect ( & gotmat , & plane ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 32 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixRotationAxis_____*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 0.508475f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.763805f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.397563f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = - 0.814652f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 0.576271f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = - 0.065219f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = - 0.278919f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = - 0.290713f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 0.915254f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixRotationAxis ( & gotmat , & axis , angle ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 32 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixRotationQuaternion______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = - 129.0f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = - 162.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = - 74.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 146.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = - 99.0f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = - 78.0f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 102.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = - 34.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = - 33.0f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixRotationQuaternion ( & gotmat , & q ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 0 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixRotationX______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 1.0f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0 ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 0.5f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = sqrt ( 3.0f ) / 2.0f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = - sqrt ( 3.0f ) / 2.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 0.5f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixRotationX ( & gotmat , angle ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 1 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixRotationY______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 0.5f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = - sqrt ( 3.0f ) / 2.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0 ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 1.0f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = sqrt ( 3.0f ) / 2.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 0.5f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixRotationY ( & gotmat , angle ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 1 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixRotationYawPitchRoll____*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 0.888777f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.091875f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = - 0.449037f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.351713f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 0.491487f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.796705f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.293893f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = - 0.866025f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 0.404509f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixRotationYawPitchRoll ( & gotmat , 3.0f * angle / 5.0f , angle , 3.0f * angle / 17.0f ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 64 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixRotationZ______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 0.5f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = sqrt ( 3.0f ) / 2.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = - sqrt ( 3.0f ) / 2.0f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 0.5f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 1.0f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixRotationZ ( & gotmat , angle ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 1 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixScaling______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 0.69f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0 ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 0.53f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 4.11f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixScaling ( & gotmat , 0.69f , 0.53f , 4.11f ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 0 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixShadow______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 12.786773f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 5.000961f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 4.353778f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 3.706595f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 1.882715 ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 8.805615f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 1.451259f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 1.235532f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = - 7.530860f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = - 6.667949f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 1.333590f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = - 4.942127f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = - 13.179006f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = - 11.668910f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = - 10.158816f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = - 1.510094f ;
D3DXMatrixShadow ( & gotmat , & light , & plane ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 8 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixTransformation______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = - 0.2148f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 1.3116f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.4752f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.9504f ; U ( expectedmat ) . m [ 1 ] [ 1 ] = - 0.8836f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.9244f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 1.0212f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.1936f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = - 1.3588f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 18.2985f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = - 29.624001f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 15.683499f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixTransformation ( & gotmat , & at , & q , NULL , & eye , & r , & last ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 512 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixTranslation______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 1.0f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 0.0 ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 1.0f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = 0.0f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 0.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 1.0f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 0.69f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 0.53f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 4.11f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixTranslation ( & gotmat , 0.69f , 0.53f , 4.11f ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 0 ) ;
2009-07-11 18:08:31 +02:00
/*____________D3DXMatrixTranspose______________*/
U ( expectedmat ) . m [ 0 ] [ 0 ] = 10.0f ; U ( expectedmat ) . m [ 0 ] [ 1 ] = 11.0f ; U ( expectedmat ) . m [ 0 ] [ 2 ] = 19.0f ; U ( expectedmat ) . m [ 0 ] [ 3 ] = 2.0f ;
U ( expectedmat ) . m [ 1 ] [ 0 ] = 5.0 ; U ( expectedmat ) . m [ 1 ] [ 1 ] = 20.0f ; U ( expectedmat ) . m [ 1 ] [ 2 ] = - 21.0f ; U ( expectedmat ) . m [ 1 ] [ 3 ] = 3.0f ;
U ( expectedmat ) . m [ 2 ] [ 0 ] = 7.0f ; U ( expectedmat ) . m [ 2 ] [ 1 ] = 16.0f ; U ( expectedmat ) . m [ 2 ] [ 2 ] = 30.f ; U ( expectedmat ) . m [ 2 ] [ 3 ] = - 4.0f ;
U ( expectedmat ) . m [ 3 ] [ 0 ] = 8.0f ; U ( expectedmat ) . m [ 3 ] [ 1 ] = 33.0f ; U ( expectedmat ) . m [ 3 ] [ 2 ] = 43.0f ; U ( expectedmat ) . m [ 3 ] [ 3 ] = - 40.0f ;
D3DXMatrixTranspose ( & gotmat , & mat ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & expectedmat , & gotmat , 0 ) ;
2009-07-11 18:08:31 +02:00
}
static void D3DXPlaneTest ( void )
{
D3DXMATRIX mat ;
D3DXPLANE expectedplane , gotplane , nulplane , plane ;
D3DXVECTOR3 expectedvec , gotvec , vec1 , vec2 , vec3 ;
LPD3DXVECTOR3 funcpointer ;
D3DXVECTOR4 vec ;
FLOAT expected , got ;
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 20.0f ; U ( mat ) . m [ 2 ] [ 2 ] = 30.0f ;
U ( mat ) . m [ 3 ] [ 3 ] = - 40.0f ;
plane . a = - 3.0f ; plane . b = - 1.0f ; plane . c = 4.0f ; plane . d = 7.0f ;
vec . x = 2.0f ; vec . y = 5.0f ; vec . z = - 6.0f ; vec . w = 11.0f ;
/*_______________D3DXPlaneDot________________*/
expected = 42.0f ;
got = D3DXPlaneDot ( & plane , & vec ) ,
ok ( expected = = got , " Expected : %f, Got : %f \n " , expected , got ) ;
expected = 0.0f ;
got = D3DXPlaneDot ( NULL , & vec ) ,
ok ( expected = = got , " Expected : %f, Got : %f \n " , expected , got ) ;
expected = 0.0f ;
got = D3DXPlaneDot ( NULL , NULL ) ,
ok ( expected = = got , " Expected : %f, Got : %f \n " , expected , got ) ;
/*_______________D3DXPlaneDotCoord________________*/
expected = - 28.0f ;
got = D3DXPlaneDotCoord ( & plane , & vec ) ,
ok ( expected = = got , " Expected : %f, Got : %f \n " , expected , got ) ;
expected = 0.0f ;
got = D3DXPlaneDotCoord ( NULL , & vec ) ,
ok ( expected = = got , " Expected : %f, Got : %f \n " , expected , got ) ;
expected = 0.0f ;
got = D3DXPlaneDotCoord ( NULL , NULL ) ,
ok ( expected = = got , " Expected : %f, Got : %f \n " , expected , got ) ;
/*_______________D3DXPlaneDotNormal______________*/
expected = - 35.0f ;
got = D3DXPlaneDotNormal ( & plane , & vec ) ,
ok ( expected = = got , " Expected : %f, Got : %f \n " , expected , got ) ;
expected = 0.0f ;
got = D3DXPlaneDotNormal ( NULL , & vec ) ,
ok ( expected = = got , " Expected : %f, Got : %f \n " , expected , got ) ;
expected = 0.0f ;
got = D3DXPlaneDotNormal ( NULL , NULL ) ,
ok ( expected = = got , " Expected : %f, Got : %f \n " , expected , got ) ;
/*_______________D3DXPlaneFromPointNormal_______*/
vec1 . x = 11.0f ; vec1 . y = 13.0f ; vec1 . z = 15.0f ;
vec2 . x = 17.0f ; vec2 . y = 31.0f ; vec2 . z = 24.0f ;
expectedplane . a = 17.0f ; expectedplane . b = 31.0f ; expectedplane . c = 24.0f ; expectedplane . d = - 950.0f ;
2016-04-14 14:10:11 +02:00
D3DXPlaneFromPointNormal ( & gotplane , & vec1 , & vec2 ) ;
2017-04-26 00:10:59 +02:00
expect_plane ( & expectedplane , & gotplane , 0 ) ;
2016-04-14 14:10:11 +02:00
gotplane . a = vec2 . x ; gotplane . b = vec2 . y ; gotplane . c = vec2 . z ;
D3DXPlaneFromPointNormal ( & gotplane , & vec1 , ( D3DXVECTOR3 * ) & gotplane ) ;
2017-04-26 00:10:59 +02:00
expect_plane ( & expectedplane , & gotplane , 0 ) ;
2016-04-14 14:10:11 +02:00
gotplane . a = vec1 . x ; gotplane . b = vec1 . y ; gotplane . c = vec1 . z ;
expectedplane . d = - 1826.0f ;
D3DXPlaneFromPointNormal ( & gotplane , ( D3DXVECTOR3 * ) & gotplane , & vec2 ) ;
2017-04-26 00:10:59 +02:00
expect_plane ( & expectedplane , & gotplane , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXPlaneFromPoints_______*/
vec1 . x = 1.0f ; vec1 . y = 2.0f ; vec1 . z = 3.0f ;
vec2 . x = 1.0f ; vec2 . y = - 6.0f ; vec2 . z = - 5.0f ;
vec3 . x = 83.0f ; vec3 . y = 74.0f ; vec3 . z = 65.0f ;
expectedplane . a = 0.085914f ; expectedplane . b = - 0.704492f ; expectedplane . c = 0.704492f ; expectedplane . d = - 0.790406f ;
D3DXPlaneFromPoints ( & gotplane , & vec1 , & vec2 , & vec3 ) ;
2017-04-26 00:10:59 +02:00
expect_plane ( & expectedplane , & gotplane , 64 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXPlaneIntersectLine___________*/
vec1 . x = 9.0f ; vec1 . y = 6.0f ; vec1 . z = 3.0f ;
vec2 . x = 2.0f ; vec2 . y = 5.0f ; vec2 . z = 8.0f ;
expectedvec . x = 20.0f / 3.0f ; expectedvec . y = 17.0f / 3.0f ; expectedvec . z = 14.0f / 3.0f ;
D3DXPlaneIntersectLine ( & gotvec , & plane , & vec1 , & vec2 ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 1 ) ;
2009-07-11 18:08:31 +02:00
/* Test a parallel line */
vec1 . x = 11.0f ; vec1 . y = 13.0f ; vec1 . z = 15.0f ;
vec2 . x = 17.0f ; vec2 . y = 31.0f ; vec2 . z = 24.0f ;
expectedvec . x = 20.0f / 3.0f ; expectedvec . y = 17.0f / 3.0f ; expectedvec . z = 14.0f / 3.0f ;
funcpointer = D3DXPlaneIntersectLine ( & gotvec , & plane , & vec1 , & vec2 ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXPlaneNormalize______________*/
expectedplane . a = - 3.0f / sqrt ( 26.0f ) ; expectedplane . b = - 1.0f / sqrt ( 26.0f ) ; expectedplane . c = 4.0f / sqrt ( 26.0f ) ; expectedplane . d = 7.0 / sqrt ( 26.0f ) ;
D3DXPlaneNormalize ( & gotplane , & plane ) ;
2017-04-26 00:10:59 +02:00
expect_plane ( & expectedplane , & gotplane , 2 ) ;
2009-07-11 18:08:31 +02:00
nulplane . a = 0.0 ; nulplane . b = 0.0f , nulplane . c = 0.0f ; nulplane . d = 0.0f ;
expectedplane . a = 0.0f ; expectedplane . b = 0.0f ; expectedplane . c = 0.0f ; expectedplane . d = 0.0f ;
D3DXPlaneNormalize ( & gotplane , & nulplane ) ;
2017-04-26 00:10:59 +02:00
expect_plane ( & expectedplane , & gotplane , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXPlaneTransform____________*/
expectedplane . a = 49.0f ; expectedplane . b = - 98.0f ; expectedplane . c = 55.0f ; expectedplane . d = - 165.0f ;
D3DXPlaneTransform ( & gotplane , & plane , & mat ) ;
2017-04-26 00:10:59 +02:00
expect_plane ( & expectedplane , & gotplane , 0 ) ;
2009-07-11 18:08:31 +02:00
}
static void D3DXQuaternionTest ( void )
{
D3DXMATRIX mat ;
D3DXQUATERNION expectedquat , gotquat , Nq , Nq1 , nul , smallq , smallr , q , r , s , t , u ;
2017-04-28 23:49:10 +02:00
BOOL expectedbool , gotbool , equal ;
float angle , got , scale , scale2 ;
2009-07-11 18:08:31 +02:00
LPD3DXQUATERNION funcpointer ;
D3DXVECTOR3 axis , expectedvec ;
nul . x = 0.0f ; nul . y = 0.0f ; nul . z = 0.0f ; nul . w = 0.0f ;
q . x = 1.0f , q . y = 2.0f ; q . z = 4.0f ; q . w = 10.0f ;
r . x = - 3.0f ; r . y = 4.0f ; r . z = - 5.0f ; r . w = 7.0 ;
t . x = - 1111.0f , t . y = 111.0f ; t . z = - 11.0f ; t . w = 1.0f ;
u . x = 91.0f ; u . y = - 82.0f ; u . z = 7.3f ; u . w = - 6.4f ;
smallq . x = 0.1f ; smallq . y = 0.2f ; smallq . z = 0.3f ; smallq . w = 0.4f ;
smallr . x = 0.5f ; smallr . y = 0.6f ; smallr . z = 0.7f ; smallr . w = 0.8f ;
scale = 0.3f ;
scale2 = 0.78f ;
/*_______________D3DXQuaternionBaryCentric________________________*/
expectedquat . x = - 867.444458 ; expectedquat . y = 87.851111f ; expectedquat . z = - 9.937778f ; expectedquat . w = 3.235555f ;
D3DXQuaternionBaryCentric ( & gotquat , & q , & r , & t , scale , scale2 ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 1 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXQuaternionConjugate________________*/
expectedquat . x = - 1.0f ; expectedquat . y = - 2.0f ; expectedquat . z = - 4.0f ; expectedquat . w = 10.0f ;
D3DXQuaternionConjugate ( & gotquat , & q ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Test the NULL case */
funcpointer = D3DXQuaternionConjugate ( & gotquat , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXQuaternionConjugate ( NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXQuaternionDot______________________*/
got = D3DXQuaternionDot ( & q , & r ) ;
2017-04-28 23:49:10 +02:00
equal = compare_float ( got , 55.0f , 0 ) ;
ok ( equal , " Got unexpected dot %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
got = D3DXQuaternionDot ( NULL , & r ) ;
2017-04-28 23:49:10 +02:00
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected dot %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
got = D3DXQuaternionDot ( NULL , NULL ) ;
2017-04-28 23:49:10 +02:00
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected dot %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXQuaternionExp______________________________*/
expectedquat . x = - 0.216382f ; expectedquat . y = - 0.432764f ; expectedquat . z = - 0.8655270f ; expectedquat . w = - 0.129449f ;
D3DXQuaternionExp ( & gotquat , & q ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 16 ) ;
2009-07-11 18:08:31 +02:00
/* Test the null quaternion */
expectedquat . x = 0.0f ; expectedquat . y = 0.0f ; expectedquat . z = 0.0f ; expectedquat . w = 1.0f ;
D3DXQuaternionExp ( & gotquat , & nul ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Test the case where the norm of the quaternion is <1 */
Nq1 . x = 0.2f ; Nq1 . y = 0.1f ; Nq1 . z = 0.3 ; Nq1 . w = 0.9f ;
expectedquat . x = 0.195366 ; expectedquat . y = 0.097683f ; expectedquat . z = 0.293049f ; expectedquat . w = 0.930813f ;
D3DXQuaternionExp ( & gotquat , & Nq1 ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 8 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXQuaternionIdentity________________*/
expectedquat . x = 0.0f ; expectedquat . y = 0.0f ; expectedquat . z = 0.0f ; expectedquat . w = 1.0f ;
D3DXQuaternionIdentity ( & gotquat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Test the NULL case */
funcpointer = D3DXQuaternionIdentity ( NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXQuaternionInverse________________________*/
expectedquat . x = - 1.0f / 121.0f ; expectedquat . y = - 2.0f / 121.0f ; expectedquat . z = - 4.0f / 121.0f ; expectedquat . w = 10.0f / 121.0f ;
D3DXQuaternionInverse ( & gotquat , & q ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 0 ) ;
2009-07-17 11:30:29 +02:00
expectedquat . x = 1.0f ; expectedquat . y = 2.0f ; expectedquat . z = 4.0f ; expectedquat . w = 10.0f ;
D3DXQuaternionInverse ( & gotquat , & gotquat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 1 ) ;
2009-07-11 18:08:31 +02:00
2009-07-17 11:30:29 +02:00
2009-07-11 18:08:31 +02:00
/*_______________D3DXQuaternionIsIdentity________________*/
s . x = 0.0f ; s . y = 0.0f ; s . z = 0.0f ; s . w = 1.0f ;
expectedbool = TRUE ;
gotbool = D3DXQuaternionIsIdentity ( & s ) ;
ok ( expectedbool = = gotbool , " Expected boolean : %d, Got bool : %d \n " , expectedbool , gotbool ) ;
s . x = 2.3f ; s . y = - 4.2f ; s . z = 1.2f ; s . w = 0.2f ;
expectedbool = FALSE ;
gotbool = D3DXQuaternionIsIdentity ( & q ) ;
ok ( expectedbool = = gotbool , " Expected boolean : %d, Got bool : %d \n " , expectedbool , gotbool ) ;
/* Test the NULL case */
gotbool = D3DXQuaternionIsIdentity ( NULL ) ;
ok ( gotbool = = FALSE , " Expected boolean: %d, Got boolean: %d \n " , FALSE , gotbool ) ;
/*_______________D3DXQuaternionLength__________________________*/
2017-04-28 23:49:10 +02:00
got = D3DXQuaternionLength ( & q ) ;
equal = compare_float ( got , 11.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
/* Tests the case NULL. */
2009-07-11 18:08:31 +02:00
got = D3DXQuaternionLength ( NULL ) ;
2017-04-28 23:49:10 +02:00
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXQuaternionLengthSq________________________*/
got = D3DXQuaternionLengthSq ( & q ) ;
2017-04-28 23:49:10 +02:00
equal = compare_float ( got , 121.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
got = D3DXQuaternionLengthSq ( NULL ) ;
2017-04-28 23:49:10 +02:00
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXQuaternionLn______________________________*/
expectedquat . x = 1.0f ; expectedquat . y = 2.0f ; expectedquat . z = 4.0f ; expectedquat . w = 0.0f ;
D3DXQuaternionLn ( & gotquat , & q ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 0 ) ;
2009-07-11 18:08:31 +02:00
expectedquat . x = - 3.0f ; expectedquat . y = 4.0f ; expectedquat . z = - 5.0f ; expectedquat . w = 0.0f ;
D3DXQuaternionLn ( & gotquat , & r ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 0 ) ;
2009-07-11 18:08:31 +02:00
Nq . x = 1.0f / 11.0f ; Nq . y = 2.0f / 11.0f ; Nq . z = 4.0f / 11.0f ; Nq . w = 10.0f / 11.0f ;
expectedquat . x = 0.093768f ; expectedquat . y = 0.187536f ; expectedquat . z = 0.375073f ; expectedquat . w = 0.0f ;
D3DXQuaternionLn ( & gotquat , & Nq ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 32 ) ;
2012-06-12 02:13:39 +02:00
Nq . x = 0.0f ; Nq . y = 0.0f ; Nq . z = 0.0f ; Nq . w = 1.0f ;
expectedquat . x = 0.0f ; expectedquat . y = 0.0f ; expectedquat . z = 0.0f ; expectedquat . w = 0.0f ;
D3DXQuaternionLn ( & gotquat , & Nq ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 0 ) ;
2012-06-12 02:13:39 +02:00
Nq . x = 5.4f ; Nq . y = 1.2f ; Nq . z = - 0.3f ; Nq . w = - 0.3f ;
expectedquat . x = 10.616652f ; expectedquat . y = 2.359256f ; expectedquat . z = - 0.589814f ; expectedquat . w = 0.0f ;
D3DXQuaternionLn ( & gotquat , & Nq ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 1 ) ;
2012-06-12 02:13:39 +02:00
/* Test the case where the norm of the quaternion is <1 */
Nq1 . x = 0.2f ; Nq1 . y = 0.1f ; Nq1 . z = 0.3 ; Nq1 . w = 0.9f ;
2009-07-11 18:08:31 +02:00
expectedquat . x = 0.206945f ; expectedquat . y = 0.103473f ; expectedquat . z = 0.310418f ; expectedquat . w = 0.0f ;
D3DXQuaternionLn ( & gotquat , & Nq1 ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 64 ) ;
2012-06-12 02:13:39 +02:00
/* Test the case where the real part of the quaternion is -1.0f */
Nq1 . x = 0.2f ; Nq1 . y = 0.1f ; Nq1 . z = 0.3 ; Nq1 . w = - 1.0f ;
expectedquat . x = 0.2f ; expectedquat . y = 0.1f ; expectedquat . z = 0.3f ; expectedquat . w = 0.0f ;
D3DXQuaternionLn ( & gotquat , & Nq1 ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXQuaternionMultiply________________________*/
expectedquat . x = 3.0f ; expectedquat . y = 61.0f ; expectedquat . z = - 32.0f ; expectedquat . w = 85.0f ;
D3DXQuaternionMultiply ( & gotquat , & q , & r ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXQuaternionNormalize________________________*/
expectedquat . x = 1.0f / 11.0f ; expectedquat . y = 2.0f / 11.0f ; expectedquat . z = 4.0f / 11.0f ; expectedquat . w = 10.0f / 11.0f ;
D3DXQuaternionNormalize ( & gotquat , & q ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 1 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXQuaternionRotationAxis___________________*/
axis . x = 2.0f ; axis . y = 7.0 ; axis . z = 13.0f ;
angle = D3DX_PI / 3.0f ;
expectedquat . x = 0.067116 ; expectedquat . y = 0.234905f ; expectedquat . z = 0.436251f ; expectedquat . w = 0.866025f ;
D3DXQuaternionRotationAxis ( & gotquat , & axis , angle ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 64 ) ;
2009-07-11 18:08:31 +02:00
/* Test the nul quaternion */
axis . x = 0.0f ; axis . y = 0.0 ; axis . z = 0.0f ;
expectedquat . x = 0.0f ; expectedquat . y = 0.0f ; expectedquat . z = 0.0f ; expectedquat . w = 0.866025f ;
D3DXQuaternionRotationAxis ( & gotquat , & axis , angle ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 8 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXQuaternionRotationMatrix___________________*/
/* test when the trace is >0 */
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 20.0f ; U ( mat ) . m [ 2 ] [ 2 ] = 30.0f ;
U ( mat ) . m [ 3 ] [ 3 ] = 48.0f ;
expectedquat . x = 2.368682f ; expectedquat . y = 0.768221f ; expectedquat . z = - 0.384111f ; expectedquat . w = 3.905125f ;
D3DXQuaternionRotationMatrix ( & gotquat , & mat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 16 ) ;
2009-07-11 18:08:31 +02:00
/* test the case when the greater element is (2,2) */
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = - 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = - 60.0f ; U ( mat ) . m [ 2 ] [ 2 ] = 40.0f ;
U ( mat ) . m [ 3 ] [ 3 ] = 48.0f ;
expectedquat . x = 1.233905f ; expectedquat . y = - 0.237290f ; expectedquat . z = 5.267827f ; expectedquat . w = - 0.284747f ;
D3DXQuaternionRotationMatrix ( & gotquat , & mat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 64 ) ;
2009-07-11 18:08:31 +02:00
/* test the case when the greater element is (1,1) */
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = - 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 60.0f ; U ( mat ) . m [ 2 ] [ 2 ] = - 80.0f ;
U ( mat ) . m [ 3 ] [ 3 ] = 48.0f ;
expectedquat . x = 0.651031f ; expectedquat . y = 6.144103f ; expectedquat . z = - 0.203447f ; expectedquat . w = 0.488273f ;
D3DXQuaternionRotationMatrix ( & gotquat , & mat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 8 ) ;
2009-07-11 18:08:31 +02:00
/* test the case when the trace is near 0 in a matrix which is not a rotation */
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = - 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 10.0f ; U ( mat ) . m [ 2 ] [ 2 ] = - 0.9f ;
U ( mat ) . m [ 3 ] [ 3 ] = 48.0f ;
expectedquat . x = 1.709495f ; expectedquat . y = 2.339872f ; expectedquat . z = - 0.534217f ; expectedquat . w = 1.282122f ;
D3DXQuaternionRotationMatrix ( & gotquat , & mat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 8 ) ;
2009-07-11 18:08:31 +02:00
/* test the case when the trace is 0.49 in a matrix which is not a rotation */
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = - 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 10.0f ; U ( mat ) . m [ 2 ] [ 2 ] = - 0.51f ;
U ( mat ) . m [ 3 ] [ 3 ] = 48.0f ;
expectedquat . x = 1.724923f ; expectedquat . y = 2.318944f ; expectedquat . z = - 0.539039f ; expectedquat . w = 1.293692f ;
D3DXQuaternionRotationMatrix ( & gotquat , & mat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 8 ) ;
2009-07-11 18:08:31 +02:00
/* test the case when the trace is 0.51 in a matrix which is not a rotation */
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = - 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 10.0f ; U ( mat ) . m [ 2 ] [ 2 ] = - 0.49f ;
U ( mat ) . m [ 3 ] [ 3 ] = 48.0f ;
expectedquat . x = 1.725726f ; expectedquat . y = 2.317865f ; expectedquat . z = - 0.539289f ; expectedquat . w = 1.294294f ;
D3DXQuaternionRotationMatrix ( & gotquat , & mat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 8 ) ;
2009-07-11 18:08:31 +02:00
/* test the case when the trace is 0.99 in a matrix which is not a rotation */
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = - 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 10.0f ; U ( mat ) . m [ 2 ] [ 2 ] = - 0.01f ;
U ( mat ) . m [ 3 ] [ 3 ] = 48.0f ;
expectedquat . x = 1.745328f ; expectedquat . y = 2.291833f ; expectedquat . z = - 0.545415f ; expectedquat . w = 1.308996f ;
D3DXQuaternionRotationMatrix ( & gotquat , & mat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 4 ) ;
2009-07-11 18:08:31 +02:00
/* test the case when the trace is 1.0 in a matrix which is not a rotation */
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = - 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 10.0f ; U ( mat ) . m [ 2 ] [ 2 ] = 0.0f ;
U ( mat ) . m [ 3 ] [ 3 ] = 48.0f ;
expectedquat . x = 1.745743f ; expectedquat . y = 2.291288f ; expectedquat . z = - 0.545545f ; expectedquat . w = 1.309307f ;
D3DXQuaternionRotationMatrix ( & gotquat , & mat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 8 ) ;
2009-07-11 18:08:31 +02:00
/* test the case when the trace is 1.01 in a matrix which is not a rotation */
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = - 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 10.0f ; U ( mat ) . m [ 2 ] [ 2 ] = 0.01f ;
U ( mat ) . m [ 3 ] [ 3 ] = 48.0f ;
expectedquat . x = 18.408188f ; expectedquat . y = 5.970223f ; expectedquat . z = - 2.985111f ; expectedquat . w = 0.502494f ;
D3DXQuaternionRotationMatrix ( & gotquat , & mat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 4 ) ;
2009-07-11 18:08:31 +02:00
/* test the case when the trace is 1.5 in a matrix which is not a rotation */
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = - 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 10.0f ; U ( mat ) . m [ 2 ] [ 2 ] = 0.5f ;
U ( mat ) . m [ 3 ] [ 3 ] = 48.0f ;
expectedquat . x = 15.105186f ; expectedquat . y = 4.898980f ; expectedquat . z = - 2.449490f ; expectedquat . w = 0.612372f ;
D3DXQuaternionRotationMatrix ( & gotquat , & mat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 8 ) ;
2009-07-11 18:08:31 +02:00
/* test the case when the trace is 1.7 in a matrix which is not a rotation */
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = - 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 10.0f ; U ( mat ) . m [ 2 ] [ 2 ] = 0.70f ;
U ( mat ) . m [ 3 ] [ 3 ] = 48.0f ;
expectedquat . x = 14.188852f ; expectedquat . y = 4.601790f ; expectedquat . z = - 2.300895f ; expectedquat . w = 0.651920f ;
D3DXQuaternionRotationMatrix ( & gotquat , & mat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 4 ) ;
2009-07-11 18:08:31 +02:00
/* test the case when the trace is 1.99 in a matrix which is not a rotation */
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = - 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 10.0f ; U ( mat ) . m [ 2 ] [ 2 ] = 0.99f ;
U ( mat ) . m [ 3 ] [ 3 ] = 48.0f ;
expectedquat . x = 13.114303f ; expectedquat . y = 4.253287f ; expectedquat . z = - 2.126644f ; expectedquat . w = 0.705337f ;
D3DXQuaternionRotationMatrix ( & gotquat , & mat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 4 ) ;
2009-07-11 18:08:31 +02:00
/* test the case when the trace is 2.0 in a matrix which is not a rotation */
U ( mat ) . m [ 0 ] [ 1 ] = 5.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 11.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 16.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 19.0f ; U ( mat ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 2.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 3.0f ; U ( mat ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = - 10.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 10.0f ; U ( mat ) . m [ 2 ] [ 2 ] = 2.0f ;
U ( mat ) . m [ 3 ] [ 3 ] = 48.0f ;
expectedquat . x = 10.680980f ; expectedquat . y = 3.464102f ; expectedquat . z = - 1.732051f ; expectedquat . w = 0.866025f ;
D3DXQuaternionRotationMatrix ( & gotquat , & mat ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 8 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXQuaternionRotationYawPitchRoll__________*/
expectedquat . x = 0.303261f ; expectedquat . y = 0.262299f ; expectedquat . z = 0.410073f ; expectedquat . w = 0.819190f ;
D3DXQuaternionRotationYawPitchRoll ( & gotquat , D3DX_PI / 4.0f , D3DX_PI / 11.0f , D3DX_PI / 3.0f ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 16 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXQuaternionSlerp________________________*/
expectedquat . x = - 0.2f ; expectedquat . y = 2.6f ; expectedquat . z = 1.3f ; expectedquat . w = 9.1f ;
D3DXQuaternionSlerp ( & gotquat , & q , & r , scale ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 4 ) ;
2009-07-11 18:08:31 +02:00
expectedquat . x = 334.0f ; expectedquat . y = - 31.9f ; expectedquat . z = 6.1f ; expectedquat . w = 6.7f ;
D3DXQuaternionSlerp ( & gotquat , & q , & t , scale ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 2 ) ;
2009-07-11 18:08:31 +02:00
expectedquat . x = 0.239485f ; expectedquat . y = 0.346580f ; expectedquat . z = 0.453676f ; expectedquat . w = 0.560772f ;
D3DXQuaternionSlerp ( & gotquat , & smallq , & smallr , scale ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 32 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXQuaternionSquad________________________*/
expectedquat . x = - 156.296f ; expectedquat . y = 30.242f ; expectedquat . z = - 2.5022f ; expectedquat . w = 7.3576f ;
D3DXQuaternionSquad ( & gotquat , & q , & r , & t , & u , scale ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 2 ) ;
2009-07-11 18:08:31 +02:00
2012-06-14 04:37:04 +02:00
/*_______________D3DXQuaternionSquadSetup___________________*/
r . x = 1.0f , r . y = 2.0f ; r . z = 4.0f ; r . w = 10.0f ;
s . x = - 3.0f ; s . y = 4.0f ; s . z = - 5.0f ; s . w = 7.0 ;
t . x = - 1111.0f , t . y = 111.0f ; t . z = - 11.0f ; t . w = 1.0f ;
u . x = 91.0f ; u . y = - 82.0f ; u . z = 7.3f ; u . w = - 6.4f ;
2016-04-18 19:09:26 +02:00
D3DXQuaternionSquadSetup ( & gotquat , & Nq , & Nq1 , & r , & s , & t , & u ) ;
2012-06-14 04:37:04 +02:00
expectedquat . x = 7.121285f ; expectedquat . y = 2.159964f ; expectedquat . z = - 3.855094f ; expectedquat . w = 5.362844f ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 2 ) ;
2012-06-14 04:37:04 +02:00
expectedquat . x = - 1113.492920f ; expectedquat . y = 82.679260f ; expectedquat . z = - 6.696645f ; expectedquat . w = - 4.090050f ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & Nq , 2 ) ;
2012-06-14 04:37:04 +02:00
expectedquat . x = - 1111.0f ; expectedquat . y = 111.0f ; expectedquat . z = - 11.0f ; expectedquat . w = 1.0f ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & Nq1 , 0 ) ;
2016-04-18 19:09:26 +02:00
gotquat = s ;
D3DXQuaternionSquadSetup ( & gotquat , & Nq , & Nq1 , & r , & gotquat , & t , & u ) ;
expectedquat . x = - 1113.492920f ; expectedquat . y = 82.679260f ; expectedquat . z = - 6.696645f ; expectedquat . w = - 4.090050f ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & Nq , 2 ) ;
2016-04-18 19:09:26 +02:00
Nq1 = u ;
D3DXQuaternionSquadSetup ( & gotquat , & Nq , & Nq1 , & r , & s , & t , & Nq1 ) ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & Nq , 2 ) ;
2012-06-14 04:37:04 +02:00
r . x = 0.2f ; r . y = 0.3f ; r . z = 1.3f ; r . w = - 0.6f ;
s . x = - 3.0f ; s . y = - 2.0f ; s . z = 4.0f ; s . w = 0.2f ;
t . x = 0.4f ; t . y = 8.3f ; t . z = - 3.1f ; t . w = - 2.7f ;
u . x = 1.1f ; u . y = - 0.7f ; u . z = 9.2f ; u . w = 0.0f ;
2016-04-18 19:09:26 +02:00
D3DXQuaternionSquadSetup ( & gotquat , & Nq , & Nq1 , & r , & s , & u , & t ) ;
2012-06-14 04:37:04 +02:00
expectedquat . x = - 4.139569f ; expectedquat . y = - 2.469115f ; expectedquat . z = 2.364477f ; expectedquat . w = 0.465494f ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 16 ) ;
2012-06-14 04:37:04 +02:00
expectedquat . x = 2.342533f ; expectedquat . y = 2.365127f ; expectedquat . z = 8.628538f ; expectedquat . w = - 0.898356f ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & Nq , 16 ) ;
2012-06-14 04:37:04 +02:00
expectedquat . x = 1.1f ; expectedquat . y = - 0.7f ; expectedquat . z = 9.2f ; expectedquat . w = 0.0f ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & Nq1 , 0 ) ;
2016-04-18 19:09:26 +02:00
D3DXQuaternionSquadSetup ( & gotquat , & Nq , & Nq1 , & r , & s , & t , & u ) ;
2012-06-14 04:37:04 +02:00
expectedquat . x = - 3.754567f ; expectedquat . y = - 0.586085f ; expectedquat . z = 3.815818f ; expectedquat . w = - 0.198150f ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 32 ) ;
2012-06-14 04:37:04 +02:00
expectedquat . x = 0.140773f ; expectedquat . y = - 8.737090f ; expectedquat . z = - 0.516593f ; expectedquat . w = 3.053942f ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & Nq , 16 ) ;
2012-06-14 04:37:04 +02:00
expectedquat . x = - 0.4f ; expectedquat . y = - 8.3f ; expectedquat . z = 3.1f ; expectedquat . w = 2.7f ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & Nq1 , 0 ) ;
2012-06-14 04:37:04 +02:00
r . x = - 1.0f ; r . y = 0.0f ; r . z = 0.0f ; r . w = 0.0f ;
s . x = 1.0f ; s . y = 0.0f ; s . z = 0.0f ; s . w = 0.0f ;
t . x = 1.0f ; t . y = 0.0f ; t . z = 0.0f ; t . w = 0.0f ;
u . x = - 1.0f ; u . y = 0.0f ; u . z = 0.0f ; u . w = 0.0f ;
2016-04-18 19:09:26 +02:00
D3DXQuaternionSquadSetup ( & gotquat , & Nq , & Nq1 , & r , & s , & t , & u ) ;
2012-06-14 04:37:04 +02:00
expectedquat . x = 1.0f ; expectedquat . y = 0.0f ; expectedquat . z = 0.0f ; expectedquat . w = 0.0f ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & gotquat , 0 ) ;
2012-06-14 04:37:04 +02:00
expectedquat . x = 1.0f ; expectedquat . y = 0.0f ; expectedquat . z = 0.0f ; expectedquat . w = 0.0f ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & Nq , 0 ) ;
2012-06-14 04:37:04 +02:00
expectedquat . x = 1.0f ; expectedquat . y = 0.0f ; expectedquat . z = 0.0f ; expectedquat . w = 0.0f ;
2017-04-26 00:11:00 +02:00
expect_quaternion ( & expectedquat , & Nq1 , 0 ) ;
2012-06-14 04:37:04 +02:00
2009-07-11 18:08:31 +02:00
/*_______________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 ;
2009-07-15 21:04:01 +02:00
expectedvec . x = 1.0f / 22.0f ; expectedvec . y = 2.0f / 22.0f ; expectedvec . z = 4.0f / 22.0f ;
2009-07-11 18:08:31 +02:00
D3DXQuaternionToAxisAngle ( & Nq , & axis , & angle ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & axis , 0 ) ;
2017-04-28 23:49:10 +02:00
equal = compare_float ( angle , 2.197869f , 0 ) ;
ok ( equal , " Got unexpected angle %.8e. \n " , angle ) ;
2009-07-11 18:08:31 +02:00
/* Test if |w|>1.0f */
2009-07-15 21:04:01 +02:00
expectedvec . x = 1.0f ; expectedvec . y = 2.0f ; expectedvec . z = 4.0f ;
2009-07-11 18:08:31 +02:00
D3DXQuaternionToAxisAngle ( & q , & axis , & angle ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & axis , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Test the null quaternion */
2009-07-15 21:04:01 +02:00
expectedvec . x = 0.0f ; expectedvec . y = 0.0f ; expectedvec . z = 0.0f ;
2016-02-25 15:34:04 +01:00
D3DXQuaternionToAxisAngle ( & nul , & axis , & angle ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & axis , 0 ) ;
2017-04-28 23:49:10 +02:00
equal = compare_float ( angle , 3.14159274e+00 f , 0 ) ;
ok ( equal , " Got unexpected angle %.8e. \n " , angle ) ;
2016-02-25 15:34:04 +01:00
D3DXQuaternionToAxisAngle ( & nul , & axis , NULL ) ;
D3DXQuaternionToAxisAngle ( & nul , NULL , & angle ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & axis , 0 ) ;
2017-04-28 23:49:10 +02:00
equal = compare_float ( angle , 3.14159274e+00 f , 0 ) ;
ok ( equal , " Got unexpected angle %.8e. \n " , angle ) ;
2009-07-11 18:08:31 +02:00
}
static void D3DXVector2Test ( void )
{
2009-07-17 18:14:32 +02:00
D3DXVECTOR2 expectedvec , gotvec , nul , u , v , w , x ;
2009-07-11 18:08:31 +02:00
LPD3DXVECTOR2 funcpointer ;
D3DXVECTOR4 expectedtrans , gottrans ;
2017-04-28 23:49:11 +02:00
float coeff1 , coeff2 , got , scale ;
2009-07-11 18:08:31 +02:00
D3DXMATRIX mat ;
2017-04-28 23:49:11 +02:00
BOOL equal ;
2009-07-11 18:08:31 +02:00
nul . x = 0.0f ; nul . y = 0.0f ;
u . x = 3.0f ; u . y = 4.0f ;
v . x = - 7.0f ; v . y = 9.0f ;
w . x = 4.0f ; w . y = - 3.0f ;
x . x = 2.0f ; x . y = - 11.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = 1.0f ; U ( mat ) . m [ 0 ] [ 1 ] = 2.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 3.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 4.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 5.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 6.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 9.0f ; U ( mat ) . m [ 2 ] [ 1 ] = 10.0f ; U ( mat ) . m [ 2 ] [ 2 ] = 11.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 12.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 13.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 14.0f ; U ( mat ) . m [ 3 ] [ 2 ] = 15.0f ; U ( mat ) . m [ 3 ] [ 3 ] = 16.0f ;
coeff1 = 2.0f ; coeff2 = 5.0f ;
scale = - 6.5f ;
/*_______________D3DXVec2Add__________________________*/
expectedvec . x = - 4.0f ; expectedvec . y = 13.0f ;
D3DXVec2Add ( & gotvec , & u , & v ) ;
2017-04-26 00:11:01 +02:00
expect_vec2 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec2Add ( & gotvec , NULL , & v ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec2Add ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec2BaryCentric___________________*/
expectedvec . x = - 12.0f ; expectedvec . y = - 21.0f ;
D3DXVec2BaryCentric ( & gotvec , & u , & v , & w , coeff1 , coeff2 ) ;
2017-04-26 00:11:01 +02:00
expect_vec2 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec2CatmullRom____________________*/
expectedvec . x = 5820.25f ; expectedvec . y = - 3654.5625f ;
D3DXVec2CatmullRom ( & gotvec , & u , & v , & w , & x , scale ) ;
2017-04-26 00:11:01 +02:00
expect_vec2 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec2CCW__________________________*/
2017-04-28 23:49:11 +02:00
got = D3DXVec2CCW ( & u , & v ) ;
equal = compare_float ( got , 55.0f , 0 ) ;
ok ( equal , " Got unexpected ccw %.8e. \n " , got ) ;
/* Tests the case NULL. */
got = D3DXVec2CCW ( NULL , & v ) ;
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected ccw %.8e. \n " , got ) ;
got = D3DXVec2CCW ( NULL , NULL ) ;
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected ccw %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec2Dot__________________________*/
2017-04-28 23:49:11 +02:00
got = D3DXVec2Dot ( & u , & v ) ;
equal = compare_float ( got , 15.0f , 0 ) ;
ok ( equal , " Got unexpected dot %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
2017-04-28 23:49:11 +02:00
got = D3DXVec2Dot ( NULL , & v ) ;
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected dot %.8e. \n " , got ) ;
got = D3DXVec2Dot ( NULL , NULL ) ;
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected dot %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec2Hermite__________________________*/
expectedvec . x = 2604.625f ; expectedvec . y = - 4533.0f ;
D3DXVec2Hermite ( & gotvec , & u , & v , & w , & x , scale ) ;
2017-04-26 00:11:01 +02:00
expect_vec2 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec2Length__________________________*/
2017-04-28 23:49:11 +02:00
got = D3DXVec2Length ( & u ) ;
equal = compare_float ( got , 5.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
/* Tests the case NULL. */
2009-07-11 18:08:31 +02:00
got = D3DXVec2Length ( NULL ) ;
2017-04-28 23:49:11 +02:00
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec2LengthSq________________________*/
2017-04-28 23:49:11 +02:00
got = D3DXVec2LengthSq ( & u ) ;
equal = compare_float ( got , 25.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
/* Tests the case NULL. */
2009-07-11 18:08:31 +02:00
got = D3DXVec2LengthSq ( NULL ) ;
2017-04-28 23:49:11 +02:00
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec2Lerp__________________________*/
2017-04-26 00:11:01 +02:00
expectedvec . x = 68.0f ; expectedvec . y = - 28.5f ;
D3DXVec2Lerp ( & gotvec , & u , & v , scale ) ;
expect_vec2 ( & expectedvec , & gotvec , 0 ) ;
/* Tests the case NULL. */
2009-07-11 18:08:31 +02:00
funcpointer = D3DXVec2Lerp ( & gotvec , NULL , & v , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec2Lerp ( NULL , NULL , NULL , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec2Maximize__________________________*/
2017-04-26 00:11:01 +02:00
expectedvec . x = 3.0f ; expectedvec . y = 9.0f ;
D3DXVec2Maximize ( & gotvec , & u , & v ) ;
expect_vec2 ( & expectedvec , & gotvec , 0 ) ;
/* Tests the case NULL. */
2009-07-11 18:08:31 +02:00
funcpointer = D3DXVec2Maximize ( & gotvec , NULL , & v ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec2Maximize ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec2Minimize__________________________*/
expectedvec . x = - 7.0f ; expectedvec . y = 4.0f ;
D3DXVec2Minimize ( & gotvec , & u , & v ) ;
2017-04-26 00:11:01 +02:00
expect_vec2 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec2Minimize ( & gotvec , NULL , & v ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec2Minimize ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec2Normalize_________________________*/
expectedvec . x = 0.6f ; expectedvec . y = 0.8f ;
D3DXVec2Normalize ( & gotvec , & u ) ;
2017-04-26 00:11:01 +02:00
expect_vec2 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Test the nul vector */
expectedvec . x = 0.0f ; expectedvec . y = 0.0f ;
D3DXVec2Normalize ( & gotvec , & nul ) ;
2017-04-26 00:11:01 +02:00
expect_vec2 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec2Scale____________________________*/
expectedvec . x = - 19.5f ; expectedvec . y = - 26.0f ;
D3DXVec2Scale ( & gotvec , & u , scale ) ;
2017-04-26 00:11:01 +02:00
expect_vec2 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec2Scale ( & gotvec , NULL , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec2Scale ( NULL , NULL , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec2Subtract__________________________*/
2017-04-26 00:11:01 +02:00
expectedvec . x = 10.0f ; expectedvec . y = - 5.0f ;
D3DXVec2Subtract ( & gotvec , & u , & v ) ;
expect_vec2 ( & expectedvec , & gotvec , 0 ) ;
/* Tests the case NULL. */
2009-07-11 18:08:31 +02:00
funcpointer = D3DXVec2Subtract ( & gotvec , NULL , & v ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec2Subtract ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec2Transform_______________________*/
expectedtrans . x = 36.0f ; expectedtrans . y = 44.0f ; expectedtrans . z = 52.0f ; expectedtrans . w = 60.0f ;
2016-04-14 14:10:14 +02:00
D3DXVec2Transform ( & gottrans , & u , & mat ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedtrans , & gottrans , 0 ) ;
2016-04-14 14:10:14 +02:00
gottrans . x = u . x ; gottrans . y = u . y ;
D3DXVec2Transform ( & gottrans , ( D3DXVECTOR2 * ) & gottrans , & mat ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedtrans , & gottrans , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec2TransformCoord_______________________*/
expectedvec . x = 0.6f ; expectedvec . y = 11.0f / 15.0f ;
2016-04-14 14:10:15 +02:00
D3DXVec2TransformCoord ( & gotvec , & u , & mat ) ;
2017-04-26 00:11:01 +02:00
expect_vec2 ( & expectedvec , & gotvec , 1 ) ;
2016-04-14 14:10:15 +02:00
gotvec . x = u . x ; gotvec . y = u . y ;
D3DXVec2TransformCoord ( & gotvec , ( D3DXVECTOR2 * ) & gotvec , & mat ) ;
2017-04-26 00:11:01 +02:00
expect_vec2 ( & expectedvec , & gotvec , 1 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec2TransformNormal______________________*/
expectedvec . x = 23.0f ; expectedvec . y = 30.0f ;
D3DXVec2TransformNormal ( & gotvec , & u , & mat ) ;
2017-04-26 00:11:01 +02:00
expect_vec2 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
}
static void D3DXVector3Test ( void )
{
D3DVIEWPORT9 viewport ;
2009-07-17 18:18:32 +02:00
D3DXVECTOR3 expectedvec , gotvec , nul , u , v , w , x ;
2009-07-11 18:08:31 +02:00
LPD3DXVECTOR3 funcpointer ;
D3DXVECTOR4 expectedtrans , gottrans ;
D3DXMATRIX mat , projection , view , world ;
2017-04-28 23:49:12 +02:00
float coeff1 , coeff2 , got , scale ;
BOOL equal ;
2009-07-11 18:08:31 +02:00
nul . x = 0.0f ; nul . y = 0.0f ; nul . z = 0.0f ;
u . x = 9.0f ; u . y = 6.0f ; u . z = 2.0f ;
v . x = 2.0f ; v . y = - 3.0f ; v . z = - 4.0 ;
w . x = 3.0f ; w . y = - 5.0f ; w . z = 7.0f ;
x . x = 4.0f ; x . y = 1.0f ; x . z = 11.0f ;
viewport . Width = 800 ; viewport . MinZ = 0.2f ; viewport . X = 10 ;
viewport . Height = 680 ; viewport . MaxZ = 0.9f ; viewport . Y = 5 ;
U ( mat ) . m [ 0 ] [ 0 ] = 1.0f ; U ( mat ) . m [ 0 ] [ 1 ] = 2.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 3.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 4.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 5.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 6.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 9.0f ; U ( mat ) . m [ 2 ] [ 1 ] = 10.0f ; U ( mat ) . m [ 2 ] [ 2 ] = 11.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 12.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 13.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 14.0f ; U ( mat ) . m [ 3 ] [ 2 ] = 15.0f ; U ( mat ) . m [ 3 ] [ 3 ] = 16.0f ;
U ( view ) . m [ 0 ] [ 1 ] = 5.0f ; U ( view ) . m [ 0 ] [ 2 ] = 7.0f ; U ( view ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( view ) . m [ 1 ] [ 0 ] = 11.0f ; U ( view ) . m [ 1 ] [ 2 ] = 16.0f ; U ( view ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( view ) . m [ 2 ] [ 0 ] = 19.0f ; U ( view ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( view ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( view ) . m [ 3 ] [ 0 ] = 2.0f ; U ( view ) . m [ 3 ] [ 1 ] = 3.0f ; U ( view ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( view ) . m [ 0 ] [ 0 ] = 10.0f ; U ( view ) . m [ 1 ] [ 1 ] = 20.0f ; U ( view ) . m [ 2 ] [ 2 ] = 30.0f ;
U ( view ) . m [ 3 ] [ 3 ] = - 40.0f ;
U ( world ) . m [ 0 ] [ 0 ] = 21.0f ; U ( world ) . m [ 0 ] [ 1 ] = 2.0f ; U ( world ) . m [ 0 ] [ 2 ] = 3.0f ; U ( world ) . m [ 0 ] [ 3 ] = 4.0 ;
U ( world ) . m [ 1 ] [ 0 ] = 5.0f ; U ( world ) . m [ 1 ] [ 1 ] = 23.0f ; U ( world ) . m [ 1 ] [ 2 ] = 7.0f ; U ( world ) . m [ 1 ] [ 3 ] = 8.0f ;
U ( world ) . m [ 2 ] [ 0 ] = - 8.0f ; U ( world ) . m [ 2 ] [ 1 ] = - 7.0f ; U ( world ) . m [ 2 ] [ 2 ] = 25.0f ; U ( world ) . m [ 2 ] [ 3 ] = - 5.0f ;
U ( world ) . m [ 3 ] [ 0 ] = - 4.0f ; U ( world ) . m [ 3 ] [ 1 ] = - 3.0f ; U ( world ) . m [ 3 ] [ 2 ] = - 2.0f ; U ( world ) . m [ 3 ] [ 3 ] = 27.0f ;
coeff1 = 2.0f ; coeff2 = 5.0f ;
scale = - 6.5f ;
/*_______________D3DXVec3Add__________________________*/
expectedvec . x = 11.0f ; expectedvec . y = 3.0f ; expectedvec . z = - 2.0f ;
D3DXVec3Add ( & gotvec , & u , & v ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec3Add ( & gotvec , NULL , & v ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec3Add ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec3BaryCentric___________________*/
expectedvec . x = - 35.0f ; expectedvec . y = - 67.0 ; expectedvec . z = 15.0f ;
D3DXVec3BaryCentric ( & gotvec , & u , & v , & w , coeff1 , coeff2 ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec3CatmullRom____________________*/
expectedvec . x = 1458.0f ; expectedvec . y = 22.1875f ; expectedvec . z = 4141.375f ;
D3DXVec3CatmullRom ( & gotvec , & u , & v , & w , & x , scale ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec3Cross________________________*/
expectedvec . x = - 18.0f ; expectedvec . y = 40.0f ; expectedvec . z = - 39.0f ;
D3DXVec3Cross ( & gotvec , & u , & v ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 0 ) ;
2013-06-08 14:26:45 +02:00
expectedvec . x = - 277.0f ; expectedvec . y = - 150.0f ; expectedvec . z = - 26.0f ;
D3DXVec3Cross ( & gotvec , & gotvec , & v ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec3Cross ( & gotvec , NULL , & v ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec3Cross ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec3Dot__________________________*/
2017-04-28 23:49:12 +02:00
got = D3DXVec3Dot ( & u , & v ) ;
equal = compare_float ( got , - 8.0f , 0 ) ;
ok ( equal , " Got unexpected dot %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
2017-04-28 23:49:12 +02:00
got = D3DXVec3Dot ( NULL , & v ) ;
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected dot %.8e. \n " , got ) ;
got = D3DXVec3Dot ( NULL , NULL ) ;
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected dot %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec3Hermite__________________________*/
expectedvec . x = - 6045.75f ; expectedvec . y = - 6650.0f ; expectedvec . z = 1358.875f ;
D3DXVec3Hermite ( & gotvec , & u , & v , & w , & x , scale ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec3Length__________________________*/
2012-03-12 19:53:24 +01:00
got = D3DXVec3Length ( & u ) ;
2017-04-28 23:49:12 +02:00
equal = compare_float ( got , 11.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
/* Tests the case NULL. */
2009-07-11 18:08:31 +02:00
got = D3DXVec3Length ( NULL ) ;
2017-04-28 23:49:12 +02:00
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec3LengthSq________________________*/
got = D3DXVec3LengthSq ( & u ) ;
2017-04-28 23:49:12 +02:00
equal = compare_float ( got , 121.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
/* Tests the case NULL. */
2009-07-11 18:08:31 +02:00
got = D3DXVec3LengthSq ( NULL ) ;
2017-04-28 23:49:12 +02:00
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec3Lerp__________________________*/
expectedvec . x = 54.5f ; expectedvec . y = 64.5f , expectedvec . z = 41.0f ;
D3DXVec3Lerp ( & gotvec , & u , & v , scale ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec3Lerp ( & gotvec , NULL , & v , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec3Lerp ( NULL , NULL , NULL , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec3Maximize__________________________*/
expectedvec . x = 9.0f ; expectedvec . y = 6.0f ; expectedvec . z = 2.0f ;
D3DXVec3Maximize ( & gotvec , & u , & v ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec3Maximize ( & gotvec , NULL , & v ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec3Maximize ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec3Minimize__________________________*/
expectedvec . x = 2.0f ; expectedvec . y = - 3.0f ; expectedvec . z = - 4.0f ;
D3DXVec3Minimize ( & gotvec , & u , & v ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec3Minimize ( & gotvec , NULL , & v ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec3Minimize ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec3Normalize_________________________*/
expectedvec . x = 9.0f / 11.0f ; expectedvec . y = 6.0f / 11.0f ; expectedvec . z = 2.0f / 11.0f ;
D3DXVec3Normalize ( & gotvec , & u ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 1 ) ;
2009-07-11 18:08:31 +02:00
/* Test the nul vector */
expectedvec . x = 0.0f ; expectedvec . y = 0.0f ; expectedvec . z = 0.0f ;
D3DXVec3Normalize ( & gotvec , & nul ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec3Scale____________________________*/
expectedvec . x = - 58.5f ; expectedvec . y = - 39.0f ; expectedvec . z = - 13.0f ;
D3DXVec3Scale ( & gotvec , & u , scale ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec3Scale ( & gotvec , NULL , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec3Scale ( NULL , NULL , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec3Subtract_______________________*/
expectedvec . x = 7.0f ; expectedvec . y = 9.0f ; expectedvec . z = 6.0f ;
D3DXVec3Subtract ( & gotvec , & u , & v ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec3Subtract ( & gotvec , NULL , & v ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec3Subtract ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec3Transform_______________________*/
expectedtrans . x = 70.0f ; expectedtrans . y = 88.0f ; expectedtrans . z = 106.0f ; expectedtrans . w = 124.0f ;
2016-04-12 12:09:17 +02:00
D3DXVec3Transform ( & gottrans , & u , & mat ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedtrans , & gottrans , 0 ) ;
2016-04-12 12:09:17 +02:00
gottrans . x = u . x ; gottrans . y = u . y ; gottrans . z = u . z ;
D3DXVec3Transform ( & gottrans , ( D3DXVECTOR3 * ) & gottrans , & mat ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedtrans , & gottrans , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec3TransformCoord_______________________*/
expectedvec . x = 70.0f / 124.0f ; expectedvec . y = 88.0f / 124.0f ; expectedvec . z = 106.0f / 124.0f ;
D3DXVec3TransformCoord ( & gotvec , & u , & mat ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 1 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec3TransformNormal______________________*/
expectedvec . x = 57.0f ; expectedvec . y = 74.0f ; expectedvec . z = 91.0f ;
D3DXVec3TransformNormal ( & gotvec , & u , & mat ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
2012-11-08 13:45:54 +01:00
/*_______________D3DXVec3Project_________________________*/
expectedvec . x = 1135.721924f ; expectedvec . y = 147.086914f ; expectedvec . z = 0.153412f ;
D3DXMatrixPerspectiveFovLH ( & projection , D3DX_PI / 4.0f , 20.0f / 17.0f , 1.0f , 1000.0f ) ;
D3DXVec3Project ( & gotvec , & u , & viewport , & projection , & view , & world ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 32 ) ;
2012-11-08 13:45:54 +01:00
/* World matrix can be omitted */
D3DXMatrixMultiply ( & mat , & world , & view ) ;
D3DXVec3Project ( & gotvec , & u , & viewport , & projection , & mat , NULL ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 32 ) ;
2012-11-08 13:45:54 +01:00
/* Projection matrix can be omitted */
D3DXMatrixMultiply ( & mat , & view , & projection ) ;
D3DXVec3Project ( & gotvec , & u , & viewport , NULL , & mat , & world ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 32 ) ;
2012-11-08 13:45:54 +01:00
/* View matrix can be omitted */
D3DXMatrixMultiply ( & mat , & world , & view ) ;
D3DXVec3Project ( & gotvec , & u , & viewport , & projection , NULL , & mat ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 32 ) ;
2012-11-08 13:45:54 +01:00
/* All matrices can be omitted */
expectedvec . x = 4010.000000f ; expectedvec . y = - 1695.000000f ; expectedvec . z = 1.600000f ;
D3DXVec3Project ( & gotvec , & u , & viewport , NULL , NULL , NULL ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 2 ) ;
2012-11-08 13:45:54 +01:00
/* Viewport can be omitted */
expectedvec . x = 1.814305f ; expectedvec . y = 0.582097f ; expectedvec . z = - 0.066555f ;
D3DXVec3Project ( & gotvec , & u , NULL , & projection , & view , & world ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 64 ) ;
2012-11-08 13:45:54 +01:00
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec3Unproject_________________________*/
expectedvec . x = - 2.913411f ; expectedvec . y = 1.593215f ; expectedvec . z = 0.380724f ;
D3DXMatrixPerspectiveFovLH ( & projection , D3DX_PI / 4.0f , 20.0f / 17.0f , 1.0f , 1000.0f ) ;
D3DXVec3Unproject ( & gotvec , & u , & viewport , & projection , & view , & world ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 16 ) ;
2012-03-12 19:53:24 +01:00
/* World matrix can be omitted */
D3DXMatrixMultiply ( & mat , & world , & view ) ;
D3DXVec3Unproject ( & gotvec , & u , & viewport , & projection , & mat , NULL ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 16 ) ;
2012-11-08 13:45:55 +01:00
/* Projection matrix can be omitted */
D3DXMatrixMultiply ( & mat , & view , & projection ) ;
D3DXVec3Unproject ( & gotvec , & u , & viewport , NULL , & mat , & world ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 32 ) ;
2012-11-08 13:45:55 +01:00
/* View matrix can be omitted */
D3DXMatrixMultiply ( & mat , & world , & view ) ;
D3DXVec3Unproject ( & gotvec , & u , & viewport , & projection , NULL , & mat ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 16 ) ;
2012-11-08 13:45:55 +01:00
/* All matrices can be omitted */
expectedvec . x = - 1.002500f ; expectedvec . y = 0.997059f ; expectedvec . z = 2.571429f ;
D3DXVec3Unproject ( & gotvec , & u , & viewport , NULL , NULL , NULL ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 4 ) ;
2012-10-28 23:20:08 +01:00
/* Viewport can be omitted */
expectedvec . x = - 11.018396f ; expectedvec . y = 3.218991f ; expectedvec . z = 1.380329f ;
D3DXVec3Unproject ( & gotvec , & u , NULL , & projection , & view , & world ) ;
2017-04-26 20:23:19 +02:00
expect_vec3 ( & expectedvec , & gotvec , 8 ) ;
2009-07-11 18:08:31 +02:00
}
static void D3DXVector4Test ( void )
{
2010-04-24 16:30:50 +02:00
D3DXVECTOR4 expectedvec , gotvec , u , v , w , x ;
2009-07-11 18:08:31 +02:00
LPD3DXVECTOR4 funcpointer ;
D3DXVECTOR4 expectedtrans , gottrans ;
2017-04-28 23:49:13 +02:00
float coeff1 , coeff2 , got , scale ;
2009-07-11 18:08:31 +02:00
D3DXMATRIX mat ;
2017-04-28 23:49:13 +02:00
BOOL equal ;
2009-07-11 18:08:31 +02:00
u . x = 1.0f ; u . y = 2.0f ; u . z = 4.0f ; u . w = 10.0 ;
v . x = - 3.0f ; v . y = 4.0f ; v . z = - 5.0f ; v . w = 7.0 ;
w . x = 4.0f ; w . y = 6.0f ; w . z = - 2.0f ; w . w = 1.0f ;
x . x = 6.0f ; x . y = - 7.0f ; x . z = 8.0f ; x . w = - 9.0f ;
U ( mat ) . m [ 0 ] [ 0 ] = 1.0f ; U ( mat ) . m [ 0 ] [ 1 ] = 2.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 3.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 4.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 5.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 6.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 9.0f ; U ( mat ) . m [ 2 ] [ 1 ] = 10.0f ; U ( mat ) . m [ 2 ] [ 2 ] = 11.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 12.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 13.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 14.0f ; U ( mat ) . m [ 3 ] [ 2 ] = 15.0f ; U ( mat ) . m [ 3 ] [ 3 ] = 16.0f ;
coeff1 = 2.0f ; coeff2 = 5.0 ;
scale = - 6.5f ;
/*_______________D3DXVec4Add__________________________*/
expectedvec . x = - 2.0f ; expectedvec . y = 6.0f ; expectedvec . z = - 1.0f ; expectedvec . w = 17.0f ;
D3DXVec4Add ( & gotvec , & u , & v ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec4Add ( & gotvec , NULL , & v ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec4Add ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec4BaryCentric____________________*/
expectedvec . x = 8.0f ; expectedvec . y = 26.0 ; expectedvec . z = - 44.0f ; expectedvec . w = - 41.0f ;
D3DXVec4BaryCentric ( & gotvec , & u , & v , & w , coeff1 , coeff2 ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec4CatmullRom____________________*/
expectedvec . x = 2754.625f ; expectedvec . y = 2367.5625f ; expectedvec . z = 1060.1875f ; expectedvec . w = 131.3125f ;
D3DXVec4CatmullRom ( & gotvec , & u , & v , & w , & x , scale ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec4Cross_________________________*/
expectedvec . x = 390.0f ; expectedvec . y = - 393.0f ; expectedvec . z = - 316.0f ; expectedvec . w = 166.0f ;
D3DXVec4Cross ( & gotvec , & u , & v , & w ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec4Dot__________________________*/
2017-04-28 23:49:13 +02:00
got = D3DXVec4Dot ( & u , & v ) ;
equal = compare_float ( got , 55.0f , 0 ) ;
ok ( equal , " Got unexpected dot %.8e. \n " , got ) ;
/* Tests the case NULL. */
got = D3DXVec4Dot ( NULL , & v ) ;
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected dot %.8e. \n " , got ) ;
got = D3DXVec4Dot ( NULL , NULL ) ;
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected dot %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec4Hermite_________________________*/
expectedvec . x = 1224.625f ; expectedvec . y = 3461.625f ; expectedvec . z = - 4758.875f ; expectedvec . w = - 5781.5f ;
D3DXVec4Hermite ( & gotvec , & u , & v , & w , & x , scale ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec4Length__________________________*/
2017-04-28 23:49:13 +02:00
got = D3DXVec4Length ( & u ) ;
equal = compare_float ( got , 11.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
/* Tests the case NULL. */
2009-07-11 18:08:31 +02:00
got = D3DXVec4Length ( NULL ) ;
2017-04-28 23:49:13 +02:00
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec4LengthSq________________________*/
got = D3DXVec4LengthSq ( & u ) ;
2017-04-28 23:49:13 +02:00
equal = compare_float ( got , 121.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
/* Tests the case NULL. */
2009-07-11 18:08:31 +02:00
got = D3DXVec4LengthSq ( NULL ) ;
2017-04-28 23:49:13 +02:00
equal = compare_float ( got , 0.0f , 0 ) ;
ok ( equal , " Got unexpected length %.8e. \n " , got ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec4Lerp__________________________*/
expectedvec . x = 27.0f ; expectedvec . y = - 11.0f ; expectedvec . z = 62.5 ; expectedvec . w = 29.5 ;
D3DXVec4Lerp ( & gotvec , & u , & v , scale ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec4Lerp ( & gotvec , NULL , & v , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec4Lerp ( NULL , NULL , NULL , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec4Maximize__________________________*/
expectedvec . x = 1.0f ; expectedvec . y = 4.0f ; expectedvec . z = 4.0f ; expectedvec . w = 10.0 ;
D3DXVec4Maximize ( & gotvec , & u , & v ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec4Maximize ( & gotvec , NULL , & v ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec4Maximize ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec4Minimize__________________________*/
expectedvec . x = - 3.0f ; expectedvec . y = 2.0f ; expectedvec . z = - 5.0f ; expectedvec . w = 7.0 ;
D3DXVec4Minimize ( & gotvec , & u , & v ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec4Minimize ( & gotvec , NULL , & v ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec4Minimize ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec4Normalize_________________________*/
expectedvec . x = 1.0f / 11.0f ; expectedvec . y = 2.0f / 11.0f ; expectedvec . z = 4.0f / 11.0f ; expectedvec . w = 10.0f / 11.0f ;
D3DXVec4Normalize ( & gotvec , & u ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedvec , & gotvec , 1 ) ;
2009-07-11 18:08:31 +02:00
/*_______________D3DXVec4Scale____________________________*/
expectedvec . x = - 6.5f ; expectedvec . y = - 13.0f ; expectedvec . z = - 26.0f ; expectedvec . w = - 65.0f ;
D3DXVec4Scale ( & gotvec , & u , scale ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec4Scale ( & gotvec , NULL , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec4Scale ( NULL , NULL , scale ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec4Subtract__________________________*/
expectedvec . x = 4.0f ; expectedvec . y = - 2.0f ; expectedvec . z = 9.0f ; expectedvec . w = 3.0f ;
D3DXVec4Subtract ( & gotvec , & u , & v ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedvec , & gotvec , 0 ) ;
2009-07-11 18:08:31 +02:00
/* Tests the case NULL */
funcpointer = D3DXVec4Subtract ( & gotvec , NULL , & v ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
funcpointer = D3DXVec4Subtract ( NULL , NULL , NULL ) ;
ok ( funcpointer = = NULL , " Expected: %p, Got: %p \n " , NULL , funcpointer ) ;
/*_______________D3DXVec4Transform_______________________*/
expectedtrans . x = 177.0f ; expectedtrans . y = 194.0f ; expectedtrans . z = 211.0f ; expectedtrans . w = 228.0f ;
D3DXVec4Transform ( & gottrans , & u , & mat ) ;
2017-04-26 00:11:03 +02:00
expect_vec4 ( & expectedtrans , & gottrans , 0 ) ;
2009-07-11 18:08:31 +02:00
}
static void test_matrix_stack ( void )
{
ID3DXMatrixStack * stack ;
ULONG refcount ;
HRESULT hr ;
const D3DXMATRIX mat1 = { { {
1.0f , 2.0f , 3.0f , 4.0f ,
5.0f , 6.0f , 7.0f , 8.0f ,
9.0f , 10.0f , 11.0f , 12.0f ,
13.0f , 14.0f , 15.0f , 16.0f
} } } ;
const D3DXMATRIX mat2 = { { {
17.0f , 18.0f , 19.0f , 20.0f ,
21.0f , 22.0f , 23.0f , 24.0f ,
25.0f , 26.0f , 27.0f , 28.0f ,
29.0f , 30.0f , 31.0f , 32.0f
} } } ;
hr = D3DXCreateMatrixStack ( 0 , & stack ) ;
ok ( SUCCEEDED ( hr ) , " Failed to create a matrix stack, hr %#x \n " , hr ) ;
if ( FAILED ( hr ) ) return ;
ok ( D3DXMatrixIsIdentity ( ID3DXMatrixStack_GetTop ( stack ) ) ,
" The top of an empty matrix stack should be an identity matrix \n " ) ;
hr = ID3DXMatrixStack_Pop ( stack ) ;
ok ( SUCCEEDED ( hr ) , " Pop failed, hr %#x \n " , hr ) ;
hr = ID3DXMatrixStack_Push ( stack ) ;
ok ( SUCCEEDED ( hr ) , " Push failed, hr %#x \n " , hr ) ;
ok ( D3DXMatrixIsIdentity ( ID3DXMatrixStack_GetTop ( stack ) ) , " The top should be an identity matrix \n " ) ;
hr = ID3DXMatrixStack_Push ( stack ) ;
ok ( SUCCEEDED ( hr ) , " Push failed, hr %#x \n " , hr ) ;
hr = ID3DXMatrixStack_LoadMatrix ( stack , & mat1 ) ;
ok ( SUCCEEDED ( hr ) , " LoadMatrix failed, hr %#x \n " , hr ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & mat1 , ID3DXMatrixStack_GetTop ( stack ) , 0 ) ;
2009-07-11 18:08:31 +02:00
hr = ID3DXMatrixStack_Push ( stack ) ;
ok ( SUCCEEDED ( hr ) , " Push failed, hr %#x \n " , hr ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & mat1 , ID3DXMatrixStack_GetTop ( stack ) , 0 ) ;
2009-07-11 18:08:31 +02:00
hr = ID3DXMatrixStack_LoadMatrix ( stack , & mat2 ) ;
ok ( SUCCEEDED ( hr ) , " LoadMatrix failed, hr %#x \n " , hr ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & mat2 , ID3DXMatrixStack_GetTop ( stack ) , 0 ) ;
2009-07-11 18:08:31 +02:00
hr = ID3DXMatrixStack_Push ( stack ) ;
ok ( SUCCEEDED ( hr ) , " Push failed, hr %#x \n " , hr ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & mat2 , ID3DXMatrixStack_GetTop ( stack ) , 0 ) ;
2009-07-11 18:08:31 +02:00
hr = ID3DXMatrixStack_LoadIdentity ( stack ) ;
ok ( SUCCEEDED ( hr ) , " LoadIdentity failed, hr %#x \n " , hr ) ;
ok ( D3DXMatrixIsIdentity ( ID3DXMatrixStack_GetTop ( stack ) ) , " The top should be an identity matrix \n " ) ;
hr = ID3DXMatrixStack_Pop ( stack ) ;
ok ( SUCCEEDED ( hr ) , " Pop failed, hr %#x \n " , hr ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & mat2 , ID3DXMatrixStack_GetTop ( stack ) , 0 ) ;
2009-07-11 18:08:31 +02:00
hr = ID3DXMatrixStack_Pop ( stack ) ;
ok ( SUCCEEDED ( hr ) , " Pop failed, hr %#x \n " , hr ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & mat1 , ID3DXMatrixStack_GetTop ( stack ) , 0 ) ;
2009-07-11 18:08:31 +02:00
hr = ID3DXMatrixStack_Pop ( stack ) ;
ok ( SUCCEEDED ( hr ) , " Pop failed, hr %#x \n " , hr ) ;
ok ( D3DXMatrixIsIdentity ( ID3DXMatrixStack_GetTop ( stack ) ) , " The top should be an identity matrix \n " ) ;
hr = ID3DXMatrixStack_Pop ( stack ) ;
ok ( SUCCEEDED ( hr ) , " Pop failed, hr %#x \n " , hr ) ;
ok ( D3DXMatrixIsIdentity ( ID3DXMatrixStack_GetTop ( stack ) ) , " The top should be an identity matrix \n " ) ;
refcount = ID3DXMatrixStack_Release ( stack ) ;
ok ( ! refcount , " Matrix stack has %u references left. \n " , refcount ) ;
}
2008-09-11 20:11:53 +02:00
2008-11-12 18:54:50 +01:00
static void test_Matrix_AffineTransformation2D ( void )
{
D3DXMATRIX exp_mat , got_mat ;
D3DXVECTOR2 center , position ;
FLOAT angle , scale ;
center . x = 3.0f ;
center . y = 4.0f ;
position . x = - 6.0f ;
position . y = 7.0f ;
angle = D3DX_PI / 3.0f ;
scale = 20.0f ;
2008-11-17 15:01:24 +01:00
U ( exp_mat ) . m [ 0 ] [ 0 ] = 10.0f ;
U ( exp_mat ) . m [ 1 ] [ 0 ] = - 17.320507f ;
U ( exp_mat ) . m [ 2 ] [ 0 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 0 ] = - 1.035898f ;
U ( exp_mat ) . m [ 0 ] [ 1 ] = 17.320507f ;
U ( exp_mat ) . m [ 1 ] [ 1 ] = 10.0f ;
U ( exp_mat ) . m [ 2 ] [ 1 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 1 ] = 6.401924f ;
U ( exp_mat ) . m [ 0 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 1 ] [ 2 ] = 0.0f ;
2009-01-13 12:22:25 +01:00
U ( exp_mat ) . m [ 2 ] [ 2 ] = 1.0f ;
2008-11-17 15:01:24 +01:00
U ( exp_mat ) . m [ 3 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 3 ] = 1.0f ;
2008-11-12 18:54:50 +01:00
D3DXMatrixAffineTransformation2D ( & got_mat , scale , & center , angle , & position ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & exp_mat , & got_mat , 2 ) ;
2008-11-12 18:54:50 +01:00
/*______________*/
center . x = 3.0f ;
center . y = 4.0f ;
angle = D3DX_PI / 3.0f ;
scale = 20.0f ;
2008-11-17 15:01:24 +01:00
U ( exp_mat ) . m [ 0 ] [ 0 ] = 10.0f ;
U ( exp_mat ) . m [ 1 ] [ 0 ] = - 17.320507f ;
U ( exp_mat ) . m [ 2 ] [ 0 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 0 ] = 4.964102f ;
U ( exp_mat ) . m [ 0 ] [ 1 ] = 17.320507f ;
U ( exp_mat ) . m [ 1 ] [ 1 ] = 10.0f ;
U ( exp_mat ) . m [ 2 ] [ 1 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 1 ] = - 0.598076f ;
U ( exp_mat ) . m [ 0 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 1 ] [ 2 ] = 0.0f ;
2009-01-13 12:22:25 +01:00
U ( exp_mat ) . m [ 2 ] [ 2 ] = 1.0f ;
2008-11-17 15:01:24 +01:00
U ( exp_mat ) . m [ 3 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 3 ] = 1.0f ;
2008-11-12 18:54:50 +01:00
D3DXMatrixAffineTransformation2D ( & got_mat , scale , & center , angle , NULL ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & exp_mat , & got_mat , 8 ) ;
2008-11-12 18:54:50 +01:00
/*______________*/
position . x = - 6.0f ;
position . y = 7.0f ;
angle = D3DX_PI / 3.0f ;
scale = 20.0f ;
2008-11-17 15:01:24 +01:00
U ( exp_mat ) . m [ 0 ] [ 0 ] = 10.0f ;
U ( exp_mat ) . m [ 1 ] [ 0 ] = - 17.320507f ;
U ( exp_mat ) . m [ 2 ] [ 0 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 0 ] = - 6.0f ;
U ( exp_mat ) . m [ 0 ] [ 1 ] = 17.320507f ;
U ( exp_mat ) . m [ 1 ] [ 1 ] = 10.0f ;
U ( exp_mat ) . m [ 2 ] [ 1 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 1 ] = 7.0f ;
U ( exp_mat ) . m [ 0 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 1 ] [ 2 ] = 0.0f ;
2009-01-13 12:22:25 +01:00
U ( exp_mat ) . m [ 2 ] [ 2 ] = 1.0f ;
2008-11-17 15:01:24 +01:00
U ( exp_mat ) . m [ 3 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 3 ] = 1.0f ;
2008-11-12 18:54:50 +01:00
D3DXMatrixAffineTransformation2D ( & got_mat , scale , NULL , angle , & position ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & exp_mat , & got_mat , 1 ) ;
2008-11-12 18:54:50 +01:00
/*______________*/
angle = 5.0f * D3DX_PI / 4.0f ;
scale = - 20.0f ;
2008-11-17 15:01:24 +01:00
U ( exp_mat ) . m [ 0 ] [ 0 ] = 14.142133f ;
U ( exp_mat ) . m [ 1 ] [ 0 ] = - 14.142133f ;
U ( exp_mat ) . m [ 2 ] [ 0 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 0 ] = 0.0f ;
U ( exp_mat ) . m [ 0 ] [ 1 ] = 14.142133 ;
U ( exp_mat ) . m [ 1 ] [ 1 ] = 14.142133f ;
U ( exp_mat ) . m [ 2 ] [ 1 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 1 ] = 0.0f ;
U ( exp_mat ) . m [ 0 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 1 ] [ 2 ] = 0.0f ;
2009-01-13 12:22:25 +01:00
U ( exp_mat ) . m [ 2 ] [ 2 ] = 1.0f ;
2008-11-17 15:01:24 +01:00
U ( exp_mat ) . m [ 3 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 3 ] = 1.0f ;
2008-11-12 18:54:50 +01:00
D3DXMatrixAffineTransformation2D ( & got_mat , scale , NULL , angle , NULL ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & exp_mat , & got_mat , 8 ) ;
2008-11-12 18:54:50 +01:00
}
2008-09-11 20:11:53 +02:00
static void test_Matrix_Decompose ( void )
{
D3DXMATRIX pm ;
D3DXQUATERNION exp_rotation , got_rotation ;
D3DXVECTOR3 exp_scale , got_scale , exp_translation , got_translation ;
HRESULT hr ;
2017-04-27 23:52:40 +02:00
BOOL equal ;
2008-09-11 20:11:53 +02:00
/*___________*/
2017-04-27 23:52:40 +02:00
U ( pm ) . m [ 0 ] [ 0 ] = - 9.23879206e-01 f ;
U ( pm ) . m [ 1 ] [ 0 ] = - 2.70598412e-01 f ;
U ( pm ) . m [ 2 ] [ 0 ] = 2.70598441e-01 f ;
U ( pm ) . m [ 3 ] [ 0 ] = - 5.00000000e+00 f ;
U ( pm ) . m [ 0 ] [ 1 ] = 2.70598471e-01 f ;
U ( pm ) . m [ 1 ] [ 1 ] = 3.80604863e-02 f ;
U ( pm ) . m [ 2 ] [ 1 ] = 9.61939573e-01 f ;
U ( pm ) . m [ 3 ] [ 1 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 0 ] [ 2 ] = - 2.70598441e-01 f ;
U ( pm ) . m [ 1 ] [ 2 ] = 9.61939573e-01 f ;
U ( pm ) . m [ 2 ] [ 2 ] = 3.80603075e-02 f ;
U ( pm ) . m [ 3 ] [ 2 ] = 1.00000000e+01 f ;
U ( pm ) . m [ 0 ] [ 3 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 1 ] [ 3 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 2 ] [ 3 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 3 ] [ 3 ] = 1.00000000e+00 f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:41 +02:00
exp_scale . x = 9.99999881e-01 f ;
exp_scale . y = 9.99999881e-01 f ;
exp_scale . z = 9.99999881e-01 f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:40 +02:00
exp_rotation . x = 2.14862776e-08 f ;
exp_rotation . y = 6.93519890e-01 f ;
exp_rotation . z = 6.93519890e-01 f ;
exp_rotation . w = 1.95090637e-01 f ;
2008-09-11 20:11:53 +02:00
exp_translation . x = - 5.0f ;
exp_translation . y = 0.0f ;
exp_translation . z = 10.0f ;
D3DXMatrixDecompose ( & got_scale , & got_rotation , & got_translation , & pm ) ;
2017-04-27 23:52:41 +02:00
expect_vec3 ( & exp_scale , & got_scale , 1 ) ;
2017-04-27 23:52:40 +02:00
expect_quaternion ( & exp_rotation , & got_rotation , 1 ) ;
2017-04-27 23:52:42 +02:00
expect_vec3 ( & exp_translation , & got_translation , 0 ) ;
2008-09-11 20:11:53 +02:00
/*_________*/
2008-09-14 02:12:19 +02:00
U ( pm ) . m [ 0 ] [ 0 ] = - 2.255813f ;
U ( pm ) . m [ 1 ] [ 0 ] = 1.302324f ;
U ( pm ) . m [ 2 ] [ 0 ] = 1.488373f ;
U ( pm ) . m [ 3 ] [ 0 ] = 1.0f ;
U ( pm ) . m [ 0 ] [ 1 ] = 1.302327f ;
U ( pm ) . m [ 1 ] [ 1 ] = - 0.7209296f ;
U ( pm ) . m [ 2 ] [ 1 ] = 2.60465f ;
U ( pm ) . m [ 3 ] [ 1 ] = 2.0f ;
U ( pm ) . m [ 0 ] [ 2 ] = 1.488371f ;
U ( pm ) . m [ 1 ] [ 2 ] = 2.604651f ;
U ( pm ) . m [ 2 ] [ 2 ] = - 0.02325551f ;
U ( pm ) . m [ 3 ] [ 2 ] = 3.0f ;
U ( pm ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 3 ] [ 3 ] = 1.0f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:41 +02:00
exp_scale . x = 2.99999928e+00 f ;
exp_scale . y = 2.99999905e+00 f ;
exp_scale . z = 2.99999952e+00 f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:40 +02:00
exp_rotation . x = 3.52180451e-01 f ;
exp_rotation . y = 6.16315663e-01 f ;
exp_rotation . z = 7.04360664e-01 f ;
exp_rotation . w = 3.38489343e-07 f ;
2008-09-11 20:11:53 +02:00
exp_translation . x = 1.0f ;
exp_translation . y = 2.0f ;
exp_translation . z = 3.0f ;
D3DXMatrixDecompose ( & got_scale , & got_rotation , & got_translation , & pm ) ;
2017-04-27 23:52:41 +02:00
expect_vec3 ( & exp_scale , & got_scale , 0 ) ;
2017-04-27 23:52:40 +02:00
expect_quaternion ( & exp_rotation , & got_rotation , 2 ) ;
2017-04-27 23:52:42 +02:00
expect_vec3 ( & exp_translation , & got_translation , 0 ) ;
2008-09-11 20:11:53 +02:00
/*_____________*/
2008-09-14 02:12:19 +02:00
U ( pm ) . m [ 0 ] [ 0 ] = 2.427051f ;
U ( pm ) . m [ 1 ] [ 0 ] = 0.0f ;
U ( pm ) . m [ 2 ] [ 0 ] = 1.763355f ;
U ( pm ) . m [ 3 ] [ 0 ] = 5.0f ;
U ( pm ) . m [ 0 ] [ 1 ] = 0.0f ;
U ( pm ) . m [ 1 ] [ 1 ] = 3.0f ;
U ( pm ) . m [ 2 ] [ 1 ] = 0.0f ;
U ( pm ) . m [ 3 ] [ 1 ] = 5.0f ;
U ( pm ) . m [ 0 ] [ 2 ] = - 1.763355f ;
U ( pm ) . m [ 1 ] [ 2 ] = 0.0f ;
U ( pm ) . m [ 2 ] [ 2 ] = 2.427051f ;
U ( pm ) . m [ 3 ] [ 2 ] = 5.0f ;
U ( pm ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 3 ] [ 3 ] = 1.0f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:41 +02:00
exp_scale . x = 2.99999976e+00 f ;
exp_scale . y = 3.00000000e+00 f ;
exp_scale . z = 2.99999976e+00 f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:40 +02:00
exp_rotation . x = 0.00000000e+00 f ;
exp_rotation . y = 3.09016883e-01 f ;
exp_rotation . z = 0.00000000e+00 f ;
exp_rotation . w = 9.51056540e-01 f ;
2008-09-11 20:11:53 +02:00
exp_translation . x = 5.0f ;
exp_translation . y = 5.0f ;
exp_translation . z = 5.0f ;
D3DXMatrixDecompose ( & got_scale , & got_rotation , & got_translation , & pm ) ;
2017-04-27 23:52:41 +02:00
expect_vec3 ( & exp_scale , & got_scale , 1 ) ;
2017-04-27 23:52:40 +02:00
expect_quaternion ( & exp_rotation , & got_rotation , 1 ) ;
2017-04-27 23:52:42 +02:00
expect_vec3 ( & exp_translation , & got_translation , 0 ) ;
2008-09-11 20:11:53 +02:00
/*_____________*/
2017-04-27 23:52:40 +02:00
U ( pm ) . m [ 0 ] [ 0 ] = - 9.23879206e-01 f ;
U ( pm ) . m [ 1 ] [ 0 ] = - 2.70598412e-01 f ;
U ( pm ) . m [ 2 ] [ 0 ] = 2.70598441e-01 f ;
U ( pm ) . m [ 3 ] [ 0 ] = - 5.00000000e+00 f ;
U ( pm ) . m [ 0 ] [ 1 ] = 2.70598471e-01 f ;
U ( pm ) . m [ 1 ] [ 1 ] = 3.80604863e-02 f ;
U ( pm ) . m [ 2 ] [ 1 ] = 9.61939573e-01 f ;
U ( pm ) . m [ 3 ] [ 1 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 0 ] [ 2 ] = - 2.70598441e-01 f ;
U ( pm ) . m [ 1 ] [ 2 ] = 9.61939573e-01 f ;
U ( pm ) . m [ 2 ] [ 2 ] = 3.80603075e-02 f ;
U ( pm ) . m [ 3 ] [ 2 ] = 1.00000000e+01 f ;
U ( pm ) . m [ 0 ] [ 3 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 1 ] [ 3 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 2 ] [ 3 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 3 ] [ 3 ] = 1.00000000e+00 f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:41 +02:00
exp_scale . x = 9.99999881e-01 f ;
exp_scale . y = 9.99999881e-01 f ;
exp_scale . z = 9.99999881e-01 f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:40 +02:00
exp_rotation . x = 2.14862776e-08 f ;
exp_rotation . y = 6.93519890e-01 f ;
exp_rotation . z = 6.93519890e-01 f ;
exp_rotation . w = 1.95090637e-01 f ;
2008-09-11 20:11:53 +02:00
exp_translation . x = - 5.0f ;
exp_translation . y = 0.0f ;
exp_translation . z = 10.0f ;
D3DXMatrixDecompose ( & got_scale , & got_rotation , & got_translation , & pm ) ;
2017-04-27 23:52:41 +02:00
expect_vec3 ( & exp_scale , & got_scale , 1 ) ;
2017-04-27 23:52:40 +02:00
expect_quaternion ( & exp_rotation , & got_rotation , 1 ) ;
2017-04-27 23:52:42 +02:00
expect_vec3 ( & exp_translation , & got_translation , 0 ) ;
2008-09-11 20:11:53 +02:00
/*__________*/
2017-04-27 23:52:40 +02:00
U ( pm ) . m [ 0 ] [ 0 ] = - 9.23878908e-01 f ;
U ( pm ) . m [ 1 ] [ 0 ] = - 5.41196704e-01 f ;
U ( pm ) . m [ 2 ] [ 0 ] = 8.11795175e-01 f ;
U ( pm ) . m [ 3 ] [ 0 ] = - 5.00000000e+00 f ;
U ( pm ) . m [ 0 ] [ 1 ] = 2.70598322e-01 f ;
U ( pm ) . m [ 1 ] [ 1 ] = 7.61209577e-02 f ;
U ( pm ) . m [ 2 ] [ 1 ] = 2.88581824e+00 f ;
U ( pm ) . m [ 3 ] [ 1 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 0 ] [ 2 ] = - 2.70598352e-01 f ;
U ( pm ) . m [ 1 ] [ 2 ] = 1.92387879e+00 f ;
U ( pm ) . m [ 2 ] [ 2 ] = 1.14180908e-01 f ;
U ( pm ) . m [ 3 ] [ 2 ] = 1.00000000e+01 f ;
U ( pm ) . m [ 0 ] [ 3 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 1 ] [ 3 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 2 ] [ 3 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 3 ] [ 3 ] = 1.00000000e+00 f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:41 +02:00
exp_scale . x = 9.99999583e-01 f ;
exp_scale . y = 1.99999940e+00 f ;
exp_scale . z = 2.99999928e+00 f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:40 +02:00
exp_rotation . x = 1.07431388e-08 f ;
exp_rotation . y = 6.93519890e-01 f ;
exp_rotation . z = 6.93519831e-01 f ;
exp_rotation . w = 1.95090622e-01 f ;
2008-09-11 20:11:53 +02:00
exp_translation . x = - 5.0f ;
exp_translation . y = 0.0f ;
exp_translation . z = 10.0f ;
D3DXMatrixDecompose ( & got_scale , & got_rotation , & got_translation , & pm ) ;
2017-04-27 23:52:41 +02:00
expect_vec3 ( & exp_scale , & got_scale , 1 ) ;
2017-04-27 23:52:40 +02:00
equal = compare_quaternion ( & exp_rotation , & got_rotation , 1 ) ;
exp_rotation . x = 0.0f ;
equal | = compare_quaternion ( & exp_rotation , & got_rotation , 2 ) ;
ok ( equal , " Got unexpected quaternion {%.8e, %.8e, %.8e, %.8e}. \n " ,
got_rotation . x , got_rotation . y , got_rotation . z , got_rotation . w ) ;
2017-04-27 23:52:42 +02:00
expect_vec3 ( & exp_translation , & got_translation , 0 ) ;
2008-09-11 20:11:53 +02:00
/*__________*/
2008-09-14 02:12:19 +02:00
U ( pm ) . m [ 0 ] [ 0 ] = 0.7156004f ;
U ( pm ) . m [ 1 ] [ 0 ] = - 0.5098283f ;
U ( pm ) . m [ 2 ] [ 0 ] = - 0.4774843f ;
U ( pm ) . m [ 3 ] [ 0 ] = - 5.0f ;
U ( pm ) . m [ 0 ] [ 1 ] = - 0.6612288f ;
U ( pm ) . m [ 1 ] [ 1 ] = - 0.7147621f ;
U ( pm ) . m [ 2 ] [ 1 ] = - 0.2277977f ;
U ( pm ) . m [ 3 ] [ 1 ] = 0.0f ;
U ( pm ) . m [ 0 ] [ 2 ] = - 0.2251499f ;
U ( pm ) . m [ 1 ] [ 2 ] = 0.4787385f ;
U ( pm ) . m [ 2 ] [ 2 ] = - 0.8485972f ;
U ( pm ) . m [ 3 ] [ 2 ] = 10.0f ;
U ( pm ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 3 ] [ 3 ] = 1.0f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:41 +02:00
exp_scale . x = 9.99999940e-01 f ;
exp_scale . y = 1.00000012e+00 f ;
exp_scale . z = 1.00000012e+00 f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:40 +02:00
exp_rotation . x = 9.05394852e-01 f ;
exp_rotation . y = - 3.23355347e-01 f ;
exp_rotation . z = - 1.94013178e-01 f ;
exp_rotation . w = 1.95090592e-01 f ;
2008-09-11 20:11:53 +02:00
exp_translation . x = - 5.0f ;
exp_translation . y = 0.0f ;
exp_translation . z = 10.0f ;
D3DXMatrixDecompose ( & got_scale , & got_rotation , & got_translation , & pm ) ;
2017-04-27 23:52:41 +02:00
expect_vec3 ( & exp_scale , & got_scale , 0 ) ;
2017-04-27 23:52:40 +02:00
expect_quaternion ( & exp_rotation , & got_rotation , 1 ) ;
2017-04-27 23:52:42 +02:00
expect_vec3 ( & exp_translation , & got_translation , 0 ) ;
2008-09-11 20:11:53 +02:00
/*_____________*/
2008-09-14 02:12:19 +02:00
U ( pm ) . m [ 0 ] [ 0 ] = 0.06554436f ;
U ( pm ) . m [ 1 ] [ 0 ] = - 0.6873012f ;
U ( pm ) . m [ 2 ] [ 0 ] = 0.7234092f ;
U ( pm ) . m [ 3 ] [ 0 ] = - 5.0f ;
U ( pm ) . m [ 0 ] [ 1 ] = - 0.9617381f ;
U ( pm ) . m [ 1 ] [ 1 ] = - 0.2367795f ;
U ( pm ) . m [ 2 ] [ 1 ] = - 0.1378230f ;
U ( pm ) . m [ 3 ] [ 1 ] = 0.0f ;
U ( pm ) . m [ 0 ] [ 2 ] = 0.2660144f ;
U ( pm ) . m [ 1 ] [ 2 ] = - 0.6866967f ;
U ( pm ) . m [ 2 ] [ 2 ] = - 0.6765233f ;
U ( pm ) . m [ 3 ] [ 2 ] = 10.0f ;
U ( pm ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 3 ] [ 3 ] = 1.0f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:41 +02:00
exp_scale . x = 9.99999940e-01 f ;
exp_scale . y = 9.99999940e-01 f ;
exp_scale . z = 9.99999881e-01 f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:40 +02:00
exp_rotation . x = 7.03357518e-01 f ;
exp_rotation . y = - 5.86131275e-01 f ;
exp_rotation . z = 3.51678789e-01 f ;
exp_rotation . w = - 1.95090577e-01 f ;
2008-09-11 20:11:53 +02:00
exp_translation . x = - 5.0f ;
exp_translation . y = 0.0f ;
exp_translation . z = 10.0f ;
D3DXMatrixDecompose ( & got_scale , & got_rotation , & got_translation , & pm ) ;
2017-04-27 23:52:41 +02:00
expect_vec3 ( & exp_scale , & got_scale , 1 ) ;
2017-04-27 23:52:40 +02:00
expect_quaternion ( & exp_rotation , & got_rotation , 2 ) ;
2017-04-27 23:52:42 +02:00
expect_vec3 ( & exp_translation , & got_translation , 0 ) ;
2008-09-11 20:11:53 +02:00
/*_________*/
2017-04-27 23:52:40 +02:00
U ( pm ) . m [ 0 ] [ 0 ] = 7.12104797e+00 f ;
U ( pm ) . m [ 1 ] [ 0 ] = - 5.88348627e+00 f ;
U ( pm ) . m [ 2 ] [ 0 ] = 1.18184204e+01 f ;
U ( pm ) . m [ 3 ] [ 0 ] = - 5.00000000e+00 f ;
U ( pm ) . m [ 0 ] [ 1 ] = 5.88348627e+00 f ;
U ( pm ) . m [ 1 ] [ 1 ] = - 1.06065865e+01 f ;
U ( pm ) . m [ 2 ] [ 1 ] = - 8.82523251e+00 f ;
U ( pm ) . m [ 3 ] [ 1 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 0 ] [ 2 ] = 1.18184204e+01 f ;
U ( pm ) . m [ 1 ] [ 2 ] = 8.82523155e+00 f ;
U ( pm ) . m [ 2 ] [ 2 ] = - 2.72764111e+00 f ;
U ( pm ) . m [ 3 ] [ 2 ] = 2.00000000e+00 f ;
U ( pm ) . m [ 0 ] [ 3 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 1 ] [ 3 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 2 ] [ 3 ] = 0.00000000e+00 f ;
U ( pm ) . m [ 3 ] [ 3 ] = 1.00000000e+00 f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:41 +02:00
exp_scale . x = 1.49999933e+01 f ;
exp_scale . y = 1.49999933e+01 f ;
exp_scale . z = 1.49999943e+01 f ;
2008-09-11 20:11:53 +02:00
2017-04-27 23:52:40 +02:00
exp_rotation . x = 7.68714130e-01 f ;
exp_rotation . y = 0.00000000e+00 f ;
exp_rotation . z = 5.12475967e-01 f ;
exp_rotation . w = 3.82683903e-01 f ;
2008-09-11 20:11:53 +02:00
exp_translation . x = - 5.0f ;
exp_translation . y = 0.0f ;
exp_translation . z = 2.0f ;
D3DXMatrixDecompose ( & got_scale , & got_rotation , & got_translation , & pm ) ;
2017-04-27 23:52:41 +02:00
expect_vec3 ( & exp_scale , & got_scale , 0 ) ;
2017-04-27 23:52:40 +02:00
expect_quaternion ( & exp_rotation , & got_rotation , 1 ) ;
2017-04-27 23:52:42 +02:00
expect_vec3 ( & exp_translation , & got_translation , 0 ) ;
2008-09-11 20:11:53 +02:00
/*__________*/
2008-09-14 02:12:19 +02:00
U ( pm ) . m [ 0 ] [ 0 ] = 0.0f ;
U ( pm ) . m [ 1 ] [ 0 ] = 4.0f ;
U ( pm ) . m [ 2 ] [ 0 ] = 5.0f ;
U ( pm ) . m [ 3 ] [ 0 ] = - 5.0f ;
U ( pm ) . m [ 0 ] [ 1 ] = 0.0f ;
U ( pm ) . m [ 1 ] [ 1 ] = - 10.60660f ;
U ( pm ) . m [ 2 ] [ 1 ] = - 8.825232f ;
U ( pm ) . m [ 3 ] [ 1 ] = 6.0f ;
U ( pm ) . m [ 0 ] [ 2 ] = 0.0f ;
U ( pm ) . m [ 1 ] [ 2 ] = 8.8252320f ;
U ( pm ) . m [ 2 ] [ 2 ] = 2.727645 ;
U ( pm ) . m [ 3 ] [ 2 ] = 3.0f ;
U ( pm ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( pm ) . m [ 3 ] [ 3 ] = 1.0f ;
2008-09-11 20:11:53 +02:00
hr = D3DXMatrixDecompose ( & got_scale , & got_rotation , & got_translation , & pm ) ;
ok ( hr = = D3DERR_INVALIDCALL , " Expected D3DERR_INVALIDCALL, got %x \n " , hr ) ;
}
2008-11-12 19:16:30 +01:00
static void test_Matrix_Transformation2D ( void )
{
D3DXMATRIX exp_mat , got_mat ;
D3DXVECTOR2 rot_center , sca , sca_center , trans ;
FLOAT rot , sca_rot ;
rot_center . x = 3.0f ;
rot_center . y = 4.0f ;
sca . x = 12.0f ;
sca . y = - 3.0f ;
sca_center . x = 9.0f ;
sca_center . y = - 5.0f ;
trans . x = - 6.0f ;
trans . y = 7.0f ;
rot = D3DX_PI / 3.0f ;
sca_rot = 5.0f * D3DX_PI / 4.0f ;
2008-11-17 15:01:24 +01:00
U ( exp_mat ) . m [ 0 ] [ 0 ] = - 4.245192f ;
U ( exp_mat ) . m [ 1 ] [ 0 ] = - 0.147116f ;
U ( exp_mat ) . m [ 2 ] [ 0 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 0 ] = 45.265373f ;
U ( exp_mat ) . m [ 0 ] [ 1 ] = 7.647113f ;
U ( exp_mat ) . m [ 1 ] [ 1 ] = 8.745192f ;
U ( exp_mat ) . m [ 2 ] [ 1 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 1 ] = - 13.401899f ;
U ( exp_mat ) . m [ 0 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 1 ] [ 2 ] = 0.0f ;
2009-01-31 12:04:55 +01:00
U ( exp_mat ) . m [ 2 ] [ 2 ] = 1.0f ;
2008-11-17 15:01:24 +01:00
U ( exp_mat ) . m [ 3 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 3 ] = 1.0f ;
2008-11-12 19:16:30 +01:00
D3DXMatrixTransformation2D ( & got_mat , & sca_center , sca_rot , & sca , & rot_center , rot , & trans ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & exp_mat , & got_mat , 64 ) ;
2008-11-12 19:16:30 +01:00
/*_________*/
sca_center . x = 9.0f ;
sca_center . y = - 5.0f ;
trans . x = - 6.0f ;
trans . y = 7.0f ;
rot = D3DX_PI / 3.0f ;
sca_rot = 5.0f * D3DX_PI / 4.0f ;
2009-01-31 12:04:55 +01:00
U ( exp_mat ) . m [ 0 ] [ 0 ] = 0.50f ;
U ( exp_mat ) . m [ 1 ] [ 0 ] = - 0.866025f ;
2008-11-17 15:01:24 +01:00
U ( exp_mat ) . m [ 2 ] [ 0 ] = 0.0f ;
2009-01-31 12:04:55 +01:00
U ( exp_mat ) . m [ 3 ] [ 0 ] = - 6.0f ;
U ( exp_mat ) . m [ 0 ] [ 1 ] = 0.866025f ;
U ( exp_mat ) . m [ 1 ] [ 1 ] = 0.50f ;
2008-11-17 15:01:24 +01:00
U ( exp_mat ) . m [ 2 ] [ 1 ] = 0.0f ;
2009-01-31 12:04:55 +01:00
U ( exp_mat ) . m [ 3 ] [ 1 ] = 7.0f ;
2008-11-17 15:01:24 +01:00
U ( exp_mat ) . m [ 0 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 1 ] [ 2 ] = 0.0f ;
2009-01-31 12:04:55 +01:00
U ( exp_mat ) . m [ 2 ] [ 2 ] = 1.0f ;
2008-11-17 15:01:24 +01:00
U ( exp_mat ) . m [ 3 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 3 ] = 1.0f ;
2008-11-12 19:16:30 +01:00
D3DXMatrixTransformation2D ( & got_mat , & sca_center , sca_rot , NULL , NULL , rot , & trans ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & exp_mat , & got_mat , 8 ) ;
2009-01-31 12:04:55 +01:00
/*_________*/
U ( exp_mat ) . m [ 0 ] [ 0 ] = 0.50f ;
U ( exp_mat ) . m [ 1 ] [ 0 ] = - 0.866025f ;
U ( exp_mat ) . m [ 2 ] [ 0 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 0 ] = 0.0f ;
U ( exp_mat ) . m [ 0 ] [ 1 ] = 0.866025f ;
U ( exp_mat ) . m [ 1 ] [ 1 ] = 0.50f ;
U ( exp_mat ) . m [ 2 ] [ 1 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 1 ] = 0.0f ;
U ( exp_mat ) . m [ 0 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 1 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 2 ] [ 2 ] = 1.0f ;
U ( exp_mat ) . m [ 3 ] [ 2 ] = 0.0f ;
U ( exp_mat ) . m [ 0 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 1 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 2 ] [ 3 ] = 0.0f ;
U ( exp_mat ) . m [ 3 ] [ 3 ] = 1.0f ;
D3DXMatrixTransformation2D ( & got_mat , NULL , sca_rot , NULL , NULL , rot , NULL ) ;
2017-04-24 23:31:32 +02:00
expect_matrix ( & exp_mat , & got_mat , 8 ) ;
2008-11-12 19:16:30 +01:00
}
2008-03-21 11:04:46 +01:00
static void test_D3DXVec_Array ( void )
{
2017-05-05 13:40:30 +02:00
D3DXPLANE inp_plane [ 5 ] , out_plane [ 7 ] , exp_plane [ 7 ] ;
D3DXVECTOR4 inp_vec [ 5 ] , out_vec [ 7 ] , exp_vec [ 7 ] ;
2008-03-21 11:04:46 +01:00
D3DXMATRIX mat , projection , view , world ;
2017-05-05 13:40:30 +02:00
D3DVIEWPORT9 viewport ;
unsigned int i ;
2008-03-21 11:04:46 +01:00
viewport . Width = 800 ; viewport . MinZ = 0.2f ; viewport . X = 10 ;
viewport . Height = 680 ; viewport . MaxZ = 0.9f ; viewport . Y = 5 ;
2017-05-05 13:40:30 +02:00
memset ( out_vec , 0 , sizeof ( out_vec ) ) ;
memset ( exp_vec , 0 , sizeof ( exp_vec ) ) ;
memset ( out_plane , 0 , sizeof ( out_plane ) ) ;
memset ( exp_plane , 0 , sizeof ( exp_plane ) ) ;
2008-03-21 11:04:46 +01:00
2017-05-05 13:40:30 +02:00
for ( i = 0 ; i < ARRAY_SIZE ( inp_vec ) ; + + i )
{
2008-07-24 21:47:07 +02:00
inp_plane [ i ] . a = inp_plane [ i ] . c = inp_vec [ i ] . x = inp_vec [ i ] . z = i ;
2017-05-05 13:40:30 +02:00
inp_plane [ i ] . b = inp_plane [ i ] . d = inp_vec [ i ] . y = inp_vec [ i ] . w = ARRAY_SIZE ( inp_vec ) - i ;
2008-03-21 11:04:46 +01:00
}
U ( mat ) . m [ 0 ] [ 0 ] = 1.0f ; U ( mat ) . m [ 0 ] [ 1 ] = 2.0f ; U ( mat ) . m [ 0 ] [ 2 ] = 3.0f ; U ( mat ) . m [ 0 ] [ 3 ] = 4.0f ;
U ( mat ) . m [ 1 ] [ 0 ] = 5.0f ; U ( mat ) . m [ 1 ] [ 1 ] = 6.0f ; U ( mat ) . m [ 1 ] [ 2 ] = 7.0f ; U ( mat ) . m [ 1 ] [ 3 ] = 8.0f ;
U ( mat ) . m [ 2 ] [ 0 ] = 9.0f ; U ( mat ) . m [ 2 ] [ 1 ] = 10.0f ; U ( mat ) . m [ 2 ] [ 2 ] = 11.0f ; U ( mat ) . m [ 2 ] [ 3 ] = 12.0f ;
U ( mat ) . m [ 3 ] [ 0 ] = 13.0f ; U ( mat ) . m [ 3 ] [ 1 ] = 14.0f ; U ( mat ) . m [ 3 ] [ 2 ] = 15.0f ; U ( mat ) . m [ 3 ] [ 3 ] = 16.0f ;
D3DXMatrixPerspectiveFovLH ( & projection , D3DX_PI / 4.0f , 20.0f / 17.0f , 1.0f , 1000.0f ) ;
U ( view ) . m [ 0 ] [ 1 ] = 5.0f ; U ( view ) . m [ 0 ] [ 2 ] = 7.0f ; U ( view ) . m [ 0 ] [ 3 ] = 8.0f ;
U ( view ) . m [ 1 ] [ 0 ] = 11.0f ; U ( view ) . m [ 1 ] [ 2 ] = 16.0f ; U ( view ) . m [ 1 ] [ 3 ] = 33.0f ;
U ( view ) . m [ 2 ] [ 0 ] = 19.0f ; U ( view ) . m [ 2 ] [ 1 ] = - 21.0f ; U ( view ) . m [ 2 ] [ 3 ] = 43.0f ;
U ( view ) . m [ 3 ] [ 0 ] = 2.0f ; U ( view ) . m [ 3 ] [ 1 ] = 3.0f ; U ( view ) . m [ 3 ] [ 2 ] = - 4.0f ;
U ( view ) . m [ 0 ] [ 0 ] = 10.0f ; U ( view ) . m [ 1 ] [ 1 ] = 20.0f ; U ( view ) . m [ 2 ] [ 2 ] = 30.0f ;
U ( view ) . m [ 3 ] [ 3 ] = - 40.0f ;
U ( world ) . m [ 0 ] [ 0 ] = 21.0f ; U ( world ) . m [ 0 ] [ 1 ] = 2.0f ; U ( world ) . m [ 0 ] [ 2 ] = 3.0f ; U ( world ) . m [ 0 ] [ 3 ] = 4.0 ;
U ( world ) . m [ 1 ] [ 0 ] = 5.0f ; U ( world ) . m [ 1 ] [ 1 ] = 23.0f ; U ( world ) . m [ 1 ] [ 2 ] = 7.0f ; U ( world ) . m [ 1 ] [ 3 ] = 8.0f ;
U ( world ) . m [ 2 ] [ 0 ] = - 8.0f ; U ( world ) . m [ 2 ] [ 1 ] = - 7.0f ; U ( world ) . m [ 2 ] [ 2 ] = 25.0f ; U ( world ) . m [ 2 ] [ 3 ] = - 5.0f ;
U ( world ) . m [ 3 ] [ 0 ] = - 4.0f ; U ( world ) . m [ 3 ] [ 1 ] = - 3.0f ; U ( world ) . m [ 3 ] [ 2 ] = - 2.0f ; U ( world ) . m [ 3 ] [ 3 ] = 27.0f ;
/* D3DXVec2TransformCoordArray */
2017-04-27 23:52:43 +02:00
exp_vec [ 1 ] . x = 6.78571403e-01 f ; exp_vec [ 1 ] . y = 7.85714269e-01 f ;
exp_vec [ 2 ] . x = 6.53846204e-01 f ; exp_vec [ 2 ] . y = 7.69230783e-01 f ;
exp_vec [ 3 ] . x = 6.25000000e-01 f ; exp_vec [ 3 ] . y = 7.50000000e-01 f ;
exp_vec [ 4 ] . x = 5.90909123e-01 f ; exp_vec [ 4 ] . y = 7.27272749e-01 f ;
exp_vec [ 5 ] . x = 5.49999952e-01 f ; exp_vec [ 5 ] . y = 6.99999928e-01 f ;
D3DXVec2TransformCoordArray ( ( D3DXVECTOR2 * ) & out_vec [ 1 ] , sizeof ( * out_vec ) ,
2017-05-05 13:40:30 +02:00
( D3DXVECTOR2 * ) inp_vec , sizeof ( * inp_vec ) , & mat , ARRAY_SIZE ( inp_vec ) ) ;
expect_vec4_array ( ARRAY_SIZE ( exp_vec ) , exp_vec , out_vec , 1 ) ;
2008-03-21 11:04:46 +01:00
/* D3DXVec2TransformNormalArray */
exp_vec [ 1 ] . x = 25.0f ; exp_vec [ 1 ] . y = 30.0f ;
exp_vec [ 2 ] . x = 21.0f ; exp_vec [ 2 ] . y = 26.0f ;
exp_vec [ 3 ] . x = 17.0f ; exp_vec [ 3 ] . y = 22.0f ;
exp_vec [ 4 ] . x = 13.0f ; exp_vec [ 4 ] . y = 18.0f ;
exp_vec [ 5 ] . x = 9.0f ; exp_vec [ 5 ] . y = 14.0f ;
2017-04-27 23:52:43 +02:00
D3DXVec2TransformNormalArray ( ( D3DXVECTOR2 * ) & out_vec [ 1 ] , sizeof ( * out_vec ) ,
2017-05-05 13:40:30 +02:00
( D3DXVECTOR2 * ) inp_vec , sizeof ( * inp_vec ) , & mat , ARRAY_SIZE ( inp_vec ) ) ;
expect_vec4_array ( ARRAY_SIZE ( exp_vec ) , exp_vec , out_vec , 0 ) ;
2008-03-21 11:04:46 +01:00
/* D3DXVec3TransformCoordArray */
2017-04-27 23:52:43 +02:00
exp_vec [ 1 ] . x = 6.78571403e-01 f ; exp_vec [ 1 ] . y = 7.85714269e-01 f ; exp_vec [ 1 ] . z = 8.92857075e-01 f ;
exp_vec [ 2 ] . x = 6.71874940e-01 f ; exp_vec [ 2 ] . y = 7.81249940e-01 f ; exp_vec [ 2 ] . z = 8.90624940e-01 f ;
exp_vec [ 3 ] . x = 6.66666627e-01 f ; exp_vec [ 3 ] . y = 7.77777731e-01 f ; exp_vec [ 3 ] . z = 8.88888836e-01 f ;
exp_vec [ 4 ] . x = 6.62499964e-01 f ; exp_vec [ 4 ] . y = 7.74999976e-01 f ; exp_vec [ 4 ] . z = 8.87499928e-01 f ;
exp_vec [ 5 ] . x = 6.59090877e-01 f ; exp_vec [ 5 ] . y = 7.72727251e-01 f ; exp_vec [ 5 ] . z = 8.86363566e-01 f ;
D3DXVec3TransformCoordArray ( ( D3DXVECTOR3 * ) & out_vec [ 1 ] , sizeof ( * out_vec ) ,
2017-05-05 13:40:30 +02:00
( D3DXVECTOR3 * ) inp_vec , sizeof ( * inp_vec ) , & mat , ARRAY_SIZE ( inp_vec ) ) ;
expect_vec4_array ( ARRAY_SIZE ( exp_vec ) , exp_vec , out_vec , 1 ) ;
2008-03-21 11:04:46 +01:00
/* D3DXVec3TransformNormalArray */
exp_vec [ 1 ] . x = 25.0f ; exp_vec [ 1 ] . y = 30.0f ; exp_vec [ 1 ] . z = 35.0f ;
exp_vec [ 2 ] . x = 30.0f ; exp_vec [ 2 ] . y = 36.0f ; exp_vec [ 2 ] . z = 42.0f ;
exp_vec [ 3 ] . x = 35.0f ; exp_vec [ 3 ] . y = 42.0f ; exp_vec [ 3 ] . z = 49.0f ;
exp_vec [ 4 ] . x = 40.0f ; exp_vec [ 4 ] . y = 48.0f ; exp_vec [ 4 ] . z = 56.0f ;
exp_vec [ 5 ] . x = 45.0f ; exp_vec [ 5 ] . y = 54.0f ; exp_vec [ 5 ] . z = 63.0f ;
2017-04-27 23:52:43 +02:00
D3DXVec3TransformNormalArray ( ( D3DXVECTOR3 * ) & out_vec [ 1 ] , sizeof ( * out_vec ) ,
2017-05-05 13:40:30 +02:00
( D3DXVECTOR3 * ) inp_vec , sizeof ( * inp_vec ) , & mat , ARRAY_SIZE ( inp_vec ) ) ;
expect_vec4_array ( ARRAY_SIZE ( exp_vec ) , exp_vec , out_vec , 0 ) ;
2008-03-21 11:04:46 +01:00
/* D3DXVec3ProjectArray */
2017-04-27 23:52:43 +02:00
exp_vec [ 1 ] . x = 1.08955420e+03 f ; exp_vec [ 1 ] . y = - 2.26590622e+02 f ; exp_vec [ 1 ] . z = 2.15272754e-01 f ;
exp_vec [ 2 ] . x = 1.06890344e+03 f ; exp_vec [ 2 ] . y = 1.03085144e+02 f ; exp_vec [ 2 ] . z = 1.83049560e-01 f ;
exp_vec [ 3 ] . x = 1.05177905e+03 f ; exp_vec [ 3 ] . y = 3.76462280e+02 f ; exp_vec [ 3 ] . z = 1.56329080e-01 f ;
exp_vec [ 4 ] . x = 1.03734888e+03 f ; exp_vec [ 4 ] . y = 6.06827393e+02 f ; exp_vec [ 4 ] . z = 1.33812696e-01 f ;
exp_vec [ 5 ] . x = 1.02502356e+03 f ; exp_vec [ 5 ] . y = 8.03591248e+02 f ; exp_vec [ 5 ] . z = 1.14580572e-01 f ;
D3DXVec3ProjectArray ( ( D3DXVECTOR3 * ) & out_vec [ 1 ] , sizeof ( * out_vec ) , ( D3DXVECTOR3 * ) inp_vec ,
2017-05-05 13:40:30 +02:00
sizeof ( * inp_vec ) , & viewport , & projection , & view , & world , ARRAY_SIZE ( inp_vec ) ) ;
expect_vec4_array ( ARRAY_SIZE ( exp_vec ) , exp_vec , out_vec , 8 ) ;
2008-03-21 11:04:46 +01:00
/* D3DXVec3UnprojectArray */
2017-04-27 23:52:43 +02:00
exp_vec [ 1 ] . x = - 6.12403107e+00 f ; exp_vec [ 1 ] . y = 3.22536016e+00 f ; exp_vec [ 1 ] . z = 6.20571136e-01 f ;
exp_vec [ 2 ] . x = - 3.80710936e+00 f ; exp_vec [ 2 ] . y = 2.04657936e+00 f ; exp_vec [ 2 ] . z = 4.46894377e-01 f ;
exp_vec [ 3 ] . x = - 2.92283988e+00 f ; exp_vec [ 3 ] . y = 1.59668946e+00 f ; exp_vec [ 3 ] . z = 3.80609393e-01 f ;
exp_vec [ 4 ] . x = - 2.45622563e+00 f ; exp_vec [ 4 ] . y = 1.35928988e+00 f ; exp_vec [ 4 ] . z = 3.45631927e-01 f ;
exp_vec [ 5 ] . x = - 2.16789746e+00 f ; exp_vec [ 5 ] . y = 1.21259713e+00 f ; exp_vec [ 5 ] . z = 3.24018806e-01 f ;
D3DXVec3UnprojectArray ( ( D3DXVECTOR3 * ) & out_vec [ 1 ] , sizeof ( * out_vec ) , ( D3DXVECTOR3 * ) inp_vec ,
2017-05-05 13:40:30 +02:00
sizeof ( * inp_vec ) , & viewport , & projection , & view , & world , ARRAY_SIZE ( inp_vec ) ) ;
expect_vec4_array ( ARRAY_SIZE ( exp_vec ) , exp_vec , out_vec , 4 ) ;
2008-03-21 11:04:46 +01:00
/* D3DXVec2TransformArray */
exp_vec [ 1 ] . x = 38.0f ; exp_vec [ 1 ] . y = 44.0f ; exp_vec [ 1 ] . z = 50.0f ; exp_vec [ 1 ] . w = 56.0f ;
exp_vec [ 2 ] . x = 34.0f ; exp_vec [ 2 ] . y = 40.0f ; exp_vec [ 2 ] . z = 46.0f ; exp_vec [ 2 ] . w = 52.0f ;
exp_vec [ 3 ] . x = 30.0f ; exp_vec [ 3 ] . y = 36.0f ; exp_vec [ 3 ] . z = 42.0f ; exp_vec [ 3 ] . w = 48.0f ;
exp_vec [ 4 ] . x = 26.0f ; exp_vec [ 4 ] . y = 32.0f ; exp_vec [ 4 ] . z = 38.0f ; exp_vec [ 4 ] . w = 44.0f ;
exp_vec [ 5 ] . x = 22.0f ; exp_vec [ 5 ] . y = 28.0f ; exp_vec [ 5 ] . z = 34.0f ; exp_vec [ 5 ] . w = 40.0f ;
2017-04-27 23:52:43 +02:00
D3DXVec2TransformArray ( & out_vec [ 1 ] , sizeof ( * out_vec ) , ( D3DXVECTOR2 * ) inp_vec ,
2017-05-05 13:40:30 +02:00
sizeof ( * inp_vec ) , & mat , ARRAY_SIZE ( inp_vec ) ) ;
expect_vec4_array ( ARRAY_SIZE ( exp_vec ) , exp_vec , out_vec , 0 ) ;
2008-03-21 11:04:46 +01:00
/* D3DXVec3TransformArray */
exp_vec [ 1 ] . x = 38.0f ; exp_vec [ 1 ] . y = 44.0f ; exp_vec [ 1 ] . z = 50.0f ; exp_vec [ 1 ] . w = 56.0f ;
exp_vec [ 2 ] . x = 43.0f ; exp_vec [ 2 ] . y = 50.0f ; exp_vec [ 2 ] . z = 57.0f ; exp_vec [ 2 ] . w = 64.0f ;
exp_vec [ 3 ] . x = 48.0f ; exp_vec [ 3 ] . y = 56.0f ; exp_vec [ 3 ] . z = 64.0f ; exp_vec [ 3 ] . w = 72.0f ;
exp_vec [ 4 ] . x = 53.0f ; exp_vec [ 4 ] . y = 62.0f ; exp_vec [ 4 ] . z = 71.0f ; exp_vec [ 4 ] . w = 80.0f ;
exp_vec [ 5 ] . x = 58.0f ; exp_vec [ 5 ] . y = 68.0f ; exp_vec [ 5 ] . z = 78.0f ; exp_vec [ 5 ] . w = 88.0f ;
2017-04-27 23:52:43 +02:00
D3DXVec3TransformArray ( & out_vec [ 1 ] , sizeof ( * out_vec ) , ( D3DXVECTOR3 * ) inp_vec ,
2017-05-05 13:40:30 +02:00
sizeof ( * inp_vec ) , & mat , ARRAY_SIZE ( inp_vec ) ) ;
expect_vec4_array ( ARRAY_SIZE ( exp_vec ) , exp_vec , out_vec , 0 ) ;
2008-03-21 11:04:46 +01:00
/* D3DXVec4TransformArray */
exp_vec [ 1 ] . x = 90.0f ; exp_vec [ 1 ] . y = 100.0f ; exp_vec [ 1 ] . z = 110.0f ; exp_vec [ 1 ] . w = 120.0f ;
exp_vec [ 2 ] . x = 82.0f ; exp_vec [ 2 ] . y = 92.0f ; exp_vec [ 2 ] . z = 102.0f ; exp_vec [ 2 ] . w = 112.0f ;
exp_vec [ 3 ] . x = 74.0f ; exp_vec [ 3 ] . y = 84.0f ; exp_vec [ 3 ] . z = 94.0f ; exp_vec [ 3 ] . w = 104.0f ;
exp_vec [ 4 ] . x = 66.0f ; exp_vec [ 4 ] . y = 76.0f ; exp_vec [ 4 ] . z = 86.0f ; exp_vec [ 4 ] . w = 96.0f ;
exp_vec [ 5 ] . x = 58.0f ; exp_vec [ 5 ] . y = 68.0f ; exp_vec [ 5 ] . z = 78.0f ; exp_vec [ 5 ] . w = 88.0f ;
2017-05-05 13:40:30 +02:00
D3DXVec4TransformArray ( & out_vec [ 1 ] , sizeof ( * out_vec ) , inp_vec , sizeof ( * inp_vec ) , & mat , ARRAY_SIZE ( inp_vec ) ) ;
expect_vec4_array ( ARRAY_SIZE ( exp_vec ) , exp_vec , out_vec , 0 ) ;
2008-07-24 21:47:07 +02:00
/* D3DXPlaneTransformArray */
exp_plane [ 1 ] . a = 90.0f ; exp_plane [ 1 ] . b = 100.0f ; exp_plane [ 1 ] . c = 110.0f ; exp_plane [ 1 ] . d = 120.0f ;
exp_plane [ 2 ] . a = 82.0f ; exp_plane [ 2 ] . b = 92.0f ; exp_plane [ 2 ] . c = 102.0f ; exp_plane [ 2 ] . d = 112.0f ;
exp_plane [ 3 ] . a = 74.0f ; exp_plane [ 3 ] . b = 84.0f ; exp_plane [ 3 ] . c = 94.0f ; exp_plane [ 3 ] . d = 104.0f ;
exp_plane [ 4 ] . a = 66.0f ; exp_plane [ 4 ] . b = 76.0f ; exp_plane [ 4 ] . c = 86.0f ; exp_plane [ 4 ] . d = 96.0f ;
exp_plane [ 5 ] . a = 58.0f ; exp_plane [ 5 ] . b = 68.0f ; exp_plane [ 5 ] . c = 78.0f ; exp_plane [ 5 ] . d = 88.0f ;
2017-05-05 13:40:30 +02:00
D3DXPlaneTransformArray ( & out_plane [ 1 ] , sizeof ( * out_plane ) , inp_plane ,
sizeof ( * inp_plane ) , & mat , ARRAY_SIZE ( inp_plane ) ) ;
for ( i = 0 ; i < ARRAY_SIZE ( exp_plane ) ; + + i )
2017-04-27 23:52:44 +02:00
{
BOOL equal = compare_plane ( & exp_plane [ i ] , & out_plane [ i ] , 0 ) ;
ok ( equal , " Got unexpected plane {%.8e, %.8e, %.8e, %.8e} at index %u, expected {%.8e, %.8e, %.8e, %.8e}. \n " ,
out_plane [ i ] . a , out_plane [ i ] . b , out_plane [ i ] . c , out_plane [ i ] . d , i ,
exp_plane [ i ] . a , exp_plane [ i ] . b , exp_plane [ i ] . c , exp_plane [ i ] . d ) ;
if ( ! equal )
break ;
}
2008-03-21 11:04:46 +01:00
}
2011-06-29 17:16:29 +02:00
static void test_D3DXFloat_Array ( void )
{
unsigned int i ;
void * out = NULL ;
D3DXFLOAT16 half ;
2017-04-28 23:49:14 +02:00
BOOL equal ;
2017-04-07 16:44:48 +02:00
/* Input floats through bit patterns because compilers do not generate reliable INF and NaN values. */
union convert
{
DWORD d ;
2017-04-28 23:49:14 +02:00
float f ;
} single ;
2017-04-07 16:44:48 +02:00
2011-06-29 17:16:29 +02:00
struct
{
2017-04-07 16:44:48 +02:00
union convert single_in ;
2011-06-29 17:16:29 +02:00
2012-08-06 00:41:45 +02:00
/* half_ver2 occurs on WXPPROSP3 (32 bit math), WVISTAADM (32/64 bit math), W7PRO (32 bit math) */
2011-06-29 17:16:29 +02:00
WORD half_ver1 , half_ver2 ;
/* single_out_ver2 confirms that half -> single conversion is consistent across platforms */
2017-04-07 16:44:48 +02:00
union convert single_out_ver1 , single_out_ver2 ;
}
testdata [ ] =
{
{ { 0x479c4000 } , 0x7c00 , 0x7ce2 , { 0x47800000 } , { 0x479c4000 } } , /* 80000.0f */
{ { 0x477fdf00 } , 0x7bff , 0x7bff , { 0x477fe000 } , { 0x477fe000 } } , /* 65503.0f */
{ { 0x477fe000 } , 0x7bff , 0x7bff , { 0x477fe000 } , { 0x477fe000 } } , /* 65504.0f */
{ { 0x477ff000 } , 0x7bff , 0x7c00 , { 0x477fe000 } , { 0x47800000 } } , /* 65520.0f */
{ { 0x477ff100 } , 0x7c00 , 0x7c00 , { 0x47800000 } , { 0x47800000 } } , /* 65521.0f */
{ { 0x477ffe00 } , 0x7c00 , 0x7c00 , { 0x47800000 } , { 0x47800000 } } , /* 65534.0f */
2017-04-28 23:49:14 +02:00
{ { 0x477fff00 } , 0x7c00 , 0x7c00 , { 0x47800000 } , { 0x47800000 } } , /* 65535.0f */
2017-04-07 16:44:48 +02:00
{ { 0x47800000 } , 0x7c00 , 0x7c00 , { 0x47800000 } , { 0x47800000 } } , /* 65536.0f */
{ { 0xc79c4000 } , 0xfc00 , 0xfce2 , { 0xc7800000 } , { 0xc79c4000 } } , /* -80000.0f */
{ { 0xc77fdf00 } , 0xfbff , 0xfbff , { 0xc77fe000 } , { 0xc77fe000 } } , /* -65503.0f */
{ { 0xc77fe000 } , 0xfbff , 0xfbff , { 0xc77fe000 } , { 0xc77fe000 } } , /* -65504.0f */
{ { 0xc77ff000 } , 0xfbff , 0xfc00 , { 0xc77fe000 } , { 0xc7800000 } } , /* -65520.0f */
{ { 0xc77ff100 } , 0xfc00 , 0xfc00 , { 0xc7800000 } , { 0xc7800000 } } , /* -65521.0f */
{ { 0xc77ffe00 } , 0xfc00 , 0xfc00 , { 0xc7800000 } , { 0xc7800000 } } , /* -65534.0f */
2017-04-28 23:49:14 +02:00
{ { 0xc77fff00 } , 0xfc00 , 0xfc00 , { 0xc7800000 } , { 0xc7800000 } } , /* -65535.0f */
2017-04-07 16:44:48 +02:00
{ { 0xc7800000 } , 0xfc00 , 0xfc00 , { 0xc7800000 } , { 0xc7800000 } } , /* -65536.0f */
{ { 0x7f800000 } , 0x7c00 , 0x7fff , { 0x47800000 } , { 0x47ffe000 } } , /* INF */
{ { 0xff800000 } , 0xffff , 0xffff , { 0xc7ffe000 } , { 0xc7ffe000 } } , /* -INF */
{ { 0x7fc00000 } , 0x7fff , 0xffff , { 0x47ffe000 } , { 0xc7ffe000 } } , /* NaN */
{ { 0xffc00000 } , 0xffff , 0xffff , { 0xc7ffe000 } , { 0xc7ffe000 } } , /* -NaN */
{ { 0x00000000 } , 0x0000 , 0x0000 , { 0x00000000 } , { 0x00000000 } } , /* 0.0f */
2017-04-28 23:49:14 +02:00
{ { 0x80000000 } , 0x8000 , 0x8000 , { 0x80000000 } , { 0x80000000 } } , /* -0.0f */
2017-04-07 16:44:48 +02:00
{ { 0x330007ff } , 0x0000 , 0x0000 , { 0x00000000 } , { 0x00000000 } } , /* 2.9809595e-08f */
{ { 0xb30007ff } , 0x8000 , 0x8000 , { 0x80000000 } , { 0x80000000 } } , /* -2.9809595e-08f */
2017-04-28 23:49:14 +02:00
{ { 0x33000800 } , 0x0001 , 0x0000 , { 0x33800000 } , { 0x00000000 } } , /* 2.9809598e-08f */
2017-04-07 16:44:48 +02:00
2017-04-28 23:49:14 +02:00
{ { 0xb3000800 } , 0x8001 , 0x8000 , { 0xb3800000 } , { 0x80000000 } } , /* -2.9809598e-08f */
{ { 0x33c00000 } , 0x0002 , 0x0001 , { 0x34000000 } , { 0x33800000 } } , /* 8.9406967e-08f */
2011-06-29 17:16:29 +02:00
} ;
/* exception on NULL out or in parameter */
2017-04-28 23:49:14 +02:00
out = D3DXFloat32To16Array ( & half , & single . f , 0 ) ;
2011-07-03 09:36:44 +02:00
ok ( out = = & half , " Got %p, expected %p. \n " , out , & half ) ;
2017-04-28 23:49:14 +02:00
out = D3DXFloat16To32Array ( & single . f , & half , 0 ) ;
ok ( out = = & single . f , " Got %p, expected %p. \n " , out , & single . f ) ;
2011-06-29 17:16:29 +02:00
2017-05-05 13:40:31 +02:00
for ( i = 0 ; i < ARRAY_SIZE ( testdata ) ; + + i )
2011-06-29 17:16:29 +02:00
{
2017-04-07 16:44:48 +02:00
out = D3DXFloat32To16Array ( & half , & testdata [ i ] . single_in . f , 1 ) ;
2011-07-03 09:36:44 +02:00
ok ( out = = & half , " Got %p, expected %p. \n " , out , & half ) ;
ok ( half . value = = testdata [ i ] . half_ver1 | | half . value = = testdata [ i ] . half_ver2 ,
" Got %x, expected %x or %x for index %d. \n " , half . value , testdata [ i ] . half_ver1 ,
testdata [ i ] . half_ver2 , i ) ;
2017-04-28 23:49:14 +02:00
out = D3DXFloat16To32Array ( & single . f , ( D3DXFLOAT16 * ) & testdata [ i ] . half_ver1 , 1 ) ;
ok ( out = = & single . f , " Got %p, expected %p. \n " , out , & single . f ) ;
equal = compare_float ( single . f , testdata [ i ] . single_out_ver1 . f , 0 ) ;
ok ( equal , " Got %#x, expected %#x at index %u. \n " , single . d , testdata [ i ] . single_out_ver1 . d , i ) ;
2011-06-29 17:16:29 +02:00
2017-04-28 23:49:14 +02:00
out = D3DXFloat16To32Array ( & single . f , ( D3DXFLOAT16 * ) & testdata [ i ] . half_ver2 , 1 ) ;
ok ( out = = & single . f , " Got %p, expected %p. \n " , out , & single . f ) ;
equal = compare_float ( single . f , testdata [ i ] . single_out_ver2 . f , 0 ) ;
ok ( equal , " Got %#x, expected %#x at index %u. \n " , single . d , testdata [ i ] . single_out_ver2 . d , i ) ;
2011-06-29 17:16:29 +02:00
}
}
2011-12-10 17:51:32 +01:00
static void test_D3DXSHAdd ( void )
{
2017-04-28 23:49:15 +02:00
float out [ 50 ] = { 0.0f } ;
unsigned int i , k ;
float * ret ;
BOOL equal ;
static const float in1 [ 50 ] =
2011-12-10 17:51:32 +01:00
{
1.11f , 1.12f , 1.13f , 1.14f , 1.15f , 1.16f , 1.17f , 1.18f ,
1.19f , 1.20f , 1.21f , 1.22f , 1.23f , 1.24f , 1.25f , 1.26f ,
1.27f , 1.28f , 1.29f , 1.30f , 1.31f , 1.32f , 1.33f , 1.34f ,
1.35f , 1.36f , 1.37f , 1.38f , 1.39f , 1.40f , 1.41f , 1.42f ,
1.43f , 1.44f , 1.45f , 1.46f , 1.47f , 1.48f , 1.49f , 1.50f ,
1.51f , 1.52f , 1.53f , 1.54f , 1.55f , 1.56f , 1.57f , 1.58f ,
1.59f , 1.60f ,
} ;
2017-04-28 23:49:15 +02:00
static const float in2 [ 50 ] =
2011-12-10 17:51:32 +01:00
{
2.11f , 2.12f , 2.13f , 2.14f , 2.15f , 2.16f , 2.17f , 2.18f ,
2.19f , 2.20f , 2.21f , 2.22f , 2.23f , 2.24f , 2.25f , 2.26f ,
2.27f , 2.28f , 2.29f , 2.30f , 2.31f , 2.32f , 2.33f , 2.34f ,
2.35f , 2.36f , 2.37f , 2.38f , 2.39f , 2.40f , 2.41f , 2.42f ,
2.43f , 2.44f , 2.45f , 2.46f , 2.47f , 2.48f , 2.49f , 2.50f ,
2.51f , 2.52f , 2.53f , 2.54f , 2.55f , 2.56f , 2.57f , 2.58f ,
2.59f , 2.60f ,
} ;
/*
* Order is not limited by D3DXSH_MINORDER and D3DXSH_MAXORDER !
* All values will work , test from 0 - 7 [ D3DXSH_MINORDER = 2 , D3DXSH_MAXORDER = 6 ]
2014-04-30 15:42:10 +02:00
* Exceptions will show up when out , in1 or in2 is NULL
2011-12-10 17:51:32 +01:00
*/
2012-10-02 08:11:10 +02:00
for ( k = 0 ; k < = D3DXSH_MAXORDER + 1 ; k + + )
2011-12-10 17:51:32 +01:00
{
UINT count = k * k ;
ret = D3DXSHAdd ( & out [ 0 ] , k , & in1 [ 0 ] , & in2 [ 0 ] ) ;
ok ( ret = = out , " %u: D3DXSHAdd() failed, got %p, expected %p \n " , k , out , ret ) ;
for ( i = 0 ; i < count ; + + i )
{
2017-04-28 23:49:15 +02:00
equal = compare_float ( in1 [ i ] + in2 [ i ] , out [ i ] , 0 ) ;
ok ( equal , " %u-%u: Got %.8e, expected %.8e. \n " , k , i , out [ i ] , in1 [ i ] + in2 [ i ] ) ;
2011-12-10 17:51:32 +01:00
}
2017-04-28 23:49:15 +02:00
equal = compare_float ( out [ count ] , 0.0f , 0 ) ;
ok ( equal , " %u-%u: Got %.8e, expected 0.0. \n " , k , k * k , out [ count ] ) ;
2011-12-10 17:51:32 +01:00
}
}
2012-06-27 08:50:07 +02:00
static void test_D3DXSHDot ( void )
{
2017-04-28 23:49:16 +02:00
float a [ 49 ] , b [ 49 ] , got ;
2012-06-27 08:50:07 +02:00
unsigned int i ;
2017-04-28 23:49:16 +02:00
BOOL equal ;
static const float expected [ ] = { 0.5f , 0.5f , 25.0f , 262.5f , 1428.0f , 5362.5f , 15873.0f , 39812.5f } ;
2012-06-27 08:50:07 +02:00
2017-05-05 13:40:32 +02:00
for ( i = 0 ; i < ARRAY_SIZE ( a ) ; + + i )
2012-06-27 08:50:07 +02:00
{
2012-10-10 05:59:00 +02:00
a [ i ] = i + 1.0f ;
b [ i ] = i + 0.5f ;
2012-06-27 08:50:07 +02:00
}
/* D3DXSHDot computes by using order * order elements */
2012-10-02 08:11:10 +02:00
for ( i = 0 ; i < = D3DXSH_MAXORDER + 1 ; i + + )
2012-06-27 08:50:07 +02:00
{
got = D3DXSHDot ( i , a , b ) ;
2017-04-28 23:49:16 +02:00
equal = compare_float ( got , expected [ i ] , 0 ) ;
ok ( equal , " order %u: Got %.8e, expected %.8e. \n " , i , got , expected [ i ] ) ;
2012-06-27 08:50:07 +02:00
}
}
2013-03-04 11:55:50 +01:00
static void test_D3DXSHEvalConeLight ( void )
{
2017-04-28 23:49:17 +02:00
float bout [ 49 ] , expected , gout [ 49 ] , rout [ 49 ] ;
unsigned int j , l , order ;
2013-03-04 11:55:50 +01:00
D3DXVECTOR3 dir ;
2017-04-28 23:49:17 +02:00
HRESULT hr ;
BOOL equal ;
static const float table [ ] =
{
2013-03-04 11:55:50 +01:00
/* Red colour */
1.604815f , - 3.131381f , 7.202175f , - 2.870432f , 6.759296f , - 16.959688f ,
32.303082f , - 15.546381f , - 0.588878f , - 5.902123f , 40.084042f , - 77.423569f ,
137.556320f , - 70.971603f , - 3.492171f , 7.683092f , - 2.129311f , - 35.971344f ,
183.086548f , - 312.414948f , 535.091064f , - 286.380371f , - 15.950727f , 46.825714f ,
- 12.127637f , 11.289261f , - 12.417809f , - 155.039566f , 681.182556f , - 1079.733643f ,
1807.650513f , - 989.755798f , - 59.345467f , 201.822815f , - 70.726486f , 7.206529f ,
3.101155f , - 3.128710f , 7.196033f , - 2.867984f , - 0.224708f , 0.563814f ,
- 1.073895f , 0.516829f , 0.019577f , 2.059788f , - 13.988971f , 27.020128f ,
- 48.005917f , 24.768450f , 1.218736f , - 2.681329f , - 0.088639f , - 1.497410f ,
7.621501f , - 13.005165f , 22.274696f , - 11.921401f , - 0.663995f , 1.949254f ,
- 0.504848f , 4.168484f , - 4.585193f , - 57.247314f , 251.522095f , - 398.684387f ,
667.462891f , - 365.460693f , - 21.912912f , 74.521721f , - 26.115280f , 2.660963f ,
/* Green colour */
2.454422f , - 4.789170f , 11.015091f , - 4.390072f , 10.337747f , - 25.938347f ,
49.404713f , - 23.776817f , - 0.900637f , - 9.026776f , 61.305000f , - 118.412514f ,
210.380249f , - 108.544792f , - 5.340967f , 11.750610f , - 3.256593f , - 55.014996f ,
280.014709f , - 477.811066f , 818.374512f , - 437.993469f , - 24.395227f , 71.615799f ,
- 18.548151f , 17.265928f , - 18.991943f , - 237.119324f , 1041.808594f , - 1651.357300f ,
2764.642090f , - 1513.744141f , - 90.763657f , 308.670197f , - 108.169922f , 11.021750f ,
4.742942f , - 4.785086f , 11.005697f , - 4.386329f , - 0.343672f , 0.862303f ,
- 1.642427f , 0.790444f , 0.029941f , 3.150264f , - 21.394896f , 41.324898f ,
- 73.420807f , 37.881153f , 1.863950f , - 4.100857f , - 0.135565f , - 2.290156f ,
11.656413f , - 19.890251f , 34.067181f , - 18.232729f , - 1.015521f , 2.981212f ,
- 0.772120f , 6.375328f , - 7.012648f , - 87.554710f , 384.680817f , - 609.752563f ,
1020.825500f , - 558.939819f , - 33.513863f , 113.974388f , - 39.941013f , 4.069707f ,
/* Blue colour */
3.304030f , - 6.446959f , 14.828006f , - 5.909713f , 13.916198f , - 34.917004f ,
66.506340f , - 32.007256f , - 1.212396f , - 12.151429f , 82.525963f , - 159.401459f ,
283.204193f , - 146.117996f , - 7.189764f , 15.818130f , - 4.383876f , - 74.058655f ,
376.942871f , - 643.207214f , 1101.658081f , - 589.606628f , - 32.839729f , 96.405884f ,
- 24.968664f , 23.242596f , - 25.566080f , - 319.199097f , 1402.434692f , - 2222.980957f ,
3721.633545f , - 2037.732544f , - 122.181847f , 415.517578f , - 145.613358f , 14.836972f ,
6.384730f , - 6.441462f , 14.815362f , - 5.904673f , - 0.462635f , 1.160793f ,
- 2.210959f , 1.064060f , 0.040305f , 4.240739f , - 28.800821f , 55.629673f ,
- 98.835709f , 50.993862f , 2.509163f , - 5.520384f , - 0.182491f , - 3.082903f ,
15.691326f , - 26.775339f , 45.859665f , - 24.544060f , - 1.367048f , 4.013170f ,
- 1.039392f , 8.582172f , - 9.440103f , - 117.862114f , 517.839600f , - 820.820740f ,
1374.188232f , - 752.419067f , - 45.114819f , 153.427063f , - 53.766754f , 5.478452f , } ;
2017-04-28 23:49:17 +02:00
const struct
{
float * red_received , * green_received , * blue_received ;
const float * red_expected , * green_expected , * blue_expected ;
float radius , roffset , goffset , boffset ;
}
test [ ] =
2013-03-04 11:55:50 +01:00
{
{ rout , gout , bout , table , & table [ 72 ] , & table [ 144 ] , 0.5f , 1.01f , 1.02f , 1.03f , } ,
{ rout , gout , bout , & table [ 36 ] , & table [ 108 ] , & table [ 180 ] , 1.6f , 1.01f , 1.02f , 1.03f , } ,
{ rout , rout , rout , & table [ 144 ] , & table [ 144 ] , & table [ 144 ] , 0.5f , 1.03f , 1.03f , 1.03f , } ,
{ rout , rout , bout , & table [ 72 ] , & table [ 72 ] , & table [ 144 ] , 0.5 , 1.02f , 1.02f , 1.03f , } ,
{ rout , gout , gout , table , & table [ 144 ] , & table [ 144 ] , 0.5f , 1.01f , 1.03f , 1.03f , } ,
{ rout , gout , rout , & table [ 144 ] , & table [ 72 ] , & table [ 144 ] , 0.5f , 1.03f , 1.02f , 1.03f , } ,
/* D3DXSHEvalConeLight accepts NULL green or blue colour. */
{ rout , NULL , bout , table , NULL , & table [ 144 ] , 0.5f , 1.01f , 0.0f , 1.03f , } ,
{ rout , gout , NULL , table , & table [ 72 ] , NULL , 0.5f , 1.01f , 1.02f , 0.0f , } ,
2017-04-28 23:49:17 +02:00
{ rout , NULL , NULL , table , NULL , NULL , 0.5f , 1.01f , 0.0f , 0.0f , } ,
} ;
2013-03-04 11:55:50 +01:00
dir . x = 1.1f ; dir . y = 1.2f ; dir . z = 2.76f ;
2017-05-05 13:40:33 +02:00
for ( l = 0 ; l < ARRAY_SIZE ( test ) ; + + l )
2013-03-04 11:55:50 +01:00
{
for ( order = D3DXSH_MINORDER ; order < = D3DXSH_MAXORDER ; order + + )
{
for ( j = 0 ; j < 49 ; j + + )
{
test [ l ] . red_received [ j ] = 1.01f + j ;
if ( test [ l ] . green_received )
test [ l ] . green_received [ j ] = 1.02f + j ;
if ( test [ l ] . blue_received )
test [ l ] . blue_received [ j ] = 1.03f + j ;
}
hr = D3DXSHEvalConeLight ( order , & dir , test [ l ] . radius , 1.7f , 2.6f , 3.5f , test [ l ] . red_received , test [ l ] . green_received , test [ l ] . blue_received ) ;
ok ( hr = = D3D_OK , " Expected %#x, got %#x \n " , D3D_OK , hr ) ;
for ( j = 0 ; j < 49 ; j + + )
{
if ( j > = order * order )
expected = j + test [ l ] . roffset ;
else
expected = test [ l ] . red_expected [ j ] ;
2017-04-28 23:49:17 +02:00
equal = compare_float ( test [ l ] . red_received [ j ] , expected , 128 ) ;
ok ( equal , " Red: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , expected , test [ l ] . red_received [ j ] ) ;
2013-03-04 11:55:50 +01:00
if ( test [ l ] . green_received )
{
if ( j > = order * order )
expected = j + test [ l ] . goffset ;
else
expected = test [ l ] . green_expected [ j ] ;
2017-04-28 23:49:17 +02:00
equal = compare_float ( test [ l ] . green_received [ j ] , expected , 64 ) ;
ok ( equal , " Green: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , expected , test [ l ] . green_received [ j ] ) ;
2013-03-04 11:55:50 +01:00
}
if ( test [ l ] . blue_received )
{
if ( j > = order * order )
expected = j + test [ l ] . boffset ;
else
expected = test [ l ] . blue_expected [ j ] ;
2017-04-28 23:49:17 +02:00
equal = compare_float ( test [ l ] . blue_received [ j ] , expected , 128 ) ;
ok ( equal , " Blue: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , expected , test [ l ] . blue_received [ j ] ) ;
2013-03-04 11:55:50 +01:00
}
}
}
}
/* Cone light with radius <= 0.0f behaves as a directional light */
for ( order = D3DXSH_MINORDER ; order < = D3DXSH_MAXORDER ; order + + )
{
FLOAT blue [ 49 ] , green [ 49 ] , red [ 49 ] ;
for ( j = 0 ; j < 49 ; j + + )
{
rout [ j ] = 1.01f + j ;
gout [ j ] = 1.02f + j ;
bout [ j ] = 1.03f + j ;
red [ j ] = 1.01f + j ;
green [ j ] = 1.02f + j ;
blue [ j ] = 1.03f + j ;
}
hr = D3DXSHEvalConeLight ( order , & dir , - 0.1f , 1.7f , 2.6f , 3.5f , rout , gout , bout ) ;
ok ( hr = = D3D_OK , " Expected %#x, got %#x \n " , D3D_OK , hr ) ;
D3DXSHEvalDirectionalLight ( order , & dir , 1.7f , 2.6f , 3.5f , red , green , blue ) ;
for ( j = 0 ; j < 49 ; j + + )
{
2017-04-28 23:49:17 +02:00
equal = compare_float ( red [ j ] , rout [ j ] , 0 ) ;
ok ( equal , " Red: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , red [ j ] , rout [ j ] ) ;
2013-03-04 11:55:50 +01:00
2017-04-28 23:49:17 +02:00
equal = compare_float ( green [ j ] , gout [ j ] , 0 ) ;
ok ( equal , " Green: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , green [ j ] , gout [ j ] ) ;
2013-03-04 11:55:50 +01:00
2017-04-28 23:49:17 +02:00
equal = compare_float ( blue [ j ] , bout [ j ] , 0 ) ;
ok ( equal , " Blue: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , blue [ j ] , bout [ j ] ) ;
2013-03-04 11:55:50 +01:00
}
}
/* D3DXSHEvalConeLight accepts order < D3DXSH_MINORDER or order > D3DXSH_MAXORDER. But tests in native windows show that the colour outputs are not set */
hr = D3DXSHEvalConeLight ( 7 , & dir , 0.5f , 1.0f , 2.0f , 3.0f , rout , gout , bout ) ;
ok ( hr = = D3D_OK , " Expected %#x, got %#x \n " , D3D_OK , hr ) ;
hr = D3DXSHEvalConeLight ( 0 , & dir , 0.5f , 1.0f , 2.0f , 3.0f , rout , gout , bout ) ;
ok ( hr = = D3D_OK , " Expected %#x, got %#x \n " , D3D_OK , hr ) ;
hr = D3DXSHEvalConeLight ( 1 , & dir , 0.5f , 1.0f , 2.0f , 3.0f , rout , gout , bout ) ;
ok ( hr = = D3D_OK , " Expected %#x, got %#x \n " , D3D_OK , hr ) ;
}
2012-07-15 10:18:50 +02:00
static void test_D3DXSHEvalDirection ( void )
{
2017-05-04 12:05:55 +02:00
float a [ 49 ] , expected , * received_ptr ;
2012-07-15 10:18:50 +02:00
unsigned int i , order ;
D3DXVECTOR3 d ;
2017-05-04 12:05:55 +02:00
BOOL equal ;
static const float table [ 36 ] =
{
2.82094806e-01 f , - 9.77205038e-01 f , 1.46580756e+00 f , - 4.88602519e-01 f , 2.18509698e+00 f , - 6.55529118e+00 f ,
8.20018101e+00 f , - 3.27764559e-00 f , - 1.63882279e+00 f , 1.18008721e+00 f , 1.73436680e+01 f , - 4.02200317e+01 f ,
4.70202179e+01 f , - 2.01100159e+01 f , - 1.30077515e+01 f , 6.49047947e+00 f , - 1.50200577e+01 f , 1.06207848e+01 f ,
1.17325661e+02 f , - 2.40856750e+02 f , 2.71657288e+02 f , - 1.20428375e+02 f , - 8.79942474e+01 f , 5.84143143e+01 f ,
- 4.38084984e+00 f , 2.49425201e+01 f , - 1.49447693e+02 f , 7.82781296e+01 f , 7.47791748e+02 f , - 1.42768787e+03 f ,
1.57461914e+03 f , - 7.13843933e+02 f , - 5.60843811e+02 f , 4.30529724e+02 f , - 4.35889091e+01 f , - 2.69116650e+01 f ,
} ;
2012-07-15 10:18:50 +02:00
d . x = 1.0 ; d . y = 2.0f ; d . z = 3.0f ;
2012-10-02 08:11:10 +02:00
for ( order = 0 ; order < = D3DXSH_MAXORDER + 1 ; order + + )
2012-07-15 10:18:50 +02:00
{
2017-05-05 13:40:34 +02:00
for ( i = 0 ; i < ARRAY_SIZE ( a ) ; + + i )
2012-07-15 10:18:50 +02:00
a [ i ] = 1.5f + i ;
received_ptr = D3DXSHEvalDirection ( a , order , & d ) ;
ok ( received_ptr = = a , " Expected %p, received %p \n " , a , received_ptr ) ;
2017-05-05 13:40:34 +02:00
for ( i = 0 ; i < ARRAY_SIZE ( a ) ; + + i )
2012-07-15 10:18:50 +02:00
{
2017-05-04 12:05:55 +02:00
/* if the order is < D3DXSH_MINORDER or order > D3DXSH_MAXORDER or
* the index of the element is greater than order * order - 1 ,
* D3DXSHEvalDirection ( ) does not modify the output . */
if ( ( order < D3DXSH_MINORDER ) | | ( order > D3DXSH_MAXORDER ) | | ( i > = order * order ) )
expected = 1.5f + i ;
2012-07-15 10:18:50 +02:00
else
2017-05-04 12:05:55 +02:00
expected = table [ i ] ;
2012-07-15 10:18:50 +02:00
2017-05-04 12:05:55 +02:00
equal = compare_float ( a [ i ] , expected , 2 ) ;
ok ( equal , " order %u, index %u: Got unexpected result %.8e, expected %.8e. \n " ,
order , i , a [ i ] , expected ) ;
2012-07-15 10:18:50 +02:00
}
}
}
2012-09-17 13:19:23 +02:00
static void test_D3DXSHEvalDirectionalLight ( void )
{
2017-05-04 12:05:56 +02:00
float * blue_out , bout [ 49 ] , expected , gout [ 49 ] , * green_out , * red_out , rout [ 49 ] ;
unsigned int j , l , order , startindex ;
2012-09-17 13:19:23 +02:00
D3DXVECTOR3 dir ;
2017-05-04 12:05:56 +02:00
HRESULT hr ;
BOOL equal ;
static const float table [ ] =
{
2012-09-17 13:19:23 +02:00
/* Red colour */
2.008781f , - 4.175174f , 9.602900f , - 3.827243f , 1.417963f , - 2.947181f ,
6.778517f , - 2.701583f , 7.249108f , - 18.188671f , 34.643921f , - 16.672949f ,
- 0.631551f , 1.417963f , - 2.947181f , 6.778517f , - 2.701583f , 7.249108f ,
- 18.188671f , 34.643921f , - 16.672949f , - 0.631551f , - 7.794341f , 52.934967f ,
- 102.245529f , 181.656815f , - 93.725060f , - 4.611760f , 10.146287f , 1.555186f ,
- 3.232392f , 7.434503f , - 2.963026f , 7.950634f , - 19.948866f , 37.996559f ,
- 18.286459f , - 0.692669f , - 8.548632f , 58.057705f , - 112.140251f , 199.236496f ,
- 102.795227f , - 5.058059f , 11.128186f , - 4.189955f , - 70.782669f , 360.268829f ,
- 614.755005f , 1052.926270f , - 563.525391f , - 31.387066f , 92.141365f , - 23.864176f ,
1.555186f , - 3.232392f , 7.434503f , - 2.963026f , 7.950634f , - 19.948866f ,
37.996559f , - 18.286459f , - 0.692669f , - 8.548632f , 58.057705f , - 112.140251f ,
199.236496f , - 102.795227f , - 5.058059f , 11.128186f , - 4.189955f , - 70.782669f ,
360.268829f , - 614.755005f , 1052.926270f , - 563.525391f , - 31.387066f , 92.141365f ,
- 23.864176f , 34.868664f , - 38.354366f , - 478.864166f , 2103.939941f , - 3334.927734f ,
5583.213867f , - 3057.017090f , - 183.297836f , 623.361633f , - 218.449921f , 22.258503f ,
/* Green colour */
3.072254f , - 6.385560f , 14.686787f , - 5.853429f , 2.168650f , - 4.507453f ,
10.367143f , - 4.131832f , 11.086870f , - 27.817965f , 52.984818f , - 25.499800f ,
- 0.965902f , 2.168650f , - 4.507453f , 10.367143f , - 4.131832f , 11.086870f ,
- 27.817965f , 52.984818f , - 25.499800f , - 0.965902f , - 11.920755f , 80.959351f ,
- 156.375488f , 277.828033f , - 143.344193f , - 7.053278f , 15.517849f , 2.378519f ,
- 4.943659f , 11.370415f , - 4.531687f , 12.159794f , - 30.510029f , 58.112385f ,
- 27.967525f , - 1.059376f , - 13.074378f , 88.794136f , - 171.508621f , 304.714630f ,
- 157.216217f , - 7.735855f , 17.019577f , - 6.408166f , - 108.255844f , 550.999390f ,
- 940.213501f , 1610.357788f , - 861.862305f , - 48.003746f , 140.922089f , - 36.498150f ,
2.378519f , - 4.943659f , 11.370415f , - 4.531687f , 12.159794f , - 30.510029f ,
58.112385f , - 27.967525f , - 1.059376f , - 13.074378f , 88.794136f , - 171.508621f ,
304.714630f , - 157.216217f , - 7.735855f , 17.019577f , - 6.408166f , - 108.255844f ,
550.999390f , - 940.213501f , 1610.357788f , - 861.862305f , - 48.003746f , 140.922089f ,
- 36.498150f , 53.328545f , - 58.659618f , - 732.380493f , 3217.790283f , - 5100.477539f ,
8539.033203f , - 4675.437500f , - 280.337860f , 953.376587f , - 334.099884f , 34.042416f ,
/* Blue colour */
4.135726f , - 8.595945f , 19.770674f , - 7.879617f , 2.919336f , - 6.067726f ,
13.955770f , - 5.562082f , 14.924634f , - 37.447262f , 71.325722f , - 34.326656f ,
- 1.300252f , 2.919336f , - 6.067726f , 13.955770f , - 5.562082f , 14.924634f ,
- 37.447262f , 71.325722f , - 34.326656f , - 1.300252f , - 16.047173f , 108.983749f ,
- 210.505493f , 373.999298f , - 192.963348f , - 9.494799f , 20.889414f , 3.201853f ,
- 6.654925f , 15.306328f , - 6.100348f , 16.368954f , - 41.071194f , 78.228210f ,
- 37.648590f , - 1.426083f , - 17.600124f , 119.530563f , - 230.876984f , 410.192780f ,
- 211.637222f , - 10.413651f , 22.910971f , - 8.626378f , - 145.729019f , 741.729919f ,
- 1265.671997f , 2167.789307f , - 1160.199219f , - 64.620430f , 189.702820f , - 49.132126f ,
3.201853f , - 6.654925f , 15.306328f , - 6.100348f , 16.368954f , - 41.071194f ,
78.228210f , - 37.648590f , - 1.426083f , - 17.600124f , 119.530563f , - 230.876984f ,
410.192780f , - 211.637222f , - 10.413651f , 22.910971f , - 8.626378f , - 145.729019f ,
741.729919f , - 1265.671997f , 2167.789307f , - 1160.199219f , - 64.620430f , 189.702820f ,
- 49.132126f , 71.788422f , - 78.964867f , - 985.896790f , 4331.640625f , - 6866.027344f ,
11494.852539f , - 6293.858398f , - 377.377899f , 1283.391479f , - 449.749817f , 45.826328f , } ;
2017-05-04 12:05:56 +02:00
const struct
2012-09-17 13:19:23 +02:00
{
2017-05-04 12:05:56 +02:00
float * red_in , * green_in , * blue_in ;
const float * red_out , * green_out , * blue_out ;
float roffset , goffset , boffset ;
}
test [ ] =
{
{ rout , gout , bout , table , & table [ 90 ] , & table [ 180 ] , 1.01f , 1.02f , 1.03f , } ,
2012-09-17 13:19:23 +02:00
{ rout , rout , rout , & table [ 180 ] , & table [ 180 ] , & table [ 180 ] , 1.03f , 1.03f , 1.03f , } ,
{ rout , rout , bout , & table [ 90 ] , & table [ 90 ] , & table [ 180 ] , 1.02f , 1.02f , 1.03f , } ,
{ rout , gout , gout , table , & table [ 180 ] , & table [ 180 ] , 1.01f , 1.03f , 1.03f , } ,
{ rout , gout , rout , & table [ 180 ] , & table [ 90 ] , & table [ 180 ] , 1.03f , 1.02f , 1.03f , } ,
/* D3DXSHEvalDirectionaLight accepts NULL green or blue colour. */
{ rout , NULL , bout , table , NULL , & table [ 180 ] , 1.01f , 0.0f , 1.03f , } ,
{ rout , gout , NULL , table , & table [ 90 ] , NULL , 1.01f , 1.02f , 0.0f , } ,
2017-05-04 12:05:56 +02:00
{ rout , NULL , NULL , table , NULL , NULL , 1.01f , 0.0f , 0.0f , } ,
} ;
2012-09-17 13:19:23 +02:00
dir . x = 1.1f ; dir . y = 1.2f ; dir . z = 2.76f ;
for ( l = 0 ; l < sizeof ( test ) / sizeof ( test [ 0 ] ) ; l + + )
{
startindex = 0 ;
for ( order = D3DXSH_MINORDER ; order < = D3DXSH_MAXORDER ; order + + )
{
red_out = test [ l ] . red_in ;
green_out = test [ l ] . green_in ;
blue_out = test [ l ] . blue_in ;
for ( j = 0 ; j < 49 ; j + + )
{
red_out [ j ] = 1.01f + j ;
if ( green_out )
green_out [ j ] = 1.02f + j ;
if ( blue_out )
blue_out [ j ] = 1.03f + j ;
}
hr = D3DXSHEvalDirectionalLight ( order , & dir , 1.7f , 2.6f , 3.5f , red_out , green_out , blue_out ) ;
ok ( hr = = D3D_OK , " Expected %#x, got %#x \n " , D3D_OK , hr ) ;
for ( j = 0 ; j < 49 ; j + + )
{
if ( j > = order * order )
expected = j + test [ l ] . roffset ;
else
expected = test [ l ] . red_out [ startindex + j ] ;
2017-05-04 12:05:56 +02:00
equal = compare_float ( expected , red_out [ j ] , 8 ) ;
ok ( equal , " Red: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , expected , red_out [ j ] ) ;
2012-09-17 13:19:23 +02:00
if ( green_out )
{
if ( j > = order * order )
expected = j + test [ l ] . goffset ;
else
expected = test [ l ] . green_out [ startindex + j ] ;
2017-05-04 12:05:56 +02:00
equal = compare_float ( expected , green_out [ j ] , 8 ) ;
ok ( equal , " Green: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , expected , green_out [ j ] ) ;
2012-09-17 13:19:23 +02:00
}
if ( blue_out )
{
if ( j > = order * order )
expected = j + test [ l ] . boffset ;
else
expected = test [ l ] . blue_out [ startindex + j ] ;
2017-05-04 12:05:56 +02:00
equal = compare_float ( expected , blue_out [ j ] , 4 ) ;
ok ( equal , " Blue: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , expected , blue_out [ j ] ) ;
2012-09-17 13:19:23 +02:00
}
}
startindex + = order * order ;
}
}
/* D3DXSHEvalDirectionalLight accepts order < D3DXSH_MINORDER or order > D3DXSH_MAXORDER. But tests in native windows show that the colour outputs are not set*/
hr = D3DXSHEvalDirectionalLight ( 7 , & dir , 1.0f , 2.0f , 3.0f , rout , gout , bout ) ;
ok ( hr = = D3D_OK , " Expected %#x, got %#x \n " , D3D_OK , hr ) ;
hr = D3DXSHEvalDirectionalLight ( 0 , & dir , 1.0f , 2.0f , 3.0f , rout , gout , bout ) ;
ok ( hr = = D3D_OK , " Expected %#x, got %#x \n " , D3D_OK , hr ) ;
hr = D3DXSHEvalDirectionalLight ( 1 , & dir , 1.0f , 2.0f , 3.0f , rout , gout , bout ) ;
ok ( hr = = D3D_OK , " Expected %#x, got %#x \n " , D3D_OK , hr ) ;
}
2013-04-01 01:37:34 +02:00
static void test_D3DXSHEvalHemisphereLight ( void )
{
2017-05-04 12:05:57 +02:00
float bout [ 49 ] , expected , gout [ 49 ] , rout [ 49 ] ;
unsigned int j , l , order ;
2013-04-01 01:37:34 +02:00
D3DXCOLOR bottom , top ;
D3DXVECTOR3 dir ;
2017-05-04 12:05:57 +02:00
HRESULT hr ;
BOOL equal ;
static const float table [ ] =
{
/* Red colour. */
23.422981f , 15.859521f , - 36.476898f , 14.537894f ,
/* Green colour. */
19.966694f , 6.096982f , - 14.023058f , 5.588900f ,
/* Blue colour. */
24.566214f , 8.546826f , - 19.657701f , 7.834591f ,
} ;
const struct
{
float * red_received , * green_received , * blue_received ;
const float * red_expected , * green_expected , * blue_expected ;
const float roffset , goffset , boffset ;
}
test [ ] =
2013-04-01 01:37:34 +02:00
{
{ rout , gout , bout , table , & table [ 4 ] , & table [ 8 ] , 1.01f , 1.02f , 1.03f , } ,
{ rout , rout , rout , & table [ 8 ] , & table [ 8 ] , & table [ 8 ] , 1.03f , 1.03f , 1.03f , } ,
{ rout , rout , bout , & table [ 4 ] , & table [ 4 ] , & table [ 8 ] , 1.02f , 1.02f , 1.03f , } ,
{ rout , gout , gout , table , & table [ 8 ] , & table [ 8 ] , 1.01f , 1.03f , 1.03f , } ,
{ rout , gout , rout , & table [ 8 ] , & table [ 4 ] , & table [ 8 ] , 1.03f , 1.02f , 1.03f , } ,
/* D3DXSHEvalHemisphereLight accepts NULL green or blue colour. */
{ rout , NULL , bout , table , NULL , & table [ 8 ] , 1.01f , 1.02f , 1.03f , } ,
{ rout , gout , NULL , table , & table [ 4 ] , NULL , 1.01f , 1.02f , 1.03f , } ,
2017-05-04 12:05:57 +02:00
{ rout , NULL , NULL , table , NULL , NULL , 1.01f , 1.02f , 1.03f , } ,
} ;
2013-04-01 01:37:34 +02:00
dir . x = 1.1f ; dir . y = 1.2f ; dir . z = 2.76f ;
top . r = 0.1f ; top . g = 2.1f ; top . b = 2.3f ; top . a = 4.3f ;
bottom . r = 8.71f ; bottom . g = 5.41f ; bottom . b = 6.94f ; bottom . a = 8.43f ;
for ( l = 0 ; l < sizeof ( test ) / sizeof ( test [ 0 ] ) ; l + + )
for ( order = D3DXSH_MINORDER ; order < = D3DXSH_MAXORDER + 1 ; order + + )
{
for ( j = 0 ; j < 49 ; j + + )
{
test [ l ] . red_received [ j ] = 1.01f + j ;
if ( test [ l ] . green_received )
test [ l ] . green_received [ j ] = 1.02f + j ;
if ( test [ l ] . blue_received )
test [ l ] . blue_received [ j ] = 1.03f + j ;
}
hr = D3DXSHEvalHemisphereLight ( order , & dir , top , bottom , test [ l ] . red_received , test [ l ] . green_received , test [ l ] . blue_received ) ;
ok ( hr = = D3D_OK , " Expected %#x, got %#x \n " , D3D_OK , hr ) ;
for ( j = 0 ; j < 49 ; j + + )
{
if ( j < 4 )
expected = test [ l ] . red_expected [ j ] ;
else if ( j < order * order )
expected = 0.0f ;
else
expected = test [ l ] . roffset + j ;
2017-05-04 12:05:57 +02:00
equal = compare_float ( test [ l ] . red_received [ j ] , expected , 4 ) ;
ok ( equal , " Red: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , expected , test [ l ] . red_received [ j ] ) ;
2013-04-01 01:37:34 +02:00
if ( test [ l ] . green_received )
{
if ( j < 4 )
expected = test [ l ] . green_expected [ j ] ;
else if ( j < order * order )
expected = 0.0f ;
else
expected = test [ l ] . goffset + j ;
2017-05-04 12:05:57 +02:00
equal = compare_float ( expected , test [ l ] . green_received [ j ] , 4 ) ;
ok ( equal , " Green: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , expected , test [ l ] . green_received [ j ] ) ;
2013-04-01 01:37:34 +02:00
}
if ( test [ l ] . blue_received )
{
if ( j < 4 )
expected = test [ l ] . blue_expected [ j ] ;
else if ( j < order * order )
expected = 0.0f ;
else
expected = test [ l ] . boffset + j ;
2017-05-04 12:05:57 +02:00
equal = compare_float ( expected , test [ l ] . blue_received [ j ] , 4 ) ;
ok ( equal , " Blue: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , expected , test [ l ] . blue_received [ j ] ) ;
2013-04-01 01:37:34 +02:00
}
}
}
}
2013-04-01 01:37:06 +02:00
static void test_D3DXSHEvalSphericalLight ( void )
{
2017-05-05 13:40:28 +02:00
float bout [ 49 ] , expected , gout [ 49 ] , rout [ 49 ] ;
unsigned int j , l , order ;
2013-04-01 01:37:06 +02:00
D3DXVECTOR3 dir ;
2017-05-05 13:40:28 +02:00
HRESULT hr ;
BOOL equal ;
static const float table [ ] =
{
/* Red colour. */
3.01317239e+00 f , - 9.77240324e-01 f , 2.24765277e+00 f , - 8.95803630e-01 f , - 1.22213947e-07 f , 3.06645916e-07 f ,
- 3.36369283e-07 f , 2.81092071e-07 f , 1.06474305e-08 f , 6.29281402e-02 f , - 4.27374065e-01 f , 6.19212627e-01 f ,
- 3.04508984e-01 f , 5.67611575e-01 f , 3.72333601e-02 f , - 8.19167346e-02 f , - 4.70457762e-09 f , - 7.94764006e-08 f ,
3.32868979e-07 f , - 3.08902315e-07 f , 5.30925970e-10 f , - 2.83160460e-07 f , - 2.89999580e-08 f , 1.03458447e-07 f ,
- 2.67952434e-08 f , 1.24992710e-02 f , - 1.37487827e-02 f , - 1.48109317e-01 f , 4.34345961e-01 f , - 2.45986164e-01 f ,
- 1.51757941e-01 f , - 2.25487292e-01 f , - 3.78407575e-02 f , 1.92801371e-01 f , - 7.83071220e-02 f , 7.97894225e-03 f ,
4.02519643e-01 f , - 2.43653327e-01 f , 5.60402632e-01 f , - 2.23348871e-01 f , 1.62046894e-01 f , - 4.06590402e-01 f ,
4.46001410e-01 f , - 3.72707844e-01 f , - 1.41177261e-02 f , - 4.31995131e-02 f , 2.93387860e-01 f , - 4.25083041e-01 f ,
2.09042251e-01 f , - 3.89659435e-01 f , - 2.55603138e-02 f , 5.62349856e-02 f , - 4.68822848e-03 f , - 7.92002082e-02 f ,
3.31712216e-01 f , - 3.07828844e-01 f , 5.29080920e-04 f , - 2.82176435e-01 f , - 2.88991798e-02 f , 1.03098914e-01 f ,
- 2.67021265e-02 f , 7.24340184e-03 f , - 7.96750095e-03 f , - 8.58302265e-02 f , 2.51706064e-01 f , - 1.42550439e-01 f ,
- 8.79446268e-02 f , - 1.30671218e-01 f , - 2.19289437e-02 f , 1.11729540e-01 f , - 4.53794412e-02 f , 4.62384429e-03 f ,
1.95445275e+00 f , - 8.56593668e-01 f , 1.97016549e+00 f , - 7.85210848e-01 f , 2.31033459e-01 f , - 5.79683959e-01 f ,
6.35873020e-01 f , - 5.31376958e-01 f , - 2.01279204e-02 f , 2.11104341e-02 f , - 1.43370718e-01 f , 2.07726598e-01 f ,
- 1.02153301e-01 f , 1.90416038e-01 f , 1.24906348e-02 f , - 2.74805184e-02 f , 6.33162493e-03 f , 1.06962793e-01 f ,
- 4.47989494e-01 f , 4.15734142e-01 f , - 7.14543217e-04 f , 3.81089628e-01 f , 3.90294008e-02 f , - 1.39238864e-01 f ,
3.60621996e-02 f , - 4.47360286e-03 f , 4.92081419e-03 f , 5.30096702e-02 f , - 1.55456364e-01 f , 8.80406797e-02 f ,
5.43155447e-02 f , 8.07039514e-02 f , 1.35435509e-02 f , - 6.90053627e-02 f , 2.80268304e-02 f , - 2.85573583e-03 f ,
/* Green colour. */
4.60838127e+00 f , - 1.49460280e+00 f , 3.43758631e+00 f , - 1.37005258e+00 f , - 1.86915443e-07 f , 4.68987878e-07 f ,
- 5.14447095e-07 f , 4.29905526e-07 f , 1.62843055e-08 f , 9.62430239e-02 f , - 6.53630912e-01 f , 9.47031021e-01 f ,
- 4.65719581e-01 f , 8.68111789e-01 f , 5.69451340e-02 f , - 1.25284418e-01 f , - 7.19523641e-09 f , - 1.21552148e-07 f ,
5.09093695e-07 f , - 4.72438842e-07 f , 8.12004408e-10 f , - 4.33068919e-07 f , - 4.43528769e-08 f , 1.58230563e-07 f ,
- 4.09809608e-08 f , 1.91165321e-02 f , - 2.10275482e-02 f , - 2.26520121e-01 f , 6.64293766e-01 f , - 3.76214117e-01 f ,
- 2.32100368e-01 f , - 3.44862908e-01 f , - 5.78740984e-02 f , 2.94872671e-01 f , - 1.19763829e-01 f , 1.22030871e-02 f ,
6.15618229e-01 f , - 3.72646272e-01 f , 8.57086360e-01 f , - 3.41592401e-01 f , 2.47836411e-01 f , - 6.21844113e-01 f ,
6.82119787e-01 f , - 5.70023775e-01 f , - 2.15918161e-02 f , - 6.60698414e-02 f , 4.48710799e-01 f , - 6.50126934e-01 f ,
3.19711655e-01 f , - 5.95949709e-01 f , - 3.90922427e-02 f , 8.60064477e-02 f , - 7.17023155e-03 f , - 1.21129729e-01 f ,
5.07324517e-01 f , - 4.70797032e-01 f , 8.09182529e-04 f , - 4.31563944e-01 f , - 4.41987440e-02 f , 1.57680690e-01 f ,
- 4.08385433e-02 f , 1.10781426e-02 f , - 1.21855885e-02 f , - 1.31269753e-01 f , 3.84962171e-01 f , - 2.18018293e-01 f ,
- 1.34503528e-01 f , - 1.99850082e-01 f , - 3.35383788e-02 f , 1.70880452e-01 f , - 6.94038495e-02 f , 7.07176095e-03 f ,
2.98916292e+00 f , - 1.31008446e+00 f , 3.01319408e+00 f , - 1.20091069e+00 f , 3.53345245e-01 f , - 8.86575401e-01 f ,
9.72511649e-01 f , - 8.12694073e-01 f , - 3.07838768e-02 f , 3.22865434e-02 f , - 2.19272852e-01 f , 3.17699492e-01 f ,
- 1.56234443e-01 f , 2.91224509e-01 f , 1.91033222e-02 f , - 4.20290269e-02 f , 9.68366116e-03 f , 1.63590148e-01 f ,
- 6.85160398e-01 f , 6.35828674e-01 f , - 1.09283067e-03 f , 5.82842946e-01 f , 5.96920252e-02 f , - 2.12953553e-01 f ,
5.51539510e-02 f , - 6.84198039e-03 f , 7.52595067e-03 f , 8.10736120e-02 f , - 2.37756789e-01 f , 1.34650454e-01 f ,
8.30708295e-02 f , 1.23429567e-01 f , 2.07136646e-02 f , - 1.05537608e-01 f , 4.28645648e-02 f , - 4.36759600e-03 f ,
/* Blue colour. */
6.20359039e+00 f , - 2.01196527e+00 f , 4.62752008e+00 f , - 1.84430146e+00 f , - 2.51616967e-07 f , 6.31329840e-07 f ,
- 6.92524964e-07 f , 5.78718982e-07 f , 2.19211813e-08 f , 1.29557922e-01 f , - 8.79887760e-01 f , 1.27484941e+00 f ,
- 6.26930237e-01 f , 1.16861200e+00 f , 7.66569078e-02 f , - 1.68652087e-01 f , - 9.68589564e-09 f , - 1.63627888e-07 f ,
6.85318469e-07 f , - 6.35975368e-07 f , 1.09308285e-09 f , - 5.82977407e-07 f , - 5.97057976e-08 f , 2.13002679e-07 f ,
- 5.51666766e-08 f , 2.57337932e-02 f , - 2.83063166e-02 f , - 3.04930955e-01 f , 8.94241691e-01 f , - 5.06442070e-01 f ,
- 3.12442809e-01 f , - 4.64238554e-01 f , - 7.79074430e-02 f , 3.96944016e-01 f , - 1.61220551e-01 f , 1.64272338e-02 f ,
8.28716874e-01 f , - 5.01639187e-01 f , 1.15377009e+00 f , - 4.59835887e-01 f , 3.33625972e-01 f , - 8.37097943e-01 f ,
9.18238282e-01 f , - 7.67339706e-01 f , - 2.90659070e-02 f , - 8.89401734e-02 f , 6.04033828e-01 f , - 8.75170946e-01 f ,
4.30381119e-01 f , - 8.02240014e-01 f , - 5.26241735e-02 f , 1.15777917e-01 f , - 9.65223555e-03 f , - 1.63059264e-01 f ,
6.82936907e-01 f , - 6.33765280e-01 f , 1.08928420e-03 f , - 5.80951512e-01 f , - 5.94983101e-02 f , 2.12262481e-01 f ,
- 5.49749658e-02 f , 1.49128847e-02 f , - 1.64036769e-02 f , - 1.76709279e-01 f , 5.18218338e-01 f , - 2.93486178e-01 f ,
- 1.81062460e-01 f , - 2.69028962e-01 f , - 4.51478213e-02 f , 2.30031401e-01 f , - 9.34282616e-02 f , 9.51967947e-03 f ,
4.02387333e+00 f , - 1.76357520e+00 f , 4.05622292e+00 f , - 1.61661065e+00 f , 4.75657105e-01 f , - 1.19346702e+00 f ,
1.30915034e+00 f , - 1.09401131e+00 f , - 4.14398350e-02 f , 4.34626564e-02 f , - 2.95174986e-01 f , 4.27672386e-01 f ,
- 2.10315600e-01 f , 3.92033011e-01 f , 2.57160105e-02 f , - 5.65775372e-02 f , 1.30356979e-02 f , 2.20217496e-01 f ,
- 9.22331274e-01 f , 8.55923176e-01 f , - 1.47111830e-03 f , 7.84596264e-01 f , 8.03546458e-02 f , - 2.86668241e-01 f ,
7.42457062e-02 f , - 9.21035837e-03 f , 1.01310881e-02 f , 1.09137557e-01 f , - 3.20057213e-01 f , 1.81260213e-01 f ,
1.11826122e-01 f , 1.66155189e-01 f , 2.78837811e-02 f , - 1.42069861e-01 f , 5.77022992e-02 f , - 5.87945618e-03 f ,
} ;
const struct
{
float * red_received , * green_received , * blue_received ;
const float * red_expected , * green_expected , * blue_expected ;
float radius , roffset , goffset , boffset ;
}
test [ ] =
2013-04-01 01:37:06 +02:00
{
{ rout , gout , bout , table , & table [ 108 ] , & table [ 216 ] , 17.4f , 1.01f , 1.02f , 1.03f , } ,
{ rout , gout , bout , & table [ 36 ] , & table [ 144 ] , & table [ 252 ] , 1.6f , 1.01f , 1.02f , 1.03f , } ,
{ rout , gout , bout , & table [ 72 ] , & table [ 180 ] , & table [ 288 ] , - 3.0f , 1.01f , 1.02f , 1.03f , } ,
{ rout , rout , rout , & table [ 216 ] , & table [ 216 ] , & table [ 216 ] , 17.4f , 1.03f , 1.03f , 1.03f , } ,
{ rout , rout , bout , & table [ 108 ] , & table [ 108 ] , & table [ 216 ] , 17.4 , 1.02f , 1.02f , 1.03f , } ,
{ rout , gout , gout , table , & table [ 216 ] , & table [ 216 ] , 17.4f , 1.01f , 1.03f , 1.03f , } ,
{ rout , gout , rout , & table [ 216 ] , & table [ 108 ] , & table [ 216 ] , 17.4f , 1.03f , 1.02f , 1.03f , } ,
/* D3DXSHEvalSphericalLight accepts NULL green or blue colour. */
{ rout , NULL , bout , table , NULL , & table [ 216 ] , 17.4f , 1.01f , 0.0f , 1.03f , } ,
{ rout , gout , NULL , table , & table [ 108 ] , NULL , 17.4f , 1.01f , 1.02f , 0.0f , } ,
2017-05-05 13:40:28 +02:00
{ rout , NULL , NULL , table , NULL , NULL , 17.4f , 1.01f , 0.0f , 0.0f , } ,
} ;
2013-04-01 01:37:06 +02:00
dir . x = 1.1f ; dir . y = 1.2f ; dir . z = 2.76f ;
for ( l = 0 ; l < sizeof ( test ) / sizeof ( test [ 0 ] ) ; l + + )
{
for ( order = D3DXSH_MINORDER ; order < = D3DXSH_MAXORDER ; order + + )
{
for ( j = 0 ; j < 49 ; j + + )
{
test [ l ] . red_received [ j ] = 1.01f + j ;
if ( test [ l ] . green_received )
test [ l ] . green_received [ j ] = 1.02f + j ;
if ( test [ l ] . blue_received )
test [ l ] . blue_received [ j ] = 1.03f + j ;
}
hr = D3DXSHEvalSphericalLight ( order , & dir , test [ l ] . radius , 1.7f , 2.6f , 3.5f , test [ l ] . red_received , test [ l ] . green_received , test [ l ] . blue_received ) ;
ok ( hr = = D3D_OK , " Expected %#x, got %#x \n " , D3D_OK , hr ) ;
for ( j = 0 ; j < 49 ; j + + )
{
if ( j > = order * order )
expected = j + test [ l ] . roffset ;
else
expected = test [ l ] . red_expected [ j ] ;
2017-05-05 13:40:28 +02:00
equal = compare_float ( expected , test [ l ] . red_received [ j ] , 2048 ) ;
ok ( equal | | ( fabs ( expected ) < 1.0e-6 f & & fabs ( test [ l ] . red_received [ j ] ) < 1.0e-6 f ) ,
" Red: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , expected , test [ l ] . red_received [ j ] ) ;
2013-04-01 01:37:06 +02:00
if ( test [ l ] . green_received )
{
if ( j > = order * order )
expected = j + test [ l ] . goffset ;
else
expected = test [ l ] . green_expected [ j ] ;
2017-05-05 13:40:28 +02:00
equal = compare_float ( expected , test [ l ] . green_received [ j ] , 2048 ) ;
ok ( equal | | ( fabs ( expected ) < 1.0e-6 f & & fabs ( test [ l ] . green_received [ j ] ) < 1.0e-6 f ) ,
" Green: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , expected , test [ l ] . green_received [ j ] ) ;
2013-04-01 01:37:06 +02:00
}
if ( test [ l ] . blue_received )
{
if ( j > = order * order )
expected = j + test [ l ] . boffset ;
else
expected = test [ l ] . blue_expected [ j ] ;
2017-05-05 13:40:28 +02:00
equal = compare_float ( expected , test [ l ] . blue_received [ j ] , 2048 ) ;
ok ( equal | | ( fabs ( expected ) < 1.0e-6 f & & fabs ( test [ l ] . blue_received [ j ] ) < 1.0e-6 f ) ,
" Blue: case %u, order %u: expected[%u] = %.8e, received %.8e. \n " ,
l , order , j , expected , test [ l ] . blue_received [ j ] ) ;
2013-04-01 01:37:06 +02:00
}
}
}
}
/* D3DXSHEvalSphericalLight accepts order < D3DXSH_MINORDER or order > D3DXSH_MAXORDER. But tests in native windows show that the colour outputs are not set */
hr = D3DXSHEvalSphericalLight ( 7 , & dir , 17.4f , 1.0f , 2.0f , 3.0f , rout , gout , bout ) ;
ok ( hr = = D3D_OK , " Expected %#x, got %#x \n " , D3D_OK , hr ) ;
hr = D3DXSHEvalSphericalLight ( 0 , & dir , 17.4f , 1.0f , 2.0f , 3.0f , rout , gout , bout ) ;
ok ( hr = = D3D_OK , " Expected %#x, got %#x \n " , D3D_OK , hr ) ;
hr = D3DXSHEvalSphericalLight ( 1 , & dir , 17.4f , 1.0f , 2.0f , 3.0f , rout , gout , bout ) ;
ok ( hr = = D3D_OK , " Expected %#x, got %#x \n " , D3D_OK , hr ) ;
}
2012-07-13 02:53:18 +02:00
static void test_D3DXSHMultiply2 ( void )
{
2017-05-05 00:03:55 +02:00
float a [ 20 ] , b [ 20 ] , c [ 20 ] ;
2012-07-13 02:53:18 +02:00
unsigned int i ;
2017-05-05 00:03:55 +02:00
BOOL equal ;
/* D3DXSHMultiply2() only modifies the first 4 elements of the array. */
static const float expected [ 20 ] =
{
3.41859412f , 1.69821072f , 1.70385253f , 1.70949447f , 4.0f , 5.0f , 6.0f ,
7.0f , 8.0f , 9.0f , 10.0f , 11.0f , 12.0f , 13.0f ,
14.0f , 15.0f , 16.0f , 17.0f , 18.0f , 19.0f ,
} ;
2012-07-13 02:53:18 +02:00
for ( i = 0 ; i < 20 ; i + + )
{
a [ i ] = 1.0f + i / 100.0f ;
b [ i ] = 3.0f - i / 100.0f ;
c [ i ] = i ;
}
D3DXSHMultiply2 ( c , a , b ) ;
for ( i = 0 ; i < 20 ; i + + )
2017-05-05 00:03:55 +02:00
{
equal = compare_float ( c [ i ] , expected [ i ] , 2 ) ;
ok ( equal , " Expected[%u] = %.8e, received = %.8e. \n " , i , expected [ i ] , c [ i ] ) ;
}
2012-07-13 02:53:18 +02:00
}
2012-06-15 05:51:54 +02:00
static void test_D3DXSHMultiply3 ( void )
{
2017-05-04 12:06:00 +02:00
float a [ 20 ] , b [ 20 ] , c [ 20 ] ;
2012-06-15 05:51:54 +02:00
unsigned int i ;
2017-05-04 12:06:00 +02:00
BOOL equal ;
/* D3DXSHMultiply3() only modifies the first 9 elements of the array. */
2016-04-18 19:09:27 +02:00
static const float expected [ 20 ] =
{
2017-05-04 12:06:00 +02:00
7.81391382e+00 f , 2.25605774e+00 f , 5.94839954e+00 f , 4.97089481e+00 f , 2.89985824e+00 f , 3.59894633e+00 f ,
1.72657156e+00 f , 5.57353783e+00 f , 6.22063160e-01 f , 9.00000000e+00 f , 1.00000000e+01 f , 1.10000000e+01 f ,
1.20000000e+01 f , 1.30000000e+01 f , 1.40000000e+01 f , 1.50000000e+01 f , 1.60000000e+01 f , 1.70000000e+01 f ,
1.80000000e+01 f , 1.90000000e+01 f ,
2016-04-18 19:09:27 +02:00
} ;
static const float expected_aliased [ 20 ] =
{
2017-05-04 12:06:00 +02:00
4.54092499e+02 f , 2.12640405e+00 f , 5.57040071e+00 f , 1.53303785e+01 f , 2.27960873e+01 f , 4.36041260e+01 f ,
4.27384138e+00 f , 1.75772034e+02 f , 2.37672729e+02 f , 1.09000003e+00 f , 1.10000002e+00 f , 1.11000001e+00 f ,
1.12000000e+00 f , 1.13000000e+00 f , 1.13999999e+00 f , 1.14999998e+00 f , 1.15999997e+00 f , 1.16999996e+00 f ,
1.17999995e+00 f , 1.19000006e+00 f ,
2016-04-18 19:09:27 +02:00
} ;
2012-06-15 05:51:54 +02:00
for ( i = 0 ; i < 20 ; i + + )
{
2012-10-02 08:14:12 +02:00
a [ i ] = 1.0f + i / 100.0f ;
b [ i ] = 3.0f - i / 100.0f ;
c [ i ] = i ;
2012-06-15 05:51:54 +02:00
}
D3DXSHMultiply3 ( c , a , b ) ;
2012-06-23 17:11:25 +02:00
for ( i = 0 ; i < 20 ; i + + )
2017-05-04 12:06:00 +02:00
{
equal = compare_float ( c [ i ] , expected [ i ] , 4 ) ;
ok ( equal , " Expected[%u] = %.8e, received = %.8e. \n " , i , expected [ i ] , c [ i ] ) ;
}
memcpy ( c , a , sizeof ( c ) ) ;
2016-04-18 19:09:27 +02:00
D3DXSHMultiply3 ( c , c , b ) ;
for ( i = 0 ; i < 20 ; i + + )
2017-05-04 12:06:00 +02:00
{
equal = compare_float ( c [ i ] , expected_aliased [ i ] , 32 ) ;
ok ( equal , " Expected[%u] = %.8e, received = %.8e. \n " , i , expected_aliased [ i ] , c [ i ] ) ;
}
2012-06-15 05:51:54 +02:00
}
2012-10-02 08:10:17 +02:00
static void test_D3DXSHMultiply4 ( void )
{
2017-05-05 00:03:57 +02:00
float a [ 20 ] , b [ 20 ] , c [ 20 ] ;
2012-10-02 08:10:17 +02:00
unsigned int i ;
2017-05-05 00:03:57 +02:00
BOOL equal ;
/* D3DXSHMultiply4() only modifies the first 16 elements of the array. */
static const float expected [ ] =
{
/* c, a, b */
1.41825991e+01 f , 2.61570334e+00 f , 1.28286009e+01 f , 9.82059574e+00 f , 3.03969646e+00 f , 4.53044176e+00 f ,
5.82058382e+00 f , 1.22498465e+01 f , 2.19434643e+00 f , 3.90015244e+00 f , 5.41660881e+00 f , 5.60181284e+00 f ,
9.59981740e-01 f , 7.03754997e+00 f , 3.62523031e+00 f , 4.63601470e-01 f , 1.60000000e+01 f , 1.70000000e+01 f ,
1.80000000e+01 f , 1.90000000e+01 f ,
/* c, c, b */
- 2.11441266e+05 f , - 2.52915771e+03 f , - 1.00233936e+04 f , - 4.41277191e+02 f , - 1.63994385e+02 f , - 5.26305115e+02 f ,
2.96361875e+04 f , - 3.93183081e+03 f , - 1.35771113e+04 f , - 3.97897388e+03 f , - 1.03303418e+04 f , - 1.37797871e+04 f ,
- 1.66851094e+04 f , - 4.49813750e+04 f , - 7.32697422e+04 f , - 9.52373359e+04 f , 1.60000000e+01 f , 1.70000000e+01 f ,
1.80000000e+01 f , 1.90000000e+01 f ,
/* c, c, c */
2.36682415e-01 f , - 7.17648506e-01 f , - 1.80499524e-01 f , - 7.71235973e-02 f , 1.44830629e-01 f , 5.73285699e-01 f ,
- 3.37959230e-01 f , 5.56938872e-02 f , - 4.42100227e-01 f , 1.47701755e-01 f , - 5.51566519e-02 f , 8.43374059e-02 f ,
1.79876596e-01 f , 9.09878965e-03 f , 2.32199892e-01 f , 7.41420984e-02 f , 1.60000002e+00 f , 1.70000005e+00 f ,
1.80000007e+00 f , 1.89999998e+00 f ,
} ;
2012-10-02 08:10:17 +02:00
for ( i = 0 ; i < 20 ; i + + )
{
a [ i ] = 1.0f + i / 100.0f ;
b [ i ] = 3.0f - i / 100.0f ;
c [ i ] = i ;
}
D3DXSHMultiply4 ( c , a , b ) ;
for ( i = 0 ; i < 20 ; i + + )
2017-05-05 00:03:57 +02:00
{
equal = compare_float ( c [ i ] , expected [ i ] , 16 ) ;
ok ( equal , " Expected[%u] = %.8e, received = %.8e. \n " , i , expected [ i ] , c [ i ] ) ;
}
2012-10-02 08:10:17 +02:00
for ( i = 0 ; i < 20 ; i + + )
{
b [ i ] = 3.0f - i / 100.0f ;
c [ i ] = i ;
}
D3DXSHMultiply4 ( c , c , b ) ;
for ( i = 0 ; i < 20 ; i + + )
2017-05-05 00:03:57 +02:00
{
equal = compare_float ( c [ i ] , expected [ 20 + i ] , 32 ) ;
ok ( equal , " Expected[%u] = %.8e, received = %.8e. \n " , i , expected [ 20 + i ] , c [ i ] ) ;
}
2012-10-02 08:10:17 +02:00
for ( i = 0 ; i < 20 ; i + + )
c [ i ] = 0.1f * i ;
D3DXSHMultiply4 ( c , c , c ) ;
for ( i = 0 ; i < 20 ; i + + )
2017-05-05 00:03:57 +02:00
{
equal = compare_float ( c [ i ] , expected [ 40 + i ] , 8 ) ;
ok ( equal , " Expected[%u] = %.8e, received = %.8e. \n " , i , expected [ 40 + i ] , c [ i ] ) ;
}
2012-10-02 08:10:17 +02:00
}
2012-09-17 13:20:45 +02:00
static void test_D3DXSHRotate ( void )
{
2017-05-04 12:06:02 +02:00
float expected , in [ 49 ] , out [ 49 ] , * out_temp , * received_ptr ;
2012-11-12 02:23:57 +01:00
unsigned int i , j , l , order ;
2017-05-04 12:06:02 +02:00
D3DXMATRIX m [ 4 ] ;
BOOL equal ;
static const float table [ ] =
{
/* Rotation around the x-axis, π/2. */
1.00999999e+00 f , - 3.00999999e+00 f , 2.00999975e+00 f , 4.01000023e+00 f , - 8.01000023e+00 f , - 6.00999928e+00 f ,
- 1.13078899e+01 f , 5.00999975e+00 f , - 1.56583869e+00 f , 1.09359801e+00 f , - 1.10099983e+01 f , 1.98334141e+01 f ,
- 1.52681913e+01 f , - 1.90041180e+01 f , - 3.36488891e+00 f , - 9.56262684e+00 f , 1.20996542e+01 f , - 2.72131383e-01 f ,
3.02410126e+01 f , 2.69199905e+01 f , 3.92368774e+01 f , - 2.26324463e+01 f , 6.70738792e+00 f , - 1.17682819e+01 f ,
3.44367194e+00 f , - 6.07445812e+00 f , 1.16183939e+01 f , 1.52756083e+00 f , 3.78963356e+01 f , - 5.69012184e+01 f ,
4.74228935e+01 f , 5.03915329e+01 f , 1.06181908e+01 f , 2.55010109e+01 f , 4.92456071e-02 f , 1.69833069e+01 f ,
1.00999999e+00 f , - 3.00999999e+00 f , - 3.01000023e+00 f , 4.01000023e+00 f , - 8.01000023e+00 f , - 6.00999928e+00 f ,
- 1.13078890e+01 f , - 8.01000023e+00 f , 1.42979193e+01 f ,
/* Rotation around the x-axis, -π/2. */
1.00999999e+00 f , 3.00999999e+00 f , - 2.01000023e+00 f , 4.01000023e+00 f , 8.01000023e+00 f , - 6.01000118e+00 f ,
- 1.13078880e+01 f , - 5.01000071e+00 f , - 1.56583774e+00 f , - 1.09359753e+00 f , - 1.10100021e+01 f , - 1.98334103e+01 f ,
1.52681961e+01 f , - 1.90041142e+01 f , 3.36489248e+00 f , - 9.56262398e+00 f , - 1.20996523e+01 f , - 2.72129118e-01 f ,
- 3.02410049e+01 f , 2.69200020e+01 f , 3.92368736e+01 f , 2.26324520e+01 f , 6.70738268e+00 f , 1.17682877e+01 f ,
3.44367099e+00 f , 6.07445717e+00 f , 1.16183996e+01 f , - 1.52756333e+00 f , 3.78963509e+01 f , 5.69011993e+01 f ,
- 4.74229126e+01 f , 5.03915253e+01 f , - 1.06182041e+01 f , 2.55009995e+01 f , - 4.92481887e-02 f , 1.69833050e+01 f ,
1.00999999e+00 f , 3.00999999e+00 f , - 3.01000023e+00 f , 4.01000023e+00 f , 8.01000023e+00 f , - 6.01000118e+00 f ,
- 1.13078899e+01 f , - 8.01000023e+00 f , 1.42979193e+01 f ,
/* Yaw π/3, pitch π/4, roll π/5. */
1.00999999e+00 f , 4.94489908e+00 f , 1.44230127e+00 f , 1.62728095e+00 f , 2.19220325e-01 f , 1.05408239e+01 f ,
- 9.13690281e+00 f , 2.76374960e+00 f , - 7.30904531e+00 f , - 5.87572050e+00 f , 5.30312395e+00 f , - 8.68215370e+00 f ,
- 2.56833839e+01 f , 1.68027866e+00 f , - 1.88083878e+01 f , 7.65365601e+00 f , 1.69391327e+01 f , - 1.73280182e+01 f ,
1.46297951e+01 f , - 5.44671021e+01 f , - 1.22310352e+01 f , - 4.08985710e+00 f , - 9.44422245e+00 f , 3.05603528e+00 f ,
1.79257303e-01 f , - 1.00418749e+01 f , 2.30900917e+01 f , - 2.31887093e+01 f , 1.17270985e+01 f , - 6.51830902e+01 f ,
4.86715775e+01 f , - 1.50732088e+01 f , 3.87931709e+01 f , - 2.60395355e+01 f , 6.19276857e+00 f , - 1.76722469e+01 f ,
1.00999999e+00 f , 4.94489908e+00 f , - 8.91142070e-01 f , 4.60769463e+00 f , 2.19218358e-01 f , 1.07733250e+01 f ,
- 8.20476913e+00 f , 1.35638294e+01 f , - 1.20077667e+01 f ,
/* Rotation around the z-axis, π/6. */
1.00999999e+00 f , 3.74571109e+00 f , 3.00999999e+00 f , 2.46776199e+00 f , 1.03078890e+01 f , 9.20981312e+00 f ,
7.01000023e+00 f , 3.93186355e+00 f , 1.66212186e-01 f , 1.60099983e+01 f , 1.85040417e+01 f , 1.74059658e+01 f ,
1.30100002e+01 f , 6.12801647e+00 f , - 2.02994061e+00 f , - 1.00100012e+01 f , 1.31542921e+01 f , 2.40099964e+01 f ,
2.94322453e+01 f , 2.83341675e+01 f , 2.10100021e+01 f , 9.05622101e+00 f , - 4.95814323e+00 f , - 1.80100002e+01 f ,
- 2.72360935e+01 f , - 4.52033186e+00 f , 1.68145428e+01 f , 3.40099945e+01 f , 4.30924950e+01 f , 4.19944229e+01 f ,
3.10100002e+01 f , 1.27164707e+01 f , - 8.61839962e+00 f , - 2.80100021e+01 f , - 4.08963470e+01 f , - 4.41905708e+01 f ,
1.00999999e+00 f , 3.74571109e+00 f , 3.00999999e+00 f , 1.59990644e+00 f , 1.03078890e+01 f , 9.20981312e+00 f ,
7.01000023e+00 f , 2.33195710e+00 f , - 4.42189360e+00 f ,
} ;
2012-09-17 13:20:45 +02:00
D3DXMatrixRotationX ( & m [ 0 ] , - D3DX_PI / 2.0f ) ;
D3DXMatrixRotationX ( & m [ 1 ] , D3DX_PI / 2.0f ) ;
D3DXMatrixRotationYawPitchRoll ( & m [ 2 ] , D3DX_PI / 3.0f , D3DX_PI / 4.0f , D3DX_PI / 5.0f ) ;
D3DXMatrixRotationZ ( & m [ 3 ] , D3DX_PI / 6.0f ) ;
2012-11-12 02:23:57 +01:00
for ( l = 0 ; l < 2 ; l + + )
2012-09-17 13:20:45 +02:00
{
2012-11-12 02:23:57 +01:00
if ( l = = 0 )
out_temp = out ;
else
out_temp = in ;
2012-09-17 13:20:45 +02:00
2012-11-12 02:23:57 +01:00
for ( j = 0 ; j < 4 ; j + + )
{
for ( order = 0 ; order < = D3DXSH_MAXORDER ; order + + )
2012-09-17 13:20:45 +02:00
{
2012-11-12 02:23:57 +01:00
for ( i = 0 ; i < 49 ; i + + )
{
out [ i ] = ( i + 1.0f ) * ( i + 1.0f ) ;
in [ i ] = i + 1.01f ;
}
2012-09-17 13:20:45 +02:00
2012-11-12 02:23:57 +01:00
received_ptr = D3DXSHRotate ( out_temp , order , & m [ j ] , in ) ;
2017-05-04 12:06:02 +02:00
ok ( received_ptr = = out_temp , " Order %u, expected %p, received %p. \n " ,
order , out , received_ptr ) ;
2012-11-12 02:23:57 +01:00
for ( i = 0 ; i < 49 ; i + + )
{
if ( ( i > 0 ) & & ( ( i > = order * order ) | | ( order > D3DXSH_MAXORDER ) ) )
{
if ( l = = 0 )
expected = ( i + 1.0f ) * ( i + 1.0f ) ;
else
expected = i + 1.01f ;
}
else if ( ( l = = 0 ) | | ( order > 3 ) )
expected = table [ 45 * j + i ] ;
else
expected = table [ 45 * j + 36 + i ] ;
2017-05-04 12:06:02 +02:00
equal = compare_float ( out_temp [ i ] , expected , 4096 ) ;
ok ( equal , " Order %u index %u, expected %.8e, received %.8e. \n " ,
order , i , expected , out_temp [ i ] ) ;
2012-11-12 02:23:57 +01:00
}
2012-09-17 13:20:45 +02:00
}
}
}
}
2012-07-18 21:56:46 +02:00
static void test_D3DXSHRotateZ ( void )
{
2017-05-04 12:06:03 +02:00
float expected , in [ 49 ] , out [ 49 ] , * out_temp , * received_ptr ;
2012-10-31 05:37:10 +01:00
unsigned int end , i , j , l , order , square ;
2017-05-04 12:06:03 +02:00
BOOL equal ;
static const float angle [ ] = { D3DX_PI / 3.0f , - D3DX_PI / 3.0f , 4.0f * D3DX_PI / 3.0f } ;
static const float table [ ] =
{
/* Angle π/3. */
1.00999999e+00 f , 4.47776222e+00 f , 3.00999999e+00 f , 2.64288902e-01 f , 5.29788828e+00 f , 9.94186401e+00 f ,
7.01000023e+00 f , - 1.19981313e+00 f , - 8.84378910e+00 f , - 1.00100021e+01 f , 7.49403954e+00 f , 1.81380157e+01 f ,
1.30100002e+01 f , - 3.39596605e+00 f , - 1.70399418e+01 f , - 1.60099983e+01 f , - 3.01642971e+01 f , - 1.80100040e+01 f ,
1.04222422e+01 f , 2.90662193e+01 f , 2.10100002e+01 f , - 6.32417059e+00 f , - 2.79681454e+01 f , - 2.40099983e+01 f ,
2.22609901e+00 f , - 1.81805649e+01 f , - 4.38245506e+01 f , - 2.80100040e+01 f , 1.40824928e+01 f , 4.27264709e+01 f ,
3.10100002e+01 f , - 9.98442554e+00 f , - 4.16283989e+01 f , - 3.40099945e+01 f , 5.88635778e+00 f , 4.05303307e+01 f ,
1.00999999e+00 f , 4.47776222e+00 f , 0.00000000e+00 f , - 5.81678391e+00 f , 5.29788828e+00 f , 6.93686390e+00 f ,
0.00000000e+00 f , - 9.01125050e+00 f , - 2.29405236e+00 f , - 1.00100021e+01 f , 1.29990416e+01 f , 1.21330166e+01 f ,
0.00000000e+00 f , - 1.57612505e+01 f , - 5.62874842e+00 f , 0.00000000e+00 f , - 3.01642971e+01 f , - 3.29017075e-06 f ,
1.99272442e+01 f , 1.90612202e+01 f , 0.00000000e+00 f , - 2.47612514e+01 f , - 8.62874794e+00 f , 0.00000000e+00 f ,
- 1.30615301e+01 f , - 1.81805649e+01 f , - 3.03195534e+01 f , - 4.66050415e-06 f , 2.85874958e+01 f , 2.77214737e+01 f ,
0.00000000e+00 f , - 3.60112534e+01 f , - 1.23787460e+01 f , 0.00000000e+00 f , - 1.31287584e+01 f , - 2.36172504e+01 f ,
1.00999999e+00 f , 3.97776222e+00 f , 3.97776222e+00 f , 1.11419535e+00 f , 7.24579096e+00 f , 1.05597591e+01 f ,
1.05597591e+01 f , - 9.95159924e-01 f , - 4.67341393e-01 f , 4.67339337e-01 f , 1.27653713e+01 f , 1.85157013e+01 f ,
1.85157013e+01 f , - 1.79728663e+00 f , 4.93915796e-01 f , - 4.93915856e-01 f , - 2.14123421e+01 f , 2.14123383e+01 f ,
9.22107220e+00 f , 2.36717567e+01 f , 2.36717567e+01 f , 3.85019469e+00 f , - 2.04687271e+01 f , 2.04687233e+01 f ,
- 1.06621027e+01 f , - 3.65166283e+01 f , - 1.20612450e+01 f , 1.20612402e+01 f , 2.25568752e+01 f , 3.89999084e+01 f ,
3.89999084e+01 f , - 3.48751247e-02 f , - 1.04279022e+01 f , 1.04279003e+01 f , - 3.68382835e+01 f , - 2.76528034e+01 f ,
/* Angle -π/3. */
1.00999999e+00 f , - 2.46776247e+00 f , 3.00999999e+00 f , 3.74571109e+00 f , - 1.03078899e+01 f , - 3.93186426e+00 f ,
7.01000023e+00 f , 9.20981312e+00 f , - 1.66213632e-01 f , - 1.00099983e+01 f , - 1.85040436e+01 f , - 6.12801695e+00 f ,
1.30100002e+01 f , 1.74059658e+01 f , 2.02993774e+00 f , - 1.60100021e+01 f , 1.31543026e+01 f , - 1.80099964e+01 f ,
- 2.94322472e+01 f , - 9.05622101e+00 f , 2.10100002e+01 f , 2.83341694e+01 f , 4.95813942e+00 f , - 2.40100021e+01 f ,
- 2.72360916e+01 f , 4.41905823e+01 f , 1.68145580e+01 f , - 2.80099964e+01 f , - 4.30924988e+01 f , - 1.27164736e+01 f ,
3.10100002e+01 f , 4.19944229e+01 f , 8.61839294e+00 f , - 3.40100021e+01 f , - 4.08963470e+01 f , - 4.52030993e+00 f ,
1.00999999e+00 f , - 2.46776247e+00 f , 0.00000000e+00 f , - 3.20571756e+00 f , - 1.03078899e+01 f , - 6.93686390e+00 f ,
0.00000000e+00 f , - 9.01125050e+00 f , - 4.46344614e+00 f , - 1.00099983e+01 f , - 1.29990416e+01 f , - 1.21330166e+01 f ,
0.00000000e+00 f , - 1.57612505e+01 f , - 5.62874842e+00 f , 0.00000000e+00 f , 1.31543026e+01 f , 3.29017075e-06 f ,
- 1.99272442e+01 f , - 1.90612202e+01 f , 0.00000000e+00 f , - 2.47612514e+01 f , - 8.62874794e+00 f , 0.00000000e+00 f ,
- 5.69598293e+00 f , 4.41905823e+01 f , 3.03195534e+01 f , 4.66050415e-06 f , - 2.85874958e+01 f , - 2.77214737e+01 f ,
0.00000000e+00 f , - 3.60112534e+01 f , - 1.23787460e+01 f , 0.00000000e+00 f , - 1.31287584e+01 f , - 5.74052582e+01 f ,
1.00999999e+00 f , - 2.96776223e+00 f , - 2.96776223e+00 f , - 6.09195352e-01 f , - 7.49829102e+00 f , - 1.06860094e+01 f ,
- 1.06860094e+01 f , - 1.18367157e+01 f , 5.39078045e+00 f , - 5.39077854e+00 f , - 1.03036509e+01 f , - 1.72848415e+01 f ,
- 1.72848415e+01 f , - 1.75656433e+01 f , 4.11427259e+00 f , - 4.11427307e+00 f , 2.37164364e+01 f , - 2.37164326e+01 f ,
- 8.06902504e+00 f , - 2.30957317e+01 f , - 2.30957317e+01 f , - 1.85358467e+01 f , - 1.12711067e+01 f , 1.12711039e+01 f ,
- 2.07248449e+00 f , 3.01493301e+01 f , 1.52448931e+01 f , - 1.52448883e+01 f , - 2.09650497e+01 f , - 3.82039986e+01 f ,
- 3.82039986e+01 f , - 3.72582664e+01 f , 5.42667723e+00 f , - 5.42667913e+00 f , - 2.33967514e+01 f , - 9.90355873e+00 f ,
/* Angle 4π/3. */
1.00999999e+00 f , - 4.47776222e+00 f , 3.00999999e+00 f , - 2.64288664e-01 f , 5.29788685e+00 f , - 9.94186401e+00 f ,
7.01000023e+00 f , 1.19981360e+00 f , - 8.84378815e+00 f , 1.00100040e+01 f , 7.49403811e+00 f , - 1.81380157e+01 f ,
1.30100002e+01 f , 3.39596677e+00 f , - 1.70399399e+01 f , 1.60099964e+01 f , - 3.01642933e+01 f , 1.80100060e+01 f ,
1.04222393e+01 f , - 2.90662193e+01 f , 2.10100002e+01 f , 6.32417202e+00 f , - 2.79681435e+01 f , 2.40099926e+01 f ,
2.22610497e+00 f , 1.81805515e+01 f , - 4.38245430e+01 f , 2.80100079e+01 f , 1.40824890e+01 f , - 4.27264709e+01 f ,
3.10100002e+01 f , 9.98442745e+00 f , - 4.16283989e+01 f , 3.40099869e+01 f , 5.88636589e+00 f , - 4.05303268e+01 f ,
1.00999999e+00 f , - 4.47776222e+00 f , 0.00000000e+00 f , - 1.93892837e+00 f , 5.29788685e+00 f , - 6.93686390e+00 f ,
0.00000000e+00 f , - 3.00375080e+00 f , - 2.29405141e+00 f , 1.00100040e+01 f , 1.29990396e+01 f , - 1.21330166e+01 f ,
0.00000000e+00 f , - 5.25375128e+00 f , - 5.62874699e+00 f , - 5.68378528e-06 f , - 3.01642933e+01 f , 7.00829787e-06 f ,
1.99272423e+01 f , - 1.90612202e+01 f , 0.00000000e+00 f , - 8.25375271e+00 f , - 8.62874603e+00 f , - 4.09131496e-12 f ,
- 1.30615349e+01 f , 1.81805515e+01 f , - 3.03195534e+01 f , 9.92720470e-06 f , 2.85874920e+01 f , - 2.77214737e+01 f ,
0.00000000e+00 f , - 1.20037527e+01 f , - 1.23787422e+01 f , - 5.79531909e-12 f , - 1.31287651e+01 f , - 7.87240028e+00 f ,
1.00999999e+00 f , - 3.97776222e+00 f , - 3.97776222e+00 f , 2.86356640e+00 f , 6.37110424e+00 f , - 1.01224155e+01 f ,
- 1.01224155e+01 f , 1.05787458e+01 f , - 7.76929522e+00 f , - 7.76928997e+00 f , 1.68836861e+01 f , - 2.05748577e+01 f ,
- 2.05748577e+01 f , 2.49091301e+01 f , - 5.72616625e+00 f , - 5.72616386e+00 f , - 1.87962208e+01 f , - 1.87962112e+01 f ,
2.93253498e+01 f , - 3.37238922e+01 f , - 3.37238922e+01 f , 4.22584419e+01 f , - 4.85123205e+00 f , - 4.85122633e+00 f ,
- 2.53339314e+00 f , 3.24522591e+01 f , - 4.65456696e+01 f , - 4.65456543e+01 f , 5.18603249e+01 f , - 5.36516304e+01 f ,
- 5.36516304e+01 f , 7.17381744e+01 f , 4.44061565e+00 f , 4.44062901e+00 f , 2.58841743e+01 f , - 1.07481155e+01 f ,
} ;
2012-10-31 05:37:10 +01:00
for ( l = 0 ; l < 3 ; l + + )
{
if ( l = = 0 )
out_temp = out ;
else
out_temp = & in [ l - 1 ] ;
2012-07-18 21:56:46 +02:00
2012-10-31 05:37:10 +01:00
if ( l < 2 )
end = 49 ;
else
end = 48 ;
2012-07-18 21:56:46 +02:00
2012-10-31 05:37:10 +01:00
for ( j = 0 ; j < 3 ; j + + )
2012-07-18 21:56:46 +02:00
{
2012-10-31 05:37:10 +01:00
for ( order = 0 ; order < = D3DXSH_MAXORDER + 1 ; order + + )
{
for ( i = 0 ; i < 49 ; i + + )
{
out [ i ] = ( i + 1.0f ) * ( i + 1.0f ) ;
in [ i ] = i + 1.01f ;
}
2012-07-18 21:56:46 +02:00
2012-10-31 05:37:10 +01:00
received_ptr = D3DXSHRotateZ ( out_temp , order , angle [ j ] , in ) ;
ok ( received_ptr = = out_temp , " angle %f, order %u, expected %p, received %p \n " , angle [ j ] , order , out_temp , received_ptr ) ;
2012-07-18 21:56:46 +02:00
2012-10-31 05:37:10 +01:00
for ( i = 0 ; i < end ; i + + )
{
/* order = 0 or order = 1 behaves like order = D3DXSH_MINORDER */
square = ( order < = D3DXSH_MINORDER ) ? D3DXSH_MINORDER * D3DXSH_MINORDER : order * order ;
if ( i > = square | | ( ( order > = D3DXSH_MAXORDER ) & & ( i > = D3DXSH_MAXORDER * D3DXSH_MAXORDER ) ) )
if ( l > 0 )
expected = i + l + 0.01f ;
else
expected = ( i + 1.0f ) * ( i + 1.0f ) ;
else
expected = table [ 36 * ( l + 3 * j ) + i ] ;
2017-05-04 12:06:03 +02:00
equal = compare_float ( expected , out_temp [ i ] , 256 ) ;
ok ( equal | | ( fabs ( expected ) < 2.0e-5 f & & fabs ( out_temp [ i ] ) < 2.0e-5 f ) ,
" angle %.8e, order %u index %u, expected %.8e, received %.8e. \n " ,
angle [ j ] , order , i , expected , out_temp [ i ] ) ;
2012-10-31 05:37:10 +01:00
}
2012-07-18 21:56:46 +02:00
}
}
}
}
2012-06-29 08:57:44 +02:00
static void test_D3DXSHScale ( void )
{
2017-05-05 13:40:29 +02:00
float a [ 49 ] , b [ 49 ] , expected , * received_array ;
2012-06-29 08:57:44 +02:00
unsigned int i , order ;
2017-05-05 13:40:29 +02:00
BOOL equal ;
2012-06-29 08:57:44 +02:00
2012-10-02 08:11:10 +02:00
for ( i = 0 ; i < 49 ; i + + )
2012-06-29 08:57:44 +02:00
{
a [ i ] = i ;
b [ i ] = i ;
}
2012-10-02 08:11:10 +02:00
for ( order = 0 ; order < = D3DXSH_MAXORDER + 1 ; order + + )
2012-06-29 08:57:44 +02:00
{
received_array = D3DXSHScale ( b , order , a , 5.0f ) ;
2012-07-03 09:15:12 +02:00
ok ( received_array = = b , " Expected %p, received %p \n " , b , received_array ) ;
2012-06-29 08:57:44 +02:00
2012-10-02 08:11:10 +02:00
for ( i = 0 ; i < 49 ; i + + )
2012-06-29 08:57:44 +02:00
{
if ( i < order * order )
expected = 5.0f * a [ i ] ;
/* D3DXSHScale does not modify the elements of the array after the order * order-th element */
else
expected = a [ i ] ;
2017-05-05 13:40:29 +02:00
equal = compare_float ( b [ i ] , expected , 0 ) ;
ok ( equal , " order %u, element %u, expected %.8e, received %.8e. \n " , order , i , expected , b [ i ] ) ;
2012-06-29 08:57:44 +02:00
}
}
}
2008-03-21 11:04:46 +01:00
START_TEST ( math )
{
2009-07-11 18:08:31 +02:00
D3DXColorTest ( ) ;
D3DXFresnelTest ( ) ;
D3DXMatrixTest ( ) ;
D3DXPlaneTest ( ) ;
D3DXQuaternionTest ( ) ;
D3DXVector2Test ( ) ;
D3DXVector3Test ( ) ;
D3DXVector4Test ( ) ;
test_matrix_stack ( ) ;
2008-11-12 18:54:50 +01:00
test_Matrix_AffineTransformation2D ( ) ;
2008-09-11 20:11:53 +02:00
test_Matrix_Decompose ( ) ;
2008-11-12 19:16:30 +01:00
test_Matrix_Transformation2D ( ) ;
2008-03-21 11:04:46 +01:00
test_D3DXVec_Array ( ) ;
2011-06-29 17:16:29 +02:00
test_D3DXFloat_Array ( ) ;
2011-12-10 17:51:32 +01:00
test_D3DXSHAdd ( ) ;
2012-06-27 08:50:07 +02:00
test_D3DXSHDot ( ) ;
2013-03-04 11:55:50 +01:00
test_D3DXSHEvalConeLight ( ) ;
2012-07-15 10:18:50 +02:00
test_D3DXSHEvalDirection ( ) ;
2012-09-17 13:19:23 +02:00
test_D3DXSHEvalDirectionalLight ( ) ;
2013-04-01 01:37:34 +02:00
test_D3DXSHEvalHemisphereLight ( ) ;
2013-04-01 01:37:06 +02:00
test_D3DXSHEvalSphericalLight ( ) ;
2012-07-13 02:53:18 +02:00
test_D3DXSHMultiply2 ( ) ;
2012-06-15 05:51:54 +02:00
test_D3DXSHMultiply3 ( ) ;
2012-10-02 08:10:17 +02:00
test_D3DXSHMultiply4 ( ) ;
2012-09-17 13:20:45 +02:00
test_D3DXSHRotate ( ) ;
2012-07-18 21:56:46 +02:00
test_D3DXSHRotateZ ( ) ;
2012-06-29 08:57:44 +02:00
test_D3DXSHScale ( ) ;
2008-03-21 11:04:46 +01:00
}