【问题标题】:Create OpenGL matrices from affine camera matrix从仿射相机矩阵创建 OpenGL 矩阵
【发布时间】:2015-10-17 14:17:44
【问题描述】:

我有一组 2D 到 3D 点的对应关系,我根据这些对应关系估计一个仿射相机矩阵(基本上,假设是正交投影)[1]。相机估计的输出是一个3x4 矩阵,其中第三行是[0, 0, 0, 1](“仿射约束”)。

现在从这个相机矩阵,我想使用 OpenGL 渲染我的模型。所以本质上,从我拥有的相机矩阵中创建一个ModelView 和一个(正交)Projection 矩阵。

我已经阅读了数小时关于相机矩阵解剖/分解的材料,但所有这些都是关于透视相机的,并且由于我的矩阵中缺少“z”信息,我无法申请这些技术。

我尝试了无数次尝试,其中大多数在很早的阶段就失败了。我尝试的一件事是取矩阵的第一行和第二行的点积(当然没有最后一列)来创建一个转换z 的新行,但它只是[0, 0, 1],这当然是有道理的。 我尝试的另一件事是在估计相机矩阵之前将我的 2D 点转换为剪辑坐标空间(即“反转”窗口变换),这样我就可以进行窗口变换并翻转 y(在我的屏幕空间中,原点在上-left) 不在图片中。

坦率地说,我不知道如何从根本上解决这个问题。

[1]:用于估计从世界到图像对应的仿射相机矩阵的黄金标准算法,多视图几何中的算法 7.2,Hartley & Zisserman,第 2 版,2003 年。

【问题讨论】:

    标签: opengl computer-vision rendering camera-calibration


    【解决方案1】:

    仿射相机(参见例如here)只执行正射投影,然后执行仿射扭曲。

    鉴于不能始终使用 OpenGL 正交相机作为光栅化设备进行任意图像变换,仿射相机可以模拟如下:

    1. 为场景创建正交摄影机。渲染场景 使用它,读回生成的图像。
    2. 通过将所述仿射变换作为纹理变换矩阵推入,将相机模型诱导的仿射变换应用于该图像。
    3. 在正射相机(“卡片”)前渲染一个覆盖其视野的矩形,并使用在步骤 1 中生成的图像对所述矩形进行纹理处理。它将根据要求使用仿射变换进行变形。

    如果性能有问题,可以优化此序列。阅读“渲染到纹理”了解如何操作。

    【讨论】:

    • 我不确定这是否能回答我的问题。在从假设 5 个点估计仿射相机之后,我有一个完整的 3D 模型,我想使用所述相机矩阵和 OpenGL 进行渲染。我不认为我想扭曲我的图像 - 我想渲染我的模型。
    • 请说明您的“模型”是什么:三角剖分 3D 点的网格,在一个视图中通过 Delaunay 三角剖分构建拓扑?
    • 是的,它是一个普通的 3D 网格,就像您在游戏引擎中遇到的一样。一个由三角形组成的立方体,如果你愿意的话。
    • 编辑答案澄清。
    猜你喜欢
    • 2016-09-10
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多