C++ 中矩阵的透视投影函数

发布于 2024-08-09 03:31:59 字数 197 浏览 5 评论 0原文

有没有人有一个函数可以在 C++ 中返回 3x3 矩阵的透视投影?

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

Does anyone have a function that returns the perspective projection of a 3x3 matrix in C++?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不寐倦长更 2024-08-16 03:31:59

这里使用 OpenGL gluPerspective 中的公式以 4x4 矩阵返回它手册页

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);
}

Here's one that returns it in a 4x4 matrix, using the formula from the 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);
}
清风挽心 2024-08-16 03:31:59

使用 OpenCV 2.0 您几乎可以实现伪代码。

有一个用于矩阵的 Mat 类和 perspectiveTransform 用于透视投影。 Mat::eye 返回一个单位矩阵。

我链接到的文档适用于 OpenCV 1.1(使用 C 语言),但从手册中推断 OpenCV 2.0(使用 Mat 类)中的正确用法非常简单。

With OpenCV 2.0 you can almost implement your pseudocode.

There's a Mat class for matrices and perspectiveTransform for perspective projection. And Mat::eye returns an identity matrix.

The documentation I've linked to is for OpenCV 1.1 (which is in C) but it's quite simple to infer the correct usage in OpenCV 2.0 (with the Mat class) from the manual.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文