Ce document que j'ai ecrit quelque temps auparavent decrit comment une camera de moteur 3D peut etre representé par une matrice 3x3 et par 3 vecteur . Cette methode est utilisé par le moteur Crystal Space mais elle est assez general pour etre utilisé dans n'importe quel moteur . Ce document est le mail que j'ai envoyé une fois alors lisez comme si vous m'aviez posé des question auquel je repondrais Salut , je vais daboord essayer de vous donner la theorie afin quelle soit clair pour vous et je vais l'appliquer afin de repondre aux question si dessous . Une facon de voir la representation de matrice/vecteur d'une camera est de voir la matruce comme une fleche en 3 dimension qui pointe dans une direction (la direction que matte la camera) et le vecteur comme le point de depart de cette fleche . Mais que fait donc cette matrice . En fait elle fait une transformation linéaire de la 3D vers la 3D . Avec cette matrice 3x3 vous pouvez representer n'importe quel transformation lineaire 3D vers la 3D . La matrice que l'on utilise pour une camera est juste une matrice de transformation linéaire qui transforme les coordonnees d'une base vers une autre . Nous supposerons que toute chose dans le monde peut etre defini en utilisant des vecteur 3D a composante X,Y,Z .Alors un vertex est defini par 3 nombre : X , Y , Z. Ces 3 nombre ont un sens seulement si ils sont utilisé dans une base quelconque .Une base est defini par 3 axes . Alors notre MAtrice Camera transforme les Vecteur 3d du monde vers celle de la camera . Cela Signifie qu'un vertex ayant la position x,y,z dans le monde aura comme coordonnees x',y',z' dans la camera . La seule chose que nous voulons pour appliquer cette transformation est de rendre les chose plus facile dans le reste de notre moteur 3D parce apres avoir appliquer cette transformation nous pouvons programmer le reste de notre moteur 3D comme si tout les Vertex etaient representé dans la camera. En d'autre terme un vertex ayant les coordonnées (0,0,5) sera un vertex qui sera devant la camera a la distance 5 . Par contre un vertex ayant les coordonnées (1,3,-5) sera derrierre la camera et par consequent sera facilement eliminé . Le test Z < 0 est ainsi un test (facile :) ) pour voir si un vertex est visible ou non ? Mais comment cette transformation marche ? En fait c'est juste de l'algebre de matric . Par example si la matrice de la camera est representé par M et la position de la camera est representé par P alors nous pouvons ecrire l'equation qui transforme le monde vers la camera . On a : C = M * (W-P) W est un vecteur 3D qui decrit la position d'un vertex dans les coordonnées du monde . C est un vecteur 3d qui decrit la position du vertex dans les coordonnées de la camera. Mais que fait cette formule ? Tout d'abbord elle effectue une translation de la position du mond alors la camera est a (0,0,0) . Cela est fait avec (W-P) . Comme vous pouvez le voir un vertex qui doit etre dans le meme coordonnées du monde que celle de la camera devra etre translaté (?) vers (0,0,0) . Le resultat de ce calcul est un autre vecteur 3D . Ce vecteur est apres multiplié par la matrice M de la camera pour etre transforme en coordoné camera . Vous pouvez visualiser cela en considerant M comme une fleche qui pointe vers une direction et le vertex comme quelque chose relatif a cette fleche . En le transformant par M (en le multipliant ) nous bougeons cette fleche juqu'a ce qu'elle pointe vers la direction que nous voulons . Une matrice multiplié par un vecteur se fait comme cela est defini en dessous : / a b c \ / x \ / a*x + b*y + c*z \ | d e f | * | y | = | d*x + e*y + f*z | \ g h i / \ z / \ g*x + h*y + i*z / Alors par example si nous appliquons cette formul dans les condition initiale avec la camera qui pointe droit devant dans le monde la matrice camera est egale a : / 1 0 0 \ | 0 1 0 | \ 0 0 1 / et le vecteur est egale a : / 0 \ | 0 | \ 0 / La translation dun vertex dans les coordonnées monde vers les coordonnees camera na pas d'influence jusqu'a ce que la camera soit a l'origine du monde . Le resultat de la transformation de la formule precedente est donc : / 1 0 0 \ / x \ / 1*x + 0*y + 0*z \ | 0 1 0 | * | y | = | 0*x + 1*y + 0*z | \ 0 0 1 / \ z / \ 0*x + 0*y + 1*z / Alors comme vous pouvez le voir ,cela ne change pas le vertex comme ca aurait du le faire . Ceci est plus ou moins la theorie . Si vous avez des question specifique sur ceci n'hesiter pas a me les poser . Translation : Starman / Antichok email : codefr@planet-d.net WEB : http://codefr.planet-d.net