Format des matrices [DirectX] - Programmation
Marsh Posté le 22-02-2002 à 19:55:23
passke avec une matrice 3*3 tu peux faire que des rotations (changement d'echelle en trichant), alors qu'avec une matrice 4*4 tu fais rotation+déplacements... 
 
et pour sauter de repère en repère, tu as juste à multiplier tes matrices 4*4 entre elles (on parle alors de pile de matrices, avec par exemple le repère d'une voiture, un repère par roue qui est relatif au repère voiture, un repère boulon relatif au repère roue etc... etc...) 
 
aussi avec une matrice 4*4, tu peux exprimer dedans la mise en perspective... 
 
je sais pas si ça peut t'aider: 
 
http://msdn.microsoft.com/library/ [...] d=28000410 
 
ça c'est po mal pour comprendre: 
 
http://www.iro.umontreal.ca/~dift3 [...] ion_x6.pdf 
 
http://www.doc.ic.ac.uk/~dfg/graph [...] ture04.pdf 
 
pour les éclairages celui là est po mal: 
 
http://www.doc.ic.ac.uk/~dfg/graph [...] ture09.pdf 
[jfdsdjhfuetppo]--Message édité par bjone--[/jfdsdjhfuetppo]
Marsh Posté le 22-02-2002 à 20:28:19
h c'est le coefficient homogene 
habituellement h est egal a 1 
sauf en cas de projection 
(x,y,z,1)*mat = point transforme (x',y',z',h' 
 
 
Lorsque h <> 1, alors pour obtenir 
les coordoonées reelles tu les divises 
toutes par h 
c'est comme ca que tu obtiens les coordonnees 
du point sur ton ecran apres avoir applique 
la matrice de projection. 
 
A+ 
LEGREG 
Marsh Posté le 22-02-2002 à 20:49:49
J'ai rien compris mais je crois que je suis un peu nul.   
  
 
C'est un peu de ma faute, j'ai laché les maths au moment des espaces vectoriels re  
 
 
J'ai une amie en license de maths qui a essayé de m'expliquer mais elle n'a pas compris non plus l'histoire de la matrice 4*4 (mais bon, c'est pas son truc la 3D). 
 
Je pense que le mieux pour moi serait de potasser les matrices puis de comprendre leur utilisation pour la 3D. 
 
Alors si vous avez des liens assez didactiques, je prends. 
 
PS: pensez-vous que je puisse être prêt pour début mai pour faire un stage dans une boite de gamedev car j'ai une proposition intéressante mais je n'aime pas raconter des salades aux gens et leur faire faux-bond au dernier moment 
Marsh Posté le 22-02-2002 à 22:00:22
nan tu peux comprendre la 3d sans passer par les matrices.
Marsh Posté le 22-02-2002 à 22:18:07
po compliqué, tu as: 
 
1) tu as des points dans l'espace 3d : x,y,z 
2) des primites (lignes,triangles,...) qui relient ces points 
3) tout ça c'est regroupé en objet indépendants (roue, fusil à pompe, tête de terroriste, ce que tu veux  )
) 
 
4) tes objets indépendants ont une position dans l'espace (x,y,z) et une orientation (qui peux être exprimée sous 3 angles) 
c'est là qu'interviennent les matrices, tu peux avoir la position en x,y,z + l'orientation (en matrice 3*3), ou les 2 regroupés par une matrice 4*4. 
 
5) la caméra (le point de vue), qui observe tes objets, a elle-même une position et une orientation. 
on va dire l'horizontal de l'écran ça correspond au x du repère de la caméra, la verticale le y, et la profondeur du tube, le z (sens positif) 
 
la caméra possède aussi un champ de vision (en largeur, et en hauteur), une limite de profondeur maximale, et une limite minimale (qui pourrait être assimillée à la limite de la focale d'un appareil photo ou ça devient flou) 
 
tu dois donc considérer: 
1) un repère par objet 
2) un repère pour ta caméra 
3) des informations sur la "vision" de la caméra 
 
la perspective, le passage de la 3d à la 2d de l'écran est simple: 
tes coordonnés des points, x et y sont à diviser par z la profondeur du point. 
ceci, sous entendu dans le "repère" de la caméra. 
c'est po compliqué à s'imaginer, pour un point donné, plus le point va s'éloigner de la caméra, plus le z va grandir, et plus le point (2d) va se rapprocher du centre de l'écran donnant ensuite l'effet de perspective. 
 
il faut donc "ramener" tes points dans le repère de la camèra, ensuite tu peux diviser le x et le y (3d) par le z (3d), ceci te donnera le x et le y (2d) de l'écran. 
cette "division" est contrôllée par ton champ de vision etc etc... 
 
une fois que tu as transformé tout tes points 3d vers la 2d de l'écran, tu peux commencer à traçer tes triangles qui relient les points... 
[jfdsdjhfuetppo]--Message édité par bjone--[/jfdsdjhfuetppo]
Marsh Posté le 22-02-2002 à 23:22:49
| bjone a écrit a écrit  : po compliqué, tu as: 1) tu as des points dans l'espace 3d : x,y,z 2) des primites (lignes,triangles,...) qui relient ces points 3) tout ça c'est regroupé en objet indépendants (roue, fusil à pompe, tête de terroriste, ce que tu veux  ) 4) tes objets indépendants ont une position dans l'espace (x,y,z) et une orientation (qui peux être exprimée sous 3 angles) c'est là qu'interviennent les matrices, tu peux avoir la position en x,y,z + l'orientation (en matrice 3*3), ou les 2 regroupés par une matrice 4*4. 5) la caméra (le point de vue), qui observe tes objets, a elle-même une position et une orientation. on va dire l'horizontal de l'écran ça correspond au x du repère de la caméra, la verticale le y, et la profondeur du tube, le z (sens positif) la caméra possède aussi un champ de vision (en largeur, et en hauteur), une limite de profondeur maximale, et une limite minimale (qui pourrait être assimillée à la limite de la focale d'un appareil photo ou ça devient flou) tu dois donc considérer: 1) un repère par objet 2) un repère pour ta caméra 3) des informations sur la "vision" de la caméra la perspective, le passage de la 3d à la 2d de l'écran est simple: tes coordonnés des points, x et y sont à diviser par z la profondeur du point. ceci, sous entendu dans le "repère" de la caméra. c'est po compliqué à s'imaginer, pour un point donné, plus le point va s'éloigner de la caméra, plus le z va grandir, et plus le point (2d) va se rapprocher du centre de l'écran donnant ensuite l'effet de perspective. il faut donc "ramener" tes points dans le repère de la camèra, ensuite tu peux diviser le x et le y (3d) par le z (3d), ceci te donnera le x et le y (2d) de l'écran. cette "division" est contrôllée par ton champ de vision etc etc... une fois que tu as transformé tout tes points 3d vers la 2d de l'écran, tu peux commencer à traçer tes triangles qui relient les points... | 
 
 
c'est déjà plus clair comme ça 
 
sinon, pourrais-tu un peu plus détailler comment est représentée l'orientation de l'objet? 
Marsh Posté le 22-02-2002 à 23:29:00
Dans sa présentation l'orientation est définie par une matrice de rotation 3x3 qui est un morceau de la matrice 4x4. 
 
Si ton amie en license de math n'a jamais vu ce modèle de représentation, c'est parce qu'il est propre à l'infographie (ou à la géométrie projective appliquée en info). 
Ce n'est pas une representation "courante" dans les maths telles qu'elles sont enseignées à la fac. 
Néanmoins si elle lit quelques articles dessus, elle devrait facilement s'y retrouver et pouvoir t'aider. 
Marsh Posté le 22-02-2002 à 23:41:04
existe-t-il des cours sur cette représentation? (sur internet ou des bouquins)
Marsh Posté le 23-02-2002 à 01:13:37
tu sais tu ne dois pas forcement 
"comprendre" pourquoi on utilise une matrice 4x4 
mais accepter cela comme un fait 
et eventuellement savoir comment est construit 
cette matrice. 
| Code : 
 | 
 
est une matrice de transformation standard 
regroupant: une rotation (decrite par les coefficients r) autour 
du point O. 
suivie d'une translation (decrite par les coefficients x,y,z) 
 
Les proprietes d'une matrice de rotation standard sont: 
r1.r2= r2.r3 = r3.r1 = 0 (les vecteurs colonnes sont orthogonaux) 
r1.r1= r2.r2 = r3.r3 = 1 (ils sont de norme 1) 
(r1^r2).r3 = 1 (la transformation est directe, la droite d'un 
objet reste sa droite sinon c'est une reflexion). 
 
en fait les vecteurs colonnes representent les coordonnees 
des vecteurs de ta base de depart une fois qu'ils ont subi 
la rotation. 
 
une matrice de projection inclurait 
des termes sur la derniere ligne 
(pour calculer le coefficient homogene) 
 
A+ 
LEGREG 
Marsh Posté le 23-02-2002 à 12:25:50
J'aimerais comprendre comment on applique la matrice 4*4 aux coordonnées d'un point. 
 
Oui, je sais, je fais chier mais comme j'y connais rien aux matrices, c'est pas évident. 
Marsh Posté le 23-02-2002 à 12:27:04
sinon, une autre question qui n'a aucun rapport : 
est-ce vrai que DirectDraw n'éxiste plus dans DX8.x? 
il faut tout faire en 3D maintenant? 
Marsh Posté le 23-02-2002 à 23:48:51
| titoine42 a écrit a écrit  : sinon, une autre question qui n'a aucun rapport : est-ce vrai que DirectDraw n'éxiste plus dans DX8.x? il faut tout faire en 3D maintenant? | 
 
Nope ca veut tout simplement dire 
que DirectDraw n'est pas remis a jour avec la version 8. 
Il n'y aura pas de DDraw 8 mais ca n'empeche 
pas d'utiliser la version 7. 
 
Pourquoi cela? 
Parce que c'est tres complique 
pour les developpeurs de drivers de maintenir 
et mettre a jour regulierement deux "codepaths" 
dont l'une est obsolete puisque tout ce qu'on 
peut faire avec DirectDraw peut etre fait 
avec DirectGraphics, et la seule raison pour 
laquelle elle existe encore c'est pour des 
raisons de compatibilite avec les jeux qui utilisent 
DirectDraw. 
 
Conclusion: quand tu commences un nouveau Jeu en 2D, 
on peut te conseiller d'utiliser DirectGraphics (version 8) 
sauf si tu vises des petites plateformes (qui n'ont pas 
de driver DirectX mis a jours ou d'acceleration 3D). 
Ou d'utiliser d'autres librairies specialisees 2D. 
(DirectX n'est pas une librairie pour "apprendre"  
mais pour "faire", ce qui explique qu'elle n'est peut etre 
pas etudiee pour des debutants qui ont 
besoin qu'on leur explique le moindre detail.) 
 
A+ 
LEGREG 
Marsh Posté le 22-02-2002 à 17:53:10
Je viens de trouver un tutoriel sympa sur Direct3D et les concepts de la 3D sur : http://prografix.free.fr/
Cependant, je ne comprends pas pourquoi il utilise des matrices 4x4 pour un monde en 3 dimensions?
ex:
typedef struct _D3DMATRIX{
D3DVALUE _11, _12, _13, _14;
D3DVALUE _21, _22, _23, _24;
D3DVALUE _31, _32, _33, _34;
D3DVALUE _41, _42, _43, _44;
} D3DMATRIX, *LPD3DMATRIX;
avec x, y, z et h
c'est quoi h?
[jfdsdjhfuetppo]--Message édité par titoine42--[/jfdsdjhfuetppo]