Функция для перспективного проецирования матрицы в C ++ - PullRequest
2 голосов
/ 28 октября 2009

Есть ли у кого-нибудь функция, которая возвращает перспективную проекцию матрицы 3х3 в C ++?

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

Ответы [ 2 ]

3 голосов
/ 25 мая 2012

Вот тот, который возвращает его в матрице 4x4, используя формулу из справочной страницы OpenGL gluPerspective :

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);
}
0 голосов
/ 28 октября 2009

С OpenCV 2.0 вы можете практически реализовать свой псевдокод.

Существует класс Mat для матриц и perspectiveTransform для перспективной проекции. И Mat::eye возвращает единичную матрицу.

Документация, на которую я ссылаюсь, предназначена для OpenCV 1.1 (которая находится в C), но из руководства очень просто вывести правильное использование в OpenCV 2.0 (с классом Mat).

...