Directx mesh face a la direction

Signaler
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
-
Messages postés
192
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
30 janvier 2008
-
Salut a tous.
Voila mon pb.
J'affiche la mesh et je lui donne une position ainsi qu'une direction.
Je voudrai orienter ma mesh vers la direction.

x,y,z =position
dirx,diry,dirz=direction
a,b,c=rotation(en degré)

Je crois que c'est pour les poids lourds des maths.
Merci a vous.

43 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Ben c'est simple tu crées une matrice de rotation que tu passes comme WorldMatrix au Device avant le rendu du mesh (y a des fonctions maths pour faire ca dans d3dx du genre dxmatrixrotationyawpitchroll etc)
Messages postés
192
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
30 janvier 2008

Déjà (dirx, diry, dirz) est superflu à partir du moment ou tu manipules des angles de rotation (a, b, c).
C'est plus simple que ce que tu ne crois. Tu calcules les matrices de rotation MatRot (avec a,b,c) et de translation MatTrans (x,y,z) grâce à DirectX. Puis tu les multiplies à la matrice World:
NewMat = MatTransl * MatRot * MatWorld;
Tu remplaces MatWorld par MatNew (SetTransform) le temps d'afficher ton mesh et voilou.

<endl>Un clavier Azerty en vaut deux

</endl>
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
Salut.
Je sais tourner l'objet.
La question est :
exemple:
si l'objet est a 0.0.0  et il regarde a 5.0.5 je le tourne de combiens?
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
(a=0 a 360)
D3DXMatrixRotationX( &matRotX,DEGTORAD(a) );
Me permet de le tourner, a ce niveau la pas de pb.
Mais il faut calculer en fonction de la position et du regard .
Messages postés
192
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
30 janvier 2008

La réponse est là: http://jeux.developpez.com/faq/matquat/?page=transformations#Q36

<endl>Un clavier Azerty en vaut deux

</endl>
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
Je crois que je me fais mal comprendre.
Je sais tourner l'objet.
Imaginon que l'objet et en position 0.0.0 (x,y,z) il regarde en (x1,y1,z1).
Donc je dois le tourner pour qu'il fasse face a la cible, pour cela il me faut un calcul en fonction de la position de l'object et du regard .
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Salut,


Tu connais D3DXMatrixLookAtLH ?


(Moi non plus j'ai pas compris !)
<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08
Messages postés
192
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
30 janvier 2008

Bien joué rt15, je ne me souvenais plus de cette fonction, pourtant tres utilisée pour manipuler la caméra. Dans la FAQ, j'aurais du t'orienter plutot sur ca: http://jeux.developpez.com/faq/matquat/?page=transformations#Q39

<endl>Un clavier Azerty en vaut deux

</endl>
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
J'ai plus de cheuveux lol.

D3DXMatrixLookAtLH  c'est pour la camera.
La je parle d'objet.
Je vai essayer de faire simple .
J'ai deux object un qui bouge et l'autre qui le regarde.
donc le 1er dois tourner pour faire toujour face au 2eme.
j'utilise:
D3DXMatrixRotationX( &matRotX,DEGTORAD(a) );
D3DXMatrixRotationY( &matRotX,DEGTORAD(b) );
D3DXMatrixRotationZ( &matRotX,DEGTORAD(c) );
Pour tourner l'objet.
ce que je cherche c'est un calcul pour le tourner en fonction du deplacement du 2eme.
Messages postés
192
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
30 janvier 2008

eh ben? la fonction donnée par rt15 donne ce que tu cherches (elle n'est pas spécifique à la caméra) puisqu'elle retourne la matrice de transformation (rotation) à appliquer à ton objet pour qu'il s'oriente selon ton vecteur directeur:
pOut = la matrice souhaitée
vEye = position de l'objet à tourner
pAt = vecteur directeur
pUp = [0, 1, 0] (vecteur Y car je suppose que le haut de ton monde est dirigé selon l'axe Y)

<endl>Un clavier Azerty en vaut deux

</endl>
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
Ah bon?je croyais que ce n'
etait que pour la camera.
Up je connais c'est pour "retourner le monde 3d"
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Toutes ces fonctions s'appliquent sur des matrices, après ce que tu fais des matrices ne regarde que toi...
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
D3DXMatrixLookAtLH ca marche pas ,l'objet tourne dans l'espace mais pas sur lui meme.
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
J'arrive pas je comprend rien.
Messages postés
192
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
30 janvier 2008

La il va falloir que tu nous montres un peu de code. Tu as peut etre mal utilisé tes matrices.

<endl>Un clavier Azerty en vaut deux

</endl>
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
Tu n'aurais pas une idee de code stp?
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
D3DXVECTOR3 eye(0,0,0); D3DXVECTOR3 at(0,0,0.01); D3DXVECTOR3 up(0,1,0);


D3DXMatrixLookAtLH(&matworld, &eye, &at,&up);
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matworld);

Ensuite je j'affiche le mesh.
Messages postés
192
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
30 janvier 2008

Moi je ferais:

D3DXMatrixLookAtLH(&matRot, &eye, &at,&up);
NewMat = matRot * matworld;
g_pd3dDevice->SetTransform( D3DTS_WORLD, &NewMat);

// Afficher le mesh

g_pd3dDevice->SetTransform( D3DTS_WORLD, &matworld);

// Afficher les autres mesh.

Si c'est pas ca, donne plus de détail.



<endl>

Un clavier Azerty en vaut deux




</endl>
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
Ca marche pas .
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
3
Quel detail veux tu?Tout es la,je voudrai tourner un mesh face un point dans l'espace (x,y,z).