[C++ / DirectX8.0] questions diverses

questions diverses [C++ / DirectX8.0] - Programmation

Marsh Posté le 19-11-2001 à 16:00:42    

là, je débute sur DirectX, comme tout débutant, g donc 2 ou 3 questions... surement balourdes, évidement, je suis débutant !
 
- Quand on fait un SetTransform sur le device, c quoi les 3 matrices sur lesquelle c applicable, qqn peut m'expliquer ce qu'est View, World, et Projection ?
 
- G lu un tutoriel dans lequel on m'explique que pour faire une transformation, il faut que j'applique une nouvelle matrice pour la matrice world... mais, dans ce cas, ma transformation va s'appliquer à tout ce que j'ai dessiné. Comment je fais alors pour faire tourner seulement un triangle autour d'un cube par exemple ?

Reply

Marsh Posté le 19-11-2001 à 16:00:42   

Reply

Marsh Posté le 19-11-2001 à 16:09:48    

Ah merde et moi je m'y suis toujours pas mis :D

Reply

Marsh Posté le 19-11-2001 à 16:11:44    

ha... attention, je prend de l'avance...
G planifié là; logiquement, dans 1 an ou 2, je bosse chez infogramme, histoire de me faire une réputation, et hop, la Silicon Valley ! :D

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

Reply

Marsh Posté le 19-11-2001 à 16:14:52    

dans l'espace, chaque objet à sa propre matrice qui permet d'exprimer ses coordonnées dans le repère world. dans une scène typique, tu as une matrice world par objet, une matrice view + une matrice proj par caméra.
 
world transforme l'objet de son repère local vers le repère world, view transforme le repère world vers le repère caméra, proj transforme le repère caméra en coordonnées écran.
 
pour faire tourner un triangle autour d'un cube, tu leurs mets une matrice world chacun, tu hiérarchises le triangle au cube, et tu lui assigne une matrice de rotation autour de, par ex, n'importe quel axe. il faut également excentrer ton triangle, comme un pivot sous 3dsmax.
 
puis il faut calculer la hiérarchie, à savoir que chaque matrice world de chaque objet est le résultat de la multiplication de ses parents par elle-même.
 
ha, et lis la doc de dx. regarde comment ça marche sous max. cherche '3d transformations' sous google. etc.

Reply

Marsh Posté le 20-11-2001 à 09:04:23    

Mais, justement, comment je fais pour attribuer une matrice world à un "objet" (style, à un triangle) ? Dans ce tutoriel que g lu, on me dis: pour faire une rotation, dessines ce que tu veux, et puis fait ça:
D3DXMatrixIdentity(&mTransfo);  
D3DXMatrixIdentity(&mTemporaire);  
 
D3DXMatrixTranslation(&mTemporaire,5,0,0);  
D3DXMatrixMultiply(&mTransfo,&mTransfo,&mTemporaire);  
 
Device->SetTransform(D3DTS_WORLD, (D3DMATRIX *)&mTransfo);  
 
Ok, mais selon ça, y a qu'une seule matrice D3DTS_WORLD pour toute ma fenêtre D3D....  
Comment j'fais pour bosse sur une plus petite D3DTS_WORLD, et pour en associer une à un "objet" ?

Reply

Marsh Posté le 20-11-2001 à 09:05:39    

ben tu change en cours de route
 
 
pour chaque objet
 
->setTransform(....)
->drawPrimitive(...)
 
fin pour

Reply

Marsh Posté le 20-11-2001 à 09:34:52    

El_Gringo a écrit a écrit :

Mais, justement, comment je fais pour attribuer une matrice world à un "objet" (style, à un triangle) ? Dans ce tutoriel que g lu, on me dis: pour faire une rotation, dessines ce que tu veux, et puis fait ça:
D3DXMatrixIdentity(&mTransfo);  
D3DXMatrixIdentity(&mTemporaire);  
 
D3DXMatrixTranslation(&mTemporaire,5,0,0);  
D3DXMatrixMultiply(&mTransfo,&mTransfo,&mTemporaire);
Device->SetTransform(D3DTS_WORLD, (D3DMATRIX *)&mTransfo);  
 
Ok, mais selon ça, y a qu'une seule matrice D3DTS_WORLD pour toute ma fenêtre D3D....  
Comment j'fais pour bosse sur une plus petite D3DTS_WORLD, et pour en associer une à un "objet" ?  




vous pourriez me donner des infos sur ces methodes...
la multiplication des matrices est faite par le chip Video ?
c'est rapide ? Y a-t-il moyen de faire d'autres operations ?
quelle est la taille des matrices ?

Reply

Marsh Posté le 20-11-2001 à 09:37:25    

ouais, mais y faut que je fasse un setTransform de la matrice World... qui est pas associée à un objet, mais à l'ensemble de mes objets, du coup, si je fais un settransform dessus, c tous mes objets qui vont subir la transfomation...

Reply

Marsh Posté le 20-11-2001 à 09:39:06    

BENB a écrit a écrit :

 
vous pourriez me donner des infos sur ces methodes...
la multiplication des matrices est faite par le chip Video ?
c'est rapide ? Y a-t-il moyen de faire d'autres operations ?
quelle est la taille des matrices ?  




 
j'crois que les mtrices sont en 4*4, mais Chrisbk est plus apte que moi à répondre ! et pour l'instant, il s'occupe de moi !:D
J'en ai trop besoin en ce qui concerne DirectX...

Reply

Marsh Posté le 20-11-2001 à 09:39:36    

heuh non, ca modifiera que les tri que tu affichera avec les drawprimitive ulterieure

Reply

Marsh Posté le 20-11-2001 à 09:39:36   

Reply

Marsh Posté le 20-11-2001 à 09:39:49    

comment je fais, si g un triangle, et un carré, pour faire une translation du triangle uniquement ?
et après être sorti de ma boucle de traitement de mes objets, je remet ma matrice world à la valeur ... de départ. ok !
donc en fait, j'ai intéret à créer une classe Figure avec un membre m_d3dMatrixWorld qui est la matrice world de ma figure, non !?

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

Reply

Marsh Posté le 20-11-2001 à 09:42:49    

BENB a écrit a écrit :

 
vous pourriez me donner des infos sur ces methodes...
la multiplication des matrices est faite par le chip Video ?
c'est rapide ? Y a-t-il moyen de faire d'autres operations ?
quelle est la taille des matrices ?  




 
voui avec les TnL on peut esperer que c elle qui se charge de la multiplication de matrice ( qui est 4x4 )
niveau vitesse, la transformation des vtx se fait vite, mais tu n'as pas acces au resultat de l'operation (de toute maniere, il faut eviter au maximum de lire ce qui se trouve dans le mem video )
 
Qu'entends tu par autre operations ? Depuis la gf3 il y a les vertex shader qui te laisse une marge de manoeuvre assez appreciable

Reply

Marsh Posté le 20-11-2001 à 09:44:18    

El_Gringo a écrit a écrit :

 
 
j'crois que les mtrices sont en 4*4, mais Chrisbk est plus apte que moi à répondre ! et pour l'instant, il s'occupe de moi !:D
J'en ai trop besoin en ce qui concerne DirectX...  




Je cherche surtout a savoir si le peux esperer faire des maths avec ca... 4x4 c'est un peu court... mais a voir quand meme...
 
OK, Je te laisse Chrisbk, je n'utiliserais pas mes attrais naturels :D

Reply

Marsh Posté le 20-11-2001 à 09:46:57    

El_Gringo a écrit a écrit :

 
donc en fait, j'ai intéret à créer une classe Figure avec un membre m_d3dMatrixWorld qui est la matrice world de ma figure, non !?  




 
ouais c pas mal ca . en fait t'occupe pas de remettre la matrice world a la fin du traitement, si chacune des tes figures ont leur matrice t'as juste a faire genre :
 
figure:: draw()
{
->setTransform()
->drawPrimitive()
}
 
ceci faisant que ce qu'il y avait dans la matrice world de directx, ben tu t'en fous

 

[edtdd]--Message édité par chrisbk--[/edtdd]

Reply

Marsh Posté le 20-11-2001 à 09:48:32    

BENB a écrit a écrit :

 
 
OK, Je te laisse Chrisbk, je n'utiliserais pas mes attrais naturels :D  




 
nan comme c trop pas juste :(
 
 
:D
bref a priori si tu veux te servir de la carte comme CPU annexe pour les maths,laisse tomber, vu que tu n'as pas acces au resultat ca perd bpc de son interet....

 

[edtdd]--Message édité par chrisbk--[/edtdd]

Reply

Marsh Posté le 20-11-2001 à 09:48:37    

ok.
Mais en fait, cette fameuse matrice world, c l'équivalent du repère, non !? ça fait un peu bricolage tous des changement de repères...

Reply

Marsh Posté le 20-11-2001 à 09:50:18    

BENB a écrit a écrit :

 
Je cherche surtout a savoir si le peux esperer faire des maths avec ca... 4x4 c'est un peu court... mais a voir quand meme...
 
OK, Je te laisse Chrisbk, je n'utiliserais pas mes attrais naturels :D  




 
ça serai injuste...
 
attrais dont on ne connais rien d'ailleur, c'est quand que tu postes un topic de commentaires sur ta photo ?:D

Reply

Marsh Posté le 20-11-2001 à 09:50:25    

El_Gringo a écrit a écrit :

ok.
Mais en fait, cette fameuse matrice world, c l'équivalent du repère, non !? ça fait un peu bricolage tous des changement de repères...  




 
bah pas tant que ca
 
tu passe de object->world->camera->screen
 
chaque matrice te permet de passer d'un repere a l'autre
object->world : world
world->camera : view
camera->screen : projection

Reply

Marsh Posté le 20-11-2001 à 09:53:11    

mouais... j'crois que g encore du boulot pour saisir ça... ça m'apparait pas clairement, j'aime pas ça !

Reply

Marsh Posté le 20-11-2001 à 09:56:08    

chrisbk a écrit a écrit :

 
 
ouais c pas mal ca . en fait t'occupe pas de remettre la matrice world a la fin du traitement, si chacune des tes figures ont leur matrice t'as juste a faire genre :
 
figure:: draw()
{
->setTransform()
->drawPrimitive()
}
 
ceci faisant que ce qu'il y avait dans la matrice world de directx, ben tu t'en fous  
 
 




 
ouais, mais quand je fais un SetTransform, je l'applique pourtant forcément à D3DTS_WORLD, qui est en fait LA matrice world du tout. c pas le membre de mon objet ça...

Reply

Marsh Posté le 20-11-2001 à 10:00:13    

world, world c vite dit :)
 
bon disons que world malgre son nom, te servira de matrice de transformation "locale" tandis que view sera "globale" (appliquee pareil a tous les objets)
 
 
donc si ton objet est anime, il ira trifouiller dans world, view restant l'apanage de ta camera
 
N'oublie pas que tu set une transformation pour les futurs appels a drawP, pas les precedents (encore heureux, soit dit en passant)
 
donc ton processus de rendu sera :
 
set matrice de projection
set matrice de view
 
pour chaque objet
set matrice world
(set texture)
drawprimitive
finpour
 
(C ou que ca te chiffones ?)

Reply

Marsh Posté le 20-11-2001 à 10:11:35    

chrisbk > dommage... parce que mes matrices elles prennent pas mal de CPU et tout est bon pour accelerer... ;)
 
El_Gringo > bon aller je vais chercher une photo... en cuir et tout et tout... avec les gants, le casque et la moto :D
 
Bon sinon tous ces chagment de reperes qui te semble complique te sinplifient la vie en fait. tu construit ton objet dans sont propre repere, puis tu le place dans le monde, imagine si tu devais le contruire dans le repere du monde... de plus quand tu le deplace les points qui le definissent sont calcules en fonction de sa position, il y a un arrondi donc il se deforme, on conservant la forme initiale, tu evite de cummuler les erreurs d'arrondis et donc de voir ta forme degenerer au cours du temps...
 
regarde le systeme solaire, tu essaye de decrire la rotation de la lune vue de jupiter comment ferais tu ?
le plus simple est bien de dire que la lune tourne autour de la terre que la terre tourne dans son repere et que ta camera tourne dans le meme repere que la terre, non ?

Reply

Marsh Posté le 20-11-2001 à 10:11:40    

non, dans ce que tu dis, y a rien que je comprenne réellement pas, c juste que je maitrise pas encore le truc... j'pense qui faut voir à l'essai pour saisir vraiement le truc. là je peux pas essayer, je verrai ce soir... Mais g toujours pensé que le meilleur moyen de comprendre, c le trifouillage, c tjs comme ça que je procède, jusqu'a maintenant, ça marche bien :D.
Même si c qd même important d'avoir des explications de tps en tps... merci chrisbk, et puis les autres aussi bien sur !

Reply

Marsh Posté le 20-11-2001 à 10:14:54    

BenB : bah t'as deja du le voir, mais au cas ou les sites d'intel / AMD propose des fonctions permettant la manipulation de matrice avec SSE/3dnow et tout le bataclan (par contre c'est des 4x4.....)
 
El : vi, la bidouille y'a rien de mieux et des fois tu tombes sur des resultats assez surprenant :)

Reply

Marsh Posté le 20-11-2001 à 10:17:10    

BENB a écrit a écrit :

chrisbk > dommage... parce que mes matrices elles prennent pas mal de CPU et tout est bon pour accelerer... ;)
 
El_Gringo > bon aller je vais chercher une photo... en cuir et tout et tout... avec les gants, le casque et la moto :D
 
Bon sinon tous ces chagment de reperes qui te semble complique te sinplifient la vie en fait. tu construit ton objet dans sont propre repere, puis tu le place dans le monde, imagine si tu devais le contruire dans le repere du monde... de plus quand tu le deplace les points qui le definissent sont calcules en fonction de sa position, il y a un arrondi donc il se deforme, on conservant la forme initiale, tu evite de cummuler les erreurs d'arrondis et donc de voir ta forme degenerer au cours du temps...
 
regarde le systeme solaire, tu essaye de decrire la rotation de la lune vue de jupiter comment ferais tu ?
le plus simple est bien de dire que la lune tourne autour de la terre que la terre tourne dans son repere et que ta camera tourne dans le meme repere que la terre, non ?  




 
ouais, c clair que c logique ce que tu dis... Mais qd même, ça me perturbe un peu.... manque d'habitude.  Mais ça viendra, avec un peu de soutien, ça ira encore mieux ! Et puis, avec la photo de toi en cuir, je serai capable de briser des montagnes, et d'abbatre des séquoia à coup de tête, alors, directX, pff, ça m'fait même pas peur !:D

Reply

Marsh Posté le 20-11-2001 à 10:19:07    

chrisbk > je n'y avais pas pense...
ce qui me plaisait c'etait de passer par DX ou OpenGL, donc une couche normalisee qui permet de faire abstraction du materiel...
sinon a une epoque il existait des cartes specialisees, mais mon boss ne veut meme pas en entendre parler, alors si je trouve qqchose qui se trouve "naturellement" sur un PC ca peut etre pas mal...

Reply

Marsh Posté le 20-11-2001 à 10:32:06    

BENB a écrit a écrit :

 
ce qui me plaisait c'etait de passer par DX ou OpenGL, donc une couche normalisee qui permet de faire abstraction du materiel...




 
ouep c sur...
Tu sais y'a pas mal de fois je serais bien content d'avoir un acces rapide a ce qui se trouve dans la RAM video....mais non . Avec le bins actuel mieux vaut faire un trait dessus.

Reply

Marsh Posté le 20-11-2001 à 10:34:55    

ça peut aider de 'renommer' les noms de matrice de dx. au lieu d'appeler tes variables matrice  
 
  world, view, proj
 
tu les appelles
 
  localToWorld, worldToView, viewToProj
 
c'est tout con et ça m'a bien fait comprendre l'idée du changement de repère.

Reply

Marsh Posté le 20-11-2001 à 10:41:16    

youdontcare a écrit a écrit :

ça peut aider de 'renommer' les noms de matrice de dx. au lieu d'appeler tes variables matrice  
 
  world, view, proj
 
tu les appelles
 
  localToWorld, worldToView, viewToProj
 
c'est tout con et ça m'a bien fait comprendre l'idée du changement de repère.  




 
ha ouais, ça m'plait ça !
et donc, t'as une matrice localToWorld par "objet graphique" c ça !?

Reply

Marsh Posté le 20-11-2001 à 10:49:15    

El_Gringo a écrit a écrit :

 
 
ha ouais, ça m'plait ça !
et donc, t'as une matrice localToWorld par "objet graphique" c ça !?  




 
precisement

Reply

Marsh Posté le 20-11-2001 à 10:49:55    

El_Gringo a écrit a écrit :

 
 
ha ouais, ça m'plait ça !
et donc, t'as une matrice localToWorld par "objet graphique" c ça !?  



voilà :) bon ça me frustre cette histoire car je ne sais pas comment répondre simplement ... tu as fait quoi en 3d jusqu'à présent ? le bon vieux programme sous dos en mode 13h qui affiche un objet 3d, ou un starfield, ou ... ? détaille un peu où tu en es voir ...

Reply

Marsh Posté le 20-11-2001 à 10:54:49    

El_Gringo a écrit a écrit :

 
 
ha ouais, ça m'plait ça !
et donc, t'as une matrice localToWorld par "objet graphique" c ça !?  




 
eh je veux pas foutre la merde
mais tu peux meme avoir une matrice differente par
sous-partie de ton objet
(structure hierarchique..)
 
En fait tu peux diviser ton monde en autant de sous-partie dependantes les unes des autres (la lune dependante de la terre qui depend du soleil qui depend du systeme solaire qui depend du cluster d'etoiles qui depend de la galaxie)
Pour rendre chaque sous partie, tu appliques les transformations. Ce qui permet de decrire d'abord chaque objet intrinsequement dans un repere qui lui est propre, sachant qu'il fait partie d'un groupe d'objet que tu decris lui-meme dans son repere propre.. etc.
 
A+
LEGREG

Reply

Marsh Posté le 20-11-2001 à 10:55:49    

...jusqu'a maintenant, en 3d... j'avais commencé openGl; j'ai affiché un cube ! :sol:  
Bah ouais, c tout !:D
autant dire que je suis débutant total... la, je suis en train de découvrir DirectX et la 3d en même temps en fait !
...je vais en chier !?

Reply

Marsh Posté le 20-11-2001 à 10:59:28    

en fait.....boaf je sais pas trop
 
le plus dur quand g commecner DX c t deja avoir une init qui marchait (init d3d7 c t quelque chose), mais avec le 8 c ok
 
maintenant si tu affiches deja qqchose (meme un pov triangle) c deja un bout de fait.... une fois que tu aura bien capter transformation / texture tu pourra rapidement avoir un truc qui ressemble a quelque chose
 
ce sera pas le fin du fin, mais suffisament motivant pour que tu persevere ;)

Reply

Marsh Posté le 20-11-2001 à 11:04:08    

El_Gringo a écrit a écrit :

...jusqu'a maintenant, en 3d... j'avais commencé openGl; j'ai affiché un cube ! :sol:  
Bah ouais, c tout !:D
autant dire que je suis débutant total... la, je suis en train de découvrir DirectX et la 3d en même temps en fait !
...je vais en chier !?



bien sûr, comme tout le monde :D
 
en plus je pense que gl est un mauvais point de départ car il n'y a que deux matrices, l'une identique à celle de dx pour la projection, l'autre étant le résultat de word * view. c'est chiant.
 
essaye de chopper un éditeur 3d comme 3d studio max, où tu peux vraiment voir ce qu'il se passe, créer des hiérarchies d'objet, voir les repères locaux, etc ... ensuite tu peux trifouiller avec la sdk de max.

Reply

Marsh Posté le 20-11-2001 à 11:11:28    

chrisbk a écrit a écrit :

en fait.....boaf je sais pas trop
 
le plus dur quand g commecner DX c t deja avoir une init qui marchait (init d3d7 c t quelque chose), mais avec le 8 c ok
 
maintenant si tu affiches deja qqchose (meme un pov triangle) c deja un bout de fait.... une fois que tu aura bien capter transformation / texture tu pourra rapidement avoir un truc qui ressemble a quelque chose
 
ce sera pas le fin du fin, mais suffisament motivant pour que tu persevere ;)  




 
Ouais, mon init, elle marche...
g pris un petit moment pour mettre en place DX avec Derrière, les MFC... ça ralenti beaucoup le truc d'ailleurs l'objet !? j'pense pas...

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

Reply

Marsh Posté le 20-11-2001 à 12:32:19    

Mais, ça y est, je vais arriver à expliquer ce que je n'comprend pas:
 
quand je fait ça:
 
pour chaque objet  
set matrice world  
drawprimitive  
finpour  
 
Set matrice world correspond à cette fonction:
 
Device->SetTransform(D3DTS_WORLD, (D3DMATRIX *)&mTransfo);  
mTransfo étant par exemple, le résultat d'une rotation d'un radiant, par rapport à la matrice identité...
Mais, ça, c'est dans le repère local de mon "objet graphique". comment on indique à DirectX sur quel objet on bosse !?

Reply

Marsh Posté le 20-11-2001 à 12:33:05    

faites ce que vs pouvez s'y vous plais... c clair que ma question est pas claire, c juste parce que c pas non plus très claire dans ma tête là :D

Reply

Marsh Posté le 20-11-2001 à 13:32:46    

Si je vois ce que tu veux dire mais je trouve pas les mots simple....
 
C'est juste un truc a chopper une fois que t'auras capter ca te semblera tout con....Attends, je me creuse :)
 
 
>Mais, ça, c'est dans le repère local de mon "objet graphique". comment on indique à DirectX sur quel objet on bosse !?
 
Y s'en fout direct3d . Il prends les matrice que tu lui file d'un cote, les vertex de l'autre et multiplie ceux ci par tes matrices.
point final :)
 
bordel j'arrive pas a expliquer mieux :)

Reply

Marsh Posté le 20-11-2001 à 14:46:26    

j'crois que g compris... en fait, la matrice world, c vraiement un truc temporaire, ce qui compte, c sa valeur au moment ou on fait le drawprimitive. En gros, elle sert juste à être le multiplicateur des matrices (qui décrivent les vertices) passées dans le drawprimitive...
g bon ou g rien compris !?

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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