DirectX 9: Probleme pour effectuer deux transformations en même temps (rota

Overwrite Messages postés 3 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 17 septembre 2003 - 17 sept. 2003 à 21:04
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 - 19 sept. 2003 à 16:57
Je veux effectuer une translation et une rotation en même temps sur un triangle tt bete mais ca fonctionne pas. DirectX n'execute que la rotation :

// Juste la fonction qui marche pas

float posx=0.0f;
float rot=0.0f;
VOID SetupMatrices()
{
D3DXMATRIXA16 matrice;

//---------------- Translation ----------------------------

D3DXMatrixTranslation(&matrice,0,0,posx);
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matrice);
posx+=0.1f;
//------------------------------------------------------------

//------------------- Rotation (y'a que ca qui marche) -----

D3DXMatrixRotationY(&matrice,D3DXToRadian(rot));
rot+=0.5f;
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matrice);
//------------------------------------------------------------

// Le reste c'est pour la camera.
D3DXVECTOR3 vEyePt(0.0f, 0.0f, -5.0f );
D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

D3DXMATRIXA16 matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}

Voili voilou, merci d'avance. Si je suis pas clair dites le moi surtout...
A voir également:

1 réponse

cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
19 sept. 2003 à 16:57
Bijourr!

Le problème c'est que seule la dernière transformation (la rotation) est prise en compte.
C'est comme si par exemple tu fais :
variable = 3 ;
variable = 4 ;

Pour que la matrice de transformation du monde fasse les deux tranformations il faut réunir en une seule les deux matrices.
Voilà un exemple :

D3DXMATRIX matWorld ;
D3DXMatrixIdentity ( & matWorld ) ;

D3DXMATRIX matRotation ;
D3DXMatrixRotationY(&matRotation, D3DXToRadian(rot)) ;

D3DXMatrixMultiply( & matWorld, & matWorld, & matRotation) ;

matWorld._41 = new_posx ;
matWorld._42 = new_posy ;
matWorld._43 = new_posz ;

Après tout ça tu peux faire le SetTransform ;
Il est très important de respecter l'ordre rotation puis transformation et de transformer tout à la fois.

A++

Chouchou182
0
Rejoignez-nous