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]