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

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Auteur Sujet :

Programassion Grafik : kréassion d'1 moteur 3D...

n°5849
sombresong​e
Posté le 18-10-2001 à 22:28:37  profilanswer
 

Reprise du message précédent :
Pour l'histoire de l'inverse d'une matrice je me suis trompé dans la formule la bonne étant:
 
A'=1/det(A)* t(Com(A))
 
où t(Com(A)) est la Transposée de la comatrice de A ;)

mood
Publicité
Posté le 18-10-2001 à 22:28:37  profilanswer
 

n°5894
koulip31
Posté le 19-10-2001 à 10:27:37  profilanswer
 

heu pour la translation d'un vecteur x,y,z
 
 
[1 0 0 tx]   [x]   [1x + 0x + 0x + xtx]
[0 1 0 ty]   [y]   [0y + 1y + 0y + yty]
[0 0 1 tz] * [z] = [0z + 0z + 1z + ztz]
[0 0 0 1 ]   [1]   [0  + 0  + 0  +  1 ]
 
demande confirmation si c'est juste car si oui  :bounce:  :bounce:  :bounce:

n°5895
Hercule
Posté le 19-10-2001 à 10:31:08  profilanswer
 

[1 0 0 tx]   [x]   [1x + 0x + 0x + tx]  [x+tx]  
[0 1 0 ty]   [y]   [0y + 1y + 0y + ty]  [y+ty]
[0 0 1 tz] * [z] = [0z + 0z + 1z + tz] =[z+tz]
[0 0 0 1 ]   [1]   [0  + 0  + 0  +  1 ] [1]
 
Juste une petite erreursur la dernière colonne

n°5901
koulip31
Posté le 19-10-2001 à 10:53:21  profilanswer
 

yep javais pas vue  
 
donc  :bounce:  :bounce:  :bounce:  :bounce:  :bounce:  
 
jai compris allez stap je code ma classe de rotations ...

n°5929
n0mad
inscrit au XXe siècle
Posté le 19-10-2001 à 16:15:07  profilanswer
 

Un ptit conseil : jetez un oeil à la doc microsoft DirectX 8, toutes ces transformations sont détaillées dans la library D3DX (avec les coord homogènes ou les quaternions). Je suis en train d'experimenter et c'est hyper simple à utiliser.
 
L'utilisation des quaternions est parait-il plus rapide que l'utilisation des matrice 4x4 : quelqu'un peut me confirmer ?


---------------
Pipiru piru piru pipiru pi
n°6224
Dav Vador
Posté le 22-10-2001 à 13:42:37  profilanswer
 

:hello:  à tous !
Désolé de ne pa avoir éT présen ce WE, mai je nai accè au Web keu la semaine...
Aparemment tu a résolu tes pbs Koulip...donc tou va bieng.
Je viens de mettre à jour le tuto 3 (sur les matrices...), il ne me reste plus ka rajouter kks sources et ce sera fini pour suila.

n°6230
Hercule
Posté le 22-10-2001 à 13:55:27  profilanswer
 

Pour l'inversion de matrice il le code sur un post sur le forum de filpcode:
 
http://www.flipcode.com/cgi-bin/ms [...] eory&id=-1
 
 
A la question est-ce que les quaternions sont plus rapides que les matrices 4X4, j'en suis pas sur (même si j'ai eu une bonne note durant mes cours sur les quaternions).
Je pense que c'est plus un effet de mode qu'autre chose.
 
http://www.gamedev.net/reference/p [...] /whyquats/

n°6233
koulip31
Posté le 22-10-2001 à 13:56:48  profilanswer
 

yep jai code ca ce week mais bon les resultats sont pas  
 
concluants jai calcule a la main la partice resultante (elle est bonne verifie plusieurs fois a la main)  
 
rotX * rotY * rotZ  
 
et la multiplie par mon point
 
point * matXRZ
 
donc ca me donne une fonction de ce type
 
matrice(point x,point y,point z,rot x, rot y, rot z)
 
le hic c'est ke ca me donne pas ce ke jai envie
 
point de depart: 1 0 0
rotation sur x de pi/2 : 0 0 0
rotation sur x de -pi/2 : -2 0 0
 
alors gllloouuuuupppsss :(
donc ce ke je me demande ya til un ordre a respecter pour calculer la matrice resultante ?  
 
moi jai fait rX * rY *rZ sur le net jai vue en vitesse un gus ki lui fesait dans cet ordre rY * rZ * rX  
voila mon pb rencontre ce week :p

n°6235
Hercule
Posté le 22-10-2001 à 14:11:31  profilanswer
 

Dans ton exemple si les rotations roty et rotz n'ont pas d'angle donc matrice identité.
Et regarde la tête de ta matrice rotX alors

n°6241
koulip31
Posté le 22-10-2001 à 14:23:40  profilanswer
 

si ya des angles :)  
 
http://www.gamedev.net/reference/a [...] le1279.asp
 
voila lurl ke jai utilise pour maider eux la font dans cet ordre
la matrice resulatante Y*Z*X ... apres jai essaye dans lordre X*Y*Z avec + de resutats mais pas cool non plus
 
la matriuce identité elle change rien ?  
 
x y z   1 0 0      
      * 0 1 0 = x y z  
        0 0 1

mood
Publicité
Posté le 22-10-2001 à 14:23:40  profilanswer
 

n°6244
Dav Vador
Posté le 22-10-2001 à 14:44:34  profilanswer
 

koulip31 a écrit a écrit :

yep jai code ca ce week mais bon les resultats sont pas  
 
concluants jai calcule a la main la partice resultante (elle est bonne verifie plusieurs fois a la main)  
 
rotX * rotY * rotZ  
 
et la multiplie par mon point
 
point * matXRZ
 
donc ca me donne une fonction de ce type
 
matrice(point x,point y,point z,rot x, rot y, rot z)
 
le hic c'est ke ca me donne pas ce ke jai envie
 
point de depart: 1 0 0
rotation sur x de pi/2 : 0 0 0
rotation sur x de -pi/2 : -2 0 0
 
alors gllloouuuuupppsss :(
donc ce ke je me demande ya til un ordre a respecter pour calculer la matrice resultante ?  
 
moi jai fait rX * rY *rZ sur le net jai vue en vitesse un gus ki lui fesait dans cet ordre rY * rZ * rX  
voila mon pb rencontre ce week :p  



1) pa "point * matXRZ" mais "matXRZ * point"
2) Il ya bien un ordre: à toi de voir ds quel ordre tu veux faire les rotations...

n°6245
koulip31
Posté le 22-10-2001 à 14:49:25  profilanswer
 

ha dav la tu touche un point :) vais esayer ce soir :D  
 
ben mes rot je men fout dans kel ordre du moment ke ca tourne :) ce ke je veux c'est la pos du point d'arrivée c'est tout :)

n°6246
koulip31
Posté le 22-10-2001 à 14:52:16  profilanswer
 

non ca vas pas dav!!!!!
 
M1 M2 M3   X Y Z   XMZ "boink booink"  
M4 M5 M6 *       =  
M7 M8 M9

n°6248
Dav Vador
Posté le 22-10-2001 à 14:56:52  profilanswer
 

koulip31 a écrit a écrit :

non ca vas pas dav!!!!!
 
M1 M2 M3   X Y Z   XMZ "boink booink"  
M4 M5 M6 *       =  
M7 M8 M9  




 M1  M2  M3  M4   X    X'  
 M5  M6  M7  M8 * Y  = Y'  
 M9 M10 M11 M12   Z    Z'
M13 M14 M15 M16   W    W'

n°6249
Hercule
Posté le 22-10-2001 à 14:59:08  profilanswer
 

Ton angle de rotation est sur les x donc le matrice y et z axis sont des matrices identité qui ne font rien.
Dans le tutorial je crois qu'ils se sont votrés (compare la matrice T3 qui est une rotation par rapport à l'axe de X et la matrice de rotation par rapport à x qui suit).
Dans une rotation autour de l'axe des x, la valeur de x ne doit pas changer logiquement.

n°6251
Dav Vador
Posté le 22-10-2001 à 15:03:47  profilanswer
 

hercule a écrit a écrit :

Dans une rotation autour de l'axe des x, la valeur de x ne doit pas changer logiquement.  



Exact.
 
Les rotations autour de Y et Z sont des matrices Identité car angle nul.

n°6260
koulip31
Posté le 22-10-2001 à 16:30:39  profilanswer
 

ce ke je fait moa:
 
c = cos  X,Y,Z = angle de rot
s = sin  x,y,z = point de depart
            x',y',z'= point d'arrivée
----------------
 
cY  0 sY   1 0  0     cX -sX 0   x   x'
0   1  0 * 0 cZ -sZ * sX cX  0 * y = y'
-sY 0 cY   0 sZ cZ    0  0   1   z   z'

 

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

n°6280
Hercule
Posté le 22-10-2001 à 20:00:39  profilanswer
 

quand tu fais une transformation c'est plutôt.
X Y Z *Rot
que
 
    [x]
Rot*[y]
    [z]
 
sinon tu doit tran^sposer les matrices de rotation je crois.
 
si je ne me suis pas trompé pour une rotation autour des x de -pi/2:
Tu as x y z -> x -z y (ce qui parait logique quand tu le fais mentalement.

n°6310
koulip31
Posté le 23-10-2001 à 10:29:41  profilanswer
 

Citation :

quand tu fais une transformation c'est plutôt.  
X Y Z *Rot  
que  
 
    [x]  
Rot*[y]  
    [z]  
 


 
javais essaye aussi X Y Z * rot resulata neant  :(  
 

Citation :


si je ne me suis pas trompé pour une rotation autour des x de -pi/2:  
Tu as x y z -> x -z y (ce qui parait logique quand tu le fais mentalement.


ben ouais mais jobtien pas ca du tout :( :( :(
 
je suis une merde  :cry:  :cry:  :cry: (ca doit etre un truc coon ki ofut tout en l'air)

n°6313
Hercule
Posté le 23-10-2001 à 10:51:12  profilanswer
 

Si avec ca ca marche pas:
http://www.the-last-dream.com/rot.jpg

n°6314
koulip31
Posté le 23-10-2001 à 11:05:04  profilanswer
 

ben oauis ca devrais faire ca mais ca le fait pas .... (chez moa) bon vais refaire tout etape par etape et vous tien au courant  :)

n°6315
koulip31
Posté le 23-10-2001 à 12:00:28  profilanswer
 

point x,y,z = 1,1,1
 
rot x d'angle pi = 1,-1,-1
rot y d'angle pi =-1, 1,-1
rot z d'angle pi =-1,-1, 1
 
rot x d'angle pi/2 = 1, 1,-1
rot y d'angle pi/2 =-1, 1,-1
rot z d'angle pi/2 = 1,-1, 1
 
voila mes derniers resultats ca ma lair nikel  :bounce:  :bounce:

n°6432
Dav Vador
Posté le 24-10-2001 à 13:51:46  profilanswer
 

Désolé de ne pa avoir pu passer hier, mai yavai grève à la fac à cause des gens du voyage...
Koulip>> T'as résolu tes pbs?

n°6435
koulip31
Posté le 24-10-2001 à 14:20:22  profilanswer
 

ben ouasi ca a lair ta vue ma derniere baterie de test  
ya que pour les rot de pi/2 ke je suis pas sur a  
100 % mais ca ma lair corect a 1er vue
encore 1000 merci a toi et hercule pour la pacience a mexpliquer tout ca :D maint vais utiliser ma classe matrice et vais mamuser a faire mes rot a la main en openGL :bounce: apres la detection de colision :hot: :hot:

n°6436
Dav Vador
Posté le 24-10-2001 à 14:55:48  profilanswer
 

Pour tes rotations, je ne vois pa vraimen ds kel sens tu les fais.
Moi, j'utilise les angles d'Eulers pour les matrices de rotation que G définies :
Rotation autour de X: sens positif = de Y vers Z
Rotation autour de Y: sens positif = de Z vers X
Rotation autour de Z: sens positif = de X vers Y
 
Avec ça, je ne trouve pa les mêmes résultats que toi, mai tes résultats sont peut-être juste dans le sens où ils font ce que tu veux.
 
Apparemment, toi tu fais :
Rotation autour de X: sens positif = de Z vers Y
et les autres, je ne sais pas.

 

[edtdd]--Message édité par Dav Vador--[/edtdd]

n°6440
koulip31
Posté le 24-10-2001 à 15:15:58  profilanswer
 

je tourne dans le sens inverse des aiguille d'une montre (sens trigo)  
ma rotation de pi/2 axe y est fausse  :(  
elles donne le meme res kune rot de pi  :non:  ca ca devrais etre
-1 1 1

n°6442
Dav Vador
Posté le 24-10-2001 à 15:24:19  profilanswer
 

koulip31 a écrit a écrit :

je tourne dans le sens inverse des aiguille d'une montre (sens trigo)  
ma rotation de pi/2 axe y est fausse  :(  
elles donne le meme res kune rot de pi  :non:  ca ca devrais etre
-1 1 1  




Ta rotation autour de Y: si sens >0 = de X vers Z
cos(a) 0 -sin(a)
     0 1      0
sin(a) 0  cos(a)
avec ça, tu as : -1,1,1

n°6444
koulip31
Posté le 24-10-2001 à 15:29:40  profilanswer
 

z = x * (sin(Y)) + y * (-(sin(X) * cos(Y))) + z * (cos(X) * cos(Y));
 
formule utilise X,Y,Z angles
x y z :coord point
 
ca c'est ma rot sur z donne a partir de  
 [x y z] * (matX * matY * matZ)

n°6446
koulip31
Posté le 24-10-2001 à 15:30:47  profilanswer
 

arrf jai mis le - sur l'autre sinus

n°6449
koulip31
Posté le 24-10-2001 à 15:35:24  profilanswer
 

c'est bon maint  :bounce:  :bounce:  :bounce:  :bounce:  mes res sont juste  
 
point x,y,z = 1,1,1  
 
rot x d'angle pi = 1,-1,-1  
rot y d'angle pi =-1, 1,-1  
rot z d'angle pi =-1,-1, 1  
 
rot x d'angle pi/2 = 1, 1,-1  
rot y d'angle pi/2 =-1, 1, 1   :hap:  
rot z d'angle pi/2 = 1,-1, 1  
 
ca auras ete dur  
c'est bon dav tu peux continuer ta tuto  :D  
en fait je crois kon aurais du faire un autre topic  
"pb creation dun moteur grafik" ca aurrais eviter de foutre le bordel comme je l'ais fait  :lol:  
mais bon grace a toi et hercule tout marche nikel et jai tout bien compris

n°6450
Dav Vador
Posté le 24-10-2001 à 15:40:41  profilanswer
 

Koulip>> Ya pa de souci. Si tu as eu des pbs, sa peu ariver o autres et donc sa fai partie du tuto.

n°6451
koulip31
Posté le 24-10-2001 à 15:54:08  profilanswer
 

:cry: c'est beau ce ke du tit dav  :cry:  
 
mais bon je mapercois la difference entre un moteur grafique / physique :)  
faire des effets c'est trop facile :)))) mais faire kke chose de phisique  :sweat:  mais bon je vais y arriver :)

n°6511
Dav Vador
Posté le 25-10-2001 à 12:22:17  profilanswer
 

koulip31 a écrit a écrit :

:cry: c'est beau ce ke du tit dav  :cry:  
 



Je sai  :lol:  
 
Bon je V pa pouvoir revenir avan 1 semain (vakansss !!) donc Gsaie de revenir avec 1 nouvo tuto à la rentrée...
A+

n°6513
koulip31
Posté le 25-10-2001 à 12:39:55  profilanswer
 

:hello: a dans une semaine  :hello:

n°8210
Dav Vador
Posté le 13-11-2001 à 15:10:53  profilanswer
 

Salut à tous,
Dézolé de ne pa avoir doné de signe de vie + to, mai en ce moman, G pa mal de boulo.
En +, sa fai une semaine keu je blok sur les source du tuto n°3.
Je devrai kan même réussir à me débloker biento et pouvoir le poster.
Gsaie de le faire ds la semaine...
A+

n°8296
koulip31
Posté le 14-11-2001 à 10:39:33  profilanswer
 

:bounce:  :bounce: dav is back  :bounce:  :bounce:

n°8896
Dav Vador
Posté le 19-11-2001 à 16:20:07  profilanswer
 

Tutorial n°3 Bis : 20/11/2001
 
 
III Bis) Translations, rotations, changements de repères : Explications des sources
 
 
 
 
 
On considèrera dans tout le programme que la caméra ne peut effectuer des rotations qu'autour des axes X et Y de son repère.
 
Soit R'' le repère  égal au repère R sauf que son centre est celui de la caméra.
 
On associe 4 points à la Caméra :
 
 - son centre : Centre_caméra (xr,yr,zr) dans R
 
 - le point vers lequel elle regarde et situé à une distance de 1 cm : At(zxr,zyr,zzr) dans R''
 
 - le point au dessus d'elle et situé à une distance de 1 cm : Up(yxr,yyr,yzr) dans R''
 
 - le point à sa droite et situé à une distance de 1 cm : Dr(xxr,xyr,xzr) dans R''
 
et 2 angles : Rot_x et Rot_y les angles autour des axes X et Y permettant de passer du
 
 repère R'' au repère Caméra (R';) par la matrice de passage M = Rx(-Rot_x).Ry(-Rot_y)
 
 
 
 
 
1) Affichage d'un polygone :
 
 
 
a) On Calcule les coordonnées de chacun des sommets dans le repère caméra (R';).
 
  Pour cela, on calcule la matrice M=Rx(-Rot_x).Ry(-Rot_y).T(-Centre_caméra)
 
    On obtient donc : Pr' = M.Pr pour tout point P
 
 
 
b) Projection des sommets sur l'écran (Repère E):
 
Soit f=50 cm la distance focale de la caméra.
 
On obtient P la matrice de projection de celle-ci.
 
Soit l la largeur=60 cm du plan de projection (écran) et h=80 cm sa hauteur.
 
Sachant que sa résolution est de rx=320 x ry=200 et que le centre du repère écran
 
est au centre de ce dernier, on obtient :
 
xe = (rx/2)*xp/(l/2) + (rx/2)
 
ye = (ry/2) - (ry/2)*yp/(l/2)
 
ze = zp
 
où xp, yp et zp sont les coordonnées obtenues par P.
 
D' où la matrice T = rx/l     0 0 rx/2
 
                        0 -ry/l 0 ry/2
 
                        0     0 1    0
 
                        0     0 0    1
 
On a donc Xe = T.P.Xv où X est le point à projeter.
 
 
 
c) Visibilite:
 
  On teste si le polygone est :
 
   - à droite du cône de projection:
 
 <=> z<50*x/40
 
 Si 1 des sommets du polygone est à droite, alors le polygone est non visible.
 
   - à gauche du cône de projection:
 
 <=> z<-50*x/40
 
 Si 1 des sommets du polygone est à gauche, alors le polygone est non visible.
 
   - au dessus du cône de projection:
 
 <=> z<50*y/30
 
 Si 1 des sommets du polygone est au dessus, alors le polygone est non visible.
 
   - en dessous du cône de projection:
 
 <=> z<-50*y/30
 
 Si 1 des sommets du polygone est en dessous, alors le polygone est non visible.
 
   - avant le cône de projection:
 
 <=> z<50
 
 Si 1 des sommets du polygone est avant, alors le polygone est non visible.
 
   - après le cône de projection:
 
 <=> z>500
 
 Si 1 des sommets du polygone est après, alors le polygone est non visible.
 
 
 
   Sinon le polygone est visible.
 
 
 
 
 
2) Mouvement de la caméra :
 
 
 
a) Rotation de la caméra autour de son axe X (respectivement Y) :
 
 
 
  Cela revient à trouver les angles Rot_x et Rot_y correspondants.
 
  On commence par effectuer la rotation des points At ,Up et Dr autour de X (respectivement Y)
 
dans le repère R''.
 
On calcule ensuite ces coordonnées dans le repère R'':
 
Xr'' = Ry(rot_y).Rx(rot_x).Xr'
 
où X est le point pour lequel on veut effectuer le changement de repère.
 
 
 
  Il nous faut maintenant trouver les nouveaux angles rot_x et rot_y.
 
En posant ca=cos(Rot_x), sa=sin(Rot_x)
 
       et cb=cos(Rot_y), sb=sin(Rot_y).
 
On a :
 
xr'' = cb*xr' + sb*(sa*yr'+ca*zr';)
 
yr'' = ca*yr' - sa*zr'
 
zr'' = -sb*xr' + cb*(sa*yr'+ ca*zr';)
 
 
 
Or pour At :
 
xar' = 0  
 
yar' = 0
 
zar' = 1
 
d'où xar''=sb*ca, yar''=-sa et zar''=cb*ca
 
 
 
et pour Up :
 
xur' = 0
 
yur' = 1  
 
zur' = 0
 
d'où xur''=sb*sa, yur''=ca, zur''=cb*sa
 
 
 
Donc Rot_x = arctan(sa/ca) = arctan(-yar''/yur'';)
 
  et Rot_y = arctan(sb/cb) = arctan(-xar''/zar'';) si ca <=> 0
 
                           = arctan(-xur''/zur'';) sinon
 
 
 
b) Déplacement de la caméra :
 
- en avant : on translate le centre du vecteur At(zxr,zyr,zzr).
 
- en arrière : on translate le centre du vecteur -At(-zxr,-zyr,-zzr).
 
- à droite : on translate le centre du vecteur Dr(xxr,xyr,xzr).
 
- à gauche : on translate le centre du vecteur -Dr(-xxr,-xyr,-xzr).
 
 
 
 
 
3) Les sources :
 
 
 
Remarque :
 
 Placer les sources dans le répertoire "sources",  
 
les objets (.3dd) dans le répertoire "objets" et les scènes (.cnd) dans le répertoire "scenes".
 
 
 
"3d_3.cpp"
 
"3d_3.h"
 
"graphique.cpp"
 
"graphique.h"
 
"souris.cpp"
 
"souris.h"
 
"infos_compilation.h (utilisé par graphique.h)"
 
"main.cpp"
 
 
 
"voiture.3dd (l'objet à afficher)"
 
"voiture.cnd (la scène à afficher)"
 
"chateau.3dd (l'objet à afficher)"
 
"jeu.cnd (la scène à afficher)"
 
 
 
"La feuille de projet pour Borland C++"
 
 
 
"L'exécutable"
 
 
 
 
 
Modifications mineures:
 
Pas mal de petites choses depuis la version précédente (Tutorial n°2):
 
- Changement de la structure des objets et de la scène.
 
- Sauvegarde et chargement de la scène et des objets à partir d'un fichier.
 
- L'objet chateau entièrement crée à la main (toute une soirée passée sur Wordpad...).
 
Pour l'instant, ça ne rend pas super puisque les polygones ne sont pas découpés lors du test de visibilité,  
 
mais c'est pour bientôt...

 

[edtdd]--Message édité par Dav Vador--[/edtdd]

n°8966
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 20-11-2001 à 11:04:07  profilanswer
 

Merci Dav Vador, c'est super intéréssant:love:!!!!!!!!!!!!!!!!!!


---------------
Just drink it!
n°8968
babibulga
Posté le 20-11-2001 à 11:26:03  profilanswer
 

:pt1cable:  toi aussi achete un casque de Dark Vador et fait des figures en 3D !!


---------------
"Quand rien ne va plus, faut faire caca ..." Rabelais XVième
n°8980
Dav Vador
Posté le 20-11-2001 à 13:13:59  profilanswer
 

fodger a écrit a écrit :

Merci Dav Vador, c'est super intéréssant:love:!!!!!!!!!!!!!!!!!!  



T'enballe pa kan même avec tes :love:... :lol:

n°8981
Dav Vador
Posté le 20-11-2001 à 13:17:52  profilanswer
 

Pour le prochain tuto, je me tate 1 peu:
découpage des polygones à la limite du cone de visibilité,
ou loder 3DS.
 
Je pense komancer par le loder parskeu jen ai besoin en ce moman en OpenGL, mai si G le tps, je ferai les 2.

 

[edtdd]--Message édité par Dav Vador--[/edtdd]

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3

Aller à :
Ajouter une réponse
 

Sujets relatifs
Plus de sujets relatifs à : Programassion Grafik : kréassion d'1 moteur 3D...


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