2009-10-28 9 views
2

Est-ce que quelqu'un a une fonction qui renvoie la projection perspective d'une matrice 3x3 en C++?Fonction de projection en perspective d'une matrice en C++

Matrix Perspective() 
{ 
    Matrix m(0, 0, 0); // Creates identity matrix 
    // Perspective projection formulas here 
    return m; 
} 
+1

Quel est votre code pour Matrix? Cela ne me ressemble pas à une matrice d'identité. – rlbond

+2

Les projections en perspective agissent sur les vecteurs, pas sur les matrices. En tant que tel, je ne suis pas sûr de ce que vous demandez. –

+0

En outre, la projection en perspective nécessite des paramètres tels que FOV, Ratio d'aspect, distances d'observation proches et lointaines et renvoie nécessairement une matrice 4x4 homogénéisée. Donc, je suis encore plus confus au sujet de ce que vous voulez avec une matrice 3x3. – kidnamedlox

Répondre

0

Avec OpenCV 2.0 vous pouvez presque mettre en œuvre votre pseudo.

Il existe une classe Mat pour les matrices et perspectiveTransform pour la projection perspective. Et Mat::eye renvoie une matrice d'identité.

La documentation à laquelle j'ai lié est pour OpenCV 1.1 (qui est en C) mais il est assez simple de déduire l'utilisation correcte dans OpenCV 2.0 (avec la classe Mat) du manuel.

3

est ici celui qui retourne dans une matrice de 4x4, en utilisant la formule de l'OpenGL gluPerspective man page:

 
static void my_PerspectiveFOV(double fov, double aspect, double near, double far, double* mret) { 
    double D2R = M_PI/180.0; 
    double yScale = 1.0/tan(D2R * fov/2); 
    double xScale = yScale/aspect; 
    double nearmfar = near - far; 
    double m[] = { 
     xScale, 0, 0, 0, 
     0, yScale, 0, 0, 
     0, 0, (far + near)/nearmfar, -1, 
     0, 0, 2*far*near/nearmfar, 0 
    };  
    memcpy(mret, m, sizeof(double)*16); 
} 
Questions connexes