[direct3D 9] rotation d'un cube a la souris ?

rotation d'un cube a la souris ? [direct3D 9] - C++ - Programmation

Marsh Posté le 25-04-2007 à 14:29:13    

[Direct3D 9, Visual C++ win32, XP]
 
 
Hello a tous,
 
une question qui à l'air de rien mais qui me prend la tête un moment...bon ok, je débute avec direct3d :
 
J'ai un cube que je peux faire tourner avec la souris avec le code du style :
 

Code :
  1. D3DXMATRIX matWorld;
  2. D3DXMatrixRotationX(&matRotX, rotateX);
  3. D3DXMatrixRotationY(&matRotY, rotateY);
  4. D3DXMatrixRotationZ(&matRotZ, rotateZ);
  5. matWorld=matRotX*matRotY*matRotZ;
  6. g_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);


 
où rotateX,Y,Z  varient en fonction de la souris.
 
et  
 

Code :
  1. // Positionement de la caméra
  2. D3DXVECTOR3 vEyePt    = D3DXVECTOR3(0.0f, 0.0f, -0.1f);
  3. D3DXVECTOR3 vLookatPt = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
  4. D3DXVECTOR3 vUpVec    = D3DXVECTOR3(0.0f, 1.0f, 0.0f);
  5. D3DXMATRIX matView;
  6. D3DXMatrixLookAtLH(&matView, &vEyePt, &vLookatPt, &vUpVec);
  7. g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);


 
definit la vue de la caméra ( qui ne bouge pas ).
 
 
Bon, ceci fait bien tourner le cube, mais le problème est que ça fait aussi tourner les axes...
 
donc au début : si je tourne le cube avec un mouvement de souris de haut en bas, il tourne bien de haut en bas, mais ensuite, si je le fais tourner horizontalement, le mouvement de souris du haut vers le bas ne le fait plus tourner de haut en bas mais de droite à gauche !
 
comment faire pour que je puisse regarder au dessus du cube (par exemple) en faisant bouger la souris de haut en bas, quelque soit la position du cube ?
il faut jouer avec la vue ?
 
y'a t'il des exemples de code quelque part ?
 
 
Merci.

Reply

Marsh Posté le 25-04-2007 à 14:29:13   

Reply

Marsh Posté le 26-04-2007 à 17:02:33    

Salut.
Je ne fais pas de direct3D mais en openGL, je sauvegarderais la matrice de visualisation courante (pushMatrix) je chargerais la matrice qui permet la rotation (matWorld pour toi), je dessinerais le cube et ensuite je récupererais l'ancienne matrice (popMatrix).
Je dis pas que c'est la meilleure solution, ni que ça fonctionne pareil avec direct3D mais tu peux chercher dans cette direction...


---------------
deluser --remove-home ptitchep
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed