Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2745 connectés 

  FORUM HardWare.fr
  Programmation

  [DirectX] Format des matrices

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[DirectX] Format des matrices

n°103734
Titoine42
Posté le 22-02-2002 à 17:53:10  profilanswer
 

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]

mood
Publicité
Posté le 22-02-2002 à 17:53:10  profilanswer
 

n°103754
bjone
Insert booze to continue
Posté le 22-02-2002 à 19:55:23  profilanswer
 

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]

n°103757
LeGreg
Posté le 22-02-2002 à 20:28:19  profilanswer
 

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

n°103758
bjone
Insert booze to continue
Posté le 22-02-2002 à 20:28:52  profilanswer
 

voila, j'arrivais pas à faire simple :D

n°103762
Titoine42
Posté le 22-02-2002 à 20:49:49  profilanswer
 

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

n°103771
bjone
Insert booze to continue
Posté le 22-02-2002 à 22:00:22  profilanswer
 

nan tu peux comprendre la 3d sans passer par les matrices.

n°103778
bjone
Insert booze to continue
Posté le 22-02-2002 à 22:18:07  profilanswer
 

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 :D)
 
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]

n°103797
Titoine42
Posté le 22-02-2002 à 23:22:49  profilanswer
 

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 :D)
 
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?

n°103800
Da True Cl​ouseau
It&#039;s good to be true
Posté le 22-02-2002 à 23:29:00  profilanswer
 

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.

n°103805
Titoine42
Posté le 22-02-2002 à 23:41:04  profilanswer
 

existe-t-il des cours sur cette représentation? (sur internet ou des bouquins)

mood
Publicité
Posté le 22-02-2002 à 23:41:04  profilanswer
 

n°103820
LeGreg
Posté le 23-02-2002 à 01:13:37  profilanswer
 

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 :
  1. r11 r12 r13 x
  2. r21 r22 r23 y
  3. r31 r32 r33 z
  4. 0   0   0   1


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

n°103882
Titoine42
Posté le 23-02-2002 à 12:25:50  profilanswer
 

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.

n°103883
Titoine42
Posté le 23-02-2002 à 12:27:04  profilanswer
 

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?

n°104113
LeGreg
Posté le 23-02-2002 à 23:48:51  profilanswer
 

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

n°104126
Titoine42
Posté le 24-02-2002 à 00:51:03  profilanswer
 

tu pourrais un peu développer sur DirectGraphics?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [DirectX] Format des matrices

 

Sujets relatifs
DirectX D3D ...[visual c++]comment afficher une image au format jpg
[PHP - MSSQL] : format des dates qui ne concordent pas ...Cherche programmeur DirectX pour DVP un petit soft audio sympa !
[C++] DirectX[DirectX] A propos des Index Buffers
[asm encore et toujours] pour des matrices... ca marche comment ??VC++ SDK DirectX 8.1 sous Windows XP --> merdouille !?
[C++ / DirectX 8] comment vs avez appris Direct3DDirectX SDK: cmt utiliser graphedit avec WDM pour une PCTV?
Plus de sujets relatifs à : [DirectX] Format des matrices


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR